'main': Try the "non-command word" codepath when a word may be either a command word or a non-command word.

Fixes #231.
Fixes #330.
This commit is contained in:
Daniel Shahaf
2016-06-03 04:16:13 +00:00
parent fccf92402b
commit 7fb6f99791
4 changed files with 9 additions and 4 deletions

View File

@@ -273,6 +273,7 @@ _zsh_highlight_main_highlighter()
# which add the entry early so escape sequences within the string override
# the string's color.
integer already_added=0
style=unknown-token
if [[ $this_word == *':start:'* ]]; then
in_array_assignment=false
if [[ $arg == 'noglob' ]]; then
@@ -468,12 +469,16 @@ _zsh_highlight_main_highlighter()
;;
esac
fi
else # $arg is a non-command word
fi
if (( ! already_added )) && [[ $style == unknown-token ]] && # not handled by the 'command word' codepath
{ (( in_redirection )) || [[ $this_word == *':regular:'* ]] || [[ $this_word == *':sudo_opt:'* ]] || [[ $this_word == *':sudo_arg:'* ]] }
then # $arg is a non-command word
case $arg in
$'\x29') # subshell or end of array assignment
if $in_array_assignment; then
style=assign
in_array_assignment=false
next_word+=':start:'
else
style=reserved-word
fi;;