main: check for partial paths separately

It's really annoying to have partial paths appear the same as paths to
complete files. However, it is still nice to be able to highlight them.
Full paths are now bold while partial paths use plain underline.
This commit is contained in:
Ben Boeckel 2013-07-25 00:05:57 -04:00
parent 1d85c69261
commit d0794a6f76
2 changed files with 34 additions and 2 deletions

View File

@ -29,6 +29,7 @@ This highlighter defines the following styles:
* `hashed-command` - hashed commands
* `autodirectory` - a directory name in command position when the `AUTO_CD` option is set
* `path` - existing filenames
* `partial-path` - partial paths (prefixes of existing files)
* `path_pathseparator` - path separators in filenames (`/`); if unset, `path` is used (default)
* `path_prefix` - prefixes of existing filenames
* `path_prefix_pathseparator` - path separators in prefixes of existing filenames (`/`); if unset, `path_prefix` is used (default)

View File

@ -37,7 +37,8 @@
: ${ZSH_HIGHLIGHT_STYLES[precommand]:=fg=green,underline}
: ${ZSH_HIGHLIGHT_STYLES[commandseparator]:=none}
: ${ZSH_HIGHLIGHT_STYLES[autodirectory]:=fg=green,underline}
: ${ZSH_HIGHLIGHT_STYLES[path]:=underline}
: ${ZSH_HIGHLIGHT_STYLES[path]:=underline,bold}
: ${ZSH_HIGHLIGHT_STYLES[partial-path]:=underline}
: ${ZSH_HIGHLIGHT_STYLES[path_pathseparator]:=}
: ${ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]:=}
: ${ZSH_HIGHLIGHT_STYLES[globbing]:=fg=blue}
@ -1093,6 +1094,8 @@ _zsh_highlight_main_highlighter_highlight_list()
else
if _zsh_highlight_main_highlighter_check_path $arg 1; then
style=$REPLY
elif _zsh_highlight_main_highlighter_check_partial_path $arg 1; then
style=$REPLY
else
style=unknown-token
fi
@ -1202,9 +1205,33 @@ _zsh_highlight_main_highlighter_highlight_path_separators()
# Check if $1 is a path.
# If yes, return 0 and in $REPLY the style to use.
# Else, return non-zero (and the contents of $REPLY is undefined).
_zsh_highlight_main_highlighter_check_path()
{
setopt localoptions nonomatch
_zsh_highlight_main_highlighter_expand_path "$1"
local expanded_path="$REPLY" tmp_path
integer in_command_position=$2
if (( in_command_position )); then
# ### Currently, this value is never returned: either it's overwritten
# ### below, or the return code is non-zero
REPLY=arg0
else
REPLY=path
fi
[[ -z $expanded_path ]] && return 1
[[ -e $expanded_path ]] && return 0
return 1
}
# Check if $1 is a partial path.
# If yes, return 0 and in $REPLY the style to use.
# Else, return non-zero (and the contents of $REPLY is undefined).
#
# $2 should be non-zero iff we're in command position.
_zsh_highlight_main_highlighter_check_path()
_zsh_highlight_main_highlighter_check_partial_path()
{
_zsh_highlight_main_highlighter_expand_path "$1"
local expanded_path="$REPLY" tmp_path
@ -1449,6 +1476,10 @@ _zsh_highlight_main_highlighter_highlight_argument()
base_style=$REPLY
_zsh_highlight_main_highlighter_highlight_path_separators $base_style
highlights+=($reply)
elif _zsh_highlight_main_highlighter_check_partial_path $arg[$1,-1] 0; then
base_style=$REPLY
_zsh_highlight_main_highlighter_highlight_path_separators $base_style
highlights+=($reply)
fi
fi