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