driver: Always bind zle-line-finish and use it instead of accept-*
Special handling for cursor imprint or partial path highlighting is needed in more cases than accept-*. For example when accepting a line from isearch, no accept-* widget is invoked. The proper way is to use zle-line-finish. Trumps #259. Fixes #284.
This commit is contained in:
parent
9e569bb0fe
commit
5bae621900
@ -34,15 +34,14 @@
|
||||
# Whether the cursor highlighter should be called or not.
|
||||
_zsh_highlight_cursor_highlighter_predicate()
|
||||
{
|
||||
# accept-* may trigger removal of cursor highlighting
|
||||
[[ $WIDGET == accept-* ]] ||
|
||||
_zsh_highlight_cursor_moved
|
||||
# remove cursor highlighting when the line is finished
|
||||
[[ $WIDGET == zle-line-finish ]] || _zsh_highlight_cursor_moved
|
||||
}
|
||||
|
||||
# Cursor highlighting function.
|
||||
_zsh_highlight_cursor_highlighter()
|
||||
{
|
||||
[[ $WIDGET == accept-* ]] && return
|
||||
[[ $WIDGET == zle-line-finish ]] && return
|
||||
|
||||
_zsh_highlight_add_highlight $CURSOR $(( $CURSOR + 1 )) cursor
|
||||
}
|
||||
|
@ -62,9 +62,8 @@
|
||||
# Whether the highlighter should be called or not.
|
||||
_zsh_highlight_main_highlighter_predicate()
|
||||
{
|
||||
# accept-* may trigger removal of path_prefix highlighting
|
||||
[[ $WIDGET == accept-* ]] ||
|
||||
_zsh_highlight_buffer_modified
|
||||
# may need to remove path_prefix highlighting when the line ends
|
||||
[[ $WIDGET == zle-line-finish ]] || _zsh_highlight_buffer_modified
|
||||
}
|
||||
|
||||
# Helper to deal with tokens crossing line boundaries.
|
||||
@ -596,7 +595,7 @@ _zsh_highlight_main_highlighter_check_path()
|
||||
|
||||
# If this word ends the buffer, check if it's the prefix of a valid path.
|
||||
if [[ ${BUFFER[1]} != "-" && ${#BUFFER} == $end_pos ]] &&
|
||||
[[ $WIDGET != accept-* ]]; then
|
||||
[[ $WIDGET != zle-line-finish ]]; then
|
||||
local -a tmp
|
||||
tmp=( ${expanded_path}*(N) )
|
||||
(( $#tmp > 0 )) && REPLY=path_prefix && return 0
|
||||
|
@ -31,7 +31,7 @@
|
||||
# Related to path_prefix.zsh
|
||||
|
||||
BUFFER='ls /bin/s'
|
||||
WIDGET=accept-line
|
||||
WIDGET=zle-line-finish
|
||||
|
||||
expected_region_highlight=(
|
||||
"4 9 default" # /bin/s
|
||||
|
@ -252,6 +252,12 @@ _zsh_highlight_bind_widgets()
|
||||
# Override ZLE widgets to make them invoke _zsh_highlight.
|
||||
local -U widgets_to_bind
|
||||
widgets_to_bind=(${${(k)widgets}:#(.*|orig-*|run-help|which-command|beep|set-local-history|yank)})
|
||||
|
||||
# Always wrap special zle-line-finish widget. This is needed to decide if the
|
||||
# current line ends and special highlighting logic needs to be applied.
|
||||
# E.g. remove cursor imprint, don't highlight partial paths, ...
|
||||
widgets_to_bind+=(zle-line-finish)
|
||||
|
||||
local cur_widget
|
||||
for cur_widget in $widgets_to_bind; do
|
||||
case $widgets[$cur_widget] in
|
||||
|
Loading…
Reference in New Issue
Block a user