main: Highlight command substitutions
This commit is contained in:
parent
ce592bd5c7
commit
b75169597e
@ -32,6 +32,7 @@ This highlighter defines the following styles:
|
||||
* `path_prefix_pathseparator` - path separators in prefixes of existing filenames (`/`); if unset, `path_prefix` is used (default)
|
||||
* `globbing` - globbing expressions (`*.txt`)
|
||||
* `history-expansion` - history expansion expressions (`!foo` and `^foo^bar`)
|
||||
* `command-substitution` - command substitutions (`$(echo foo)`)
|
||||
* `single-hyphen-option` - single-hyphen options (`-o`)
|
||||
* `double-hyphen-option` - double-hyphen options (`--option`)
|
||||
* `back-quoted-argument` - backtick command substitution (`` `foo` ``)
|
||||
|
@ -40,6 +40,7 @@
|
||||
: ${ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]:=}
|
||||
: ${ZSH_HIGHLIGHT_STYLES[globbing]:=fg=blue}
|
||||
: ${ZSH_HIGHLIGHT_STYLES[history-expansion]:=fg=blue}
|
||||
: ${ZSH_HIGHLIGHT_STYLES[command-substitution]:=fg=magenta}
|
||||
: ${ZSH_HIGHLIGHT_STYLES[single-hyphen-option]:=none}
|
||||
: ${ZSH_HIGHLIGHT_STYLES[double-hyphen-option]:=none}
|
||||
: ${ZSH_HIGHLIGHT_STYLES[back-quoted-argument]:=none}
|
||||
@ -653,7 +654,12 @@ _zsh_highlight_main_highlighter_highlight_list()
|
||||
style=reserved-word
|
||||
braces_stack='R'"$braces_stack"
|
||||
elif [[ $arg == $'\x29' ]]; then
|
||||
# end of subshell
|
||||
# end of subshell or command substitution
|
||||
if _zsh_highlight_main__stack_pop 'S'; then
|
||||
REPLY=$start_pos
|
||||
reply=($list_highlights)
|
||||
return
|
||||
fi
|
||||
_zsh_highlight_main__stack_pop 'R' reserved-word
|
||||
else
|
||||
if _zsh_highlight_main_highlighter_check_path; then
|
||||
@ -679,6 +685,11 @@ _zsh_highlight_main_highlighter_highlight_list()
|
||||
in_array_assignment=false
|
||||
next_word+=':start:'
|
||||
else
|
||||
if _zsh_highlight_main__stack_pop 'S'; then
|
||||
REPLY=$start_pos
|
||||
reply=($list_highlights)
|
||||
return
|
||||
fi
|
||||
_zsh_highlight_main__stack_pop 'R' reserved-word
|
||||
fi;;
|
||||
$'\x28\x29') # possibly a function definition
|
||||
@ -829,8 +840,8 @@ _zsh_highlight_main_highlighter_check_path()
|
||||
# This command will at least highlight start_pos to end_pos with the default style
|
||||
_zsh_highlight_main_highlighter_highlight_argument()
|
||||
{
|
||||
local base_style=default i path_eligible=1 style
|
||||
local -a highlights reply
|
||||
local base_style=default i path_eligible=1 start style
|
||||
local -a highlights
|
||||
|
||||
local -a match mbegin mend
|
||||
local MATCH; integer MBEGIN MEND
|
||||
@ -870,6 +881,13 @@ _zsh_highlight_main_highlighter_highlight_argument()
|
||||
(( i = REPLY ))
|
||||
highlights+=($reply)
|
||||
continue
|
||||
elif [[ $arg[i+1] == $'\x28' ]]; then
|
||||
start=$i
|
||||
(( i += 2 ))
|
||||
_zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $arg[i,end_pos]
|
||||
(( i += REPLY ))
|
||||
highlights+=($(( start_pos + start - 1)) $(( start_pos + i )) command-substitution $reply)
|
||||
continue
|
||||
fi
|
||||
while [[ $arg[i+1] == [\^=~#+] ]]; do
|
||||
(( i += 1 ))
|
||||
@ -969,7 +987,12 @@ _zsh_highlight_main_highlighter_highlight_double_quote()
|
||||
(( k += 1 )) # highlight both dollar signs
|
||||
(( i += 1 )) # don't consider the second one as introducing another parameter expansion
|
||||
elif [[ $arg[i+1] == $'\x28' ]]; then
|
||||
# Highlight just the '$'.
|
||||
(( i += 2 ))
|
||||
saved_reply=($reply)
|
||||
_zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $arg[i,end_pos]
|
||||
(( i += REPLY ))
|
||||
reply=($saved_reply $j $(( start_pos + i )) command-substitution $reply)
|
||||
continue
|
||||
else
|
||||
continue
|
||||
fi
|
||||
|
@ -34,5 +34,6 @@ expected_region_highlight=(
|
||||
'1 1 builtin' # :
|
||||
'3 8 default' # "$(:)"
|
||||
'3 8 double-quoted-argument' # "$(:)"
|
||||
'4 4 dollar-double-quoted-argument' # $
|
||||
'4 7 command-substitution' # $(:)
|
||||
'6 6 builtin' # :
|
||||
)
|
||||
|
@ -33,4 +33,7 @@ BUFFER=$': $(<foo)'
|
||||
expected_region_highlight=(
|
||||
'1 1 builtin' # :
|
||||
'3 9 default' # $(<foo)
|
||||
'3 9 command-substitution' # $(<foo)
|
||||
'5 5 redirection' # <
|
||||
'6 8 default' # foo
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user