mirror of
https://github.com/zsh-users/zsh-syntax-highlighting.git
synced 2025-06-05 12:36:30 +08:00
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
Block a user