diff options
Diffstat (limited to 'Completion')
-rw-r--r-- | Completion/Core/_main_complete | 5 | ||||
-rw-r--r-- | Completion/Core/_prefix | 23 |
2 files changed, 28 insertions, 0 deletions
diff --git a/Completion/Core/_main_complete b/Completion/Core/_main_complete index ebe256588..a6714cea6 100644 --- a/Completion/Core/_main_complete +++ b/Completion/Core/_main_complete @@ -20,6 +20,7 @@ setopt localoptions nullglob rcexpandparam extendedglob unsetopt markdirs globsubst shwordsplit nounset ksharrays local comp post ret=1 _compskip _prio_num=1 format _comp_ignore \ + _completers _completers_left \ context state line opt_args val_args curcontext="$curcontext" \ _last_nmatches=-1 _last_menu_style _def_menu_style _menu_style sel \ _saved_exact="${compstate[exact]}" \ @@ -63,11 +64,15 @@ fi # And now just call the completer functions defined. +_completers=( "$@" ) +_completers_left=( "$@" ) + for comp; do if "$comp"; then ret=0 break; fi + shift 1 _completers_left done if (( $compstate[nmatches] )); then diff --git a/Completion/Core/_prefix b/Completion/Core/_prefix new file mode 100644 index 000000000..6306b4aa0 --- /dev/null +++ b/Completion/Core/_prefix @@ -0,0 +1,23 @@ +#autoload + +# Try to ignore the suffix. A bit like e-o-c-prefix. + +[[ -n "$SUFFIX" ]] || return 1 + +local curcontext="${curcontext/:[^:]#:/:prefix:}" comp i + +zstyle -a ":completion:${curcontext}:" completer comp || + comp=( "${(@)_completers[1,-${#_completers_left}-1][(R)_prefix,-1]}" ) + +if zstyle -t ":completion:${curcontext}:" add-space; then + ISUFFIX=" $SUFFIX" +else + ISUFFIX="$SUFFIX" +fi +SUFFIX='' + +for i in "$comp[@]"; do + [[ "$i" != _prefix ]] && "$i" && return 0 +done + +return 1 |