mirror of
https://github.com/zsh-users/zsh-syntax-highlighting.git
synced 2026-06-16 11:36:15 +08:00
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:
parent
1d85c69261
commit
d0794a6f76
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user