1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: dircolors(1) input file 3baca7f70SBram Moolenaar" Maintainer: Jan Larres <[email protected]> 4baca7f70SBram Moolenaar" Previous Maintainer: Nikolai Weibull <[email protected]> 5*22f1d0e3SBram Moolenaar" Latest Revision: 2018-02-19 6071d4279SBram Moolenaar 742eeac35SBram Moolenaarif exists("b:current_syntax") 8071d4279SBram Moolenaar finish 9071d4279SBram Moolenaarendif 10071d4279SBram Moolenaar 1142eeac35SBram Moolenaarlet s:cpo_save = &cpo 1242eeac35SBram Moolenaarset cpo&vim 1342eeac35SBram Moolenaar 14baca7f70SBram Moolenaarsyntax keyword dircolorsTodo FIXME TODO XXX NOTE contained 15071d4279SBram Moolenaar 16baca7f70SBram Moolenaarsyntax region dircolorsComment start='#' end='$' contains=dircolorsTodo,@Spell 17071d4279SBram Moolenaar 18baca7f70SBram Moolenaarsyntax keyword dircolorsKeyword TERM LEFT LEFTCODE RIGHT RIGHTCODE END ENDCODE 19071d4279SBram Moolenaar 20baca7f70SBram Moolenaarsyntax keyword dircolorsKeyword NORMAL NORM FILE RESET DIR LNK LINK SYMLINK 21baca7f70SBram Moolenaar \ MULTIHARDLINK FIFO SOCK DOOR BLK CHR ORPHAN 22baca7f70SBram Moolenaar \ MISSING PIPE BLOCK CHR EXEC SETUID SETGID 23baca7f70SBram Moolenaar \ CAPABILITY STICKY_OTHER_WRITABLE 24baca7f70SBram Moolenaar \ OTHER_WRITABLE STICKY 2542eeac35SBram Moolenaar 26baca7f70SBram Moolenaar" Slackware only, ignored by GNU dircolors. 27baca7f70SBram Moolenaarsyntax keyword dircolorsKeyword COLOR OPTIONS EIGHTBIT 28baca7f70SBram Moolenaar 29baca7f70SBram Moolenaarsyntax match dircolorsExtension '^\s*\zs[.*]\S\+' 30baca7f70SBram Moolenaar 31baca7f70SBram Moolenaarsyntax match dircolorsEscape '\\[abefnrtv?_\\^#]' 32baca7f70SBram Moolenaarsyntax match dircolorsEscape '\\[0-9]\{3}' 33baca7f70SBram Moolenaarsyntax match dircolorsEscape '\\x[0-9a-f]\{3}' 34baca7f70SBram Moolenaar 35baca7f70SBram Moolenaarif !has('gui_running') && &t_Co == '' 36baca7f70SBram Moolenaar syntax match dircolorsNumber '\<\d\+\>' 37baca7f70SBram Moolenaar highlight default link dircolorsNumber Number 38071d4279SBram Moolenaarendif 39071d4279SBram Moolenaar 40baca7f70SBram Moolenaarhighlight default link dircolorsTodo Todo 41baca7f70SBram Moolenaarhighlight default link dircolorsComment Comment 42baca7f70SBram Moolenaarhighlight default link dircolorsKeyword Keyword 43baca7f70SBram Moolenaarhighlight default link dircolorsExtension Identifier 44baca7f70SBram Moolenaarhighlight default link dircolorsEscape Special 45b8017e7aSBram Moolenaar 46baca7f70SBram Moolenaarfunction! s:set_guicolors() abort 4761be73bbSBram Moolenaar let s:termguicolors = {} 48071d4279SBram Moolenaar 4961be73bbSBram Moolenaar let s:termguicolors[0] = "Black" 5061be73bbSBram Moolenaar let s:termguicolors[1] = "DarkRed" 5161be73bbSBram Moolenaar let s:termguicolors[2] = "DarkGreen" 5261be73bbSBram Moolenaar let s:termguicolors[3] = "DarkYellow" 5361be73bbSBram Moolenaar let s:termguicolors[4] = "DarkBlue" 5461be73bbSBram Moolenaar let s:termguicolors[5] = "DarkMagenta" 5561be73bbSBram Moolenaar let s:termguicolors[6] = "DarkCyan" 5661be73bbSBram Moolenaar let s:termguicolors[7] = "Gray" 5761be73bbSBram Moolenaar let s:termguicolors[8] = "DarkGray" 5861be73bbSBram Moolenaar let s:termguicolors[9] = "Red" 5961be73bbSBram Moolenaar let s:termguicolors[10] = "Green" 6061be73bbSBram Moolenaar let s:termguicolors[11] = "Yellow" 6161be73bbSBram Moolenaar let s:termguicolors[12] = "Blue" 6261be73bbSBram Moolenaar let s:termguicolors[13] = "Magenta" 6361be73bbSBram Moolenaar let s:termguicolors[14] = "Cyan" 6461be73bbSBram Moolenaar let s:termguicolors[15] = "White" 65071d4279SBram Moolenaar 66baca7f70SBram Moolenaar let xterm_palette = ["00", "5f", "87", "af", "d7", "ff"] 6742eeac35SBram Moolenaar 68baca7f70SBram Moolenaar let cur_col = 16 69baca7f70SBram Moolenaar 70baca7f70SBram Moolenaar for r in xterm_palette 71baca7f70SBram Moolenaar for g in xterm_palette 72baca7f70SBram Moolenaar for b in xterm_palette 7361be73bbSBram Moolenaar let s:termguicolors[cur_col] = '#' . r . g . b 74baca7f70SBram Moolenaar let cur_col += 1 75baca7f70SBram Moolenaar endfor 76baca7f70SBram Moolenaar endfor 77baca7f70SBram Moolenaar endfor 78baca7f70SBram Moolenaar 79baca7f70SBram Moolenaar for i in range(24) 80baca7f70SBram Moolenaar let g = i * 0xa + 8 8161be73bbSBram Moolenaar let s:termguicolors[i + 232] = '#' . g . g . g 82baca7f70SBram Moolenaar endfor 83baca7f70SBram Moolenaarendfunction 84baca7f70SBram Moolenaar 85baca7f70SBram Moolenaarfunction! s:get_hi_str(color, place) abort 86baca7f70SBram Moolenaar if a:color >= 0 && a:color <= 255 87baca7f70SBram Moolenaar if has('gui_running') 8861be73bbSBram Moolenaar return ' gui' . a:place . '=' . s:termguicolors[a:color] 89baca7f70SBram Moolenaar elseif a:color <= 7 || &t_Co == 256 || &t_Co == 88 90baca7f70SBram Moolenaar return ' cterm' . a:place . '=' . a:color 91baca7f70SBram Moolenaar endif 92baca7f70SBram Moolenaar endif 93baca7f70SBram Moolenaar return '' 94baca7f70SBram Moolenaarendfunction 95baca7f70SBram Moolenaar 96baca7f70SBram Moolenaarfunction! s:get_256color(colors) abort 97baca7f70SBram Moolenaar if len(a:colors) >= 2 " May be fewer while editing 98baca7f70SBram Moolenaar let [_five, color] = remove(a:colors, 0, 1) 99baca7f70SBram Moolenaar if _five != '5' || color == '' 100baca7f70SBram Moolenaar return -1 101071d4279SBram Moolenaar else 102baca7f70SBram Moolenaar return str2nr(color) 103baca7f70SBram Moolenaar endif 104baca7f70SBram Moolenaar else 105baca7f70SBram Moolenaar return -1 106baca7f70SBram Moolenaar endif 107baca7f70SBram Moolenaarendfunction 108baca7f70SBram Moolenaar 109baca7f70SBram Moolenaarfunction! s:preview_color(linenr) abort 110baca7f70SBram Moolenaar let line = getline(a:linenr) 111baca7f70SBram Moolenaar let defline = matchlist(line, '^\v([A-Z_]+|[*.]\S+)\s+([0-9;]+)') 112baca7f70SBram Moolenaar if empty(defline) 113baca7f70SBram Moolenaar return 114071d4279SBram Moolenaar endif 115071d4279SBram Moolenaar 116baca7f70SBram Moolenaar let colordef = defline[2] 117071d4279SBram Moolenaar 118baca7f70SBram Moolenaar let colors = split(colordef, ';') 119baca7f70SBram Moolenaar 120baca7f70SBram Moolenaar let hi_str = '' 121baca7f70SBram Moolenaar let hi_attrs = [] 122baca7f70SBram Moolenaar while len(colors) > 0 123baca7f70SBram Moolenaar let item = str2nr(remove(colors, 0)) 124baca7f70SBram Moolenaar if item == 1 125baca7f70SBram Moolenaar call add(hi_attrs, 'bold') 126baca7f70SBram Moolenaar elseif item == 3 127baca7f70SBram Moolenaar call add(hi_attrs, 'italic') 128baca7f70SBram Moolenaar elseif item == 4 129baca7f70SBram Moolenaar call add(hi_attrs, 'underline') 130baca7f70SBram Moolenaar elseif item == 7 131baca7f70SBram Moolenaar call add(hi_attrs, 'inverse') 132baca7f70SBram Moolenaar elseif item >= 30 && item <= 37 133baca7f70SBram Moolenaar " ANSI SGR foreground color 134baca7f70SBram Moolenaar let hi_str .= s:get_hi_str(item - 30, 'fg') 135baca7f70SBram Moolenaar elseif item >= 40 && item <= 47 136baca7f70SBram Moolenaar " ANSI SGR background color 137baca7f70SBram Moolenaar let hi_str .= s:get_hi_str(item - 40, 'bg') 138*22f1d0e3SBram Moolenaar elseif item >= 90 && item <= 97 139*22f1d0e3SBram Moolenaar " ANSI SGR+8 foreground color (xterm 16-color support) 140*22f1d0e3SBram Moolenaar let hi_str .= s:get_hi_str(item - 82, 'fg') 141*22f1d0e3SBram Moolenaar elseif item >= 100 && item <= 107 142*22f1d0e3SBram Moolenaar " ANSI SGR+8 background color (xterm 16-color support) 143*22f1d0e3SBram Moolenaar let hi_str .= s:get_hi_str(item - 92, 'bg') 144baca7f70SBram Moolenaar elseif item == 38 145baca7f70SBram Moolenaar " Foreground for terminals with 88/256 color support 146baca7f70SBram Moolenaar let color = s:get_256color(colors) 147baca7f70SBram Moolenaar if color == -1 148baca7f70SBram Moolenaar break 149baca7f70SBram Moolenaar endif 150baca7f70SBram Moolenaar let hi_str .= s:get_hi_str(color, 'fg') 151baca7f70SBram Moolenaar elseif item == 48 152baca7f70SBram Moolenaar " Background for terminals with 88/256 color support 153baca7f70SBram Moolenaar let color = s:get_256color(colors) 154baca7f70SBram Moolenaar if color == -1 155baca7f70SBram Moolenaar break 156baca7f70SBram Moolenaar endif 157baca7f70SBram Moolenaar let hi_str .= s:get_hi_str(color, 'bg') 158baca7f70SBram Moolenaar endif 159baca7f70SBram Moolenaar endwhile 160baca7f70SBram Moolenaar 161baca7f70SBram Moolenaar if hi_str == '' && empty(hi_attrs) 162baca7f70SBram Moolenaar return 163baca7f70SBram Moolenaar endif 164baca7f70SBram Moolenaar 165baca7f70SBram Moolenaar " Check whether we have already defined this color 166baca7f70SBram Moolenaar redir => s:currentmatch 167baca7f70SBram Moolenaar silent! execute 'syntax list' 168baca7f70SBram Moolenaar redir END 169baca7f70SBram Moolenaar 170baca7f70SBram Moolenaar if s:currentmatch !~# '\/\\_s\\zs' . colordef . '\\ze\\_s\/' 171baca7f70SBram Moolenaar " Append the buffer number to avoid problems with other dircolors 172baca7f70SBram Moolenaar " buffers interfering 173baca7f70SBram Moolenaar let bufnr = bufnr('%') 174baca7f70SBram Moolenaar execute 'syntax match dircolorsColor' . b:dc_next_index . '_' . bufnr . 175baca7f70SBram Moolenaar \ ' "\_s\zs' . colordef . '\ze\_s"' 176baca7f70SBram Moolenaar let hi_attrs_str = '' 177baca7f70SBram Moolenaar if !empty(hi_attrs) 178baca7f70SBram Moolenaar if has('gui_running') 179baca7f70SBram Moolenaar let hi_attrs_str = ' gui=' . join(hi_attrs, ',') 18042eeac35SBram Moolenaar else 181baca7f70SBram Moolenaar let hi_attrs_str = ' cterm=' . join(hi_attrs, ',') 182baca7f70SBram Moolenaar endif 183baca7f70SBram Moolenaar endif 184baca7f70SBram Moolenaar execute 'highlight default dircolorsColor' . b:dc_next_index . '_' . 185baca7f70SBram Moolenaar \ bufnr . hi_str . hi_attrs_str 186baca7f70SBram Moolenaar let b:dc_next_index += 1 187baca7f70SBram Moolenaar endif 188baca7f70SBram Moolenaarendfunction 189baca7f70SBram Moolenaar 190baca7f70SBram Moolenaar" Avoid accumulating too many definitions while editing 191baca7f70SBram Moolenaarfunction! s:reset_colors() abort 192baca7f70SBram Moolenaar if b:dc_next_index > 0 193baca7f70SBram Moolenaar let bufnr = bufnr('%') 194baca7f70SBram Moolenaar for i in range(b:dc_next_index) 195baca7f70SBram Moolenaar execute 'syntax clear dircolorsColor' . i . '_' . bufnr 196baca7f70SBram Moolenaar execute 'highlight clear dircolorsColor' . i . '_' . bufnr 197baca7f70SBram Moolenaar endfor 198baca7f70SBram Moolenaar let b:dc_next_index = 0 199baca7f70SBram Moolenaar endif 200baca7f70SBram Moolenaar 201baca7f70SBram Moolenaar for linenr in range(1, line('$')) 202baca7f70SBram Moolenaar call s:preview_color(linenr) 203baca7f70SBram Moolenaar endfor 204baca7f70SBram Moolenaarendfunction 205baca7f70SBram Moolenaar 206baca7f70SBram Moolenaarlet b:dc_next_index = 0 207baca7f70SBram Moolenaar 208baca7f70SBram Moolenaarif has('gui_running') 209baca7f70SBram Moolenaar call s:set_guicolors() 210baca7f70SBram Moolenaarendif 211baca7f70SBram Moolenaar 212baca7f70SBram Moolenaarif has('gui_running') || &t_Co != '' 213baca7f70SBram Moolenaar call s:reset_colors() 214baca7f70SBram Moolenaar 215baca7f70SBram Moolenaar autocmd CursorMoved,CursorMovedI <buffer> call s:preview_color('.') 216baca7f70SBram Moolenaar autocmd CursorHold,CursorHoldI <buffer> call s:reset_colors() 217071d4279SBram Moolenaarendif 218071d4279SBram Moolenaar 219071d4279SBram Moolenaarlet b:current_syntax = "dircolors" 220071d4279SBram Moolenaar 22142eeac35SBram Moolenaarlet &cpo = s:cpo_save 22242eeac35SBram Moolenaarunlet s:cpo_save 223