@@ -6,7 +6,7 @@ zmodload zsh/terminfo 2>/dev/null
66zmodload zsh/termcap 2>/dev/null
77
88# Prepare output variables for zew-process-buffer
9- local ZEW_PB_WORDS ZEW_PB_WORDS_BEGINNINGS ZEW_PB_SPACES
9+ local ZEW_PB_WORDS ZEW_PB_WORDS_BEGINNINGS ZEW_PB_SPACES
1010local ZEW_PB_SELECTED_WORD ZEW_PB_LEFT ZEW_PB_RIGHT
1111
1212typeset -g __zew_hcw_index __zew_hcw_left __zew_hcw_right
@@ -22,34 +22,33 @@ zew-process-buffer "$BUFFER" "$CURSOR"
2222
2323# First call or restart?
2424if [[ "$__zew_hcw_call_count" -le 1 || "$__zew_hcw_restart" = "1" ]]; then
25- # '0' will get changed into $to_display limit
26- [[ " $WIDGET " != * -backwards ]] && __zew_hcw_index=" 1" || __zew_hcw_index=" 0"
27- __zew_hcw_widget_name=" ${WIDGET% -backwards} "
28- __zew_hcw_left=" $ZEW_PB_LEFT "
29- __zew_hcw_right=" $ZEW_PB_RIGHT "
30- __zew_hcw_found=( )
31- __zew_hcw_finished=" 0"
32- __zew_hcw_restart=" 0"
25+ # '0' will get changed into $to_display limit
26+ [[ "$WIDGET" != *-backwards ]] && __zew_hcw_index="1" || __zew_hcw_index="0"
27+ __zew_hcw_widget_name="${WIDGET%-backwards}"
28+ __zew_hcw_left="$ZEW_PB_LEFT"
29+ __zew_hcw_right="$ZEW_PB_RIGHT"
30+ __zew_hcw_found=( )
31+ __zew_hcw_finished="0"
32+ __zew_hcw_restart="0"
3333else
34- # Consecutive call
35- [[ " $WIDGET " != * -backwards ]] && (( __zew_hcw_index ++ )) || (( __zew_hcw_index -- ))
34+ # Consecutive call
35+ [[ "$WIDGET" != *-backwards ]] && (( __zew_hcw_index ++ )) || (( __zew_hcw_index -- ))
3636fi
3737
3838# Find history words matching $left ... $right
3939if [ "$#__zew_hcw_found" -eq "0" ]; then
4040 repeat 1; do
41- __zew_hcw_found=( " ${(@ M)historywords:# (# i)$__zew_hcw_left * $__zew_hcw_right } " )
41+ __zew_hcw_found=( "${(@M)historywords:#(#i)$__zew_hcw_left*$__zew_hcw_right}" )
4242 done
43-
44- # The first result should be always $__zew_hcw_left$__zew_hcw_right
45- if [ " $__zew_hcw_found [1]" != " $__zew_hcw_left$__zew_hcw_right " ]; then
46- __zew_hcw_found=( " $__zew_hcw_left$__zew_hcw_right " " $__zew_hcw_found [@]" )
47- fi
43+ # The first result should be always $__zew_hcw_left$__zew_hcw_right
44+ if [ "$__zew_hcw_found[1]" != "$__zew_hcw_left$__zew_hcw_right" ]; then
45+ __zew_hcw_found=( "$__zew_hcw_left$__zew_hcw_right" "$__zew_hcw_found[@]" )
46+ fi
4847fi
4948
5049if [ "$#__zew_hcw_found" -le "0" ]; then
51- zle -M " No matches found"
52- return 0
50+ zle -M "No matches found"
51+ return 0
5352fi
5453
5554# Pagination, index value guards
@@ -81,15 +80,15 @@ zle -M -- \
8180local buf=""
8281integer nwords="${#ZEW_PB_WORDS}"
8382for (( i=1; i<=nwords; i++ )); do
84- if [ " $i " = " $ZEW_PB_SELECTED_WORD " ]; then
85- buf+=" ${ZEW_PB_SPACES[i]}${__zew_hcw_found[__zew_hcw_index]} "
86- else
87- buf+=" ${ZEW_PB_SPACES[i]}${ZEW_PB_WORDS[i]} "
88- fi
83+ if [ "$i" = "$ZEW_PB_SELECTED_WORD" ]; then
84+ buf+="${ZEW_PB_SPACES[i]}${__zew_hcw_found[__zew_hcw_index]}"
85+ else
86+ buf+="${ZEW_PB_SPACES[i]}${ZEW_PB_WORDS[i]}"
87+ fi
8988done
9089
9190if [[ "$nwords" = "0" && "$ZEW_PB_SELECTED_WORD" = "0" ]]; then
92- buf+=" ${__zew_hcw_found[__zew_hcw_index]} "
91+ buf+="${__zew_hcw_found[__zew_hcw_index]}"
9392fi
9493
9594# Add trailing spaces
@@ -101,66 +100,56 @@ BUFFER="$buf"
101100}
102101
103102_zhcw_self_insert() {
104- LBUFFER+=" ${KEYS[-1]} "
105- __zew_hcw_restart=" 1"
106- _zhcw_main
103+ LBUFFER+="${KEYS[-1]}"
104+ __zew_hcw_restart="1"
105+ _zhcw_main
107106}
108107
109108_zhcw_backward_delete_char() {
110- LBUFFER=" ${LBUFFER% ?} "
111- __zew_hcw_restart=" 1"
112- _zhcw_main
109+ LBUFFER="${LBUFFER%?}"
110+ __zew_hcw_restart="1"
111+ _zhcw_main
113112}
114113
115114_zhcw_delete_char() {
116- RBUFFER=" ${RBUFFER# ?} "
117- __zew_hcw_restart=" 1"
118- _zhcw_main
115+ RBUFFER="${RBUFFER#?}"
116+ __zew_hcw_restart="1"
117+ _zhcw_main
119118}
120119
121120_zhcw_main
122121
123122if [ "$__zew_hcw_call_count" -eq "1" ]; then
124123 # Make the zhcw keymap a copy of the current main
125- bindkey -N zhcw emacs
126-
127- local down_widget=" ${WIDGET% -backwards} "
128- local up_widget=" ${down_widget} -backwards"
129-
130- # Manual, termcap, terminfo
131- bindkey -M zhcw ' ^[OA' " $up_widget "
132- bindkey -M zhcw ' ^[OB' " $down_widget "
133- bindkey -M zhcw ' ^[[A' " $up_widget "
134- bindkey -M zhcw ' ^[[B' " $down_widget "
135- [ -n " $termcap [ku]" ] && bindkey -M zhcw " $termcap [ku]" " $up_widget "
136- [ -n " $termcap [kd]" ] && bindkey -M zhcw " $termcap [kd]" " $down_widget "
137- [ -n " $termcap [kD]" ] && bindkey -M zhcw " $termcap [kD]" delete-char
138- [ -n " $terminfo [kcuu1]" ] && bindkey -M zhcw " $terminfo [kcuu1]" " $up_widget "
139- [ -n " $terminfo [kcud1]" ] && bindkey -M zhcw " $terminfo [kcud1]" " $down_widget "
140- [ -n " $terminfo [kdch1]" ] && bindkey -M zhcw " $terminfo [kdch1]" delete-char
141-
142- # Needed for Fedora 23, zsh-5.1.1
143- bindkey -M zhcw ' ' self-insert
144-
145- # Substitute self-insert, backward-delete-char, delete-char
146- zle -A self-insert saved-self-insert
147- zle -A backward-delete-char saved-backward-delete-char
148- zle -A delete-char saved-delete-char
149-
150- zle -N self-insert _zhcw_self_insert
151- zle -N backward-delete-char _zhcw_backward_delete_char
152- zle -N delete-char _zhcw_delete_char
153-
154- zle recursive-edit -K zhcw
155- zle -M " "
156-
157- zle -A saved-self-insert self-insert
158- zle -A saved-backward-delete-char backward-delete-char
159- zle -A saved-delete-char delete-char
160- zle -D saved-self-insert saved-backward-delete-char saved-delete-char
161-
162- # Full reinitialisation at next call
163- __zew_hcw_call_count=" 0"
124+ bindkey -N zhcw emacs
125+ local down_widget="${WIDGET%-backwards}"
126+ local up_widget="${down_widget}-backwards"
127+ # Manual, termcap, terminfo
128+ bindkey -M zhcw '^[OA' "$up_widget"
129+ bindkey -M zhcw '^[OB' "$down_widget"
130+ bindkey -M zhcw '^[[A' "$up_widget"
131+ bindkey -M zhcw '^[[B' "$down_widget"
132+ [ -n "$termcap[ku]" ] && bindkey -M zhcw "$termcap[ku]" "$up_widget"
133+ [ -n "$termcap[kd]" ] && bindkey -M zhcw "$termcap[kd]" "$down_widget"
134+ [ -n "$termcap[kD]" ] && bindkey -M zhcw "$termcap[kD]" delete-char
135+ [ -n "$terminfo[kcuu1]" ] && bindkey -M zhcw "$terminfo[kcuu1]" "$up_widget"
136+ [ -n "$terminfo[kcud1]" ] && bindkey -M zhcw "$terminfo[kcud1]" "$down_widget"
137+ [ -n "$terminfo[kdch1]" ] && bindkey -M zhcw "$terminfo[kdch1]" delete-char
138+ # Needed for Fedora 23, zsh-5.1.1
139+ bindkey -M zhcw ' ' self-insert
140+ # Substitute self-insert, backward-delete-char, delete-char
141+ zle -A self-insert saved-self-insert
142+ zle -A backward-delete-char saved-backward-delete-char
143+ zle -A delete-char saved-delete-char
144+ zle -N self-insert _zhcw_self_insert
145+ zle -N backward-delete-char _zhcw_backward_delete_char
146+ zle -N delete-char _zhcw_delete_char
147+ zle recursive-edit -K zhcw
148+ zle -M ""
149+ zle -A saved-self-insert self-insert
150+ zle -A saved-backward-delete-char backward-delete-char
151+ zle -A saved-delete-char delete-char
152+ zle -D saved-self-insert saved-backward-delete-char saved-delete-char
153+ # Full reinitialisation at next call
154+ __zew_hcw_call_count="0"
164155fi
165-
166- # vim:ft=zsh
0 commit comments