Merge 56b81a9b66 into add6825898
				
					
				
			This commit is contained in:
		
						commit
						78ed2f7a66
					
				| 
						 | 
					@ -32,6 +32,15 @@ custom widgets have been created (i.e., after all `zle -N` calls and after
 | 
				
			||||||
running `compinit`).  Widgets created later will work, but will not update the
 | 
					running `compinit`).  Widgets created later will work, but will not update the
 | 
				
			||||||
syntax highlighting.
 | 
					syntax highlighting.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Why does syntax highlighting not work while searching history?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In `zsh` versions before 5.3 is not possible for `zsh-syntax-highlighting.zsh`
 | 
				
			||||||
 | 
					to know if an incremental search is currently active and that matched parts of the
 | 
				
			||||||
 | 
					buffer should be underlined (or otherwise highlighted). Therefore, it is not possible
 | 
				
			||||||
 | 
					for `zsh-syntax-highlighting.zsh` to apply syntax highlighting and to underline the
 | 
				
			||||||
 | 
					matched part of the search. While searching the history, the latter is more important,
 | 
				
			||||||
 | 
					so syntax highlighting is disabled in this case.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### How are new releases announced?
 | 
					### How are new releases announced?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
There is currently no "push" announcements channel.  However, the following
 | 
					There is currently no "push" announcements channel.  However, the following
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -58,6 +58,14 @@ _zsh_highlight()
 | 
				
			||||||
  # Store the previous command return code to restore it whatever happens.
 | 
					  # Store the previous command return code to restore it whatever happens.
 | 
				
			||||||
  local ret=$?
 | 
					  local ret=$?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Remove all highlighting in isearch, so that only the underlining done by zsh itself remains.
 | 
				
			||||||
 | 
					  # For details see FAQ entry 'Why does syntax highlighting not work while searching history?'
 | 
				
			||||||
 | 
					  # and http://www.zsh.org/mla/users/2016/msg00415.html.
 | 
				
			||||||
 | 
					  if [[ $WIDGET == zle-isearch-update ]]; then
 | 
				
			||||||
 | 
					    region_highlight=()
 | 
				
			||||||
 | 
					    return $ret
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  setopt localoptions warncreateglobal
 | 
					  setopt localoptions warncreateglobal
 | 
				
			||||||
  setopt localoptions noksharrays
 | 
					  setopt localoptions noksharrays
 | 
				
			||||||
  local REPLY # don't leak $REPLY into global scope
 | 
					  local REPLY # don't leak $REPLY into global scope
 | 
				
			||||||
| 
						 | 
					@ -250,8 +258,20 @@ _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
 | 
				
			||||||
 | 
					  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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Always wrap special zle-isearch-update widget to be notified of updates in isearch.
 | 
				
			||||||
 | 
					  # This is needed because we need to disable highlighting in that case.
 | 
				
			||||||
 | 
					  widgets_to_bind+=(zle-isearch-update)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  local cur_widget
 | 
					  local cur_widget
 | 
				
			||||||
  for cur_widget in ${${(k)widgets}:#(.*|orig-*|run-help|which-command|beep|set-local-history|yank)}; do
 | 
					  for cur_widget in $widgets_to_bind; do
 | 
				
			||||||
    case $widgets[$cur_widget] in
 | 
					    case $widgets[$cur_widget] in
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Already rebound event: do nothing.
 | 
					      # Already rebound event: do nothing.
 | 
				
			||||||
| 
						 | 
					@ -277,6 +297,10 @@ _zsh_highlight_bind_widgets()
 | 
				
			||||||
      builtin) eval "_zsh_highlight_widget_${(q)cur_widget}() { _zsh_highlight_call_widget .${(q)cur_widget} -- \"\$@\" }"
 | 
					      builtin) eval "_zsh_highlight_widget_${(q)cur_widget}() { _zsh_highlight_call_widget .${(q)cur_widget} -- \"\$@\" }"
 | 
				
			||||||
               zle -N $cur_widget _zsh_highlight_widget_$cur_widget;;
 | 
					               zle -N $cur_widget _zsh_highlight_widget_$cur_widget;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # Special zle-* hook that is currently not bound at all: Bind to z-sy-h driectly.
 | 
				
			||||||
 | 
					      '') eval "_zsh_highlight_widget_${(q)cur_widget}() { :; _zsh_highlight }"
 | 
				
			||||||
 | 
					          zle -N $cur_widget _zsh_highlight_widget_$cur_widget;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Default: unhandled case.
 | 
					      # Default: unhandled case.
 | 
				
			||||||
      *) print -r -- >&2 "zsh-syntax-highlighting: unhandled ZLE widget '$cur_widget'" ;;
 | 
					      *) print -r -- >&2 "zsh-syntax-highlighting: unhandled ZLE widget '$cur_widget'" ;;
 | 
				
			||||||
    esac
 | 
					    esac
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue