about summary refs log tree commit diff
path: root/Completion/Zsh
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Zsh')
-rw-r--r--Completion/Zsh/Command/_alias2
-rw-r--r--Completion/Zsh/Type/.distfiles1
-rw-r--r--Completion/Zsh/Type/_aliases4
-rw-r--r--Completion/Zsh/Type/_command_names1
-rw-r--r--Completion/Zsh/Type/_suffix_alias_files21
5 files changed, 27 insertions, 2 deletions
diff --git a/Completion/Zsh/Command/_alias b/Completion/Zsh/Command/_alias
index ecc298c73..8feb14a07 100644
--- a/Completion/Zsh/Command/_alias
+++ b/Completion/Zsh/Command/_alias
@@ -5,6 +5,7 @@ local curcontext="$curcontext" state line suf
 _arguments -C -s -A "-*" -S \
   '-+g[list or define global aliases]' \
   '-+r[list or define regular aliases]' \
+  '-+s[list or define suffix aliases]' \
   '-+m[print aliases matching specified pattern]' \
   '-L[print each alias in the form of calls to alias]' \
   '*::alias definition:->defn'
@@ -18,4 +19,3 @@ if [[ -n "$state" ]]; then
     _wanted alias expl 'alias definition' _aliases -S "$suf"
   fi
 fi
-
diff --git a/Completion/Zsh/Type/.distfiles b/Completion/Zsh/Type/.distfiles
index 652148b61..f8f7cc905 100644
--- a/Completion/Zsh/Type/.distfiles
+++ b/Completion/Zsh/Type/.distfiles
@@ -4,4 +4,5 @@ _aliases           _file_descriptors  _jobs_fg           _options_unset
 _arrays            _functions         _limits            _parameters
 _command_names     _jobs              _options           _vars
 _directory_stack   _jobs_bg           _options_set
+_suffix_alias_files
 '
diff --git a/Completion/Zsh/Type/_aliases b/Completion/Zsh/Type/_aliases
index 30e091d98..6506ece13 100644
--- a/Completion/Zsh/Type/_aliases
+++ b/Completion/Zsh/Type/_aliases
@@ -4,14 +4,16 @@ local expl sel args opts
 
 zparseopts -E -D s:=sel
 
-[[ -z $sel ]] && sel=rg
+[[ -z $sel ]] && sel=rgs
 
 opts=( "$@" )
 
 args=()
 [[ $sel = *r* ]] && args=( $args 'aliases:regular alias:compadd -k aliases' )
 [[ $sel = *g* ]] && args=( $args 'global-aliases:global alias:compadd -k galiases' )
+[[ $sel = *s* ]] && args=( $args 'suffix-aliases:suffix alias:compadd -k saliases' )
 [[ $sel = *R* ]] && args=( $args 'disabled-aliases:disabled regular alias:compadd -k dis_aliases' )
 [[ $sel = *G* ]] && args=( $args 'disabled-global-aliases:disabled global alias:compadd -k dis_galiases' )
+[[ $sel = *S* ]] && args=( $args 'disabled-suffix-aliases:disabled suffix alias:compadd -k dis_saliases' )
 
 _alternative -O opts $args
diff --git a/Completion/Zsh/Type/_command_names b/Completion/Zsh/Type/_command_names
index 613f1fe59..a8bf7b481 100644
--- a/Completion/Zsh/Type/_command_names
+++ b/Completion/Zsh/Type/_command_names
@@ -24,6 +24,7 @@ else
     'builtins:builtin command:compadd -k builtins'
     'functions:shell function:compadd -k functions'
     'aliases:alias:compadd -k aliases'
+    'suffix-aliases:suffix alias:_suffix_alias_files'
     'reserved-words:reserved word:compadd -k reswords'
     'jobs:: _jobs -t'
     'parameters:: _parameters -g "^*readonly*" -qS= -r "\n\t\- =["'
diff --git a/Completion/Zsh/Type/_suffix_alias_files b/Completion/Zsh/Type/_suffix_alias_files
new file mode 100644
index 000000000..1c2c8ebb5
--- /dev/null
+++ b/Completion/Zsh/Type/_suffix_alias_files
@@ -0,0 +1,21 @@
+#autoload
+
+# Complete files for which a suffix alias exists.
+
+local expl pat
+
+(( ${#saliases} )) || return 1
+
+if (( ${#saliases} == 1 )); then
+    pat="*.${(kq)saliases}"
+else
+    local -a tmpa
+    # This is so we can quote the alias names against expansion
+    # without quoting the `|' which needs to be active in the pattern
+    # --- remember that an alias name can be pretty much anything.
+    tmpa=(${(kq)saliases})
+    pat="*.(${(kj.|.)tmpa})"
+fi
+
+# _wanted is called for us by _command_names
+_path_files "$@" -g $pat