mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-05-28 09:31:16 -03:00
Completion: complete argument to last of a group of short options
Consider a group of short options, like -xzPARAM, where x and z are options and z takes an argument. This commit enables completion of the argument to the last option (z), both within the same token (-xzP) or in the next one (-xz P). complete -C'-xz' will complete only parameters to z. complete -C'-xz ' will complete only parameters to z if z requires a parameter otherwise, it will also complete non-option parameters To do so this implements a heuristic to differentiate such strings from single long options. To detect whether our token contains some short options, we only require the first character after the dash (here x) to be an option. Previously, all characters had to be short options. The last option in our example is z. Everything after the last option is assumed to be a parameter to the last option. Assume there is also a single long option -x-foo, then complete -C'-x' will suggest both -x-foo and -xy. However, when the single option x requires an argument, this will not suggest -x-foo. However, I assume this will almost never happen in practise since completions very rarely mix short and single long options. Fixes #332
This commit is contained in:
@@ -88,3 +88,39 @@ complete -C'complete_test_recurse1 '
|
||||
# CHECKERR: recursing
|
||||
# CHECKERR: recursing
|
||||
# CHECKERR: complete: maximum recursion depth reached
|
||||
|
||||
# short options
|
||||
complete -c foo -f -a non-option-argument
|
||||
complete -c foo -f --short-option x
|
||||
complete -c foo -f --short-option y -a 'ARGY'
|
||||
complete -c foo -f --short-option z -a 'ARGZ' -r
|
||||
complete -c foo -f --old-option single-long-ending-in-z
|
||||
complete -c foo -f --old-option x-single-long
|
||||
complete -c foo -f --old-option y-single-long
|
||||
complete -c foo -f --old-option z-single-long
|
||||
complete -c foo -f --long-option x-long -a 'ARGLONG'
|
||||
# Make sure that arguments of concatenated short options are expanded (#332)
|
||||
complete -C'foo -xy'
|
||||
# CHECK: -xyARGY
|
||||
# CHECK: -xyz
|
||||
# A required parameter means we don't want more short options.
|
||||
complete -C'foo -yz'
|
||||
# CHECK: -yzARGZ
|
||||
# Required parameter with space: complete only the parameter (no non-option arguments).
|
||||
complete -C'foo -xz '
|
||||
# CHECK: ARGZ
|
||||
# Optional parameter with space: complete only non-option arguments.
|
||||
complete -C'foo -xy '
|
||||
# CHECK: non-option-argument
|
||||
complete -C'foo -single-long-ending-in-z'
|
||||
# CHECK: -single-long-ending-in-z
|
||||
complete -C'foo -single-long-ending-in-z '
|
||||
# CHECK: non-option-argument
|
||||
# CHECK: -x-single-long
|
||||
complete -C'foo -x' | string match -- -x-single-long
|
||||
# CHECK: -y-single-long
|
||||
complete -C'foo -y' | string match -- -y-single-long
|
||||
# This does NOT suggest -z-single-long, but will probably not occur in practise.
|
||||
# CHECK: -zARGZ
|
||||
complete -C'foo -z'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user