Recreate the completion widget with its own function.

Currently, each completion widgets will be re-installed, but its
function will be statically associated with `_main_complete`.

We can get this function name via $widget[$event] which is the
zsh's zsh/zleparameter module's feature. We can use this information
for `zle -C`ing.

Signed-off-by: Takeshi Banse <takebi@laafc.net>
This commit is contained in:
Takeshi Banse 2011-01-07 21:43:09 +09:00
parent 802583ea94
commit 2fd0845b77

View File

@ -215,24 +215,27 @@ _zsh_highlight-zle-buffer() {
# Bind all ZLE events from zle -la to highlighting function. # Bind all ZLE events from zle -la to highlighting function.
_zsh_highlight-install() { _zsh_highlight-install() {
zmodload zsh/zleparameter 2>/dev/null || {
echo 'zsh-syntax-highlighting:zmoadload error. exiting.' >&2; return -1
}
local -a events; : ${(A)events::=${@:#(_*|orig-*|.run-help|.which-command)}}
local clean_event local clean_event
for event in "$@"; do for event in $events; do
case $event in if [[ "$widgets[$event]" == completion:* ]]; then
_*|orig-*|.run-help|.which-command) eval "zle -C orig-$event ${${${widgets[$event]}#*:}/:/ } ; $event() { builtin zle orig-$event && _zsh_highlight-zle-buffer } ; zle -N $event"
;; else
accept-and-menu-complete) case $event in
eval "$event() { builtin zle .$event && _zsh_highlight-zle-buffer } ; zle -N $event" accept-and-menu-complete)
;; eval "$event() { builtin zle .$event && _zsh_highlight-zle-buffer } ; zle -N $event"
[^\.]*complete*) ;;
eval "zle -C orig-$event .$event _main_complete ; $event() { builtin zle orig-$event && _zsh_highlight-zle-buffer } ; zle -N $event" .*)
;; clean_event=$event[2,${#event}] # Remove the leading dot in the event name
.*) eval "$clean_event() { builtin zle $event && _zsh_highlight-zle-buffer } ; zle -N $clean_event"
clean_event=$event[2,${#event}] # Remove the leading dot in the event name ;;
eval "$clean_event() { builtin zle $event && _zsh_highlight-zle-buffer } ; zle -N $clean_event" *)
;; ;;
*) esac
;; fi
esac
done done
} }
_zsh_highlight-install "${(@f)"$(zle -la)"}" _zsh_highlight-install "${(@f)"$(zle -la)"}"