mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-04-20 07:51:14 -03:00
Given a command line like foo --foo=bar=baz=qux\=argument (the behavior is the same if '=' is substituted with ':'). fish completes arguments starting from the last unescaped separator, i.e. foo --foo=bar=baz=qux\=argument ^ __fish_complete_list provides completions like printf %s\n (commandline -t)(printf %s\n choice1 choice2 ...) This means that completions include the "--foo=bar=baz=" prefix. This is wrong. This wasn't a problem until commitf9febba(Fix replacing completions with a -foo prefix, 2024-12-14), because prior to that, replacing completions would replace the entire token. This made it too hard to writ ecompletions like complete -c foo -s s -l long -xa "hello-world goodbye-friend" that would work with "foo --long fri" as well as "foo --long=frie". Replacing the entire token would only work if the completion included that prefix, but the above command is supposed to just work. Sof9febbamade us replace only the part after the separator. Unfortunately that caused the earlier problem. Work around this. The change is not pretty, but it's a compromise until we have a better way of telling which character fish considers to be the separator. Fixes #11508
16 lines
1.7 KiB
Fish
16 lines
1.7 KiB
Fish
function __fish_complete_pgrep -d 'Complete pgrep/pkill' --argument-names cmd
|
|
complete -c $cmd -xa '(__fish_complete_proc)'
|
|
complete -c $cmd -s f -d 'Match pattern against full command line'
|
|
complete -c $cmd -s g -d 'Only match processes in the process group' -xa "(__fish_stripprefix='^-\w*g' __fish_complete_list , __fish_complete_groups)"
|
|
complete -c $cmd -s G -d "Only match processes whose real group ID is listed. Group 0 is translated into $cmd\'s own process group" -xa "(__fish_stripprefix='^-\w*G' __fish_complete_list , __fish_complete_groups)"
|
|
complete -c $cmd -s n -d 'Select only the newest process'
|
|
complete -c $cmd -s o -d 'Select only the oldest process'
|
|
complete -c $cmd -s P -d 'Only match processes whose parent process ID is listed' -xa "(__fish_stripprefix='^-\w*P' __fish_complete_list , __fish_complete_pids)"
|
|
complete -c $cmd -s s -d "Only match processes whose process session ID is listed. Session ID 0 is translated into $cmd\'s own session ID."
|
|
complete -c $cmd -s t -d 'Only match processes whose controlling terminal is listed. The terminal name should be specified without the "/dev/" prefix' -r
|
|
complete -c $cmd -s u -d 'Only match processes whose effective user ID is listed' -xa "(__fish_stripprefix='^-\w*u' __fish_complete_list , __fish_complete_users)"
|
|
complete -c $cmd -s U -d 'Only match processes whose real user ID is listed' -xa "(__fish_stripprefix='^-\w*U' __fish_complete_list , __fish_complete_users)"
|
|
complete -c $cmd -s v -d 'Negates the matching'
|
|
complete -c $cmd -s x -d ' Only match processes whose name (or command line if -f is specified) exactly match the pattern'
|
|
end
|