From 0916794aeb110529e1a77411ff0b036efc45b744 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Thu, 25 Jul 2013 00:05:57 -0400 Subject: [PATCH] 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. --- highlighters/main/README.md | 3 ++- highlighters/main/main-highlighter.zsh | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/highlighters/main/README.md b/highlighters/main/README.md index 6900bfb..0389a44 100644 --- a/highlighters/main/README.md +++ b/highlighters/main/README.md @@ -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 diff --git a/highlighters/main/main-highlighter.zsh b/highlighters/main/main-highlighter.zsh index be1d0a9..aeb9576 100755 --- a/highlighters/main/main-highlighter.zsh +++ b/highlighters/main/main-highlighter.zsh @@ -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}}