From 2975b8be30c440d891f91df3f0b3e275400fd00b Mon Sep 17 00:00:00 2001 From: Ichirou2910 Date: Mon, 18 Jan 2021 10:31:49 +0700 Subject: [PATCH 01/15] Customizable parts --- plugin/buftabline.vim | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/plugin/buftabline.vim b/plugin/buftabline.vim index fccfd6d..41459c6 100644 --- a/plugin/buftabline.vim +++ b/plugin/buftabline.vim @@ -32,6 +32,8 @@ scriptencoding utf-8 hi default link BufTabLineCurrent TabLineSel hi default link BufTabLineActive PmenuSel hi default link BufTabLineHidden TabLine +hi default link BufTabLineNum BufTabLineCurrent +hi default link BufTabLineIndicator BufTabLineCurrent hi default link BufTabLineFill TabLineFill hi default link BufTabLineModifiedCurrent BufTabLineCurrent hi default link BufTabLineModifiedActive BufTabLineActive @@ -76,7 +78,7 @@ function! buftabline#render() let screen_num = 0 for bufnum in bufnums let screen_num = show_num ? bufnum : show_ord ? screen_num + 1 : '' - let tab = { 'num': bufnum, 'pre': '' } + let tab = { 'num': bufnum, 'pre': '', 'idx': screen_num } let tab.hilite = currentbuf == bufnum ? 'Current' : bufwinnr(bufnum) > 0 ? 'Active' : 'Hidden' if currentbuf == bufnum | let [centerbuf, s:centerbuf] = [bufnum, bufnum] | endif let bufpath = bufname(bufnum) @@ -84,18 +86,19 @@ function! buftabline#render() let tab.path = fnamemodify(bufpath, ':p:~:.') 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 = screen_num + let pre = '' if getbufvar(bufnum, '&mod') let tab.hilite = 'Modified' . tab.hilite - if show_mod | let pre = '+' . pre | endif + if show_mod | let pre = '' . pre | endif endif - if strlen(pre) | let tab.pre = pre . ' ' | endif + if strlen(pre) | let tab.pre = pre | endif let tabs_per_tail[tab.label] = get(tabs_per_tail, tab.label, 0) + 1 let path_tabs += [tab] elseif -1 < index(['nofile','acwrite'], getbufvar(bufnum, '&buftype')) " scratch buffer let tab.label = ( show_mod ? '!' . screen_num : screen_num ? screen_num . ' !' : '!' ) else " unnamed file - let tab.label = ( show_mod && getbufvar(bufnum, '&mod') ? '+' : '' ) + let tab.label = ( show_mod && getbufvar(bufnum, '&mod') ? '' : '' ) \ . ( screen_num ? screen_num : '*' ) endif let tabs += [tab] @@ -124,7 +127,7 @@ 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 . tab.pre . substitute(strtrans(tab.label), '%', '%%', 'g') . ' ' + let tab.label = lpad . '%#BufTabLineNum#' . tab.idx . ' %#BufTabLine' . tab.hilite . '#' . substitute(strtrans(tab.label), '%', '%%', 'g') . '%#BufTabLineIndicator#' . tab.pre . ' ' if centerbuf == tab.num let halfwidth = tab.width / 2 let lft.width += halfwidth From ce2c02fc91ae8fddd6d698ca18e6ac489f61e615 Mon Sep 17 00:00:00 2001 From: Ichirou2910 Date: Mon, 18 Jan 2021 10:43:05 +0700 Subject: [PATCH 02/15] Add active file path --- plugin/buftabline.vim | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/plugin/buftabline.vim b/plugin/buftabline.vim index 41459c6..96d5f6e 100644 --- a/plugin/buftabline.vim +++ b/plugin/buftabline.vim @@ -166,8 +166,13 @@ function! buftabline#render() if len(tabs) | let tabs[0].label = substitute(tabs[0].label, lpad, ' ', '') | endif let swallowclicks = '%'.(1 + tabpagenr('$')).'X' + let activeFilePath = '' + " Hide term path 'term:///' + if expand('%:~:.') !~ '^term:' + let activeFilePath = '%#BufTabLinePath#%=%{expand("%:~:.")} ' + endif return s:tablineat - \ ? join(map(tabs,'"%#BufTabLine".v:val.hilite."#" . "%".v:val.num."@'.s:sid.'switch_buffer@" . strtrans(v:val.label)'),'') . '%#BufTabLineFill#' . swallowclicks + \ ? join(map(tabs,'"%#BufTabLine".v:val.hilite."#" . "%".v:val.num."@'.s:sid.'switch_buffer@" . strtrans(v:val.label)'),'') . '%#BufTabLineFill#' . activeFilePath . swallowclicks \ : swallowclicks . join(map(tabs,'"%#BufTabLine".v:val.hilite."#" . strtrans(v:val.label)'),'') . '%#BufTabLineFill#' endfunction From 50157325380b3153dbf7eea4cd48af97ac0da407 Mon Sep 17 00:00:00 2001 From: Ichirou2910 Date: Mon, 18 Jan 2021 10:43:54 +0700 Subject: [PATCH 03/15] Customizable parts' color --- plugin/buftabline.vim | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/plugin/buftabline.vim b/plugin/buftabline.vim index 96d5f6e..2c44339 100644 --- a/plugin/buftabline.vim +++ b/plugin/buftabline.vim @@ -32,8 +32,13 @@ scriptencoding utf-8 hi default link BufTabLineCurrent TabLineSel hi default link BufTabLineActive PmenuSel hi default link BufTabLineHidden TabLine -hi default link BufTabLineNum BufTabLineCurrent -hi default link BufTabLineIndicator BufTabLineCurrent +hi default link BufTabLineNumCurrent BufTabLineCurrent +hi default link BufTabLineNumActive BufTabLineActive +hi default link BufTabLineNumHidden BufTabLineHidden +hi default link BufTabLineModCurrent BufTabLineCurrent +hi default link BufTabLineModActive BufTabLineActive +hi default link BufTabLineModHidden BufTabLineHidden +hi default link BufTabLinePath BufTabLineCurrent hi default link BufTabLineFill TabLineFill hi default link BufTabLineModifiedCurrent BufTabLineCurrent hi default link BufTabLineModifiedActive BufTabLineActive @@ -127,7 +132,7 @@ 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.idx . ' %#BufTabLine' . tab.hilite . '#' . substitute(strtrans(tab.label), '%', '%%', 'g') . '%#BufTabLineIndicator#' . tab.pre . ' ' + let tab.label = lpad . '%#BufTabLineNum' . tab.hilite . '#' . tab.idx . ' %#BufTabLine' . tab.hilite . '#' . substitute(strtrans(tab.label), '%', '%%', 'g') . '%#BufTabLineMod' . tab.hilite . '#' . tab.pre . ' ' if centerbuf == tab.num let halfwidth = tab.width / 2 let lft.width += halfwidth From 638dcfee1b5e96cb5ec816d65e46bfed4898320b Mon Sep 17 00:00:00 2001 From: Ichirou2910 Date: Mon, 18 Jan 2021 10:55:55 +0700 Subject: [PATCH 04/15] Customizable indicator character --- plugin/buftabline.vim | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/plugin/buftabline.vim b/plugin/buftabline.vim index 2c44339..702dbf7 100644 --- a/plugin/buftabline.vim +++ b/plugin/buftabline.vim @@ -44,11 +44,12 @@ hi default link BufTabLineModifiedCurrent BufTabLineCurrent hi default link BufTabLineModifiedActive BufTabLineActive hi default link BufTabLineModifiedHidden BufTabLineHidden -let g:buftabline_numbers = get(g:, 'buftabline_numbers', 0) -let g:buftabline_indicators = get(g:, 'buftabline_indicators', 0) -let g:buftabline_separators = get(g:, 'buftabline_separators', 0) -let g:buftabline_show = get(g:, 'buftabline_show', 2) -let g:buftabline_plug_max = get(g:, 'buftabline_plug_max', 10) +let g:buftabline_numbers = get(g:, 'buftabline_numbers', 0) +let g:buftabline_indicators = get(g:, 'buftabline_indicators', 0) +let g:buftabline_indicators_char = get(g:, 'buftabline_indicators_char', '+') +let g:buftabline_separators = get(g:, 'buftabline_separators', 0) +let g:buftabline_show = get(g:, 'buftabline_show', 2) +let g:buftabline_plug_max = get(g:, 'buftabline_plug_max', 10) function! buftabline#user_buffers() " help buffers are always unlisted, but quickfix buffers are not return filter(range(1,bufnr('$')),'buflisted(v:val) && "quickfix" !=? getbufvar(v:val, "&buftype")') @@ -95,7 +96,7 @@ function! buftabline#render() let pre = '' if getbufvar(bufnum, '&mod') let tab.hilite = 'Modified' . tab.hilite - if show_mod | let pre = '' . pre | endif + if show_mod | let pre = get(g:, 'buftabline_indicators_char') . pre | endif endif if strlen(pre) | let tab.pre = pre | endif let tabs_per_tail[tab.label] = get(tabs_per_tail, tab.label, 0) + 1 @@ -103,7 +104,7 @@ function! buftabline#render() elseif -1 < index(['nofile','acwrite'], getbufvar(bufnum, '&buftype')) " scratch buffer let tab.label = ( show_mod ? '!' . screen_num : screen_num ? screen_num . ' !' : '!' ) else " unnamed file - let tab.label = ( show_mod && getbufvar(bufnum, '&mod') ? '' : '' ) + let tab.label = ( show_mod && getbufvar(bufnum, '&mod') ? get(g:, 'buftabline_indicators_char') : '' ) \ . ( screen_num ? screen_num : '*' ) endif let tabs += [tab] From ee71e4d516b6afb7db74c0ea7cd4149de7496afe Mon Sep 17 00:00:00 2001 From: Ichirou2910 Date: Mon, 18 Jan 2021 10:56:43 +0700 Subject: [PATCH 05/15] Option to show active file's path or not --- plugin/buftabline.vim | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/plugin/buftabline.vim b/plugin/buftabline.vim index 702dbf7..610ec6a 100644 --- a/plugin/buftabline.vim +++ b/plugin/buftabline.vim @@ -47,6 +47,7 @@ hi default link BufTabLineModifiedHidden BufTabLineHidden let g:buftabline_numbers = get(g:, 'buftabline_numbers', 0) let g:buftabline_indicators = get(g:, 'buftabline_indicators', 0) let g:buftabline_indicators_char = get(g:, 'buftabline_indicators_char', '+') +let g:buftabline_path = get(g:, 'buftabline_path', 0) let g:buftabline_separators = get(g:, 'buftabline_separators', 0) let g:buftabline_show = get(g:, 'buftabline_show', 2) let g:buftabline_plug_max = get(g:, 'buftabline_plug_max', 10) @@ -68,10 +69,11 @@ let s:centerbuf = winbufnr(0) let s:tablineat = has('tablineat') let s:sid = s:SID() | delfunction s:SID function! buftabline#render() - let show_num = g:buftabline_numbers == 1 - let show_ord = g:buftabline_numbers == 2 - let show_mod = g:buftabline_indicators - let lpad = g:buftabline_separators ? nr2char(0x23B8) : ' ' + let show_num = g:buftabline_numbers == 1 + let show_path = g:buftabline_path == 1 + let show_ord = g:buftabline_numbers == 2 + let show_mod = g:buftabline_indicators + let lpad = g:buftabline_separators ? nr2char(0x23B8) : ' ' let bufnums = buftabline#user_buffers() let centerbuf = s:centerbuf " prevent tabline jumping around when non-user buffer current (e.g. help) @@ -174,7 +176,7 @@ function! buftabline#render() let swallowclicks = '%'.(1 + tabpagenr('$')).'X' let activeFilePath = '' " Hide term path 'term:///' - if expand('%:~:.') !~ '^term:' + if show_path && expand('%:~:.') !~ '^term:' let activeFilePath = '%#BufTabLinePath#%=%{expand("%:~:.")} ' endif return s:tablineat From 29a62529d0406d01356a4e60ae6e97a5a4a3cfcc Mon Sep 17 00:00:00 2001 From: Ichirou2910 Date: Mon, 18 Jan 2021 11:07:42 +0700 Subject: [PATCH 06/15] Fix parts not displayed --- plugin/buftabline.vim | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugin/buftabline.vim b/plugin/buftabline.vim index 610ec6a..6ec0535 100644 --- a/plugin/buftabline.vim +++ b/plugin/buftabline.vim @@ -73,6 +73,7 @@ function! buftabline#render() let show_path = g:buftabline_path == 1 let show_ord = g:buftabline_numbers == 2 let show_mod = g:buftabline_indicators + let mod_char = g:buftabline_indicators_char let lpad = g:buftabline_separators ? nr2char(0x23B8) : ' ' let bufnums = buftabline#user_buffers() @@ -98,7 +99,7 @@ function! buftabline#render() let pre = '' if getbufvar(bufnum, '&mod') let tab.hilite = 'Modified' . tab.hilite - if show_mod | let pre = get(g:, 'buftabline_indicators_char') . pre | endif + if show_mod | let pre = mod_char . pre | endif endif if strlen(pre) | let tab.pre = pre | endif let tabs_per_tail[tab.label] = get(tabs_per_tail, tab.label, 0) + 1 @@ -106,7 +107,7 @@ function! buftabline#render() elseif -1 < index(['nofile','acwrite'], getbufvar(bufnum, '&buftype')) " scratch buffer let tab.label = ( show_mod ? '!' . screen_num : screen_num ? screen_num . ' !' : '!' ) else " unnamed file - let tab.label = ( show_mod && getbufvar(bufnum, '&mod') ? get(g:, 'buftabline_indicators_char') : '' ) + let tab.label = ( show_mod && getbufvar(bufnum, '&mod') ? mod_char : '' ) \ . ( screen_num ? screen_num : '*' ) endif let tabs += [tab] From eba5392b277e00b18cac1a8a0bde405512cb7262 Mon Sep 17 00:00:00 2001 From: Ichirou2910 Date: Tue, 19 Jan 2021 11:19:52 +0700 Subject: [PATCH 07/15] Readonly indicator --- plugin/buftabline.vim | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/plugin/buftabline.vim b/plugin/buftabline.vim index 6ec0535..731481e 100644 --- a/plugin/buftabline.vim +++ b/plugin/buftabline.vim @@ -32,21 +32,25 @@ scriptencoding utf-8 hi default link BufTabLineCurrent TabLineSel hi default link BufTabLineActive PmenuSel hi default link BufTabLineHidden TabLine -hi default link BufTabLineNumCurrent BufTabLineCurrent -hi default link BufTabLineNumActive BufTabLineActive -hi default link BufTabLineNumHidden BufTabLineHidden -hi default link BufTabLineModCurrent BufTabLineCurrent -hi default link BufTabLineModActive BufTabLineActive -hi default link BufTabLineModHidden BufTabLineHidden hi default link BufTabLinePath BufTabLineCurrent hi default link BufTabLineFill TabLineFill hi default link BufTabLineModifiedCurrent BufTabLineCurrent hi default link BufTabLineModifiedActive BufTabLineActive hi default link BufTabLineModifiedHidden BufTabLineHidden +hi default link BufTabLineNumCurrent BufTabLineCurrent +hi default link BufTabLineNumActive BufTabLineActive +hi default link BufTabLineNumHidden BufTabLineHidden +hi default link BufTabLineNumModifiedCurrent BufTabLineNumCurrent +hi default link BufTabLineNumModifiedActive BufTabLineNumActive +hi default link BufTabLineNumModifiedHidden BufTabLineNumHidden +hi default link BufTabLineCharModifiedCurrent BufTabLineModifiedCurrent +hi default link BufTabLineCharModifiedActive BufTabLineModifiedActive +hi default link BufTabLineCharModifiedHidden BufTabLineModifiedHidden let g:buftabline_numbers = get(g:, 'buftabline_numbers', 0) let g:buftabline_indicators = get(g:, 'buftabline_indicators', 0) -let g:buftabline_indicators_char = get(g:, 'buftabline_indicators_char', '+') +let g:buftabline_indicators_mod = get(g:, 'buftabline_indicators_mod', '+') +let g:buftabline_indicators_ro = get(g:, 'buftabline_indicators_ro', '-') let g:buftabline_path = get(g:, 'buftabline_path', 0) let g:buftabline_separators = get(g:, 'buftabline_separators', 0) let g:buftabline_show = get(g:, 'buftabline_show', 2) @@ -72,8 +76,9 @@ function! buftabline#render() let show_num = g:buftabline_numbers == 1 let show_path = g:buftabline_path == 1 let show_ord = g:buftabline_numbers == 2 - let show_mod = g:buftabline_indicators - let mod_char = g:buftabline_indicators_char + let show_idc = g:buftabline_indicators + let mod_char = g:buftabline_indicators_mod + let ro_char = g:buftabline_indicators_ro let lpad = g:buftabline_separators ? nr2char(0x23B8) : ' ' let bufnums = buftabline#user_buffers() @@ -97,18 +102,20 @@ function! buftabline#render() let tab.label = tab.path[tab.sep + 1:] " let pre = screen_num let pre = '' - if getbufvar(bufnum, '&mod') + let mod = getbufvar(bufnum, '&mod') + let ro = getbufvar(bufnum, '&ro') + if mod || ro let tab.hilite = 'Modified' . tab.hilite - if show_mod | let pre = mod_char . pre | endif + if show_idc | let pre = (ro ? ro_char : '') . (mod ? mod_char : '') | endif endif if strlen(pre) | let tab.pre = pre | endif let tabs_per_tail[tab.label] = get(tabs_per_tail, tab.label, 0) + 1 let path_tabs += [tab] elseif -1 < index(['nofile','acwrite'], getbufvar(bufnum, '&buftype')) " scratch buffer - let tab.label = ( show_mod ? '!' . screen_num : screen_num ? screen_num . ' !' : '!' ) + let tab.label = ( show_idc ? '!' . screen_num : screen_num ? screen_num . ' !' : '!' ) else " unnamed file - let tab.label = ( show_mod && getbufvar(bufnum, '&mod') ? mod_char : '' ) - \ . ( screen_num ? screen_num : '*' ) + let tab.label = ( screen_num ? screen_num : '*' ) + \ . ( show_idc && getbufvar(bufnum, '&mod') ? mod_char : '' ) endif let tabs += [tab] endfor @@ -136,7 +143,12 @@ 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') . '%#BufTabLineMod' . tab.hilite . '#' . tab.pre . ' ' + let tab.label = lpad . '%#BufTabLineNum' . tab.hilite . '#' . tab.idx . ' %#BufTabLine' . tab.hilite . '#' . substitute(strtrans(tab.label), '%', '%%', 'g') + 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 let lft.width += halfwidth From 538d43d3679565449daed0e43bb38360ce81c129 Mon Sep 17 00:00:00 2001 From: Ichirou2910 Date: Tue, 19 Jan 2021 11:33:55 +0700 Subject: [PATCH 08/15] Update doc --- doc/buftabline.txt | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/doc/buftabline.txt b/doc/buftabline.txt index dc54ac9..6e966b3 100644 --- a/doc/buftabline.txt +++ b/doc/buftabline.txt @@ -52,15 +52,23 @@ effect immediately unless you force an update: > *g:buftabline_indicators* boolean (default off) When on, the buffer's state is indicated in the buffer label. Currently - the only state indicated is whether the buffer is 'modified'. + it indicates whether the buffer is 'modified' or/and is 'readonly'. -*g:buftabline_separators* boolean (default off) +*g:buftabline_indicators_mod* string (default '+') - When on, a vertical line is drawn inbetween tabs. (This is not strictly - correct. The effect is actually achieved by replacing the space on the - left side of each tab with U+23B8 LEFT VERTICAL BOX LINE. Therefore the - separator will be highlighted the same way as the tab to its left.) + What to display when a buffer is 'modified' + + +*g:buftabline_indicators_ro* string (default '-') + + What to display when a buffer is 'readonly' + + +*g:buftabline_path* boolean (default off) + + When on, the buffer's relative file path to the working directory is + indicated on the right of the tabline *g:buftabline_plug_max* number (default 10) @@ -124,14 +132,23 @@ colorscheme for this plugin specifically. The highlight groups and their default links are as follows: -Custom group Default link Meaning -*BufTabLineCurrent* |TabLineSel| Buffer shown in current window -*BufTabLineActive* |PmenuSel| Buffer shown in other window -*BufTabLineHidden* |TabLine| Buffer not currently visible -*BufTabLineFill* |TabLineFill| Empty area -*BufTabLineModifiedCurrent* |BufTabLineCurrent| (Same as linked but 'modified') -*BufTabLineModifiedActive* |BufTabLineActive| (Same as linked but 'modified') -*BufTabLineModifiedHidden* |BufTabLineHidden| (Same as linked but 'modified') +Custom group Default link Meaning +*BufTabLineCurrent* |TabLineSel| Buffer shown in current window +*BufTabLineActive* |PmenuSel| Buffer shown in other window +*BufTabLineHidden* |TabLine| Buffer not currently visible +*BufTabLineFill* |TabLineFill| Empty area +*BufTabLineModifiedCurrent* |BufTabLineCurrent| (Same as linked but 'modified') +*BufTabLineModifiedActive* |BufTabLineActive| (Same as linked but 'modified') +*BufTabLineModifiedHidden* |BufTabLineHidden| (Same as linked but 'modified') +BufTabLineNumCurrent BufTabLineCurrent Buffer number +BufTabLineNumActive BufTabLineActive (same as buffer's) +BufTabLineNumHidden BufTabLineHidden (same as buffer's) +BufTabLineNumModifiedCurrent BufTabLineNumCurrent (same as buffer's) +BufTabLineNumModifiedActive BufTabLineNumActive (same as buffer's) +BufTabLineNumModifiedHidden BufTabLineNumHidden (same as buffer's) +BufTabLineCharModifiedCurrent BufTabLineModifiedCurrent Buffer indicator +BufTabLineCharModifiedActive BufTabLineModifiedActive (same as buffer's) +BufTabLineCharModifiedHidden BufTabLineModifiedHidden (same as buffer's) ============================================================================== From 6f2b412a059a6ea7cef2eb0b4ecf18a74d3fb9a5 Mon Sep 17 00:00:00 2001 From: Ichirou2910 Date: Tue, 19 Jan 2021 11:37:16 +0700 Subject: [PATCH 09/15] Update doc format --- doc/buftabline.txt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/buftabline.txt b/doc/buftabline.txt index 6e966b3..84b79dc 100644 --- a/doc/buftabline.txt +++ b/doc/buftabline.txt @@ -140,15 +140,15 @@ Custom group Default link Meaning *BufTabLineModifiedCurrent* |BufTabLineCurrent| (Same as linked but 'modified') *BufTabLineModifiedActive* |BufTabLineActive| (Same as linked but 'modified') *BufTabLineModifiedHidden* |BufTabLineHidden| (Same as linked but 'modified') -BufTabLineNumCurrent BufTabLineCurrent Buffer number -BufTabLineNumActive BufTabLineActive (same as buffer's) -BufTabLineNumHidden BufTabLineHidden (same as buffer's) -BufTabLineNumModifiedCurrent BufTabLineNumCurrent (same as buffer's) -BufTabLineNumModifiedActive BufTabLineNumActive (same as buffer's) -BufTabLineNumModifiedHidden BufTabLineNumHidden (same as buffer's) -BufTabLineCharModifiedCurrent BufTabLineModifiedCurrent Buffer indicator -BufTabLineCharModifiedActive BufTabLineModifiedActive (same as buffer's) -BufTabLineCharModifiedHidden BufTabLineModifiedHidden (same as buffer's) +*BufTabLineNumCurrent* |BufTabLineCurrent| Buffer number +*BufTabLineNumActive* |BufTabLineActive| (same as buffer's) +*BufTabLineNumHidden* |BufTabLineHidden| (same as buffer's) +*BufTabLineNumModifiedCurrent* |BufTabLineNumCurrent| (same as buffer's) +*BufTabLineNumModifiedActive* |BufTabLineNumActive| (same as buffer's) +*BufTabLineNumModifiedHidden* |BufTabLineNumHidden| (same as buffer's) +*BufTabLineCharModifiedCurrent* |BufTabLineModifiedCurrent| Buffer indicator +*BufTabLineCharModifiedActive* |BufTabLineModifiedActive| (same as buffer's) +*BufTabLineCharModifiedHidden* |BufTabLineModifiedHidden| (same as buffer's) ============================================================================== From 72e3f35b4ec076251a48601b55da0779fde89239 Mon Sep 17 00:00:00 2001 From: Ichirou2910 Date: Tue, 19 Jan 2021 11:39:37 +0700 Subject: [PATCH 10/15] Restore accidentally deleted part of doc --- doc/buftabline.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/buftabline.txt b/doc/buftabline.txt index 84b79dc..416c9ca 100644 --- a/doc/buftabline.txt +++ b/doc/buftabline.txt @@ -65,6 +65,14 @@ effect immediately unless you force an update: > What to display when a buffer is 'readonly' +*g:buftabline_separators* boolean (default off) + + When on, a vertical line is drawn inbetween tabs. (This is not strictly + correct. The effect is actually achieved by replacing the space on the + left side of each tab with U+23B8 LEFT VERTICAL BOX LINE. Therefore the + separator will be highlighted the same way as the tab to its left.) + + *g:buftabline_path* boolean (default off) When on, the buffer's relative file path to the working directory is From b4c4f1120948e13eac287d536266e776789b7ab7 Mon Sep 17 00:00:00 2001 From: Ichirou2910 Date: Wed, 20 Jan 2021 11:49:30 +0700 Subject: [PATCH 11/15] vim-devicons integration --- plugin/buftabline.vim | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugin/buftabline.vim b/plugin/buftabline.vim index 731481e..77a6b12 100644 --- a/plugin/buftabline.vim +++ b/plugin/buftabline.vim @@ -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', '-') @@ -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) : ' ' @@ -100,6 +102,9 @@ function! buftabline#render() let tab.path = fnamemodify(bufpath, ':p:~:.') let tab.sep = strridx(tab.path, s:dirsep, strlen(tab.path) - 2) " keep trailing dirsep let tab.label = tab.path[tab.sep + 1:] + if show_icon && exists("*WebDevIconsGetFileTypeSymbol") + let tab.label = WebDevIconsGetFileTypeSymbol(tab.path) . tab.label . ' ' + endif " let pre = screen_num let pre = '' let mod = getbufvar(bufnum, '&mod') From b2f3fed7670b09ce275bf30c40d87a2cf8859df3 Mon Sep 17 00:00:00 2001 From: Ichirou2910 Date: Wed, 20 Jan 2021 11:50:53 +0700 Subject: [PATCH 12/15] Fix spacing --- plugin/buftabline.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/buftabline.vim b/plugin/buftabline.vim index 77a6b12..87bd12c 100644 --- a/plugin/buftabline.vim +++ b/plugin/buftabline.vim @@ -103,7 +103,7 @@ function! buftabline#render() let tab.sep = strridx(tab.path, s:dirsep, strlen(tab.path) - 2) " keep trailing dirsep let tab.label = tab.path[tab.sep + 1:] if show_icon && exists("*WebDevIconsGetFileTypeSymbol") - let tab.label = WebDevIconsGetFileTypeSymbol(tab.path) . tab.label . ' ' + let tab.label = WebDevIconsGetFileTypeSymbol(tab.path) . ' ' . tab.label endif " let pre = screen_num let pre = '' From c5daf233d579ff000fef116c350014935883d715 Mon Sep 17 00:00:00 2001 From: Ichirou2910 Date: Sat, 23 Jan 2021 11:00:36 +0700 Subject: [PATCH 13/15] Icons color based on filetypes --- after/plugin/buftabicons.vim | 226 +++++++++++++++++++++++++++++++++++ plugin/buftabline.vim | 14 ++- 2 files changed, 237 insertions(+), 3 deletions(-) create mode 100644 after/plugin/buftabicons.vim diff --git a/after/plugin/buftabicons.vim b/after/plugin/buftabicons.vim new file mode 100644 index 0000000..ae1eaf3 --- /dev/null +++ b/after/plugin/buftabicons.vim @@ -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 + + diff --git a/plugin/buftabline.vim b/plugin/buftabline.vim index 731481e..c8c5e3a 100644 --- a/plugin/buftabline.vim +++ b/plugin/buftabline.vim @@ -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', '-') @@ -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) : ' ' @@ -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') @@ -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 From 82cb368ec8dd664599dddcf9194e8aa2aee10a66 Mon Sep 17 00:00:00 2001 From: Ichirou2910 Date: Wed, 27 Jan 2021 01:02:22 +0700 Subject: [PATCH 14/15] Rewrite filetype classification --- after/plugin/buftabicons.vim | 298 +++++++++++++---------------------- plugin/buftabline.vim | 13 +- plugin/utils.vim | 168 ++++++++++++++++++++ 3 files changed, 293 insertions(+), 186 deletions(-) create mode 100644 plugin/utils.vim diff --git a/after/plugin/buftabicons.vim b/after/plugin/buftabicons.vim index ae1eaf3..8582bc5 100644 --- a/after/plugin/buftabicons.vim +++ b/after/plugin/buftabicons.vim @@ -11,191 +11,122 @@ fun! s:X(group, fg, bg, 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 + \ 'default' : 'ffffff', + \ 'styl' : '8dc149', + \ 'sass' : 'f55385', + \ 'scss' : 'f55385', + \ 'htm' : 'e37933', + \ 'html' : 'e37933', + \ 'erb' : 'cc3e44', + \ 'slim' : 'd4843e', + \ 'ejs' : 'cbcb41', + \ 'css' : '519aba', + \ 'less' : '03589c', + \ 'md' : '519aba', + \ 'mdx' : '519aba', + \ 'markdown' : '519aba', + \ 'rmd' : '519aba', + \ 'json' : 'cbcb41', + \ 'js' : 'cbcb41', + \ 'mjs' : 'cbcb41', + \ 'jsx' : '519aba', + \ 'rb' : 'cc3e44', + \ 'php' : 'a074c4', + \ 'py' : '519aba', + \ 'pyc' : '519aba', + \ 'pyo' : '519aba', + \ 'pyd' : '519aba', + \ 'coffee' : '905532', + \ 'mustache' : 'd4843e', + \ 'hbs' : 'd4843e', + \ 'conf' : '6d8086', + \ 'ini' : '6d8086', + \ 'yml' : '6d8086', + \ 'yaml' : '6d8086', + \ 'toml' : '6d8086', + \ 'bat' : '6d8086', + \ 'jpg' : '3affdb', + \ 'jpeg' : '3affdb', + \ 'bmp' : '3affdb', + \ 'png' : '3affdb', + \ 'webp' : '3affdb', + \ 'gif' : '3affdb', + \ 'ico' : '3affdb', + \ 'twig' : '8dc149', + \ 'cpp' : '519aba', + \ 'cxx' : '519aba', + \ 'cc' : '519aba', + \ 'cp' : '519aba', + \ 'c' : '519aba', + \ 'cs' : '519aba', + \ 'h' : '519aba', + \ 'hh' : '519aba', + \ 'hpp' : '519aba', + \ 'hxx' : '519aba', + \ 'hs' : 'f5c06f', + \ 'lhs' : 'f5c06f', + \ 'lua' : '519aba', + \ 'java' : 'cc3e44', + \ 'sh' : '4d5a5e', + \ 'fish' : '8dc149', + \ 'bash' : '4d5a5e', + \ 'zsh' : '4d5a5e', + \ 'ksh' : '4d5a5e', + \ 'csh' : '4d5a5e', + \ 'awk' : 'ffffff', + \ 'ps1' : '4d5a5e', + \ 'ml' : 'e37933', + \ 'mli' : 'e37933', + \ 'diff' : '4d5a5e', + \ 'db' : 'f55385', + \ 'sql' : 'f55385', + \ 'dump' : 'f55385', + \ 'clj' : '8dc149', + \ 'cljc' : '8dc149', + \ 'cljs' : '8dc149', + \ 'edn' : '519aba', + \ 'scala' : 'cc3e44', + \ 'go' : '519aba', + \ 'dart' : '03589c', + \ 'xul' : 'e37933', + \ 'sln' : '854cc7', + \ 'suo' : '854cc7', + \ 'pl' : '519aba', + \ 'pm' : '519aba', + \ 't' : '519aba', + \ 'rss' : 'e37933', + \ 'f#' : '03589c', + \ 'fsscript' : '519aba', + \ 'fsx' : '519aba', + \ 'fs' : '519aba', + \ 'fsi' : '519aba', + \ 'rs' : '519aba', + \ 'rlib' : '519aba', + \ 'd' : 'cc3e44', + \ 'erl' : 'a90533', + \ 'hrl' : 'f55385', + \ 'ex' : 'a074c4', + \ 'exs' : 'a074c4', + \ 'eex' : 'a074c4', + \ 'leex' : 'ffffff', + \ 'vim' : '019833', + \ 'ai' : 'e37933', + \ 'psd' : '03589c', + \ 'psb' : '03589c', + \ 'ts' : '519aba', + \ 'tsx' : '519aba', + \ 'jl' : '9558be', + \ 'pp' : 'ffffff', + \ 'vue' : '8dc149', + \ 'elm' : 'ffffff', + \ 'swift' : 'e37933', + \ 'docker' : '519aba', + \ 'git' : 'e37933', + \ 'license' : 'cbcb41', + \ 'xcplayground' : 'd4843e' \} -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 @@ -208,12 +139,9 @@ 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 diff --git a/plugin/buftabline.vim b/plugin/buftabline.vim index c8c5e3a..5c47e0e 100644 --- a/plugin/buftabline.vim +++ b/plugin/buftabline.vim @@ -100,16 +100,27 @@ function! buftabline#render() let bufpath = bufname(bufnum) if strlen(bufpath) let tab.path = fnamemodify(bufpath, ':p:~:.') - let tab.ftp = fnamemodify(bufpath, ':e') + let tab.ftp = 'default' 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 = '' + + " TODO: classify by '.' + let ftp = utils#getftp(tab.path) + if ftp == '' + let ftp = getbufvar(bufnum, '&ft') + if ftp == '' + let ftp = 'default' + endif + endif + let mod = getbufvar(bufnum, '&mod') let ro = getbufvar(bufnum, '&ro') if mod || ro let tab.hilite = 'Modified' . tab.hilite if show_idc | let pre = (ro ? ro_char : '') . (mod ? mod_char : '') | endif endif + if strlen(ftp) | let tab.ftp = ftp | endif if strlen(pre) | let tab.pre = pre | endif let tabs_per_tail[tab.label] = get(tabs_per_tail, tab.label, 0) + 1 let path_tabs += [tab] diff --git a/plugin/utils.vim b/plugin/utils.vim new file mode 100644 index 0000000..360e9fe --- /dev/null +++ b/plugin/utils.vim @@ -0,0 +1,168 @@ +" let s:file_extension_matches = { +" \ 'styl' : green, +" \ 'sass' : pink, +" \ 'scss' : pink, +" \ 'htm' : darkOrange, +" \ 'html' : darkOrange, +" \ 'erb' : red, +" \ 'slim' : orange, +" \ 'ejs' : yellow, +" \ 'css' : blue, +" \ 'less' : darkBlue, +" \ 'md' : yellow, +" \ 'mdx' : yellow, +" \ 'markdown' : yellow, +" \ 'rmd' : yellow, +" \ 'json' : beige, +" \ 'js' : beige, +" \ 'mjs' : beige, +" \ 'jsx' : blue, +" \ 'rb' : red, +" \ 'php' : purple, +" \ 'py' : yellow, +" \ 'pyc' : yellow, +" \ 'pyo' : yellow, +" \ 'pyd' : yellow, +" \ 'coffee' : brown, +" \ 'mustache' : orange, +" \ 'hbs' : orange, +" \ 'conf' : white, +" \ 'ini' : white, +" \ 'yml' : white, +" \ 'yaml' : white, +" \ 'toml' : white, +" \ 'bat' : white, +" \ 'jpg' : aqua, +" \ 'jpeg' : aqua, +" \ 'bmp' : aqua, +" \ 'png' : aqua, +" \ 'webp' : aqua, +" \ 'gif' : aqua, +" \ 'ico' : aqua, +" \ 'twig' : green, +" \ 'cpp' : blue, +" \ 'c++' : blue, +" \ 'cxx' : blue, +" \ 'cc' : blue, +" \ 'cp' : blue, +" \ 'c' : blue, +" \ 'cs' : blue, +" \ 'h' : blue, +" \ 'hh' : blue, +" \ 'hpp' : blue, +" \ 'hxx' : blue, +" \ 'hs' : beige, +" \ 'lhs' : beige, +" \ 'lua' : purple, +" \ 'java' : purple, +" \ 'sh' : lightPurple, +" \ 'fish' : green, +" \ 'bash' : lightPurple, +" \ 'zsh' : white, +" \ 'ksh' : white, +" \ 'csh' : white, +" \ 'awk' : white, +" \ 'ps1' : blue, +" \ 'ml' : yellow, +" \ 'mli' : yellow, +" \ 'diff' : white, +" \ 'db' : blue, +" \ 'sql' : darkBlue, +" \ 'dump' : blue, +" \ 'clj' : green, +" \ 'cljc' : green, +" \ 'cljs' : green, +" \ 'edn' : green, +" \ 'scala' : red, +" \ 'go' : beige, +" \ 'dart' : blue, +" \ 'xul' : darkOrange, +" \ 'sln' : purple, +" \ 'suo' : purple, +" \ 'pl' : blue, +" \ 'pm' : blue, +" \ 't' : blue, +" \ 'rss' : darkOrange, +" \ 'f#' : darkBlue, +" \ 'fsscript' : blue, +" \ 'fsx' : blue, +" \ 'fs' : blue, +" \ 'fsi' : blue, +" \ 'rs' : darkOrange, +" \ 'rlib' : darkOrange, +" \ 'd' : red, +" \ 'erl' : lightPurple, +" \ 'hrl' : pink, +" \ 'ex' : purple, +" \ 'exs' : purple, +" \ 'eex' : purple, +" \ 'leex' : white, +" \ 'vim' : green, +" \ 'ai' : darkOrange, +" \ 'psd' : darkBlue, +" \ 'psb' : darkBlue, +" \ 'ts' : blue, +" \ 'tsx' : blue, +" \ 'jl' : juliaPurple, +" \ 'pp' : white, +" \ 'vue' : vuejs, +" \ 'elm' : white, +" \ 'swift' : orange, +" \ 'xcplayground' : s:orange +" \} + +let s:file_node_exact_matches = { + \ 'gruntfile.coffee' : 'gruntfile', + \ 'gruntfile.js' : 'gruntfile', + \ 'gruntfile.ls' : 'procfile', + \ 'gulpfile.coffee' : 'gulpfile', + \ 'gulpfile.js' : 'gulpfile', + \ 'gulpfile.ls' : 'gulpfile', + \ 'mix.lock' : 'mix', + \ 'dropbox' : 'dropbox', + \ '.gitconfig' : 'git', + \ '.gitignore' : 'git', + \ '.gitlab-ci.yml' : 'git', + \ '.bashrc' : 'bashrc', + \ '.zshrc' : 'bashrc', + \ '.vimrc' : 'vim', + \ '.gvimrc' : 'vim', + \ '_vimrc' : 'vim', + \ '_gvimrc' : 'vim', + \ '.bashprofile' : 'bashrc', + \ 'favicon.ico' : 'favicon', + \ 'license' : 'license', + \ 'procfile' : 'procfile', + \ 'dockerfile' : 'docker', + \ 'docker-compose.yml' : 'docker', + \ 'makefile' : 'makefile', + \ 'cmakelists.txt' : 'cmake', +\} + +let s:file_node_pattern_matches = { + \ '.*jquery.*\.js$' : 'jquery', + \ '.*angular.*\.js$' : 'angular', + \ '.*backbone.*\.js$' : 'backbone', + \ '.*require.*\.js$' : 'requirejs', + \ '.*materialize.*\.js$' : 'materialize', + \ '.*materialize.*\.css$' : 'materialize', + \ '.*mootools.*\.js$' : 'mootols', + \ '.*vimrc.*' : 'vim' +\} + +function! utils#getftp(fname) + " TODO: classify by '.' + + for [key, val] in items(s:file_node_exact_matches) + if a:fname =~ '\c'.key.'$' + return val + endif + endfor + for [key, val] in items(s:file_node_exact_matches) + if a:fname =~ key + return val + endif + endfor + return '' +endfunction + From 6be27d80b663adf6342801ebca741ef55fc78406 Mon Sep 17 00:00:00 2001 From: Ichirou2910 Date: Wed, 27 Jan 2021 09:28:24 +0700 Subject: [PATCH 15/15] Filetype classification revamp --- after/plugin/buftabicons.vim | 2 +- autoload/buftabline/util.vim | 180 +++++++++++++++++++++++++++++++++++ plugin/utils.vim | 168 -------------------------------- 3 files changed, 181 insertions(+), 169 deletions(-) create mode 100644 autoload/buftabline/util.vim delete mode 100644 plugin/utils.vim diff --git a/after/plugin/buftabicons.vim b/after/plugin/buftabicons.vim index 8582bc5..710e740 100644 --- a/after/plugin/buftabicons.vim +++ b/after/plugin/buftabicons.vim @@ -121,7 +121,7 @@ let s:file_extension_colors = { \ 'vue' : '8dc149', \ 'elm' : 'ffffff', \ 'swift' : 'e37933', - \ 'docker' : '519aba', + \ 'dockerfile' : '519aba', \ 'git' : 'e37933', \ 'license' : 'cbcb41', \ 'xcplayground' : 'd4843e' diff --git a/autoload/buftabline/util.vim b/autoload/buftabline/util.vim new file mode 100644 index 0000000..3df8b50 --- /dev/null +++ b/autoload/buftabline/util.vim @@ -0,0 +1,180 @@ +let s:file_extension_matches = [ + \ 'default' , + \ 'styl' , + \ 'sass' , + \ 'scss' , + \ 'htm' , + \ 'html' , + \ 'erb' , + \ 'slim' , + \ 'ejs' , + \ 'css' , + \ 'less' , + \ 'md' , + \ 'mdx' , + \ 'markdown' , + \ 'rmd' , + \ 'json' , + \ 'js' , + \ 'mjs' , + \ 'jsx' , + \ 'rb' , + \ 'php' , + \ 'py' , + \ 'pyc' , + \ 'pyo' , + \ 'pyd' , + \ 'coffee' , + \ 'mustache' , + \ 'hbs' , + \ 'conf' , + \ 'ini' , + \ 'yml' , + \ 'yaml' , + \ 'toml' , + \ 'bat' , + \ 'jpg' , + \ 'jpeg' , + \ 'bmp' , + \ 'png' , + \ 'webp' , + \ 'gif' , + \ 'ico' , + \ 'twig' , + \ 'cpp' , + \ 'cxx' , + \ 'cc' , + \ 'cp' , + \ 'c' , + \ 'cs' , + \ 'h' , + \ 'hh' , + \ 'hpp' , + \ 'hxx' , + \ 'hs' , + \ 'lhs' , + \ 'lua' , + \ 'java' , + \ 'sh' , + \ 'fish' , + \ 'bash' , + \ 'zsh' , + \ 'ksh' , + \ 'csh' , + \ 'awk' , + \ 'ps1' , + \ 'ml' , + \ 'mli' , + \ 'diff' , + \ 'db' , + \ 'sql' , + \ 'dump' , + \ 'clj' , + \ 'cljc' , + \ 'cljs' , + \ 'edn' , + \ 'scala' , + \ 'go' , + \ 'dart' , + \ 'xul' , + \ 'sln' , + \ 'suo' , + \ 'pl' , + \ 'pm' , + \ 't' , + \ 'rss' , + \ 'f#' , + \ 'fsscript' , + \ 'fsx' , + \ 'fs' , + \ 'fsi' , + \ 'rs' , + \ 'rlib' , + \ 'd' , + \ 'erl' , + \ 'hrl' , + \ 'ex' , + \ 'exs' , + \ 'eex' , + \ 'leex' , + \ 'vim' , + \ 'ai' , + \ 'psd' , + \ 'psb' , + \ 'ts' , + \ 'tsx' , + \ 'jl' , + \ 'pp' , + \ 'vue' , + \ 'elm' , + \ 'swift' , + \ 'dockerfile' , + \ 'git' , + \ 'license' , + \ 'xcplayground' +\] + +let s:file_node_exact_matches = { + \ 'gruntfile.coffee' : 'gruntfile', + \ 'gruntfile.js' : 'gruntfile', + \ 'gruntfile.ls' : 'procfile', + \ 'gulpfile.coffee' : 'gulpfile', + \ 'gulpfile.js' : 'gulpfile', + \ 'gulpfile.ls' : 'gulpfile', + \ 'mix.lock' : 'mix', + \ 'dropbox' : 'dropbox', + \ '.gitconfig' : 'git', + \ '.gitignore' : 'git', + \ '.gitlab-ci.yml' : 'git', + \ '.bashrc' : 'bashrc', + \ '.zshrc' : 'bashrc', + \ '.vimrc' : 'vim', + \ '.gvimrc' : 'vim', + \ '_vimrc' : 'vim', + \ '_gvimrc' : 'vim', + \ '.bashprofile' : 'bashrc', + \ 'favicon.ico' : 'favicon', + \ 'license' : 'license', + \ 'procfile' : 'procfile', + \ 'dockerfile' : 'dockerfile', + \ 'docker-compose.yml' : 'dockerfile', + \ 'makefile' : 'makefile', + \ 'cmakelists.txt' : 'cmake', +\} + +let s:file_node_pattern_matches = { + \ '.*jquery.*\.js$' : 'jquery', + \ '.*angular.*\.js$' : 'angular', + \ '.*backbone.*\.js$' : 'backbone', + \ '.*require.*\.js$' : 'requirejs', + \ '.*materialize.*\.js$' : 'materialize', + \ '.*materialize.*\.css$' : 'materialize', + \ '.*mootools.*\.js$' : 'mootols', + \ '.*vimrc.*' : 'vim' +\} + +function! buftabline#util#getftp(fname) + " Exact match + for [key, val] in items(s:file_node_exact_matches) + if a:fname =~ '\c'.key.'$' + return val + endif + endfor + " Pattern match + for [key, val] in items(s:file_node_exact_matches) + if a:fname =~ key + return val + endif + endfor + " Extension match + let fext = fnamemodify(a:fname, ':e') + for key in s:file_extension_matches + if fext == key + return key + endif + endfor + " None match + return 'default' +endfunction + + diff --git a/plugin/utils.vim b/plugin/utils.vim deleted file mode 100644 index 360e9fe..0000000 --- a/plugin/utils.vim +++ /dev/null @@ -1,168 +0,0 @@ -" let s:file_extension_matches = { -" \ 'styl' : green, -" \ 'sass' : pink, -" \ 'scss' : pink, -" \ 'htm' : darkOrange, -" \ 'html' : darkOrange, -" \ 'erb' : red, -" \ 'slim' : orange, -" \ 'ejs' : yellow, -" \ 'css' : blue, -" \ 'less' : darkBlue, -" \ 'md' : yellow, -" \ 'mdx' : yellow, -" \ 'markdown' : yellow, -" \ 'rmd' : yellow, -" \ 'json' : beige, -" \ 'js' : beige, -" \ 'mjs' : beige, -" \ 'jsx' : blue, -" \ 'rb' : red, -" \ 'php' : purple, -" \ 'py' : yellow, -" \ 'pyc' : yellow, -" \ 'pyo' : yellow, -" \ 'pyd' : yellow, -" \ 'coffee' : brown, -" \ 'mustache' : orange, -" \ 'hbs' : orange, -" \ 'conf' : white, -" \ 'ini' : white, -" \ 'yml' : white, -" \ 'yaml' : white, -" \ 'toml' : white, -" \ 'bat' : white, -" \ 'jpg' : aqua, -" \ 'jpeg' : aqua, -" \ 'bmp' : aqua, -" \ 'png' : aqua, -" \ 'webp' : aqua, -" \ 'gif' : aqua, -" \ 'ico' : aqua, -" \ 'twig' : green, -" \ 'cpp' : blue, -" \ 'c++' : blue, -" \ 'cxx' : blue, -" \ 'cc' : blue, -" \ 'cp' : blue, -" \ 'c' : blue, -" \ 'cs' : blue, -" \ 'h' : blue, -" \ 'hh' : blue, -" \ 'hpp' : blue, -" \ 'hxx' : blue, -" \ 'hs' : beige, -" \ 'lhs' : beige, -" \ 'lua' : purple, -" \ 'java' : purple, -" \ 'sh' : lightPurple, -" \ 'fish' : green, -" \ 'bash' : lightPurple, -" \ 'zsh' : white, -" \ 'ksh' : white, -" \ 'csh' : white, -" \ 'awk' : white, -" \ 'ps1' : blue, -" \ 'ml' : yellow, -" \ 'mli' : yellow, -" \ 'diff' : white, -" \ 'db' : blue, -" \ 'sql' : darkBlue, -" \ 'dump' : blue, -" \ 'clj' : green, -" \ 'cljc' : green, -" \ 'cljs' : green, -" \ 'edn' : green, -" \ 'scala' : red, -" \ 'go' : beige, -" \ 'dart' : blue, -" \ 'xul' : darkOrange, -" \ 'sln' : purple, -" \ 'suo' : purple, -" \ 'pl' : blue, -" \ 'pm' : blue, -" \ 't' : blue, -" \ 'rss' : darkOrange, -" \ 'f#' : darkBlue, -" \ 'fsscript' : blue, -" \ 'fsx' : blue, -" \ 'fs' : blue, -" \ 'fsi' : blue, -" \ 'rs' : darkOrange, -" \ 'rlib' : darkOrange, -" \ 'd' : red, -" \ 'erl' : lightPurple, -" \ 'hrl' : pink, -" \ 'ex' : purple, -" \ 'exs' : purple, -" \ 'eex' : purple, -" \ 'leex' : white, -" \ 'vim' : green, -" \ 'ai' : darkOrange, -" \ 'psd' : darkBlue, -" \ 'psb' : darkBlue, -" \ 'ts' : blue, -" \ 'tsx' : blue, -" \ 'jl' : juliaPurple, -" \ 'pp' : white, -" \ 'vue' : vuejs, -" \ 'elm' : white, -" \ 'swift' : orange, -" \ 'xcplayground' : s:orange -" \} - -let s:file_node_exact_matches = { - \ 'gruntfile.coffee' : 'gruntfile', - \ 'gruntfile.js' : 'gruntfile', - \ 'gruntfile.ls' : 'procfile', - \ 'gulpfile.coffee' : 'gulpfile', - \ 'gulpfile.js' : 'gulpfile', - \ 'gulpfile.ls' : 'gulpfile', - \ 'mix.lock' : 'mix', - \ 'dropbox' : 'dropbox', - \ '.gitconfig' : 'git', - \ '.gitignore' : 'git', - \ '.gitlab-ci.yml' : 'git', - \ '.bashrc' : 'bashrc', - \ '.zshrc' : 'bashrc', - \ '.vimrc' : 'vim', - \ '.gvimrc' : 'vim', - \ '_vimrc' : 'vim', - \ '_gvimrc' : 'vim', - \ '.bashprofile' : 'bashrc', - \ 'favicon.ico' : 'favicon', - \ 'license' : 'license', - \ 'procfile' : 'procfile', - \ 'dockerfile' : 'docker', - \ 'docker-compose.yml' : 'docker', - \ 'makefile' : 'makefile', - \ 'cmakelists.txt' : 'cmake', -\} - -let s:file_node_pattern_matches = { - \ '.*jquery.*\.js$' : 'jquery', - \ '.*angular.*\.js$' : 'angular', - \ '.*backbone.*\.js$' : 'backbone', - \ '.*require.*\.js$' : 'requirejs', - \ '.*materialize.*\.js$' : 'materialize', - \ '.*materialize.*\.css$' : 'materialize', - \ '.*mootools.*\.js$' : 'mootols', - \ '.*vimrc.*' : 'vim' -\} - -function! utils#getftp(fname) - " TODO: classify by '.' - - for [key, val] in items(s:file_node_exact_matches) - if a:fname =~ '\c'.key.'$' - return val - endif - endfor - for [key, val] in items(s:file_node_exact_matches) - if a:fname =~ key - return val - endif - endfor - return '' -endfunction -