dotfiles/vim/.vim/syntax/vidir-ls.vim
2024-07-13 15:18:43 +02:00

347 lines
7.4 KiB
VimL

" What: ls colors for vidir file listings
" Where: $VIMRUNTIME/syntax/vidir-ls.vim
" Author: Magnus Woldrich <m@japh.se>
" Update: 2012-07-01 22:07:28
" URL: https://github.com/trapd00r/vim-syntax-vidir-ls
" http://devel.japh.se/vim-syntax-vidir-ls/
" http://devel.japh.se/vidir
"
" This is supposed to be used with vidir [0]:
" export VIDIR_EDITOR_ARGS='-c :set nolist | :set ft=vidir-ls'
"
" The colors are generated from the LS_COLORS environment variable
" automatically. Please see the LS_COLORS repository [1] for a set of good
" colors.
"
" [0]: https://github.com/trapd00r/vidir
" [1]: https://github.com/trapd00r/LS_COLORS
if exists('b:current_syntax')
finish
endif
function! <SID>MakeStyle(ls_color_style)
let l:style_settings = split(a:ls_color_style, ';')
let l:style_string = ''
while len(l:style_settings) >= 3
let [l:where, l:flag, l:clr; l:style_settings] = l:style_settings
if l:flag == 5
if l:where == 38
let l:style_string .= ' ctermfg='.l:clr
\ .' guifg='.s:term2rgb[substitute(l:clr, '^0\+\ze\S', '', '')]
elseif l:where == 48
let l:style_string .= ' ctermbg='.l:clr
\ .' guibg='.s:term2rgb[substitute(l:clr, '^0\+\ze\S', '', '')]
endif
endif
endwhile
if len(l:style_settings) == 1
let l:style = l:style_settings[0]
if l:style == '0' || l:style == '00'
let l:style_string .= ' cterm=none'
elseif l:style == '1' || l:style == '01'
let l:style_string .= ' cterm=bold'
elseif l:style == '4' || l:style == '04'
let l:style_string .= ' cterm=underline'
elseif l:style == '7' || l:style == '07'
let l:style_string .= ' cterm=reverse'
endif
end
return l:style_string
endfunction
function! <SID>MakeSyntax(ls_color)
let [l:glob, l:colors] = split(a:ls_color, '=')
if l:glob =~ '^\*\..*'
let l:regex = '\v[/]\zs.+[.]'
let l:ext = substitute(l:glob, '^\*[.]', '', '')
let l:regex .= substitute(l:ext, '[.~]', '[&]', 'g') . '$'
let l:ext = substitute(l:ext, '[.~]', '_', 'g')
elseif l:glob == 'di'
let l:ext = 'DI'
let l:regex = '\v.+[/].+[/]$'
else
return
endif
execute 'silent! hi ls_' . l:ext . <SID>MakeStyle(l:colors)
execute 'silent! syn match ls_' . l:ext . ' display "' . l:regex . '"'
endfunction
" Colors from http://www.calmar.ws/vim/256-xterm-24bit-rgb-color-chart.html
let s:term2rgb = {
\ 0: "#000000",
\ 1: "#800000",
\ 2: "#008000",
\ 3: "#808000",
\ 4: "#000080",
\ 5: "#800080",
\ 6: "#008080",
\ 7: "#c0c0c0",
\ 8: "#808080",
\ 9: "#ff0000",
\ 10: "#00ff00",
\ 11: "#ffff00",
\ 12: "#0000ff",
\ 13: "#ff00ff",
\ 14: "#00ffff",
\ 15: "#ffffff",
\
\ 16: "#000000",
\ 17: "#00005f",
\ 18: "#000087",
\ 19: "#0000af",
\ 20: "#0000d7",
\ 21: "#0000ff",
\ 22: "#005f00",
\ 23: "#005f5f",
\ 24: "#005f87",
\ 25: "#005faf",
\ 26: "#005fd7",
\ 27: "#005fff",
\ 28: "#008700",
\ 29: "#00875f",
\ 30: "#008787",
\ 31: "#0087af",
\ 32: "#0087d7",
\ 33: "#0087ff",
\ 34: "#00af00",
\ 35: "#00af5f",
\ 36: "#00af87",
\ 37: "#00afaf",
\ 38: "#00afd7",
\ 39: "#00afff",
\ 40: "#00d700",
\ 41: "#00d75f",
\ 42: "#00d787",
\ 43: "#00d7af",
\ 44: "#00d7d7",
\ 45: "#00d7ff",
\ 46: "#00ff00",
\ 47: "#00ff5f",
\ 48: "#00ff87",
\ 49: "#00ffaf",
\ 50: "#00ffd7",
\ 51: "#00ffff",
\ 52: "#5f0000",
\ 53: "#5f005f",
\ 54: "#5f0087",
\ 55: "#5f00af",
\ 56: "#5f00d7",
\ 57: "#5f00ff",
\ 58: "#5f5f00",
\ 59: "#5f5f5f",
\ 60: "#5f5f87",
\ 61: "#5f5faf",
\ 62: "#5f5fd7",
\ 63: "#5f5fff",
\ 64: "#5f8700",
\ 65: "#5f875f",
\ 66: "#5f8787",
\ 67: "#5f87af",
\ 68: "#5f87d7",
\ 69: "#5f87ff",
\ 70: "#5faf00",
\ 71: "#5faf5f",
\ 72: "#5faf87",
\ 73: "#5fafaf",
\ 74: "#5fafd7",
\ 75: "#5fafff",
\ 76: "#5fd700",
\ 77: "#5fd75f",
\ 78: "#5fd787",
\ 79: "#5fd7af",
\ 80: "#5fd7d7",
\ 81: "#5fd7ff",
\ 82: "#5fff00",
\ 83: "#5fff5f",
\ 84: "#5fff87",
\ 85: "#5fffaf",
\ 86: "#5fffd7",
\ 87: "#5fffff",
\ 88: "#870000",
\ 89: "#87005f",
\ 90: "#870087",
\ 91: "#8700af",
\ 92: "#8700d7",
\ 93: "#8700ff",
\ 94: "#875f00",
\ 95: "#875f5f",
\ 96: "#875f87",
\ 97: "#875faf",
\ 98: "#875fd7",
\ 99: "#875fff",
\ 100: "#878700",
\ 101: "#87875f",
\ 102: "#878787",
\ 103: "#8787af",
\ 104: "#8787d7",
\ 105: "#8787ff",
\ 106: "#87af00",
\ 107: "#87af5f",
\ 108: "#87af87",
\ 109: "#87afaf",
\ 110: "#87afd7",
\ 111: "#87afff",
\ 112: "#87d700",
\ 113: "#87d75f",
\ 114: "#87d787",
\ 115: "#87d7af",
\ 116: "#87d7d7",
\ 117: "#87d7ff",
\ 118: "#87ff00",
\ 119: "#87ff5f",
\ 120: "#87ff87",
\ 121: "#87ffaf",
\ 122: "#87ffd7",
\ 123: "#87ffff",
\ 124: "#af0000",
\ 125: "#af005f",
\ 126: "#af0087",
\ 127: "#af00af",
\ 128: "#af00d7",
\ 129: "#af00ff",
\ 130: "#af5f00",
\ 131: "#af5f5f",
\ 132: "#af5f87",
\ 133: "#af5faf",
\ 134: "#af5fd7",
\ 135: "#af5fff",
\ 136: "#af8700",
\ 137: "#af875f",
\ 138: "#af8787",
\ 139: "#af87af",
\ 140: "#af87d7",
\ 141: "#af87ff",
\ 142: "#afaf00",
\ 143: "#afaf5f",
\ 144: "#afaf87",
\ 145: "#afafaf",
\ 146: "#afafd7",
\ 147: "#afafff",
\ 148: "#afd700",
\ 149: "#afd75f",
\ 150: "#afd787",
\ 151: "#afd7af",
\ 152: "#afd7d7",
\ 153: "#afd7ff",
\ 154: "#afff00",
\ 155: "#afff5f",
\ 156: "#afff87",
\ 157: "#afffaf",
\ 158: "#afffd7",
\ 159: "#afffff",
\ 160: "#d70000",
\ 161: "#d7005f",
\ 162: "#d70087",
\ 163: "#d700af",
\ 164: "#d700d7",
\ 165: "#d700ff",
\ 166: "#d75f00",
\ 167: "#d75f5f",
\ 168: "#d75f87",
\ 169: "#d75faf",
\ 170: "#d75fd7",
\ 171: "#d75fff",
\ 172: "#d78700",
\ 173: "#d7875f",
\ 174: "#d78787",
\ 175: "#d787af",
\ 176: "#d787d7",
\ 177: "#d787ff",
\ 178: "#d7af00",
\ 179: "#d7af5f",
\ 180: "#d7af87",
\ 181: "#d7afaf",
\ 182: "#d7afd7",
\ 183: "#d7afff",
\ 184: "#d7d700",
\ 185: "#d7d75f",
\ 186: "#d7d787",
\ 187: "#d7d7af",
\ 188: "#d7d7d7",
\ 189: "#d7d7ff",
\ 190: "#d7ff00",
\ 191: "#d7ff5f",
\ 192: "#d7ff87",
\ 193: "#d7ffaf",
\ 194: "#d7ffd7",
\ 195: "#d7ffff",
\ 196: "#ff0000",
\ 197: "#ff005f",
\ 198: "#ff0087",
\ 199: "#ff00af",
\ 200: "#ff00d7",
\ 201: "#ff00ff",
\ 202: "#ff5f00",
\ 203: "#ff5f5f",
\ 204: "#ff5f87",
\ 205: "#ff5faf",
\ 206: "#ff5fd7",
\ 207: "#ff5fff",
\ 208: "#ff8700",
\ 209: "#ff875f",
\ 210: "#ff8787",
\ 211: "#ff87af",
\ 212: "#ff87d7",
\ 213: "#ff87ff",
\ 214: "#ffaf00",
\ 215: "#ffaf5f",
\ 216: "#ffaf87",
\ 217: "#ffafaf",
\ 218: "#ffafd7",
\ 219: "#ffafff",
\ 220: "#ffd700",
\ 221: "#ffd75f",
\ 222: "#ffd787",
\ 223: "#ffd7af",
\ 224: "#ffd7d7",
\ 225: "#ffd7ff",
\ 226: "#ffff00",
\ 227: "#ffff5f",
\ 228: "#ffff87",
\ 229: "#ffffaf",
\ 230: "#ffffd7",
\ 231: "#ffffff",
\
\ 232: "#080808",
\ 233: "#121212",
\ 234: "#1c1c1c",
\ 235: "#262626",
\ 236: "#303030",
\ 237: "#3a3a3a",
\ 238: "#444444",
\ 239: "#4e4e4e",
\ 240: "#585858",
\ 241: "#606060",
\ 242: "#666666",
\ 243: "#767676",
\ 244: "#808080",
\ 245: "#8a8a8a",
\ 246: "#949494",
\ 247: "#9e9e9e",
\ 248: "#a8a8a8",
\ 249: "#b2b2b2",
\ 250: "#bcbcbc",
\ 251: "#c6c6c6",
\ 252: "#d0d0d0",
\ 253: "#dadada",
\ 254: "#e4e4e4",
\ 255: "#eeeeee",
\}
let s:ls_colors = split($LS_COLORS, ':')
let s:ls_colors = map(s:ls_colors, '<SID>MakeSyntax(v:val)')
let g:ls_colors = s:ls_colors
let b:current_syntax = 'vidir-ls'