mirror of
https://github.com/fish-shell/fish-shell
synced 2025-01-15 06:24:01 +00:00
complete: Make -c
optional
Currently, completions have to be specified like ```fish complete -c foo -l opt ``` while ```fish complete foo -l opt ``` just complains about there being too many arguments. That's kinda useless, so we just assume if there is one left-over argument that it's meant to be the command. Theoretically we could also use *all* the arguments as commands to complete, but that seems unlikely to be what the user wants. (I don't think multi-command completions really happen)
This commit is contained in:
parent
a8e237f0f9
commit
903b7888d3
3 changed files with 20 additions and 1 deletions
|
@ -8,7 +8,7 @@ Synopsis
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
complete ( -c | --command | -p | --path ) COMMAND
|
complete [( -c | --command | -p | --path )] COMMAND
|
||||||
[( -c | --command | -p | --path ) COMMAND]...
|
[( -c | --command | -p | --path ) COMMAND]...
|
||||||
[( -e | --erase )]
|
[( -e | --erase )]
|
||||||
[( -s | --short-option ) SHORT_OPTION]...
|
[( -s | --short-option ) SHORT_OPTION]...
|
||||||
|
|
|
@ -299,6 +299,9 @@ maybe_t<int> builtin_complete(parser_t &parser, io_streams_t &streams, wchar_t *
|
||||||
if (do_complete && !have_do_complete_param && argc == w.woptind + 1) {
|
if (do_complete && !have_do_complete_param && argc == w.woptind + 1) {
|
||||||
do_complete_param = argv[argc - 1];
|
do_complete_param = argv[argc - 1];
|
||||||
have_do_complete_param = true;
|
have_do_complete_param = true;
|
||||||
|
} else if (!do_complete && cmd_to_complete.empty() && argc == w.woptind + 1) {
|
||||||
|
// Or use one left-over arg as the command to complete
|
||||||
|
cmd_to_complete.push_back(argv[argc - 1]);
|
||||||
} else {
|
} else {
|
||||||
streams.err.append_format(BUILTIN_ERR_TOO_MANY_ARGUMENTS, cmd);
|
streams.err.append_format(BUILTIN_ERR_TOO_MANY_ARGUMENTS, cmd);
|
||||||
builtin_print_error_trailer(parser, streams.err, cmd);
|
builtin_print_error_trailer(parser, streams.err, cmd);
|
||||||
|
|
|
@ -358,3 +358,19 @@ end
|
||||||
complete -c banana -a '1 2 3'
|
complete -c banana -a '1 2 3'
|
||||||
complete -c banana
|
complete -c banana
|
||||||
#CHECK: complete -c banana -a '1 2 3'
|
#CHECK: complete -c banana -a '1 2 3'
|
||||||
|
|
||||||
|
# "-c" is optional
|
||||||
|
complete banana -a bar
|
||||||
|
complete banana
|
||||||
|
#CHECK: complete -c banana -a bar
|
||||||
|
#CHECK: complete -c banana -a '1 2 3'
|
||||||
|
|
||||||
|
# "-a" ain't
|
||||||
|
complete banana bar
|
||||||
|
#CHECKERR: complete: Too many arguments
|
||||||
|
#CHECKERR:
|
||||||
|
#CHECKERR: {{.*}}checks/complete.fish (line {{\d+}}):
|
||||||
|
#CHECKERR: complete banana bar
|
||||||
|
#CHECKERR: ^
|
||||||
|
#CHECKERR:
|
||||||
|
#CHECKERR: (Type 'help complete' for related documentation)
|
||||||
|
|
Loading…
Reference in a new issue