about summary refs log tree commit diff
path: root/Completion/Unix/Type
diff options
context:
space:
mode:
authorPaul Ackersviller <packersv@users.sourceforge.net>2007-05-02 03:46:28 +0000
committerPaul Ackersviller <packersv@users.sourceforge.net>2007-05-02 03:46:28 +0000
commit2598e0995abf3d3fadc226cbc282f25bfe8e6521 (patch)
treec26795f3890d32ad638e34030e83081603bb1cc7 /Completion/Unix/Type
parent6a9a6a4fbce997fe53c6886791e5af794d79fd2f (diff)
downloadzsh-2598e0995abf3d3fadc226cbc282f25bfe8e6521.tar.gz
zsh-2598e0995abf3d3fadc226cbc282f25bfe8e6521.tar.xz
zsh-2598e0995abf3d3fadc226cbc282f25bfe8e6521.zip
Merge of workers/{21302,21306,21310}.
Diffstat (limited to 'Completion/Unix/Type')
-rw-r--r--Completion/Unix/Type/_file_systems10
-rw-r--r--Completion/Unix/Type/_global_tags7
-rw-r--r--Completion/Unix/Type/_locales12
-rw-r--r--Completion/Unix/Type/_user_at_host31
4 files changed, 55 insertions, 5 deletions
diff --git a/Completion/Unix/Type/_file_systems b/Completion/Unix/Type/_file_systems
index d541fac15..ffbf5ac68 100644
--- a/Completion/Unix/Type/_file_systems
+++ b/Completion/Unix/Type/_file_systems
@@ -1,6 +1,6 @@
 #autoload
 
-local fss
+local expl fss
 
 case $OSTYPE in
   aix*) fss=( jfs nfs cdrfs ) ;;
@@ -10,9 +10,9 @@ case $OSTYPE in
     fss=( adfs bfs cramfs ext2 ext3 hfs hpfs iso9660 minix ntfs qnx4
           reiserfs romfs swap udf ufs vxfs xfs xiafs )
     [[ -r /proc/filesystems ]] &&
-        fss=( $fss ${$(</proc/filesystems)#nodev} )
+        fss+=( ${$(</proc/filesystems)#nodev} )
     [[ -r /etc/filesystems ]] &&
-        fss=( $fss ${$(</etc/filesystems)#nodev} )
+        fss+=( ${$(</etc/filesystems)#\*} )
   ;;
   osf*) fss=( advfs ufs nfs mfs cdfs ) ;;
   solaris*) fss=( ufs nfs hsfs s5fs pcfs cachefs tmpfs ) ;;
@@ -22,11 +22,11 @@ case $OSTYPE in
   ;;
   *)
     # default for all other systems
-    fss=( ufs)
+    fss=( ufs )
   ;;
 esac
 
-_wanted fstypes expl 'file system type' compadd "$@" -M 'L:|no=' -a fss
+_wanted fstypes expl 'file system type' compadd "$@" -M 'L:|no=' -a "$@" - fss
 
 
  
diff --git a/Completion/Unix/Type/_global_tags b/Completion/Unix/Type/_global_tags
new file mode 100644
index 000000000..fcda28dfb
--- /dev/null
+++ b/Completion/Unix/Type/_global_tags
@@ -0,0 +1,7 @@
+#autoload
+
+local expl tags
+
+tags=( $(_call_program global-tags global --completion $PREFIX 2>/dev/null) )
+
+_wanted global-tags expl 'tag' compadd -M 'm:{a-zA-Z}={A-Za-z}' -a "$@" - tags
diff --git a/Completion/Unix/Type/_locales b/Completion/Unix/Type/_locales
new file mode 100644
index 000000000..a449ebe16
--- /dev/null
+++ b/Completion/Unix/Type/_locales
@@ -0,0 +1,12 @@
+#compdef -value-,LANG,-default- -value-,LANGUAGE,-default- -P -value-,LC_*,-default-
+
+local expl locales
+
+if (( $+commands[locale] )); then
+  locales=( $(_call_program locales locale -a) )
+  [[ $OSTYPE = *-gnu ]] && locales=( ${locales/utf8/UTF-8} )
+else
+  locales=( /usr/lib/locale/*(:t) )
+fi
+
+_wanted locales expl locale compadd -a "$@" - locales
diff --git a/Completion/Unix/Type/_user_at_host b/Completion/Unix/Type/_user_at_host
new file mode 100644
index 000000000..a242ddeb6
--- /dev/null
+++ b/Completion/Unix/Type/_user_at_host
@@ -0,0 +1,31 @@
+#autoload
+
+# Complete user/host combinations. Normally this looks for the style
+# `users-hosts' for the tag `accounts'. A different tag may be given
+# with `-t tag'.
+# A `-' or `--' as the first argument is ignored.
+
+local expl suf tag=accounts
+
+if [[ "$1" = -t?* ]]; then
+  tag="${1[3,-1]}"
+  shift
+elif [[ "$1" = -t ]]; then
+  tag="$2"
+  shift 2
+fi
+
+[[ "$1" = -(|-) ]] && shift
+
+if [[ -prefix 1 *@ ]]; then
+  local user=${PREFIX%%@*}
+
+  compset -P 1 '*@'
+
+  _wanted -C user-at hosts expl "host for $user" \
+      _combination -s '[:@]' "${tag}" users-hosts users="$user" hosts "$@" -
+else
+  compset -S '@*' || suf="@"
+  _wanted users expl "user" \
+      _combination -s '[:@]' "${tag}" users-hosts users -S "$suf" -q "$@" -
+fi