]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
zsh: add varlinkctl completions
authorRonan Pigott <ronan@rjp.ie>
Fri, 19 Jul 2024 08:20:15 +0000 (01:20 -0700)
committerLuca Boccassi <luca.boccassi@gmail.com>
Fri, 19 Jul 2024 15:06:17 +0000 (17:06 +0200)
shell-completion/zsh/_varlinkctl [new file with mode: 0644]
shell-completion/zsh/meson.build

diff --git a/shell-completion/zsh/_varlinkctl b/shell-completion/zsh/_varlinkctl
new file mode 100644 (file)
index 0000000..720700d
--- /dev/null
@@ -0,0 +1,52 @@
+#compdef varlinkctl
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+local -a reply line
+
+_varlinkctl_interfaces() {
+  local expl
+  _wanted varlink-interfaces expl interface compadd "$@" -- \
+    "${(@f)$(_call_program varlink-interfaces varlinkctl list-interfaces $line[2])}"
+}
+
+_varlinkctl_methods() {
+  local expl
+  _wanted varlink-interfaces expl method compadd "$@" -- \
+    "${(@f)$(_call_program varlink-methods varlinkctl list-methods $line[2])}"
+}
+
+local -a varlink_addr=(
+  /$'[^\0]#\0'/ ':varlink-address:varlink address:_files -g "*(=)"'
+)
+local -a varlink_interface=(
+  $varlink_addr
+  /$'[^\0]#\0'/ ':varlink-interface:varlink interface:_varlinkctl_interfaces'
+)
+local -a varlink_method=(
+  $varlink_addr
+  /$'[^\0]#\0'/ ':varlink-method:varlink method:_varlinkctl_methods'
+)
+local -a varlink_call=($varlink_method /$'[^\0]#\0'/ ':argument:argument:()')
+local -a varlink_idl=(/$'[^\0]#\0'/ ':varlink-idl-file:idl file:_files')
+
+_regex_words varlink-commands 'varlink command' \
+  'info:show service information:$varlink_addr' \
+  'list-interfaces:List interfaces implemented by a service:$varlink_addr' \
+  'list-methods:List methods implemented by an interface:$varlink_interface' \
+  'introspect:show an interface definition:$varlink_interface' \
+  'call:invoke a method:$varlink_call' \
+  'validate-idl:validate an interface description:$varlink_idl' \
+  'help:show a help message'
+
+local -a varlinkcmd=( /$'[^\0]#\0'/ "$reply[@]" )
+_regex_arguments _varlinkctl_command "$varlinkcmd[@]"
+
+local -a opts=(
+  {-h,--help}'[Show a help message and exit]'
+  '--version[Show package version and exit]'
+  '--no-pager[Do not pipe output to a pager]'
+  '--more[Request multiple responses]'
+  '--collect[Collect multiple responses in a JSON array]'
+  {-j+,--json=}'[Output as json]:json-mode:(pretty short)'
+)
+_arguments -S $opts '*:: := _varlinkctl_command'
index acbf34e7a81cffed6be11ad87743ad3e0c73ba9d..ea540c765c63b0ea418c38324612aad8fa7e837a 100644 (file)
@@ -23,6 +23,7 @@ items = [['_busctl',                   ''],
          ['_systemd-run',              ''],
          ['_run0',                     ''],
          ['_udevadm',                  ''],
+         ['_varlinkctl',               ''],
          ['_kernel-install',           'ENABLE_KERNEL_INSTALL'],
          ['_sd_hosts_or_user_at_host', ''],
          ['_sd_outputmodes',           ''],