mirror of
https://github.com/zsh-users/zsh-syntax-highlighting.git
synced 2025-04-17 11:35:32 +08:00
Merge b127a06e6f
into 5eb677bb0f
This commit is contained in:
commit
4f70ffde93
61
docs/highlighters/files.md
Normal file
61
docs/highlighters/files.md
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
zsh-syntax-highlighting / highlighters / files
|
||||||
|
----------------------------------------------
|
||||||
|
|
||||||
|
This is the `files` highlighter, that highlights existing files appearing on the
|
||||||
|
command line.
|
||||||
|
|
||||||
|
|
||||||
|
### Quickstart
|
||||||
|
|
||||||
|
If you are happy with your `LS_COLORS`, simply add the following line to your
|
||||||
|
`.zshrc` after sourcing `zsh-syntax-highlighting.zsh`:
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
zsh_highlight_files_extract_ls_colors
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
Files are colored according to the associative array `ZSH_HIGHLIGHT_FILE_TYPES`
|
||||||
|
and the array `ZSH_HIGHLIGHT_FILE_PATTERNS`. The values of
|
||||||
|
`ZSH_HIGHLIGHT_FILE_TYPES` are color specifications as in
|
||||||
|
`ZSH_HIGHLIGHT_STYLES`, and the keys define which file types are highlighted
|
||||||
|
according to that style (following `LS_COLORS`):
|
||||||
|
|
||||||
|
* `fi` - ordinary files
|
||||||
|
* `di` - directories
|
||||||
|
* `ln` - symbolic links
|
||||||
|
* `pi` - pipes
|
||||||
|
* `so` - sockets
|
||||||
|
* `bd` - block devices
|
||||||
|
* `cd` - character devices
|
||||||
|
* `or` - broken symlinks
|
||||||
|
* `ex` - executable files
|
||||||
|
* `su` - files that have the suid bit set
|
||||||
|
* `sg` - files that have the sgid bit set
|
||||||
|
* `ow` - files that are world-writable
|
||||||
|
* `tw` - files that are world-writable and sticky
|
||||||
|
* `lp` - if set, the path component of a filename is highlighted using this style, unless it is set to `same`, in which case the path component is highlighted the same as the file
|
||||||
|
|
||||||
|
If a file would be highlighted `fi`, then it can be highlighted according to the
|
||||||
|
filename using `ZSH_HIGHLIGHT_FILE_PATTERNS` instead. This array has the form
|
||||||
|
`(glob1 style1 glob2 style2 glob3 style3 ...)`, where the globs are arbitrary
|
||||||
|
glob patterns, and the styles are color specifications. For instance, if have
|
||||||
|
`setopt extended_glob` and you write
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
ZSH_HIGHLIGHT_FILE_PATTERNS+=('(#i)*.jpe#g' red,bold)
|
||||||
|
```
|
||||||
|
|
||||||
|
then the files `foo.jpg` and `bar.jPeG` will be colored red and bold.
|
||||||
|
|
||||||
|
|
||||||
|
### Limitations
|
||||||
|
|
||||||
|
This highlighter makes no attempt to determine if a word is in command position.
|
||||||
|
Hence if you run the command `cat foo` and you happen to have a directory named
|
||||||
|
`cat` in the current directory, then the highlighter will highlight `cat`
|
||||||
|
according to `ZSH_HIGHLIGHT_FILE_TYPES[di]` and not
|
||||||
|
`ZSH_HIGHLIGHT_STYLES[command]` (assuming you load the `files` highlighter after
|
||||||
|
the `main` one). Likewise with aliases, reserved words, etc.
|
1
highlighters/files/README.md
Symbolic link
1
highlighters/files/README.md
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../docs/highlighters/files.md
|
241
highlighters/files/files-highlighter.zsh
Normal file
241
highlighters/files/files-highlighter.zsh
Normal file
@ -0,0 +1,241 @@
|
|||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2020 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.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Highlighter for zsh-syntax-highlighting that highlights filenames
|
||||||
|
|
||||||
|
typeset -gA ZSH_HIGHLIGHT_FILE_TYPES
|
||||||
|
typeset -ga ZSH_HIGHLIGHT_FILE_PATTERNS
|
||||||
|
|
||||||
|
# Convert an ANSI escape sequence color into zle_highlight format (man 1 zshzle)
|
||||||
|
_zsh_highlight_highlighter_files_ansi_to_zle()
|
||||||
|
{
|
||||||
|
local match mbegin mend seq
|
||||||
|
local var=$1; shift
|
||||||
|
for seq in "${(@s.:.)1}"; do
|
||||||
|
seq=${seq#(#b)(*)=}
|
||||||
|
(( $#match )) || continue
|
||||||
|
_zsh_highlight_highlighter_files_ansi_to_zle1 $seq $var\[$match[1]\]
|
||||||
|
unset match
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
_zsh_highlight_highlighter_files_ansi_to_zle1()
|
||||||
|
{
|
||||||
|
local -a sgrs match
|
||||||
|
local back mbegin mend fgbg hex
|
||||||
|
integer sgr arg arg2 col r g b
|
||||||
|
local str=$1
|
||||||
|
|
||||||
|
while [ -n "$str" ]; do
|
||||||
|
back=${str##(#b)([[:digit:]]##)}
|
||||||
|
back=${back#;}
|
||||||
|
(( $#match )) || return 1
|
||||||
|
|
||||||
|
sgr=$match; unset match
|
||||||
|
case $sgr in
|
||||||
|
0) ;;
|
||||||
|
1) sgrs+=(bold) ;;
|
||||||
|
4) sgrs+=(underline) ;;
|
||||||
|
7) sgrs+=(standout) ;;
|
||||||
|
<30-37>) sgrs+=(fg=$(( $sgr - 30 ))) ;;
|
||||||
|
<40-47>) sgrs+=(bg=$(( $sgr - 40 ))) ;;
|
||||||
|
38|48)
|
||||||
|
(( sgr == 38 )) && fgbg=fg || fgbg=bg
|
||||||
|
# 38;5;n means paletted color
|
||||||
|
# 38;2;r;g;b means truecolor
|
||||||
|
back=${back##(#b)([[:digit:]]##)}
|
||||||
|
back=${back#;}
|
||||||
|
(( $#match )) || return 1
|
||||||
|
arg=$match; unset match
|
||||||
|
case $arg in
|
||||||
|
5) back=${back##(#b)([[:digit:]]##)}
|
||||||
|
back=${back#;}
|
||||||
|
(( $#match )) || return 1
|
||||||
|
arg2=$match; unset match
|
||||||
|
sgrs+=($fgbg=$arg2) ;;
|
||||||
|
2) back=${back##(#b)([[:digit:]]##);([[:digit:]]##);([[:digit:]]##)}
|
||||||
|
back=${back#;}
|
||||||
|
(( $#match == 3 )) || return 1
|
||||||
|
printf -v hex \#%02X%02X%02X $match
|
||||||
|
unset match
|
||||||
|
sgrs+=($fgbg=$hex) ;;
|
||||||
|
*) return 1 ;;
|
||||||
|
esac ;;
|
||||||
|
*) return 1 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
str=$back
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -n "$2" ]]; then
|
||||||
|
eval $2='${(j.,.)sgrs}'
|
||||||
|
else
|
||||||
|
print -- ${(j.,.)sgrs}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Extract ZSH_HIGHLIGHT_FILE_TYPES and ZSH_HIGHLIGHT_FILE_PATTERNS from LS_COLORS
|
||||||
|
zsh_highlight_files_extract_ls_colors()
|
||||||
|
{
|
||||||
|
emulate -L zsh
|
||||||
|
setopt local_options extended_glob
|
||||||
|
|
||||||
|
local -A ls_colors
|
||||||
|
_zsh_highlight_highlighter_files_ansi_to_zle ls_colors $LS_COLORS
|
||||||
|
for key val in "${(@kv)ls_colors}"; do
|
||||||
|
case $key in
|
||||||
|
di|fi|ln|pi|so|bd|cd|or|ex|su|sg|ow|tw)
|
||||||
|
ZSH_HIGHLIGHT_FILE_TYPES[$key]=$val ;;
|
||||||
|
lc|rc|ec|rs|no|mi|do|st|ca|mh|cl) ;; # Recognized by LS_COLORS but not by us
|
||||||
|
*) ZSH_HIGHLIGHT_FILE_PATTERNS+=("$key" "$val") ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Perform simple filename expansion without globbing and without generating
|
||||||
|
# errors
|
||||||
|
_zsh_highlight_highlighter_files_fn_expand()
|
||||||
|
{
|
||||||
|
local fn=$1
|
||||||
|
local match expandable tail
|
||||||
|
local -a mbegin mend
|
||||||
|
if [[ $fn = (#b)(\~[^/]#)(*) ]]; then
|
||||||
|
expandable=$match[1]
|
||||||
|
tail=$match[2]
|
||||||
|
# Try expanding expandable
|
||||||
|
(: $~expandable) >&/dev/null && expandable=$~expandable
|
||||||
|
print -- $expandable$tail
|
||||||
|
else
|
||||||
|
print -- $fn
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Whether the highlighter should be called or not.
|
||||||
|
_zsh_highlight_highlighter_files_predicate()
|
||||||
|
{
|
||||||
|
_zsh_highlight_buffer_modified
|
||||||
|
}
|
||||||
|
|
||||||
|
# Syntax highlighting function.
|
||||||
|
_zsh_highlight_highlighter_files_paint()
|
||||||
|
{
|
||||||
|
emulate -L zsh
|
||||||
|
setopt local_options extended_glob
|
||||||
|
|
||||||
|
zmodload -F zsh/stat b:zstat
|
||||||
|
|
||||||
|
local buf=$BUFFER word basename word_subst col type mode
|
||||||
|
local -a words=(${(z)buf})
|
||||||
|
local -A statdata
|
||||||
|
integer start=0 curword=0 numwords=$#words len end
|
||||||
|
|
||||||
|
while (( curword++ < numwords )); do
|
||||||
|
col=""
|
||||||
|
word=$words[1]
|
||||||
|
words=("${(@)words:1}")
|
||||||
|
len=$#buf
|
||||||
|
buf="${buf/#[^$word[1]]#}" # strip whitespace
|
||||||
|
start+=$(( len - $#buf ))
|
||||||
|
end=$(( start + $#word ))
|
||||||
|
|
||||||
|
word_subst=$(_zsh_highlight_highlighter_files_fn_expand $word)
|
||||||
|
|
||||||
|
if ! zstat -H statdata -Ls -- "$word_subst" 2>/dev/null; then
|
||||||
|
start=$end
|
||||||
|
buf=${buf[$#word+1,-1]}
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
mode=$statdata[mode]
|
||||||
|
type=$mode[1]
|
||||||
|
basename=$word:t
|
||||||
|
[[ $word[-1] = '/' ]] && basename=$basename/
|
||||||
|
|
||||||
|
# Color by file type
|
||||||
|
case $type in
|
||||||
|
d) [[ ${mode[9,10]} = wt ]] \
|
||||||
|
&& col=$ZSH_HIGHLIGHT_FILE_TYPES[tw] \
|
||||||
|
|| col=$ZSH_HIGHLIGHT_FILE_TYPES[di];;
|
||||||
|
l) [[ -e "$word_subst" ]] \
|
||||||
|
&& col=$ZSH_HIGHLIGHT_FILE_TYPES[ln] \
|
||||||
|
|| col=$ZSH_HIGHLIGHT_FILE_TYPES[or];;
|
||||||
|
p) col=$ZSH_HIGHLIGHT_FILE_TYPES[pi];;
|
||||||
|
b) col=$ZSH_HIGHLIGHT_FILE_TYPES[bd];;
|
||||||
|
c) col=$ZSH_HIGHLIGHT_FILE_TYPES[cd];;
|
||||||
|
s) col=$ZSH_HIGHLIGHT_FILE_TYPES[so];;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Regular file: more special cases
|
||||||
|
if [[ -z "$col" ]]; then
|
||||||
|
if [[ $mode[4] = S ]]; then
|
||||||
|
col=$ZSH_HIGHLIGHT_FILE_TYPES[su] # setuid root
|
||||||
|
elif [[ $mode[7] = S ]]; then
|
||||||
|
col=$ZSH_HIGHLIGHT_FILE_TYPES[sg] # setgid root
|
||||||
|
elif [[ $mode[9] = w ]]; then
|
||||||
|
col=$ZSH_HIGHLIGHT_FILE_TYPES[ow] # other-writable
|
||||||
|
elif [[ $mode[4] = x ]]; then
|
||||||
|
col=$ZSH_HIGHLIGHT_FILE_TYPES[ex] # Executable
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Regular file: check file patterns
|
||||||
|
if [[ -z "$col" ]]; then
|
||||||
|
for key val in "${(@)ZSH_HIGHLIGHT_FILE_PATTERNS}"; do
|
||||||
|
if [[ $basename = $~key ]]; then
|
||||||
|
col=$val
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Just a regular file
|
||||||
|
if [[ -z "$col" ]]; then
|
||||||
|
col=$ZSH_HIGHLIGHT_FILE_TYPES[fi]
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$col" ]]; then
|
||||||
|
if (( end > start + $#basename )); then
|
||||||
|
# There is a path component
|
||||||
|
if [[ $ZSH_HIGHLIGHT_FILE_TYPES[lp] = "same" ]]; then
|
||||||
|
region_highlight+=("$start $end $col")
|
||||||
|
else
|
||||||
|
if (( ${+ZSH_HIGHLIGHT_FILE_TYPES[lp]} )); then
|
||||||
|
region_highlight+=("$start $(( end - $#basename )) $ZSH_HIGHLIGHT_FILE_TYPES[lp]")
|
||||||
|
fi
|
||||||
|
region_highlight+=("$(( end - $#basename )) $end $col")
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
region_highlight+=("$start $end $col")
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
start=$end
|
||||||
|
buf=${buf[$#word+1,-1]}
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
43
highlighters/files/test-data/patterns1.zsh
Executable file
43
highlighters/files/test-data/patterns1.zsh
Executable file
@ -0,0 +1,43 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2020 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=$': file.tar file.tgz file.webm'
|
||||||
|
|
||||||
|
local LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:'
|
||||||
|
|
||||||
|
zsh_highlight_files_extract_ls_colors
|
||||||
|
|
||||||
|
touch file.tar file.tgz file.webm
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"3 10 bold,fg=1"
|
||||||
|
"12 19 bold,fg=1"
|
||||||
|
'21 29 bold,fg=5'
|
||||||
|
)
|
45
highlighters/files/test-data/patterns2.zsh
Executable file
45
highlighters/files/test-data/patterns2.zsh
Executable file
@ -0,0 +1,45 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2020 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=$': file.tar file.tgz Makefile #file.bak# file.PgP file.flv'
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_FILE_PATTERNS=('Makefile' 'fg=#F0BE45,bold' 'SConstruct' 'fg=#F0BE45,bold' 'CMakeLists.txt' 'fg=#F0BE45,bold' 'BUILD' 'fg=#F0BE45,bold' 'README*' 'fg=#F0BE45,bold' '(#i)*.png' 'fg=#B50769' '(#i)*.jpeg' 'fg=#B50769' '(#i)*.jpg' 'fg=#B50769' '(#i)*.gif' 'fg=#B50769' '(#i)*.bmp' 'fg=#B50769' '(#i)*.tiff' 'fg=#B50769' '(#i)*.tif' 'fg=#B50769' '(#i)*.ppm' 'fg=#B50769' '(#i)*.pgm' 'fg=#B50769' '(#i)*.pbm' 'fg=#B50769' '(#i)*.pnm' 'fg=#B50769' '(#i)*.webp' 'fg=#B50769' '(#i)*.heic' 'fg=#B50769' '(#i)*.raw' 'fg=#B50769' '(#i)*.arw' 'fg=#B50769' '(#i)*.svg' 'fg=#B50769' '(#i)*.stl' 'fg=#B50769' '(#i)*.eps' 'fg=#B50769' '(#i)*.dvi' 'fg=#B50769' '(#i)*.ps' 'fg=#B50769' '(#i)*.cbr' 'fg=#B50769' '(#i)*.jpf' 'fg=#B50769' '(#i)*.cbz' 'fg=#B50769' '(#i)*.xpm' 'fg=#B50769' '(#i)*.ico' 'fg=#B50769' '(#i)*.cr2' 'fg=#B50769' '(#i)*.orf' 'fg=#B50769' '(#i)*.nef' 'fg=#B50769' '(#i)*.avi' 'fg=#D33682' '(#i)*.flv' 'fg=#D33682' '(#i)*.m2v' 'fg=#D33682' '(#i)*.m4v' 'fg=#D33682' '(#i)*.mkv' 'fg=#D33682' '(#i)*.mov' 'fg=#D33682' '(#i)*.mp4' 'fg=#D33682' '(#i)*.mpeg' 'fg=#D33682' '(#i)*.mpg' 'fg=#D33682' '(#i)*.ogm' 'fg=#D33682' '(#i)*.ogv' 'fg=#D33682' '(#i)*.vob' 'fg=#D33682' '(#i)*.wmv' 'fg=#D33682' '(#i)*.webm' 'fg=#D33682' '(#i)*.m2ts' 'fg=#D33682' '(#i)*.aac' 'fg=#F1559C' '(#i)*.m4a' 'fg=#F1559C' '(#i)*.mp3' 'fg=#F1559C' '(#i)*.ogg' 'fg=#F1559C' '(#i)*.wma' 'fg=#F1559C' '(#i)*.mka' 'fg=#F1559C' '(#i)*.opus' 'fg=#F1559C' '(#i)*.alac' 'fg=#F1559C' '(#i)*.ape' 'fg=#F1559C' '(#i)*.flac' 'fg=#F1559C' '(#i)*.wav' 'fg=#F1559C' '(#i)*.asc' 'fg=#6A7F00' '(#i)*.enc' 'fg=#6A7F00' '(#i)*.gpg' 'fg=#6A7F00' '(#i)*.pgp' 'fg=#6A7F00' '(#i)*.sig' 'fg=#6A7F00' '(#i)*.signature' 'fg=#6A7F00' '(#i)*.pfx' 'fg=#6A7F00' '(#i)*.p12' 'fg=#6A7F00' '(#i)*.djvu' 'fg=#878AE0' '(#i)*.doc' 'fg=#878AE0' '(#i)*.docx' 'fg=#878AE0' '(#i)*.dvi' 'fg=#878AE0' '(#i)*.eml' 'fg=#878AE0' '(#i)*.eps' 'fg=#878AE0' '(#i)*.fotd' 'fg=#878AE0' '(#i)*.odp' 'fg=#878AE0' '(#i)*.odt' 'fg=#878AE0' '(#i)*.pdf' 'fg=#878AE0' '(#i)*.ppt' 'fg=#878AE0' '(#i)*.pptx' 'fg=#878AE0' '(#i)*.rtf' 'fg=#878AE0' '(#i)*.xls' 'fg=#878AE0' '(#i)*.xlsx' 'fg=#878AE0' '(#i)*.zip' 'fg=#657B83,bold' '(#i)*.tar' 'fg=#657B83,bold' '(#i)*.Z' 'fg=#657B83,bold' '(#i)*.z' 'fg=#657B83,bold' '(#i)*.gz' 'fg=#657B83,bold' '(#i)*.bz2' 'fg=#657B83,bold' '(#i)*.a' 'fg=#657B83,bold' '(#i)*.ar' 'fg=#657B83,bold' '(#i)*.7z' 'fg=#657B83,bold' '(#i)*.iso' 'fg=#657B83,bold' '(#i)*.dmg' 'fg=#657B83,bold' '(#i)*.tc' 'fg=#657B83,bold' '(#i)*.rar' 'fg=#657B83,bold' '(#i)*.par' 'fg=#657B83,bold' '(#i)*.tgz' 'fg=#657B83,bold' '(#i)*.xz' 'fg=#657B83,bold' '(#i)*.txz' 'fg=#657B83,bold' '(#i)*.lzma' 'fg=#657B83,bold' '(#i)*.deb' 'fg=#657B83,bold' '(#i)*.rpm' 'fg=#657B83,bold' '(#i)*.zst' 'fg=#657B83,bold' '*~' 'fg=#586E75' '\#*\#' 'fg=#586E75' '(#i)*.tmp' 'fg=#586E75' '(#i)*.swp' 'fg=#586E75' '(#i)*.swo' 'fg=#586E75' '(#i)*.swn' 'fg=#586E75' '(#i)*.bak' 'fg=#586E75' '(#i)*.bk' 'fg=#586E75' '(#i)*.class' 'fg=#5158A9' '(#i)*.elc' 'fg=#5158A9' '(#i)*.o' 'fg=#5158A9' '(#i)*.pyc' 'fg=#5158A9')
|
||||||
|
|
||||||
|
|
||||||
|
touch file.tar file.tgz Makefile '#file.bak#' file.PgP file.flv
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
'3 10 fg=#657B83,bold'
|
||||||
|
'12 19 fg=#657B83,bold'
|
||||||
|
'21 28 fg=#F0BE45,bold'
|
||||||
|
'30 39 fg=#586E75'
|
||||||
|
'41 48 fg=#6A7F00'
|
||||||
|
'50 57 fg=#D33682'
|
||||||
|
)
|
58
highlighters/files/test-data/types1.zsh
Executable file
58
highlighters/files/test-data/types1.zsh
Executable file
@ -0,0 +1,58 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2020 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=$': file.fi file.di file.ln file.pi file.or file.ex file.su file.sg file.ow file.tw'
|
||||||
|
|
||||||
|
local LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:'
|
||||||
|
|
||||||
|
zsh_highlight_files_extract_ls_colors
|
||||||
|
|
||||||
|
touch file.fi
|
||||||
|
mkdir file.di
|
||||||
|
ln -s file.fi file.ln
|
||||||
|
mkfifo file.pi
|
||||||
|
ln -s bad file.or
|
||||||
|
touch file.ex; chmod 755 file.ex
|
||||||
|
touch file.su; chmod u+s file.su
|
||||||
|
touch file.sg; chmod g+s file.sg
|
||||||
|
touch file.ow; chmod o+w file.ow
|
||||||
|
touch file.tw; chmod o+wt file.tw
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
'11 17 bold,fg=4'
|
||||||
|
'19 25 bold,fg=6'
|
||||||
|
'27 33 bg=0,fg=3'
|
||||||
|
'35 41 bg=0,fg=1,bold'
|
||||||
|
'43 49 bold,fg=2'
|
||||||
|
'51 57 fg=7,bg=1'
|
||||||
|
'59 65 fg=0,bg=3'
|
||||||
|
'67 73 fg=4,bg=2'
|
||||||
|
'75 81 fg=4,bg=2'
|
||||||
|
)
|
60
highlighters/files/test-data/types2.zsh
Executable file
60
highlighters/files/test-data/types2.zsh
Executable file
@ -0,0 +1,60 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2020 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=$': file.fi file.di file.ln file.pi file.or file.ex file.su file.sg file.ow file.tw file.di/file.fi'
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_FILE_TYPES=('cd' 'fg=#EA6630' 'su' 'fg=#878AE0,bold' 'ex' 'fg=#BDD040' 'bd' 'fg=#AC3000' 'ln' 'fg=#B58900' 'tw' 'fg=#268BD2,bold,underline' 'or' 'fg=#FC5246,bold' 'fi' 'fg=#93A1A1' 'lp' 'fg=#657B83' 'sg' 'fg=#878AE0' 'di' 'fg=#268BD2,bold' 'ow' 'fg=#DC322F,underline' 'pi' 'fg=#D33682' 'so' 'fg=#D33682,bold')
|
||||||
|
|
||||||
|
touch file.fi
|
||||||
|
mkdir file.di
|
||||||
|
ln -s file.fi file.ln
|
||||||
|
mkfifo file.pi
|
||||||
|
ln -s bad file.or
|
||||||
|
touch file.ex; chmod 755 file.ex
|
||||||
|
touch file.su; chmod u+s file.su
|
||||||
|
touch file.sg; chmod g+s file.sg
|
||||||
|
touch file.ow; chmod o+w file.ow
|
||||||
|
mkdir file.tw; chmod o+wt file.tw
|
||||||
|
touch file.di/file.fi
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
'3 9 fg=#93A1A1'
|
||||||
|
'11 17 fg=#268BD2,bold'
|
||||||
|
'19 25 fg=#B58900'
|
||||||
|
'27 33 fg=#D33682'
|
||||||
|
'35 41 fg=#FC5246,bold'
|
||||||
|
'43 49 fg=#BDD040'
|
||||||
|
'51 57 fg=#878AE0,bold'
|
||||||
|
'59 65 fg=#878AE0'
|
||||||
|
'67 73 fg=#DC322F,underline'
|
||||||
|
'75 81 fg=#268BD2,bold,underline'
|
||||||
|
'83 90 fg=#657B83'
|
||||||
|
'91 97 fg=#93A1A1'
|
||||||
|
)
|
Loading…
Reference in New Issue
Block a user