mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-11-20 05:53:52 +01:00
moved from Completion/Core/_match
This commit is contained in:
parent
8e3993667a
commit
d73d9e9f7c
70
Completion/Base/Completer/_match
Normal file
70
Completion/Base/Completer/_match
Normal file
@ -0,0 +1,70 @@
|
||||
#autoload
|
||||
|
||||
# This is intended to be used as a completer function after the normal
|
||||
# completer as in: `zstyle ":completion:::::" completer _complete _match'.
|
||||
# It temporarily switches on pattern matching, allowing you to try
|
||||
# completion on patterns without having to setopt glob_complete.
|
||||
#
|
||||
# Note, however, that this is only really useful if you don't use the
|
||||
# expand-or-complete function because otherwise the pattern will
|
||||
# be expanded using globbing.
|
||||
|
||||
### Shouldn't be needed any more: [[ _matcher_num -gt 1 ]] && return 1
|
||||
|
||||
local tmp opm="$compstate[pattern_match]" ret=1 orig ins
|
||||
local oms="$_old_match_string"
|
||||
local ocsi="$compstate[insert]" ocspi="$compstate[pattern_insert]"
|
||||
|
||||
# Do nothing if we don't have a pattern.
|
||||
|
||||
tmp="${${:-$PREFIX$SUFFIX}#[~=]}"
|
||||
[[ "$tmp:q" = "$tmp" ]] && return 1
|
||||
|
||||
_old_match_string="$PREFIX$SUFFIX$HISTNO"
|
||||
|
||||
zstyle -s ":completion:${curcontext}:" match-original orig
|
||||
zstyle -s ":completion:${curcontext}:" insert-unambiguous ins
|
||||
|
||||
# Try completion without inserting a `*'?
|
||||
|
||||
if [[ -n "$orig" ]]; then
|
||||
compstate[pattern_match]='-'
|
||||
_complete && ret=0
|
||||
compstate[pattern_match]="$opm"
|
||||
|
||||
# No completion with inserting `*'?
|
||||
|
||||
[[ ret -eq 1 && "$orig" = only ]] && return 1
|
||||
fi
|
||||
|
||||
if (( ret )); then
|
||||
compstate[pattern_match]='*'
|
||||
_complete && ret=0
|
||||
compstate[pattern_match]="$opm"
|
||||
fi
|
||||
|
||||
if (( ! ret )); then
|
||||
|
||||
if [[ "$ins" = pattern && $compstate[nmatches] -gt 1 ]]; then
|
||||
|
||||
[[ "$oms" = "$PREFIX$SUFFIX$HISTNO" &&
|
||||
"$compstate[insert]" = automenu-unambiguous ]] &&
|
||||
compstate[insert]=automenu
|
||||
[[ "$compstate[insert]" != *menu ]] &&
|
||||
compstate[pattern_insert]= compstate[insert]=
|
||||
|
||||
# We tried to be clever here, making completion insert unambiguous
|
||||
# expansions as early as possible, but this is really hard to test
|
||||
# and the code below probably does more harm than good.
|
||||
#
|
||||
# [[ $compstate[unambiguous_cursor] -gt $#compstate[unambiguous] ]] &&
|
||||
# ins=yes compstate[insert]="$ocsi" compstate[pattern_insert]="$ocspi"
|
||||
fi
|
||||
|
||||
[[ "$ins" = (true|yes|on|1) &&
|
||||
$#compstate[unambiguous] -ge ${#:-${PREFIX}${SUFFIX}} ]] &&
|
||||
compstate[pattern_insert]=unambiguous
|
||||
|
||||
fi
|
||||
|
||||
return ret
|
Loading…
Reference in New Issue
Block a user