Change def -shell-params to def -params and take the counts as parameters

This commit is contained in:
Maxime Coste 2015-12-01 14:00:55 +00:00
parent 7335065d20
commit 550a95a3d7
10 changed files with 41 additions and 26 deletions

View File

@ -5,7 +5,7 @@ decl -hidden str-list clang_completions
decl -hidden line-flag-list clang_flags decl -hidden line-flag-list clang_flags
decl -hidden str clang_errors decl -hidden str clang_errors
def -shell-params clang-parse -docstring "Parse the contents of the current buffer with clang" %{ def clang-parse -docstring "Parse the contents of the current buffer with clang" %{
%sh{ %sh{
dir=$(mktemp -d -t kak-clang.XXXXXXXX) dir=$(mktemp -d -t kak-clang.XXXXXXXX)
mkfifo ${dir}/fifo mkfifo ${dir}/fifo

View File

@ -5,7 +5,7 @@
decl str-list ctagsfiles 'tags' decl str-list ctagsfiles 'tags'
def -shell-params \ def -params 0..1 \
-shell-completion ' -shell-completion '
( for tags in $(echo "${kak_opt_ctagsfiles}" | tr \':\' \'\n\'); ( for tags in $(echo "${kak_opt_ctagsfiles}" | tr \':\' \'\n\');
do readtags -t "${tags}" -p "$1" do readtags -t "${tags}" -p "$1"

View File

@ -25,7 +25,7 @@ decl line-flag-list git_diff_flags
face GitBlame default,magenta face GitBlame default,magenta
def -shell-params \ def -params 1.. \
-docstring %sh{printf "%%{Git wrapping helper\navailable commands:\n add\n rm\n blame\n commit\n checkout\n diff\n hide-blame\n log\n show\n show-diff\n status\n update-diff}"} \ -docstring %sh{printf "%%{Git wrapping helper\navailable commands:\n add\n rm\n blame\n commit\n checkout\n diff\n hide-blame\n log\n show\n show-diff\n status\n update-diff}"} \
-shell-completion %{ -shell-completion %{
shift $(expr ${kak_token_to_complete}) shift $(expr ${kak_token_to_complete})

View File

@ -2,7 +2,7 @@ decl str grepcmd 'grep -RHn'
decl str toolsclient decl str toolsclient
decl -hidden int _grep_current_line 0 decl -hidden int _grep_current_line 0
def -shell-params -file-completion \ def -params .. -file-completion \
grep -docstring "Grep utility wrapper" %{ %sh{ grep -docstring "Grep utility wrapper" %{ %sh{
output=$(mktemp -d -t kak-grep.XXXXXXXX)/fifo output=$(mktemp -d -t kak-grep.XXXXXXXX)/fifo
mkfifo ${output} mkfifo ${output}

View File

@ -2,7 +2,7 @@ decl str makecmd make
decl str toolsclient decl str toolsclient
decl -hidden int _make_current_error_line decl -hidden int _make_current_error_line
def -shell-params make -docstring "Make utility wrapper" %{ %sh{ def -params .. make -docstring "Make utility wrapper" %{ %sh{
output=$(mktemp -d -t kak-make.XXXXXXXX)/fifo output=$(mktemp -d -t kak-make.XXXXXXXX)/fifo
mkfifo ${output} mkfifo ${output}
( eval ${kak_opt_makecmd} "$@" > ${output} 2>&1 ) > /dev/null 2>&1 < /dev/null & ( eval ${kak_opt_makecmd} "$@" > ${output} 2>&1 ) > /dev/null 2>&1 < /dev/null &

View File

@ -14,7 +14,7 @@ hook global WinSetOption filetype=(?!man).* %{
rmhooks window man-hooks rmhooks window man-hooks
} }
def -hidden -shell-params _man %{ %sh{ def -hidden -params .. _man %{ %sh{
manout=$(mktemp /tmp/kak-man-XXXXXX) manout=$(mktemp /tmp/kak-man-XXXXXX)
colout=$(mktemp /tmp/kak-man-XXXXXX) colout=$(mktemp /tmp/kak-man-XXXXXX)
MANWIDTH=${kak_window_width} man "$@" > $manout MANWIDTH=${kak_window_width} man "$@" > $manout
@ -33,7 +33,7 @@ def -hidden -shell-params _man %{ %sh{
fi fi
} } } }
def -shell-params \ def -params .. \
-shell-completion %{ -shell-completion %{
prefix=${1:0:${kak_pos_in_token}} prefix=${1:0:${kak_pos_in_token}}
for page in /usr/share/man/*/${prefix}*.[1-8]*; do for page in /usr/share/man/*/${prefix}*.[1-8]*; do

View File

@ -12,7 +12,7 @@ hook global KakBegin .* %{
} }
## Temporarily override the default client creation command ## Temporarily override the default client creation command
def -hidden -shell-params tmux-new-impl %{ def -hidden -params 1.. tmux-new-impl %{
%sh{ %sh{
if [ -z "$TMUX" ]; then if [ -z "$TMUX" ]; then
echo "echo -color Error This command is only available in a tmux session" echo "echo -color Error This command is only available in a tmux session"
@ -25,20 +25,20 @@ def -hidden -shell-params tmux-new-impl %{
} }
} }
def tmux-new-vertical -shell-params -command-completion -docstring "Create a new vertical pane in tmux" %{ def tmux-new-vertical -params .. -command-completion -docstring "Create a new vertical pane in tmux" %{
%sh{ echo "tmux-new-impl 'split-window -v' $@" } %sh{ echo "tmux-new-impl 'split-window -v' $@" }
} }
def tmux-new-horizontal -shell-params -command-completion -docstring "Create a new horizontal pane in tmux" %{ def tmux-new-horizontal -params .. -command-completion -docstring "Create a new horizontal pane in tmux" %{
%sh{ echo "tmux-new-impl 'split-window -h' $@" } %sh{ echo "tmux-new-impl 'split-window -h' $@" }
} }
def tmux-new-window -shell-params -command-completion -docstring "Create a new horizontal pane in tmux" %{ def tmux-new-window -params .. -command-completion -docstring "Create a new horizontal pane in tmux" %{
%sh{ echo "tmux-new-impl 'new-window' $@" } %sh{ echo "tmux-new-impl 'new-window' $@" }
} }
def -docstring "focus given client" \ def -docstring "focus given client" \
-shell-params -client-completion \ -params 0..1 -client-completion \
tmux-focus %{ %sh{ tmux-focus %{ %sh{
if [ $# -gt 1 ]; then if [ $# -gt 1 ]; then
echo "echo -color Error 'too many arguments, use focus [client]'" echo "echo -color Error 'too many arguments, use focus [client]'"

View File

@ -19,7 +19,7 @@ decl str termcmd %sh{
} }
def -docstring 'create a new kak client for current session' \ def -docstring 'create a new kak client for current session' \
-shell-params \ -params .. \
-command-completion \ -command-completion \
x11-new %{ %sh{ x11-new %{ %sh{
if [ -z "${kak_opt_termcmd}" ]; then if [ -z "${kak_opt_termcmd}" ]; then
@ -31,7 +31,7 @@ def -docstring 'create a new kak client for current session' \
}} }}
def -docstring 'focus given client\'s window' \ def -docstring 'focus given client\'s window' \
-shell-params -client-completion \ -params 0..1 -client-completion \
x11-focus %{ %sh{ x11-focus %{ %sh{
if [ $# -gt 1 ]; then if [ $# -gt 1 ]; then
echo "echo -color Error 'too many arguments, use focus [client]'" echo "echo -color Error 'too many arguments, use focus [client]'"

View File

@ -1,11 +1,11 @@
def -shell-params runtime %{ %sh{ def -params 1.. runtime %{ %sh{
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
echo "source '${kak_runtime}/$1'" echo "source '${kak_runtime}/$1'"
shift shift
done done
}} }}
def -shell-params -docstring "colorscheme <name>: enable named colorscheme" \ def -params 1 -docstring "colorscheme <name>: enable named colorscheme" \
-shell-completion %{ -shell-completion %{
prefix=${1:0:${kak_pos_in_token}} prefix=${1:0:${kak_pos_in_token}}
( (

View File

@ -721,9 +721,23 @@ void define_command(const ParametersParser& parser, Context& context, const Shel
const String& commands = parser[1]; const String& commands = parser[1];
Command cmd; Command cmd;
ParameterDesc desc; ParameterDesc desc;
if (parser.get_switch("shell-params")) if (auto params = parser.get_switch("params"))
{ {
desc = ParameterDesc{ {}, ParameterDesc::Flags::SwitchesAsPositional }; size_t min = 0, max = -1;
StringView counts = *params;
static const Regex re{R"((\d+)?..(\d+)?)"};
MatchResults<const char*> res;
if (regex_match(counts.begin(), counts.end(), res, re))
{
if (res[1].matched)
min = (size_t)str_to_int({res[1].first, res[1].second});
if (res[2].matched)
max = (size_t)str_to_int({res[2].first, res[2].second});
}
else
min = max = (size_t)str_to_int(counts);
desc = ParameterDesc{ {}, ParameterDesc::Flags::SwitchesAsPositional, min, max };
cmd = [=](const ParametersParser& parser, Context& context, const ShellContext&) { cmd = [=](const ParametersParser& parser, Context& context, const ShellContext&) {
CommandManager::instance().execute(commands, context, { params_to_shell(parser) }); CommandManager::instance().execute(commands, context, { params_to_shell(parser) });
}; };
@ -815,15 +829,16 @@ const CommandDesc define_command_cmd = {
nullptr, nullptr,
"def <switches> <name> <cmds>: define a command <name> executing <cmds>", "def <switches> <name> <cmds>: define a command <name> executing <cmds>",
ParameterDesc{ ParameterDesc{
{ { "shell-params", { false, "pass parameters to each shell escape as $0..$N" } }, { { "params", { true, "take parameters, accessible to each shell escape as $0..$N\n"
{ "allow-override", { false, "allow overriding an existing command" } }, "parameter should take the form <count> or <min>..<max> (both omittable)" } },
{ "hidden", { false, "do not display the command in completion candidates" } }, { "allow-override", { false, "allow overriding an existing command" } },
{ "docstring", { true, "define the documentation string for command" } }, { "hidden", { false, "do not display the command in completion candidates" } },
{ "file-completion", { false, "complete parameters using filename completion" } }, { "docstring", { true, "define the documentation string for command" } },
{ "client-completion", { false, "complete parameters using client name completion" } }, { "file-completion", { false, "complete parameters using filename completion" } },
{ "buffer-completion", { false, "complete parameters using buffer name completion" } }, { "client-completion", { false, "complete parameters using client name completion" } },
{ "buffer-completion", { false, "complete parameters using buffer name completion" } },
{ "command-completion", { false, "complete parameters using kakoune command completion" } }, { "command-completion", { false, "complete parameters using kakoune command completion" } },
{ "shell-completion", { true, "complete the parameters using the given shell-script" } } }, { "shell-completion", { true, "complete the parameters using the given shell-script" } } },
ParameterDesc::Flags::None, ParameterDesc::Flags::None,
2, 2 2, 2
}, },