From eef88ee6f7d1d2d4b95471b5685d577f5ae27072 Mon Sep 17 00:00:00 2001 From: Pierre Neidhardt Date: Tue, 6 Jun 2017 19:02:05 +0100 Subject: [PATCH] Complete: Add support for subcommands (sudo, env) --- Examples-(fish).md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/Examples-(fish).md b/Examples-(fish).md index 142db60..5565d79 100644 --- a/Examples-(fish).md +++ b/Examples-(fish).md @@ -47,7 +47,25 @@ The following can replace fish completion menu with fzf. Because of a [fish bug] ``` function fzf-complete -d 'fzf completion and print selection back to commandline' - set -l complist (complete -C(commandline -c)) + # As of 2.6, fish's "complete" function does not understand + # subcommand. Instead, we use the same hack as __fish_complete_subcommand and + # extract the subcommand manually. + set -l cmd (commandline -co) (commandline -ct) + switch $cmd[1] + case env sudo + for i in (seq 2 (count $cmd)) + switch $cmd[$i] + case '-*' + case '*=*' + case '*' + set cmd $cmd[$i..-1] + break + end + end + end + set cmd (string join -- ' ' $cmd) + + set -l complist (complete -C$cmd) set -l result string join -- \n $complist | sort | eval (__fzfcmd) -m --select-1 --exit-0 --header '(commandline)' | cut -f1 | while read -l r; set result $result $r; end