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. | # Whether the cursor highlighter should be called or not. | ||||||
| _zsh_highlight_cursor_highlighter_predicate() | _zsh_highlight_cursor_highlighter_predicate() | ||||||
| { | { | ||||||
|   # accept-* may trigger removal of cursor highlighting |   # remove cursor highlighting when the line is finished | ||||||
|   [[ $WIDGET == accept-* ]] || |   [[ $WIDGET == zle-line-finish ]] || _zsh_highlight_cursor_moved | ||||||
|     _zsh_highlight_cursor_moved |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # Cursor highlighting function. | # Cursor highlighting function. | ||||||
| _zsh_highlight_cursor_highlighter() | _zsh_highlight_cursor_highlighter() | ||||||
| { | { | ||||||
|   [[ $WIDGET == accept-* ]] && return |   [[ $WIDGET == zle-line-finish ]] && return | ||||||
|    |    | ||||||
|   _zsh_highlight_add_highlight $CURSOR $(( $CURSOR + 1 )) cursor |   _zsh_highlight_add_highlight $CURSOR $(( $CURSOR + 1 )) cursor | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -62,9 +62,8 @@ | ||||||
| # Whether the highlighter should be called or not. | # Whether the highlighter should be called or not. | ||||||
| _zsh_highlight_main_highlighter_predicate() | _zsh_highlight_main_highlighter_predicate() | ||||||
| { | { | ||||||
|   # accept-* may trigger removal of path_prefix highlighting |   # may need to remove path_prefix highlighting when the line ends | ||||||
|   [[ $WIDGET == accept-* ]] || |   [[ $WIDGET == zle-line-finish ]] || _zsh_highlight_buffer_modified | ||||||
|     _zsh_highlight_buffer_modified |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # Helper to deal with tokens crossing line boundaries. | # 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 this word ends the buffer, check if it's the prefix of a valid path. | ||||||
|   if [[ ${BUFFER[1]} != "-" && ${#BUFFER} == $end_pos ]] && |   if [[ ${BUFFER[1]} != "-" && ${#BUFFER} == $end_pos ]] && | ||||||
|      [[ $WIDGET != accept-* ]]; then |      [[ $WIDGET != zle-line-finish ]]; then | ||||||
|     local -a tmp |     local -a tmp | ||||||
|     tmp=( ${expanded_path}*(N) ) |     tmp=( ${expanded_path}*(N) ) | ||||||
|     (( $#tmp > 0 )) && REPLY=path_prefix && return 0 |     (( $#tmp > 0 )) && REPLY=path_prefix && return 0 | ||||||
|  |  | ||||||
|  | @ -31,7 +31,7 @@ | ||||||
| # Related to path_prefix.zsh | # Related to path_prefix.zsh | ||||||
| 
 | 
 | ||||||
| BUFFER='ls /bin/s' | BUFFER='ls /bin/s' | ||||||
| WIDGET=accept-line | WIDGET=zle-line-finish | ||||||
| 
 | 
 | ||||||
| expected_region_highlight=( | expected_region_highlight=( | ||||||
|   "4 9 default"    # /bin/s |   "4 9 default"    # /bin/s | ||||||
|  |  | ||||||
|  | @ -252,6 +252,12 @@ _zsh_highlight_bind_widgets() | ||||||
|   # Override ZLE widgets to make them invoke _zsh_highlight. |   # Override ZLE widgets to make them invoke _zsh_highlight. | ||||||
|   local -U widgets_to_bind |   local -U widgets_to_bind | ||||||
|   widgets_to_bind=(${${(k)widgets}:#(.*|orig-*|run-help|which-command|beep|set-local-history|yank)}) |   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 |   local cur_widget | ||||||
|   for cur_widget in $widgets_to_bind; do |   for cur_widget in $widgets_to_bind; do | ||||||
|     case $widgets[$cur_widget] in |     case $widgets[$cur_widget] in | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue