| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Vim syntax file | 
					
						
							| 
									
										
										
										
											2013-09-22 14:42:24 +02:00
										 |  |  | " Language:        dircolors(1) input file | 
					
						
							|  |  |  | " Maintainer:      Jan Larres <jan@majutsushi.net> | 
					
						
							|  |  |  | " Previous Maintainer: Nikolai Weibull <now@bitwi.se> | 
					
						
							| 
									
										
										
										
											2018-02-27 14:53:30 +01:00
										 |  |  | " Latest Revision: 2018-02-19 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  | if exists("b:current_syntax") | 
					
						
							| 
									
										
										
										
											2013-09-22 14:42:24 +02:00
										 |  |  |     finish | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  | let s:cpo_save = &cpo | 
					
						
							|  |  |  | set cpo&vim | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-22 14:42:24 +02:00
										 |  |  | syntax keyword dircolorsTodo    FIXME TODO XXX NOTE contained | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-22 14:42:24 +02:00
										 |  |  | syntax region  dircolorsComment start='#' end='$' contains=dircolorsTodo,@Spell | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-22 14:42:24 +02:00
										 |  |  | syntax keyword dircolorsKeyword TERM LEFT LEFTCODE RIGHT RIGHTCODE END ENDCODE | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-22 14:42:24 +02:00
										 |  |  | syntax keyword dircolorsKeyword NORMAL NORM FILE RESET DIR LNK LINK SYMLINK | 
					
						
							|  |  |  |                               \ MULTIHARDLINK FIFO SOCK DOOR BLK CHR ORPHAN | 
					
						
							|  |  |  |                               \ MISSING PIPE BLOCK CHR EXEC SETUID SETGID | 
					
						
							|  |  |  |                               \ CAPABILITY STICKY_OTHER_WRITABLE | 
					
						
							|  |  |  |                               \ OTHER_WRITABLE STICKY | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-22 14:42:24 +02:00
										 |  |  | " Slackware only, ignored by GNU dircolors. | 
					
						
							|  |  |  | syntax keyword dircolorsKeyword COLOR OPTIONS EIGHTBIT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | syntax match dircolorsExtension '^\s*\zs[.*]\S\+' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | syntax match dircolorsEscape '\\[abefnrtv?_\\^#]' | 
					
						
							|  |  |  | syntax match dircolorsEscape '\\[0-9]\{3}' | 
					
						
							|  |  |  | syntax match dircolorsEscape '\\x[0-9a-f]\{3}' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if !has('gui_running') && &t_Co == '' | 
					
						
							|  |  |  |     syntax match dircolorsNumber '\<\d\+\>' | 
					
						
							|  |  |  |     highlight default link dircolorsNumber Number | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-22 14:42:24 +02:00
										 |  |  | highlight default link dircolorsTodo      Todo | 
					
						
							|  |  |  | highlight default link dircolorsComment   Comment | 
					
						
							|  |  |  | highlight default link dircolorsKeyword   Keyword | 
					
						
							|  |  |  | highlight default link dircolorsExtension Identifier | 
					
						
							|  |  |  | highlight default link dircolorsEscape    Special | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function! s:set_guicolors() abort | 
					
						
							| 
									
										
										
										
											2016-04-29 22:59:22 +02:00
										 |  |  |     let s:termguicolors = {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let s:termguicolors[0]  = "Black" | 
					
						
							|  |  |  |     let s:termguicolors[1]  = "DarkRed" | 
					
						
							|  |  |  |     let s:termguicolors[2]  = "DarkGreen" | 
					
						
							|  |  |  |     let s:termguicolors[3]  = "DarkYellow" | 
					
						
							|  |  |  |     let s:termguicolors[4]  = "DarkBlue" | 
					
						
							|  |  |  |     let s:termguicolors[5]  = "DarkMagenta" | 
					
						
							|  |  |  |     let s:termguicolors[6]  = "DarkCyan" | 
					
						
							|  |  |  |     let s:termguicolors[7]  = "Gray" | 
					
						
							|  |  |  |     let s:termguicolors[8]  = "DarkGray" | 
					
						
							|  |  |  |     let s:termguicolors[9]  = "Red" | 
					
						
							|  |  |  |     let s:termguicolors[10] = "Green" | 
					
						
							|  |  |  |     let s:termguicolors[11] = "Yellow" | 
					
						
							|  |  |  |     let s:termguicolors[12] = "Blue" | 
					
						
							|  |  |  |     let s:termguicolors[13] = "Magenta" | 
					
						
							|  |  |  |     let s:termguicolors[14] = "Cyan" | 
					
						
							|  |  |  |     let s:termguicolors[15] = "White" | 
					
						
							| 
									
										
										
										
											2013-09-22 14:42:24 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     let xterm_palette = ["00", "5f", "87", "af", "d7", "ff"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let cur_col = 16 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for r in xterm_palette | 
					
						
							|  |  |  |         for g in xterm_palette | 
					
						
							|  |  |  |             for b in xterm_palette | 
					
						
							| 
									
										
										
										
											2016-04-29 22:59:22 +02:00
										 |  |  |                 let s:termguicolors[cur_col] = '#' . r . g . b | 
					
						
							| 
									
										
										
										
											2013-09-22 14:42:24 +02:00
										 |  |  |                 let cur_col += 1 | 
					
						
							|  |  |  |             endfor | 
					
						
							|  |  |  |         endfor | 
					
						
							|  |  |  |     endfor | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for i in range(24) | 
					
						
							|  |  |  |         let g = i * 0xa + 8 | 
					
						
							| 
									
										
										
										
											2016-04-29 22:59:22 +02:00
										 |  |  |         let s:termguicolors[i + 232] = '#' . g . g . g | 
					
						
							| 
									
										
										
										
											2013-09-22 14:42:24 +02:00
										 |  |  |     endfor | 
					
						
							|  |  |  | endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function! s:get_hi_str(color, place) abort | 
					
						
							|  |  |  |     if a:color >= 0 && a:color <= 255 | 
					
						
							|  |  |  |         if has('gui_running') | 
					
						
							| 
									
										
										
										
											2016-04-29 22:59:22 +02:00
										 |  |  |             return ' gui' . a:place . '=' . s:termguicolors[a:color] | 
					
						
							| 
									
										
										
										
											2013-09-22 14:42:24 +02:00
										 |  |  |         elseif a:color <= 7 || &t_Co == 256 || &t_Co == 88 | 
					
						
							|  |  |  |             return ' cterm' . a:place . '=' . a:color | 
					
						
							|  |  |  |         endif | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  |     return '' | 
					
						
							|  |  |  | endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function! s:get_256color(colors) abort | 
					
						
							|  |  |  |     if len(a:colors) >= 2 " May be fewer while editing | 
					
						
							|  |  |  |         let [_five, color] = remove(a:colors, 0, 1) | 
					
						
							|  |  |  |         if _five != '5' || color == '' | 
					
						
							|  |  |  |             return -1 | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             return str2nr(color) | 
					
						
							|  |  |  |         endif | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |         return -1 | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function! s:preview_color(linenr) abort | 
					
						
							|  |  |  |     let line = getline(a:linenr) | 
					
						
							|  |  |  |     let defline = matchlist(line, '^\v([A-Z_]+|[*.]\S+)\s+([0-9;]+)') | 
					
						
							|  |  |  |     if empty(defline) | 
					
						
							|  |  |  |         return | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let colordef = defline[2] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let colors = split(colordef, ';') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let hi_str = '' | 
					
						
							|  |  |  |     let hi_attrs = [] | 
					
						
							|  |  |  |     while len(colors) > 0 | 
					
						
							|  |  |  |         let item = str2nr(remove(colors, 0)) | 
					
						
							|  |  |  |         if item == 1 | 
					
						
							|  |  |  |             call add(hi_attrs, 'bold') | 
					
						
							|  |  |  |         elseif item == 3 | 
					
						
							|  |  |  |             call add(hi_attrs, 'italic') | 
					
						
							|  |  |  |         elseif item == 4 | 
					
						
							|  |  |  |             call add(hi_attrs, 'underline') | 
					
						
							|  |  |  |         elseif item == 7 | 
					
						
							|  |  |  |             call add(hi_attrs, 'inverse') | 
					
						
							|  |  |  |         elseif item >= 30 && item <= 37 | 
					
						
							|  |  |  |             " ANSI SGR foreground color | 
					
						
							|  |  |  |             let hi_str .= s:get_hi_str(item - 30, 'fg') | 
					
						
							|  |  |  |         elseif item >= 40 && item <= 47 | 
					
						
							|  |  |  |             " ANSI SGR background color | 
					
						
							|  |  |  |             let hi_str .= s:get_hi_str(item - 40, 'bg') | 
					
						
							| 
									
										
										
										
											2018-02-27 14:53:30 +01:00
										 |  |  |         elseif item >= 90 && item <= 97 | 
					
						
							|  |  |  |             " ANSI SGR+8 foreground color (xterm 16-color support) | 
					
						
							|  |  |  |             let hi_str .= s:get_hi_str(item - 82, 'fg') | 
					
						
							|  |  |  |         elseif item >= 100 && item <= 107 | 
					
						
							|  |  |  |             " ANSI SGR+8 background color (xterm 16-color support) | 
					
						
							|  |  |  |             let hi_str .= s:get_hi_str(item - 92, 'bg') | 
					
						
							| 
									
										
										
										
											2013-09-22 14:42:24 +02:00
										 |  |  |         elseif item == 38 | 
					
						
							|  |  |  |             " Foreground for terminals with 88/256 color support | 
					
						
							|  |  |  |             let color = s:get_256color(colors) | 
					
						
							|  |  |  |             if color == -1 | 
					
						
							|  |  |  |                 break | 
					
						
							|  |  |  |             endif | 
					
						
							|  |  |  |             let hi_str .= s:get_hi_str(color, 'fg') | 
					
						
							|  |  |  |         elseif item == 48 | 
					
						
							|  |  |  |             " Background for terminals with 88/256 color support | 
					
						
							|  |  |  |             let color = s:get_256color(colors) | 
					
						
							|  |  |  |             if color == -1 | 
					
						
							|  |  |  |                 break | 
					
						
							|  |  |  |             endif | 
					
						
							|  |  |  |             let hi_str .= s:get_hi_str(color, 'bg') | 
					
						
							|  |  |  |         endif | 
					
						
							|  |  |  |     endwhile | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if hi_str == '' && empty(hi_attrs) | 
					
						
							|  |  |  |         return | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     " Check whether we have already defined this color | 
					
						
							|  |  |  |     redir => s:currentmatch | 
					
						
							|  |  |  |     silent! execute 'syntax list' | 
					
						
							|  |  |  |     redir END | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if s:currentmatch !~# '\/\\_s\\zs' . colordef . '\\ze\\_s\/' | 
					
						
							|  |  |  |         " Append the buffer number to avoid problems with other dircolors | 
					
						
							|  |  |  |         " buffers interfering | 
					
						
							|  |  |  |         let bufnr = bufnr('%') | 
					
						
							|  |  |  |         execute 'syntax match dircolorsColor' . b:dc_next_index . '_' . bufnr . | 
					
						
							|  |  |  |               \ ' "\_s\zs' . colordef . '\ze\_s"' | 
					
						
							|  |  |  |         let hi_attrs_str = '' | 
					
						
							|  |  |  |         if !empty(hi_attrs) | 
					
						
							|  |  |  |             if has('gui_running') | 
					
						
							|  |  |  |                 let hi_attrs_str = ' gui=' . join(hi_attrs, ',') | 
					
						
							|  |  |  |             else | 
					
						
							|  |  |  |                 let hi_attrs_str = ' cterm=' . join(hi_attrs, ',') | 
					
						
							|  |  |  |             endif | 
					
						
							|  |  |  |         endif | 
					
						
							|  |  |  |         execute 'highlight default dircolorsColor' . b:dc_next_index . '_' . | 
					
						
							|  |  |  |               \ bufnr . hi_str . hi_attrs_str | 
					
						
							|  |  |  |         let b:dc_next_index += 1 | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Avoid accumulating too many definitions while editing | 
					
						
							|  |  |  | function! s:reset_colors() abort | 
					
						
							|  |  |  |     if b:dc_next_index > 0 | 
					
						
							|  |  |  |         let bufnr = bufnr('%') | 
					
						
							|  |  |  |         for i in range(b:dc_next_index) | 
					
						
							|  |  |  |             execute 'syntax clear dircolorsColor' . i . '_' . bufnr | 
					
						
							|  |  |  |             execute 'highlight clear dircolorsColor' . i . '_' . bufnr | 
					
						
							|  |  |  |         endfor | 
					
						
							|  |  |  |         let b:dc_next_index = 0 | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for linenr in range(1, line('$')) | 
					
						
							|  |  |  |         call s:preview_color(linenr) | 
					
						
							|  |  |  |     endfor | 
					
						
							|  |  |  | endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let b:dc_next_index = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if has('gui_running') | 
					
						
							|  |  |  |     call s:set_guicolors() | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  | endif | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-22 14:42:24 +02:00
										 |  |  | if has('gui_running') || &t_Co != '' | 
					
						
							|  |  |  |     call s:reset_colors() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     autocmd CursorMoved,CursorMovedI <buffer> call s:preview_color('.') | 
					
						
							|  |  |  |     autocmd CursorHold,CursorHoldI   <buffer> call s:reset_colors() | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let b:current_syntax = "dircolors" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  | let &cpo = s:cpo_save | 
					
						
							|  |  |  | unlet s:cpo_save |