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