diff --git a/share/functions/__fish_can_complete_switches.fish b/share/functions/__fish_can_complete_switches.fish new file mode 100644 index 000000000..9354f0892 --- /dev/null +++ b/share/functions/__fish_can_complete_switches.fish @@ -0,0 +1,14 @@ +# Returns whether it is at all possible (even if not recommended) +# to complete a -s or --long argument. +function __fish_can_complete_switches + # Search backwards + for arg in (commandline -ct)[-1..1] + if test "$arg" = "" + continue + else if not string match -qr -- "^-\S*\$" "$arg" + return 1 + end + end + + return 0 +end diff --git a/share/functions/__fish_should_complete_switches.fish b/share/functions/__fish_should_complete_switches.fish new file mode 100644 index 000000000..876a6a673 --- /dev/null +++ b/share/functions/__fish_should_complete_switches.fish @@ -0,0 +1,12 @@ +# Returns whether we *should* complete a -s or --long argument. +# The preference is NOT to do so, i.e. prefer subcommands over switches. +function __fish_should_complete_switches + if not __fish_can_complete_switches + return 1 + end + if string match -qr -- "^-" (commandline -ct)[-1] + return 0 + end + + return 1 +end