mirror of
				https://github.com/zsh-users/zsh-syntax-highlighting.git
				synced 2025-10-30 15:56:28 +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
	 Joe Rabinoff
						Joe Rabinoff