highlighters: Use _zsh_highlight_add_highlight
_zsh_highlight_add_highlight appends to region_highlight $1 $2 and the next non-null parameter. If there is no non-null parameter, do nothing, This is so that highlighters can add a style with fallbacks if the most specific style is not defined. If none of the applicable styles are defined, do the right thing and don't add an invalid entry to region_highlight. The pattern highlighter doesn't use this function as it'd need too large of an API change.
This commit is contained in:
parent
089329660b
commit
341a3ae1f0
|
@ -83,10 +83,10 @@ _zsh_highlight_brackets_highlighter()
|
||||||
local bracket_color_size=${#ZSH_HIGHLIGHT_STYLES[(I)bracket-level-*]}
|
local bracket_color_size=${#ZSH_HIGHLIGHT_STYLES[(I)bracket-level-*]}
|
||||||
local bracket_color_level=bracket-level-$(( (levelpos[$pos] - 1) % bracket_color_size + 1 ))
|
local bracket_color_level=bracket-level-$(( (levelpos[$pos] - 1) % bracket_color_size + 1 ))
|
||||||
local style=$bracket_color_level
|
local style=$bracket_color_level
|
||||||
region_highlight+=("$pos $((pos + 1)) $ZSH_HIGHLIGHT_STYLES[$style]")
|
_zsh_highlight_add_highlight $pos $((pos + 1)) $style
|
||||||
else
|
else
|
||||||
local style=bracket-error
|
local style=bracket-error
|
||||||
region_highlight+=("$pos $((pos + 1)) $ZSH_HIGHLIGHT_STYLES[$style]")
|
_zsh_highlight_add_highlight $pos $((pos + 1)) $style
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ _zsh_highlight_brackets_highlighter()
|
||||||
if [[ -n $levelpos[$pos] ]] && [[ -n $matching[$pos] ]]; then
|
if [[ -n $levelpos[$pos] ]] && [[ -n $matching[$pos] ]]; then
|
||||||
local otherpos=$matching[$pos]
|
local otherpos=$matching[$pos]
|
||||||
local style=cursor-matchingbracket
|
local style=cursor-matchingbracket
|
||||||
region_highlight+=("$otherpos $((otherpos + 1)) $ZSH_HIGHLIGHT_STYLES[$style]")
|
_zsh_highlight_add_highlight $otherpos $((otherpos + 1)) $style
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,5 +44,5 @@ _zsh_highlight_cursor_highlighter()
|
||||||
{
|
{
|
||||||
[[ $WIDGET == accept-* ]] && return
|
[[ $WIDGET == accept-* ]] && return
|
||||||
|
|
||||||
region_highlight+=("$CURSOR $(( $CURSOR + 1 )) $ZSH_HIGHLIGHT_STYLES[cursor]")
|
_zsh_highlight_add_highlight $CURSOR $(( $CURSOR + 1 )) cursor
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,5 +40,5 @@ _zsh_highlight_line_highlighter_predicate()
|
||||||
# root highlighting function.
|
# root highlighting function.
|
||||||
_zsh_highlight_line_highlighter()
|
_zsh_highlight_line_highlighter()
|
||||||
{
|
{
|
||||||
region_highlight+=("0 $#BUFFER $ZSH_HIGHLIGHT_STYLES[line]")
|
_zsh_highlight_add_highlight 0 $#BUFFER line
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,7 +68,7 @@ _zsh_highlight_main_highlighter_predicate()
|
||||||
# Helper to deal with tokens crossing line boundaries.
|
# Helper to deal with tokens crossing line boundaries.
|
||||||
_zsh_highlight_main_add_region_highlight() {
|
_zsh_highlight_main_add_region_highlight() {
|
||||||
integer start=$1 end=$2
|
integer start=$1 end=$2
|
||||||
local style=$ZSH_HIGHLIGHT_STYLES[$3]
|
local style=$3
|
||||||
|
|
||||||
# The calculation was relative to $PREBUFFER$BUFFER, but region_highlight is
|
# The calculation was relative to $PREBUFFER$BUFFER, but region_highlight is
|
||||||
# relative to $BUFFER.
|
# relative to $BUFFER.
|
||||||
|
@ -77,7 +77,7 @@ _zsh_highlight_main_add_region_highlight() {
|
||||||
|
|
||||||
(( end < 0 )) && return # having end<0 would be a bug
|
(( end < 0 )) && return # having end<0 would be a bug
|
||||||
(( start < 0 )) && start=0 # having start<0 is normal with e.g. multiline strings
|
(( start < 0 )) && start=0 # having start<0 is normal with e.g. multiline strings
|
||||||
region_highlight+=("$start $end $style")
|
_zsh_highlight_add_highlight $start $end $style
|
||||||
}
|
}
|
||||||
|
|
||||||
# Wrapper around 'type -w'.
|
# Wrapper around 'type -w'.
|
||||||
|
@ -126,7 +126,6 @@ _zsh_highlight_main_highlighter()
|
||||||
local -a options_to_set # used in callees
|
local -a options_to_set # used in callees
|
||||||
local buf="$PREBUFFER$BUFFER"
|
local buf="$PREBUFFER$BUFFER"
|
||||||
integer len="${#buf}"
|
integer len="${#buf}"
|
||||||
region_highlight=()
|
|
||||||
|
|
||||||
if (( path_dirs_was_set )); then
|
if (( path_dirs_was_set )); then
|
||||||
options_to_set+=( PATH_DIRS )
|
options_to_set+=( PATH_DIRS )
|
||||||
|
|
|
@ -40,5 +40,5 @@ _zsh_highlight_root_highlighter_predicate()
|
||||||
# root highlighting function.
|
# root highlighting function.
|
||||||
_zsh_highlight_root_highlighter()
|
_zsh_highlight_root_highlighter()
|
||||||
{
|
{
|
||||||
if (( EUID == 0 )) { region_highlight+=("0 $#BUFFER $ZSH_HIGHLIGHT_STYLES[root]") }
|
if (( EUID == 0 )) { _zsh_highlight_add_highlight 0 $#BUFFER root }
|
||||||
}
|
}
|
||||||
|
|
|
@ -196,6 +196,23 @@ _zsh_highlight_cursor_moved()
|
||||||
[[ -n $CURSOR ]] && [[ -n ${_ZSH_HIGHLIGHT_PRIOR_CURSOR-} ]] && (($_ZSH_HIGHLIGHT_PRIOR_CURSOR != $CURSOR))
|
[[ -n $CURSOR ]] && [[ -n ${_ZSH_HIGHLIGHT_PRIOR_CURSOR-} ]] && (($_ZSH_HIGHLIGHT_PRIOR_CURSOR != $CURSOR))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Add a highlight defined by ZSH_HIGHLIGHT_STYLES
|
||||||
|
#
|
||||||
|
# Should be used by all highlighters aside from 'pattern' (cf. ZSH_HIGHLIGHT_PATTERN)
|
||||||
|
_zsh_highlight_add_highlight()
|
||||||
|
{
|
||||||
|
local -i start end
|
||||||
|
local highlight
|
||||||
|
start=$1
|
||||||
|
end=$2
|
||||||
|
shift 2
|
||||||
|
for highlight; do
|
||||||
|
if (( $+ZSH_HIGHLIGHT_STYLES[$highlight] )); then
|
||||||
|
region_highlight+=("$start $end $ZSH_HIGHLIGHT_STYLES[$highlight]")
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
# -------------------------------------------------------------------------------------------------
|
||||||
# Setup functions
|
# Setup functions
|
||||||
|
|
Loading…
Reference in New Issue