Files
fish-shell/share/completions/lsof.fish
Johannes Altmanninger 320ebb6859 __fish_complete_list: strip "--foo=" prefix from replacing completions
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 commit f9febba (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.
So f9febba made 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
2025-06-21 18:53:50 +02:00

20 lines
1.4 KiB
Fish

complete -c lsof -s '?' -s h -d 'Print help and exit'
complete -c lsof -s a -d 'Causes list selections to be ANDed'
complete -c lsof -s A -r -d 'Use alternative name list file'
complete -c lsof -s b -d 'Avoid kernel functions that might block: lstat, readlink, stat'
complete -c lsof -s c -d 'Select the listing for processes, whose command begins with string (^ - negate)' -xa '(__fish_complete_proc)'
complete -c lsof -s C -d 'Do not report any pathname component from kernel\'s namecache'
complete -c lsof -s d -r -d 'specifies a list of file descriptors to exclude or include in the output listing'
complete -c lsof -s D -d 'use of device cache file' -xa '\?\t"report device cache file paths"
b\t"build the device cache file"
i\t"ignore the device cache file"
r\t"read the device cache file"
u\t"read and update the device cache file"'
complete -c lsof -s g -d 'select by group (^ - negates)' -xa "(__fish_stripprefix='^-\w*g' __fish_complete_list , __fish_complete_groups)"
complete -c lsof -s l -d 'Convert UIDs to login names'
complete -c lsof -s p -d 'Select or exclude processes by pid' -xa "(__fish_stripprefix='^-\w*p' __fish_complete_list , __fish_complete_pids)"
complete -c lsof -s R -d 'Print PPID'
complete -c lsof -s t -d 'Produce terse output (pids only, no header)'
complete -c lsof -s u -d 'select by user (^ - negates)' -xa "(__fish_stripprefix='^-\w*u' __fish_complete_list , __fish_complete_users)"