'main': Highlight named fd redirections.

Fixes #238
This commit is contained in:
Daniel Shahaf 2018-10-22 04:30:43 +00:00
parent de23e75946
commit 38c794a978
3 changed files with 12 additions and 4 deletions

View file

@ -58,6 +58,7 @@ This highlighter defines the following styles:
* `assign` - parameter assignments (`x=foo` and `x=( )`) * `assign` - parameter assignments (`x=foo` and `x=( )`)
* `redirection` - redirection operators (`<`, `>`, etc) * `redirection` - redirection operators (`<`, `>`, etc)
* `comment` - comments, when `setopt INTERACTIVE_COMMENTS` is in effect (`echo # foo`) * `comment` - comments, when `setopt INTERACTIVE_COMMENTS` is in effect (`echo # foo`)
* `named-fd` - named file descriptor (`echo foo {fd}>&2`)
* `arg0` - a command word other than one of those enumerated above (other than a command, precommand, alias, function, or shell builtin command). * `arg0` - a command word other than one of those enumerated above (other than a command, precommand, alias, function, or shell builtin command).
* `default` - everything else * `default` - everything else

View file

@ -58,6 +58,7 @@
: ${ZSH_HIGHLIGHT_STYLES[assign]:=none} : ${ZSH_HIGHLIGHT_STYLES[assign]:=none}
: ${ZSH_HIGHLIGHT_STYLES[redirection]:=none} : ${ZSH_HIGHLIGHT_STYLES[redirection]:=none}
: ${ZSH_HIGHLIGHT_STYLES[comment]:=fg=black,bold} : ${ZSH_HIGHLIGHT_STYLES[comment]:=fg=black,bold}
: ${ZSH_HIGHLIGHT_STYLES[named-fd]:=none}
: ${ZSH_HIGHLIGHT_STYLES[arg0]:=fg=green} : ${ZSH_HIGHLIGHT_STYLES[arg0]:=fg=green}
# Whether the highlighter should be called or not. # Whether the highlighter should be called or not.
@ -552,13 +553,19 @@ _zsh_highlight_main_highlighter_highlight_list()
# Analyse the current word. # Analyse the current word.
if _zsh_highlight_main__is_redirection $arg ; then if _zsh_highlight_main__is_redirection $arg ; then
if (( in_redirection )); then if (( in_redirection && in_redirection != 2 )); then
# The condition excludes the case that BUFFER='{foo}>&2' and we're on the '>&'.
_zsh_highlight_main_add_region_highlight $start_pos $end_pos unknown-token _zsh_highlight_main_add_region_highlight $start_pos $end_pos unknown-token
else else
in_redirection=2 in_redirection=2
_zsh_highlight_main_add_region_highlight $start_pos $end_pos redirection _zsh_highlight_main_add_region_highlight $start_pos $end_pos redirection
fi fi
continue continue
elif [[ $arg == '{'*'}' ]] && _zsh_highlight_main__is_redirection $args[1]; then
# named file descriptor: {foo}>&2
in_redirection=3
_zsh_highlight_main_add_region_highlight $start_pos $end_pos named-fd
continue
fi fi
# Expand parameters. # Expand parameters.
@ -864,7 +871,7 @@ _zsh_highlight_main_highlighter_highlight_list()
elif [[ $arg == $'\x5d' ]] && _zsh_highlight_main__stack_pop 'Q' builtin; then elif [[ $arg == $'\x5d' ]] && _zsh_highlight_main__stack_pop 'Q' builtin; then
: :
else else
_zsh_highlight_main_highlighter_highlight_argument 1 $(( 1 - in_redirection )) _zsh_highlight_main_highlighter_highlight_argument 1 $(( 1 != in_redirection ))
continue continue
fi fi
;; ;;

View file

@ -31,8 +31,8 @@ BUFFER='exec {foo}>&/tmp ls'
expected_region_highlight=( expected_region_highlight=(
"1 4 precommand" # exec "1 4 precommand" # exec
"6 10 redirection 'issue #238'" # {foo} "6 10 named-fd" # {foo}
"11 12 redirection" # >& "11 12 redirection" # >&
"13 16 path" # /tmp "13 16 path" # /tmp
"18 19 command 'issue #238'" # ls "18 19 command" # ls
) )