diff --git a/autoload/wintabs/renderers.vim b/autoload/wintabs/renderers.vim index a0c4ff9..b41249e 100644 --- a/autoload/wintabs/renderers.vim +++ b/autoload/wintabs/renderers.vim @@ -100,7 +100,11 @@ function! wintabs#renderers#padding(len) endfunction function! wintabs#renderers#bufname(bufnr) - let name = fnamemodify(bufname(a:bufnr), ':t') + if exists('*Wintabs_ui_bufname') + let name = g:Wintabs_ui_bufname(a:bufnr) + else + let name = fnamemodify(bufname(a:bufnr), ':t') + endif let name = substitute(name, '%', '%%', 'g') if empty(name) let name = '[No Name]' @@ -122,6 +126,13 @@ function! wintabs#renderers#buf_label(bufnr, config) endfunction function! wintabs#renderers#tab_label(tabnr) + if exists('*Wintabs_ui_tablabel') + let name = g:Wintabs_ui_tablabel(a:tabnr) + if !empty(name) + return name + endif + endif + let label = '' if get(g:, 'loaded_taboo', 0) let label = TabooTabTitle(a:tabnr) diff --git a/doc/wintabs.txt b/doc/wintabs.txt index 9249bdc..e8f16c4 100644 --- a/doc/wintabs.txt +++ b/doc/wintabs.txt @@ -278,6 +278,47 @@ default: ' %t ' '%n': |bufnr()| of buffer '%o': ordinal number of buffer +*g:Wintabs_ui_bufname* +values: function + Function that generates the file name to be used as '%t' for + |g:wintabs_ui_vimtab_name_format|. + By default this uses the file name without any directories + ('%:t'). + You can use this, for example, to display 'my-button/i' + instead of 'index.tsx' for the file 'src/my-button/index.tsx' + for a more useful tabline in JavaScript/TypeScript codebases. + + function! g:Wintabs_ui_bufname(bufnr) + let file = fnamemodify(bufname(a:bufnr), ':t') + + if index(['index.tsx', 'index.ts', 'index.jsx', 'index.js'], file) != -1 + let parent_dir = fnamemodify(bufname(a:bufnr), ':h:t') + return parent_dir . '/i' + endif + + return file + endfunction + +*g:Wintabs_ui_tablabel* +values: function + Function that generates the tab name + |g:wintabs_ui_vimtab_name_format|. + By default this uses the file name without any directories + ('%:t'). + You can use this, for example, to set a user configurable + tab name instead of using the buffer name / tab index. + + function! g:Set_wintabs_tab_name() + let new_name = input('Tab name: ', get(t:, 'wintabs_custom_tab_name', '')) + let t:wintabs_custom_tab_name = new_name + endfunction + command! WintabsSetTabName call g:Set_wintabs_tab_name() + + function! g:Wintabs_ui_tablabel(tabnr) + return gettabvar(a:tabnr, 'wintabs_custom_tab_name') + endfunction + + *g:wintabs_ui_vimtab_name_format* values: string default: ' %n '