Skip to content

Commit

Permalink
Icons color based on filetypes
Browse files Browse the repository at this point in the history
  • Loading branch information
ichirou2910 committed Jan 23, 2021
1 parent 72e3f35 commit c5daf23
Show file tree
Hide file tree
Showing 2 changed files with 237 additions and 3 deletions.
226 changes: 226 additions & 0 deletions after/plugin/buftabicons.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
" Sets the highlighting for the given group
fun! s:X(group, fg, bg, attr)
if a:fg != ""
exec "silent hi " . a:group . " guifg=#" . a:fg
endif
if a:bg != ""
exec "silent hi " . a:group . " guibg=#" . a:bg
endif
if a:attr != ""
exec "silent hi " . a:group . " gui=" . a:attr
endif
endfun

"the original values would be 24 bit color but apparently that is not possible
let s:brown = "905532"
let s:aqua = "3AFFDB"
let s:blue = "519aba"
let s:darkBlue = "03589c"
let s:purple = "a074c4"
let s:darkPurple = "854cc7"
let s:lightPurple = "834F79"
let s:juliaPurple = "9558B2"
let s:red = "cc3e44"
let s:darkRed = "a90533"
let s:beige = "F5C06F"
let s:yellow = "cbcb41"
let s:orange = "D4843E"
let s:darkOrange = "e37933"
let s:pink = "f55385"
let s:salmon = "EE6E73"
let s:green = "8dc149"
let s:darkGreen = "019833"
let s:lightGreen = "31B53E"
let s:white = "FFFFFF"
let s:gray = "6d8086"
let s:darkGray = "4d5a5e"

let s:file_extension_colors = {
\ 'styl' : s:green,
\ 'sass' : s:pink,
\ 'scss' : s:pink,
\ 'htm' : s:darkOrange,
\ 'html' : s:darkOrange,
\ 'erb' : s:red,
\ 'slim' : s:orange,
\ 'ejs' : s:yellow,
\ 'css' : s:blue,
\ 'less' : s:darkBlue,
\ 'md' : s:blue,
\ 'mdx' : s:blue,
\ 'markdown' : s:blue,
\ 'rmd' : s:blue,
\ 'json' : s:yellow,
\ 'js' : s:yellow,
\ 'mjs' : s:yellow,
\ 'jsx' : s:blue,
\ 'rb' : s:red,
\ 'php' : s:purple,
\ 'py' : s:blue,
\ 'pyc' : s:blue,
\ 'pyo' : s:blue,
\ 'pyd' : s:blue,
\ 'coffee' : s:brown,
\ 'mustache' : s:orange,
\ 'hbs' : s:orange,
\ 'conf' : s:gray,
\ 'ini' : s:gray,
\ 'yml' : s:gray,
\ 'yaml' : s:gray,
\ 'toml' : s:gray,
\ 'bat' : s:gray,
\ 'jpg' : s:aqua,
\ 'jpeg' : s:aqua,
\ 'bmp' : s:aqua,
\ 'png' : s:aqua,
\ 'webp' : s:aqua,
\ 'gif' : s:aqua,
\ 'ico' : s:aqua,
\ 'twig' : s:green,
\ 'cpp' : s:blue,
\ 'cxx' : s:blue,
\ 'cc' : s:blue,
\ 'cp' : s:blue,
\ 'c' : s:blue,
\ 'cs' : s:blue,
\ 'h' : s:blue,
\ 'hh' : s:blue,
\ 'hpp' : s:blue,
\ 'hxx' : s:blue,
\ 'hs' : s:beige,
\ 'lhs' : s:beige,
\ 'lua' : s:blue,
\ 'java' : s:red,
\ 'sh' : s:darkGray,
\ 'fish' : s:green,
\ 'bash' : s:darkGray,
\ 'zsh' : s:darkGray,
\ 'ksh' : s:darkGray,
\ 'csh' : s:darkGray,
\ 'awk' : s:white,
\ 'ps1' : s:darkGray,
\ 'ml' : s:darkOrange,
\ 'mli' : s:darkOrange,
\ 'diff' : s:darkGray,
\ 'db' : s:pink,
\ 'sql' : s:pink,
\ 'dump' : s:pink,
\ 'clj' : s:green,
\ 'cljc' : s:green,
\ 'cljs' : s:green,
\ 'edn' : s:blue,
\ 'scala' : s:red,
\ 'go' : s:blue,
\ 'dart' : s:darkBlue,
\ 'xul' : s:darkOrange,
\ 'sln' : s:darkPurple,
\ 'suo' : s:darkPurple,
\ 'pl' : s:blue,
\ 'pm' : s:blue,
\ 't' : s:blue,
\ 'rss' : s:darkOrange,
\ 'f#' : s:darkBlue,
\ 'fsscript' : s:blue,
\ 'fsx' : s:blue,
\ 'fs' : s:blue,
\ 'fsi' : s:blue,
\ 'rs' : s:blue,
\ 'rlib' : s:blue,
\ 'd' : s:red,
\ 'erl' : s:darkRed,
\ 'hrl' : s:pink,
\ 'ex' : s:purple,
\ 'exs' : s:purple,
\ 'eex' : s:purple,
\ 'leex' : s:white,
\ 'vim' : s:darkGreen,
\ 'ai' : s:darkOrange,
\ 'psd' : s:darkBlue,
\ 'psb' : s:darkBlue,
\ 'ts' : s:blue,
\ 'tsx' : s:blue,
\ 'jl' : s:juliaPurple,
\ 'pp' : s:white,
\ 'vue' : s:green,
\ 'elm' : s:white,
\ 'swift' : s:darkOrange,
\ 'xcplayground' : s:orange
\}

let s:file_node_exact_matches = {
\ 'gruntfile.coffee' : s:yellow,
\ 'gruntfile.js' : s:yellow,
\ 'gruntfile.ls' : s:yellow,
\ 'gulpfile.coffee' : s:pink,
\ 'gulpfile.js' : s:pink,
\ 'gulpfile.ls' : s:pink,
\ 'mix.lock' : s:white,
\ 'dropbox' : s:blue,
\ '.ds_store' : s:white,
\ '.gitconfig' : s:white,
\ '.gitignore' : s:white,
\ '.gitlab-ci.yml' : s:orange,
\ '.bashrc' : s:white,
\ '.zshrc' : s:white,
\ '.vimrc' : s:green,
\ '.gvimrc' : s:green,
\ '_vimrc' : s:green,
\ '_gvimrc' : s:green,
\ '.bashprofile' : s:white,
\ 'favicon.ico' : s:yellow,
\ 'license' : s:white,
\ 'node_modules' : s:green,
\ 'react.jsx' : s:blue,
\ 'typescript.jsx' : s:blue,
\ 'typescript.tsx' : s:blue,
\ 'procfile' : s:purple,
\ 'dockerfile' : s:blue,
\ 'docker-compose.yml' : s:blue,
\ 'makefile' : s:white,
\ 'cmakelists.txt' : s:white
\}

let s:file_node_pattern_matches = {
\ '.*jquery.*\.js$' : s:blue,
\ '.*angular.*\.js$' : s:red,
\ '.*backbone.*\.js$' : s:darkBlue,
\ '.*require.*\.js$' : s:blue,
\ '.*materialize.*\.js$' : s:salmon,
\ '.*materialize.*\.css$' : s:salmon,
\ '.*mootools.*\.js$' : s:white,
\ '.*vimrc.*' : s:green,
\ 'Vagrantfile$' : s:blue
\}

" let s:characters = '[ a-zA-Z0-9_\#\-\+\*\%\!\~\(\)\{\}\&\.\$\@]'
" substitute will 'eliminate' single backlashes on the string
" let s:chars_double_lashes = substitute(s:characters, '\\', '\\\\', 'g')

if !exists('g:BufTabLineHiColor')
let g:BufTabLineHiColor = {}
endif

for [key, val] in items(s:file_extension_colors)
if !has_key(g:BufTabLineHiColor, key)
let g:BufTabLineHiColor[key] = val
endif
endfor

for [key, val] in items(g:BufTabLineHiColor)
let icon_identifier = 'buftablineIcon_'.key
" let regexp = '\v'.s:characters.'+\.'.substitute(key, '\W', '\\\0', 'g')

if exists('g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols["'.key.'"]')
let icon = g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols[key]
" exec 'silent syn match '.icon_identifier.' \zs'.icon.'\ze.\+\.'.key.'$'
" exec 'silent syn match '.icon_identifier.' \zs'.icon.'\ze.\+\.'.key.'\W*\*$'
exec 'silent syn match '.icon_identifier.' "\zs'.icon.'\ze"'
exec 'hi def link '.icon_identifier.' BufTabLineNumCurrent'
endif

if val != ''
call s:X(icon_identifier, val, '', '')
endif
endfor


14 changes: 11 additions & 3 deletions plugin/buftabline.vim
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ hi default link BufTabLineCharModifiedActive BufTabLineModifiedActive
hi default link BufTabLineCharModifiedHidden BufTabLineModifiedHidden

let g:buftabline_numbers = get(g:, 'buftabline_numbers', 0)
let g:buftabline_icons = get(g:, 'buftabline_icons', 0)
let g:buftabline_indicators = get(g:, 'buftabline_indicators', 0)
let g:buftabline_indicators_mod = get(g:, 'buftabline_indicators_mod', '+')
let g:buftabline_indicators_ro = get(g:, 'buftabline_indicators_ro', '-')
Expand Down Expand Up @@ -77,6 +78,7 @@ function! buftabline#render()
let show_path = g:buftabline_path == 1
let show_ord = g:buftabline_numbers == 2
let show_idc = g:buftabline_indicators
let show_icon = g:buftabline_icons
let mod_char = g:buftabline_indicators_mod
let ro_char = g:buftabline_indicators_ro
let lpad = g:buftabline_separators ? nr2char(0x23B8) : ' '
Expand All @@ -98,9 +100,9 @@ function! buftabline#render()
let bufpath = bufname(bufnum)
if strlen(bufpath)
let tab.path = fnamemodify(bufpath, ':p:~:.')
let tab.ftp = fnamemodify(bufpath, ':e')
let tab.sep = strridx(tab.path, s:dirsep, strlen(tab.path) - 2) " keep trailing dirsep
let tab.label = tab.path[tab.sep + 1:]
" let pre = screen_num
let pre = ''
let mod = getbufvar(bufnum, '&mod')
let ro = getbufvar(bufnum, '&ro')
Expand Down Expand Up @@ -143,11 +145,17 @@ function! buftabline#render()
let lpad_width = strwidth(lpad)
for tab in tabs
let tab.width = lpad_width + strwidth(tab.pre) + strwidth(tab.label) + 1
let tab.label = lpad . '%#BufTabLineNum' . tab.hilite . '#' . tab.idx . ' %#BufTabLine' . tab.hilite . '#' . substitute(strtrans(tab.label), '%', '%%', 'g')
let current = tab.hilite =~ 'Current$'
if show_icon && exists("*WebDevIconsGetFileTypeSymbol")
let icon = (current ? ' %#buftablineIcon_'. tab.ftp : ' %#BufTabLineActive') . '#' . WebDevIconsGetFileTypeSymbol(tab.path)
let tab.label = lpad . '%#BufTabLineNum' . tab.hilite . '#' . tab.idx . icon . ' %#BufTabLine' . tab.hilite . '#' . substitute(strtrans(tab.label), '%', '%%', 'g')
" let tab.label = lpad . '%#BufTabLineNum' . tab.hilite . '#' . tab.idx . ' %#BufTabLine' . tab.hilite . '#' . (show_icon && exists("*WebDevIconsGetFileTypeSymbol") ? WebDevIconsGetFileTypeSymbol(tab.path).' ' : '') . substitute(strtrans(tab.label), '%', '%%', 'g')
else
let tab.label = lpad . '%#BufTabLineNum' . tab.hilite . '#' . tab.idx . ' %#BufTabLine' . tab.hilite . '#' . substitute(strtrans(tab.label), '%', '%%', 'g')
endif
if strlen(tab.pre)
let tab.label = tab.label . '%#BufTabLineChar' . tab.hilite . '#' . tab.pre
endif
let tab.label = tab.label . ' '

if centerbuf == tab.num
let halfwidth = tab.width / 2
Expand Down

0 comments on commit c5daf23

Please sign in to comment.