Don't highlight prefix redirections as error

Fixes zsh-users/zsh-syntax-highlighting#146
This commit is contained in:
Daniel Shahaf
2015-01-28 14:02:35 +00:00
parent 3dc5741900
commit 359d48bf78
2 changed files with 49 additions and 2 deletions

View File

@@ -66,6 +66,7 @@ _zsh_highlight_main_highlighter()
emulate -L zsh
setopt localoptions extendedglob bareglobqual
local start_pos=0 end_pos highlight_glob=true new_expression=true arg style sudo=false sudo_arg=false
local redirection=false # true when we've seen a redirection operator before seeing the command word
typeset -a ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR
typeset -a ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS
typeset -a ZSH_HIGHLIGHT_TOKENS_FOLLOWED_BY_COMMANDS
@@ -104,7 +105,7 @@ _zsh_highlight_main_highlighter()
;;
esac
fi
if $new_expression; then
if $new_expression && ! $redirection; then # $arg is the command word
new_expression=false
if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} ]]; then
style=$ZSH_HIGHLIGHT_STYLES[precommand]
@@ -130,13 +131,20 @@ _zsh_highlight_main_highlighter()
style=$ZSH_HIGHLIGHT_STYLES[path]
elif [[ $arg[0,1] == $histchars[0,1] || $arg[0,1] == $histchars[2,2] ]]; then
style=$ZSH_HIGHLIGHT_STYLES[history-expansion]
elif [[ $arg[1] == '<' || $arg[1] == '>' ]]; then
style=$ZSH_HIGHLIGHT_STYLE[redirection]
redirection=true
else
style=$ZSH_HIGHLIGHT_STYLES[unknown-token]
fi
;;
esac
fi
else
else # $arg is the file target of a prefix redirection, or a non-command word
if $redirection; then
redirection=false
new_expression=true
fi
case $arg in
'--'*) style=$ZSH_HIGHLIGHT_STYLES[double-hyphen-option];;
'-'*) style=$ZSH_HIGHLIGHT_STYLES[single-hyphen-option];;