From 0916794aeb110529e1a77411ff0b036efc45b744 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Thu, 25 Jul 2013 00:05:57 -0400 Subject: [PATCH 1/2] 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}} From 6a2e5df966f1b1e7425083a8e68251a2ebf85006 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Thu, 25 Jul 2013 00:14:46 -0400 Subject: [PATCH 2/2] Add partial-path test case --- highlighters/main/test-data/partial-path.zsh | 36 ++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 highlighters/main/test-data/partial-path.zsh diff --git a/highlighters/main/test-data/partial-path.zsh b/highlighters/main/test-data/partial-path.zsh new file mode 100644 index 0000000..7df1d79 --- /dev/null +++ b/highlighters/main/test-data/partial-path.zsh @@ -0,0 +1,36 @@ +#!/usr/bin/env zsh +# ------------------------------------------------------------------------------------------------- +# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted +# provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors +# may be used to endorse or promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------------------------- +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------------------------- + +BUFFER='ls highlighters/main/test-data/partial-path' + +expected_region_highlight=( + "1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ls + "4 43 $ZSH_HIGHLIGHT_STYLES[partial-path]" # highlighters/main/test-data/path.zsh +)