chiark / gitweb /
simplify bash completion for kernel-install
[elogind.git] / shell-completion / systemd-zsh-completion.zsh
index 411646ea59f11d56e3f1522935b54ae74486683a..1ab1311ec149b0ffc4333ca608f712c95acd27f9 100644 (file)
@@ -1,4 +1,4 @@
-#compdef systemctl loginctl journalctl hostnamectl localectl timedatectl systemd-coredumpctl udevadm systemd-analyze systemd-cat systemd-ask-password systemd-cgls systemd-cgtop systemd-delta systemd-detect-virt systemd-inhibit systemd-machine-id-setup systemd-notify systemd-nspawn systemd-tmpfiles systemd-tty-ask-password-agent
+#compdef systemctl loginctl journalctl hostnamectl localectl timedatectl systemd-coredumpctl udevadm systemd-analyze systemd-cat systemd-ask-password systemd-cgls systemd-cgtop systemd-delta systemd-detect-virt systemd-inhibit systemd-machine-id-setup systemd-notify systemd-nspawn systemd-tmpfiles systemd-tty-ask-password-agent machinectl
 
 _ctls()
 {
@@ -16,7 +16,7 @@ _ctls()
                 '--after[Show units ordered after]' \
                 '--before[Show units ordered before]' \
                 '--failed[Show only failed units]' \
-                "--full[Don't ellipsize unit names on output]" \
+                {-l,--full}"[Don't ellipsize unit names on output]" \
                 '--fail[When queueing a new job, fail if conflicting jobs are pending]' \
                 '--ignore-dependencies[When queueing a new job, ignore all its dependencies]' \
                 '--kill-who=[Who to send signal to]:killwho:(main control all)' \
@@ -71,6 +71,8 @@ _ctls()
                 '--since=[Start showing entries newer or of the specified date]:YYYY-MM-DD HH\:MM\:SS' \
                 '--until=[Stop showing entries older or of the specified date]:YYYY-MM-DD HH\:MM\:SS' \
                 {-c,--cursor=}'[Start showing entries from specified cursor]:cursors:_journal_fields __CURSORS' \
+                '--system[Show system and kernel messages]' \
+                '--user[Show messages from user services]' \
                 {-b,--this-boot}'[Show data only from current boot]' \
                 {-u,--unit=}'[Show data only from the specified unit]:units:_journal_fields _SYSTEMD_UNIT' \
                 '--user-unit[Show data only from the specified user session unit]:units:_journal_fields _SYSTEMD_USER_UNIT' \
@@ -79,7 +81,7 @@ _ctls()
                 {-n,--lines=}'[Number of journal entries to show]:integer' \
                 '--no-tail[Show all lines, even in follow mode]' \
                 {-o,--output=}'[Change journal output mode]:output modes:_outputmodes' \
-                '--full[Show long fields in full]' \
+                {-l,--full}'[Show long fields in full]' \
                 {-a,--all}'[Show all fields, including long and unprintable]' \
                 {-q,--quiet}"[Don't show privilege warning]" \
                 '--no-pager[Do not pipe output into a pager]' \
@@ -247,6 +249,7 @@ _ctls()
                 '--clean[Clean up all files and directories with an age parameter configured.]' \
                 '--remove[All files and directories marked with r, R in the configuration files are removed.]' \
                 '--prefix=[Only apply rules that apply to paths with the specified prefix.]' \
+                '--exclude-prefix=[Ignore rules that apply to paths with the specified prefix.]' \
                 '--help[Prints a short help text and exits.]' \
                 '*::files:_files'
         ;;
@@ -261,6 +264,21 @@ _ctls()
                 '--plymouth[Ask question with plymouth(8).]' \
                 '--console[Ask question on /dev/console.]'
         ;;
+        machinectl)
+            _arguments \
+                {-h,--help}'[Prints a short help text and exits.]' \
+                '--version[Prints a short version string and exits.]' \
+                {-p,--property=}'[Limit output to specified property.]:property:(Name Id Timestamp TimestampMonotonic Service Scope Leader Class State RootDirectory)' \
+                {-a,--all}'[Show all proerties]' \
+                (-l,--full)'[Do not ellipsize cgroup members]' \
+                '--no-pager[Do not pipe output into a pager]' \
+                '--no-ask-password[Do not ask for system passwords]' \
+                '--kill-who=[Who to send signal to]:killwho:(leader all)' \
+                {-s,--signal=}'[Which signal to send]:signal:_signals' \
+                {-H,--host=}'[Show information for remote host]:userathost:_hosts_or_user_at_host' \
+                {-P,--privileged}'[Acquire privileges before execution]' \
+                '*::machinectl command:_machinectl_command'
+        ;;
         *) _message 'eh?' ;;
     esac
 }
@@ -914,6 +932,38 @@ _systemd-coredumpctl_command(){
 
 }
 
+(( $+functions[_machinectl_command] )) || _machinectl_command()
+{
+  local -a _machinectl_cmds
+  _machinectl_cmds=(
+    "list:List currently running VMs/containers"
+    "status:Show VM/container status"
+    "show:Show properties of one or more VMs/containers"
+    "terminate:Terminate one or more VMs/containers"
+    "kill:Send signal to process or a VM/container"
+  )
+  if (( CURRENT == 1 )); then
+    _describe -t commands 'machinectl command' _machinectl_cmds || compadd "$@"
+  else
+    local curcontext="$curcontext"
+    cmd="${${_machinectl_cmds[(r)$words[1]:*]%%:*}}"
+    if (( $#cmd )); then
+      case $cmd in
+        list) msg="no options" ;;
+        *)
+          _machines=( "${(foa)$(machinectl list | awk '{print $1}')}" )
+          if [[ -n "$_machines" ]]; then
+            _describe 'machines' _machines
+          else
+            _message 'no machines'
+          fi
+      esac
+    else
+      _message "no more options"
+    fi
+  fi
+}
+
 _udevadm_info(){
     _arguments \
         '--query=[Query the database for specified type of device data. It needs the --path or --name to identify the specified device.]:type:(name symlink path property all)' \