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 e5d8a50d36
commit 0916794aeb
2 changed files with 18 additions and 2 deletions

View File

@ -31,7 +31,8 @@ This highlighter defines the following styles:
* `precommand` - precommands (i.e. exec, builtin, ...)
* `commandseparator` - command separation tokens
* `hashed-command` - hashed commands
* `path` - paths
* `path` - paths which exist
* `partial-path` - partial paths (prefixes of existing files)
* `globbing` - globbing expressions
* `history-expansion` - history expansion expressions
* `single-hyphen-option` - single hyphen options

View File

@ -40,7 +40,8 @@
: ${ZSH_HIGHLIGHT_STYLES[precommand]:=fg=green,underline}
: ${ZSH_HIGHLIGHT_STYLES[commandseparator]:=none}
: ${ZSH_HIGHLIGHT_STYLES[hashed-command]:=fg=green}
: ${ZSH_HIGHLIGHT_STYLES[path]:=underline}
: ${ZSH_HIGHLIGHT_STYLES[path]:=underline,bold}
: ${ZSH_HIGHLIGHT_STYLES[partial-path]:=underline}
: ${ZSH_HIGHLIGHT_STYLES[globbing]:=fg=blue}
: ${ZSH_HIGHLIGHT_STYLES[history-expansion]:=fg=blue}
: ${ZSH_HIGHLIGHT_STYLES[single-hyphen-option]:=none}
@ -106,6 +107,8 @@ _zsh_highlight_main_highlighter()
new_expression=true
elif _zsh_highlight_main_highlighter_check_path; then
style=$ZSH_HIGHLIGHT_STYLES[path]
elif _zsh_highlight_main_highlighter_check_partial_path; then
style=$ZSH_HIGHLIGHT_STYLES[partial-path]
elif [[ $arg[0,1] = $histchars[0,1] ]]; then
style=$ZSH_HIGHLIGHT_STYLES[history-expansion]
else
@ -128,6 +131,8 @@ _zsh_highlight_main_highlighter()
*"*"*) $highlight_glob && style=$ZSH_HIGHLIGHT_STYLES[globbing] || style=$ZSH_HIGHLIGHT_STYLES[default];;
*) if _zsh_highlight_main_highlighter_check_path; then
style=$ZSH_HIGHLIGHT_STYLES[path]
elif _zsh_highlight_main_highlighter_check_partial_path; then
style=$ZSH_HIGHLIGHT_STYLES[partial-path]
elif [[ $arg[0,1] = $histchars[0,1] ]]; then
style=$ZSH_HIGHLIGHT_STYLES[history-expansion]
elif [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then
@ -153,6 +158,16 @@ _zsh_highlight_main_highlighter_check_assign()
# Check if the argument is a path.
_zsh_highlight_main_highlighter_check_path()
{
setopt localoptions nonomatch
local expanded_path; : ${expanded_path:=${(Q)~arg}}
[[ -z $expanded_path ]] && return 1
[[ -e $expanded_path ]] && return 0
return 1
}
# Check if the argument is a partial path.
_zsh_highlight_main_highlighter_check_partial_path()
{
setopt localoptions nonomatch
local expanded_path; : ${expanded_path:=${(Q)~arg}}