From 388a8d09d80b8b7d1b6e63225d9deafc6d4f4660 Mon Sep 17 00:00:00 2001 From: Fabian Homborg Date: Thu, 19 Feb 2015 14:21:36 +0100 Subject: [PATCH] systemctl completions: Support command-after-options This fixes completions for e.g. `systemctl --quiet status` --- share/completions/systemctl.fish | 48 +++++++++++++++++++------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/share/completions/systemctl.fish b/share/completions/systemctl.fish index c9b619083..bcb11a95e 100644 --- a/share/completions/systemctl.fish +++ b/share/completions/systemctl.fish @@ -1,61 +1,69 @@ function __fish_systemctl_using_command - set cmd (commandline -opc) - if [ (count $cmd) -gt 1 ] - if [ $argv[1] = $cmd[2] ] - return 0 - end - end - return 1 + set cmd (commandline -opc) + if [ (count $cmd) -gt 1 ] + if contains -- $argv $cmd + return 0 + end + end + return 1 +end + +function __fish_systemctl_has_no_command + set cmd (commandline -opc) + set commands list-units list-sockets start stop reload restart try-restart reload-or-restart reload-or-try-restart \ + isolate kill is-active is-failed status show get-cgroup-attr set-cgroup-attr unset-cgroup-attr set-cgroup help \ + reset-failed list-unit-files enable disable is-enabled reenable preset mask unmask link load list-jobs cancel dump \ + list-dependencies snapshot delete daemon-reload daemon-reexec show show-environment set-environment unset-environment \ + default rescue emergency halt poweroff reboot kexec exit suspend hibernate hybrid-sleep switch-root + for word in $cmd + if contains -- $word $commands + return 1 + end + end + return 0 end # All systemctl commands complete -f -c systemctl -n "test (count (commandline -poc)) = 1" -a 'list-units list-sockets start stop reload restart try-restart reload-or-restart reload-or-try-restart isolate kill is-active is-failed status show get-cgroup-attr set-cgroup-attr unset-cgroup-attr set-cgroup help reset-failed list-unit-files enable disable is-enabled reenable preset mask unmask link load list-jobs cancel dump list-dependencies snapshot delete daemon-reload daemon-reexec show show-environment set-environment unset-environment default rescue emergency halt poweroff reboot kexec exit suspend hibernate hybrid-sleep switch-root' #### Units commands - # Start -complete -f -c systemctl -n "test (count (commandline -poc)) = 1" -a start -d 'Start one or more units' +complete -f -c systemctl -n "__fish_systemctl_has_no_command" -a start -d 'Start one or more units' complete -f -c systemctl -n '__fish_systemctl_using_command start' -a '(__fish_systemctl_services)' -d 'Service' complete -f -c systemctl -n '__fish_systemctl_using_command start' -a '(__fish_systemctl_sockets)' -d 'Socket' complete -f -c systemctl -n '__fish_systemctl_using_command start' -a '(__fish_systemctl_mounts)' -d 'Mount' complete -f -c systemctl -n '__fish_systemctl_using_command start' -a '(__fish_systemctl_service_paths)' -d 'Path' - # Stop -complete -f -c systemctl -n "test (count (commandline -poc)) = 1" -a stop -d 'Stop one or more units' +complete -f -c systemctl -n "__fish_systemctl_has_no_command" -a stop -d 'Stop one or more units' complete -f -c systemctl -n '__fish_systemctl_using_command stop' -a '(__fish_systemctl_services)' -d 'Service' complete -f -c systemctl -n '__fish_systemctl_using_command stop' -a '(__fish_systemctl_sockets)' -d 'Socket' complete -f -c systemctl -n '__fish_systemctl_using_command stop' -a '(__fish_systemctl_mounts)' -d 'Mount' complete -f -c systemctl -n '__fish_systemctl_using_command stop' -a '(__fish_systemctl_service_paths)' -d 'Path' - # Restart -complete -f -c systemctl -n "test (count (commandline -poc)) = 1" -a restart -d 'Restart one or more units' +complete -f -c systemctl -n "__fish_systemctl_has_no_command" -a restart -d 'Restart one or more units' complete -f -c systemctl -n '__fish_systemctl_using_command restart' -a '(__fish_systemctl_services)' -d 'Service' complete -f -c systemctl -n '__fish_systemctl_using_command restart' -a '(__fish_systemctl_sockets)' -d 'Socket' complete -f -c systemctl -n '__fish_systemctl_using_command restart' -a '(__fish_systemctl_mounts)' -d 'Mount' complete -f -c systemctl -n '__fish_systemctl_using_command restart' -a '(__fish_systemctl_service_paths)' -d 'Path' - # Status -complete -f -c systemctl -n "test (count (commandline -poc)) = 1" -a status -d 'Runtime status about one or more units' +complete -f -c systemctl -n "__fish_systemctl_has_no_command" -a status -d 'Runtime status about one or more units' complete -f -c systemctl -n '__fish_systemctl_using_command status' -a '(__fish_systemctl_services)' -d 'Service' complete -f -c systemctl -n '__fish_systemctl_using_command status' -a '(__fish_systemctl_sockets)' -d 'Socket' complete -f -c systemctl -n '__fish_systemctl_using_command status' -a '(__fish_systemctl_mounts)' -d 'Mount' complete -f -c systemctl -n '__fish_systemctl_using_command status' -a '(__fish_systemctl_service_paths)' -d 'Path' - # Enable -complete -f -c systemctl -n "test (count (commandline -poc)) = 1" -a enable -d 'Enable one or more units' +complete -f -c systemctl -n "__fish_systemctl_has_no_command" -a enable -d 'Enable one or more units' complete -f -c systemctl -n '__fish_systemctl_using_command enable' -a '(__fish_systemctl_services)' -d 'Service' complete -f -c systemctl -n '__fish_systemctl_using_command enable' -a '(__fish_systemctl_sockets)' -d 'Socket' complete -f -c systemctl -n '__fish_systemctl_using_command enable' -a '(__fish_systemctl_mounts)' -d 'Mount' complete -f -c systemctl -n '__fish_systemctl_using_command enable' -a '(__fish_systemctl_service_paths)' -d 'Path' - # Disable -complete -f -c systemctl -n "test (count (commandline -poc)) = 1" -a disable -d 'Disable one or more units' +complete -f -c systemctl -n "__fish_systemctl_has_no_command" -a disable -d 'Disable one or more units' complete -f -c systemctl -n '__fish_systemctl_using_command disable' -a '(__fish_systemctl_services)' -d 'Service' complete -f -c systemctl -n '__fish_systemctl_using_command disable' -a '(__fish_systemctl_sockets)' -d 'Socket' complete -f -c systemctl -n '__fish_systemctl_using_command disable' -a '(__fish_systemctl_mounts)' -d 'Mount' complete -f -c systemctl -n '__fish_systemctl_using_command disable' -a '(__fish_systemctl_service_paths)' -d 'Path' - complete -c systemctl -s t -l type -d 'List of unit types' -xa 'help service, mount, socket, target,' complete -c systemctl -l state -d 'List of unit states' -xa 'LOAD, SUB, ACTIVE,' complete -c systemctl -s p -l property -d 'Properties displayed in the "show" command'