[PATCH] udisksctl: Add zsh completion.
poljar (Damir Jelić)
poljar at poljar.org
Tue Feb 4 00:58:17 CET 2014
From: poljar (Damir Jelić) <poljarinho at gmail.com>
This patch adds and install optionally udisksctl completion for zsh.
Signed-off-by: poljar (Damir Jelić) <poljar at poljar.org>
---
configure.ac | 7 +++
data/Makefile.am | 8 ++++
data/completions/_udisksctl | 107 ++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 122 insertions(+)
create mode 100644 data/completions/_udisksctl
diff --git a/configure.ac b/configure.ac
index 7224fce..50afd2d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -196,6 +196,13 @@ AC_SUBST([GETTEXT_PACKAGE])
AM_GLIB_GNU_GETTEXT
AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],["$GETTEXT_PACKAGE"],[gettext domain])
+# zsh completion
+#
+AC_ARG_WITH([zsh-completion],
+ AS_HELP_STRING([--with-zsh-completion],[Install zsh completion scripts]),,
+ [with_zsh_completion=no])
+AM_CONDITIONAL([WITH_ZSH_COMPLETION], test x"$with_zsh_completion" != x"no")
+
# Generate
#
diff --git a/data/Makefile.am b/data/Makefile.am
index 0921698..bef5c80 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -37,6 +37,13 @@ completions_DATA = \
completions/udisksctl \
$(NULL)
+if WITH_ZSH_COMPLETION
+zshcompletionsdir = $(datadir)/zsh/site-functions
+zshcompletions_DATA = \
+ completions/_udisksctl \
+ $(NULL)
+endif
+
@INTLTOOL_POLICY_RULE@
EXTRA_DIST = \
@@ -47,6 +54,7 @@ EXTRA_DIST = \
$(dbusconf_in_files) \
$(polkit_in_files) \
$(completions_DATA) \
+ $(zshcompletions_DATA) \
$(NULL)
clean-local :
diff --git a/data/completions/_udisksctl b/data/completions/_udisksctl
new file mode 100644
index 0000000..3726429
--- /dev/null
+++ b/data/completions/_udisksctl
@@ -0,0 +1,107 @@
+#compdef udisksctl
+
+_paths() {
+ local -a _path_list
+
+ for _path in $(_call_program paths "udisksctl complete \"udisksctl $words\" $CURSOR"); do
+ _path_list+=$_path
+ done
+
+ _describe 'paths' _path_list
+}
+
+_filesystems() {
+ _fs_types=(
+ 'adfs' 'affs' 'autofs' 'cifs' 'coda' 'coherent' 'cramfs' 'debugfs' 'devpts'
+ 'efs' 'ext' 'ext2' 'ext3' 'ext4' 'hfs' 'hfsplus' 'hpfs' 'iso9660' 'jfs' 'minix'
+ 'msdos' 'ncpfs' 'nfs' 'nfs4' 'ntfs' 'proc' 'qnx4' 'ramfs' 'reiserfs' 'romfs'
+ 'squashfs' 'smbfs' 'sysv' 'tmpfs' 'ubifs' 'udf' 'ufs' 'umsdos' 'usbfs' 'vfat'
+ 'xenix' 'xfs' 'xiafs'
+ )
+
+ _describe 'file system types' _fs_types
+}
+
+_udisksctl() {
+ typeset -A opt_args
+ local curcontext="$curcontext" state line
+
+ _arguments -C \
+ '1:udisksctl commands:->cmds' \
+ '*:: :->cmd_args' \
+
+ case $state in
+ cmds)
+ local commands; commands=(
+ 'help: Show help'
+ 'info: Show info about an object'
+ 'dump: Show info about all object'
+ 'status: Shows high-level status'
+ 'monitor: Monitor changes to objects'
+ 'mount: Mount a filesystem'
+ 'unmount: Unmount a filesystem'
+ 'unlock: Unlock an encrypted device'
+ 'lock: Lock an encrypted device'
+ 'loop-setup: Set-up a loop device'
+ 'loop-delete: Delete a loop device'
+ 'smart-simulate: Set SMART data for a drive'
+ )
+ _describe -t commands 'udisksctl commands' commands
+ ;;
+
+ cmd_args)
+ case $words[1] in
+ info)
+ _arguments \
+ {-p,--object-path}'[Object to get information about]:object path:_paths' \
+ {-b,--block-device}'[Block device to get information about]:block device:_paths' \
+ {-d,--drive}'[Drive to get information about]:drives:_paths' \
+ ;;
+ mount)
+ _arguments \
+ {-p,--object-path}'[Object to mount]:object path:_paths' \
+ {-b,--block-device}'[Block device to mount]:block device:_paths' \
+ {-t,--filesystem-type}'[Filesystem type to use]:fs type:_filesystems' \
+ {-o,--options}'[Mount options]' \
+ '(--no-user-interaction)--no-user-interaction[Do not authenticate the user if needed]' \
+ ;;
+ unmount)
+ _arguments \
+ {-p,--object-path}'[Object to unmount]:object path:_paths' \
+ {-b,--block-device}'[Block device to unmount]:block device:_paths' \
+ {-f,--force}'[Force/lazy unmount]' \
+ '(--no-user-interaction)--no-user-interaction[Do not authenticate the user if needed]' \
+ ;;
+ unlock|lock)
+ _arguments \
+ {-p,--object-path}'[Object to lock/unlock]:object path:_paths' \
+ {-b,--block-device}'[Block device to lock/unlock]:block device:_paths' \
+ '(--no-user-interaction)--no-user-interaction[Do not authenticate the user if needed]' \
+ ;;
+ loop-setup)
+ _arguments \
+ {-f,--file}'[File to set-up a loop device for]:files:_files' \
+ {-r,--read-only}'[Setup read-only device]' \
+ {-o,--offset}'[Start at <num> bytes into file]:offset in bytes:' \
+ {-s,--size}'[Limit size to <num> bytes]:limit in bytes:' \
+ '(--no-user-interaction)--no-user-interaction[Do not authenticate the user if needed]' \
+ ;;
+ loop-delete)
+ _arguments \
+ {-p,--object-path}'[Object for loop device to delete]:object path:_paths' \
+ {-b,--block-device}'[Loop device to delete]:block device:_paths' \
+ '(--no-user-interaction)--no-user-interaction[Do not authenticate the user if needed]' \
+ ;;
+ smart-simulate)
+ _arguments \
+ {-f,--file}'[File with libatasmart blob]:files:_files' \
+ {-p,--object-path}'[Object to get information about]:object path:_paths' \
+ {-b,--block-device}'[Block device to get information about]:block device:_paths' \
+ '(--no-user-interaction)--no-user-interaction[Do not authenticate the user if needed]' \
+ ;;
+ esac
+ ;;
+ esac
+}
+
+_udisksctl "$@"
--
1.8.5.3
More information about the devkit-devel
mailing list