From e608a0c016e3ea2ae754d00017e48ba70a3363a1 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Sat, 8 May 2021 00:48:18 +0200 Subject: [PATCH] vim9: Rewrite tabline#formatters#default to Vim9Script --- .../extensions/tabline/formatters/default.vim | 105 ++++++++++++------ 1 file changed, 72 insertions(+), 33 deletions(-) diff --git a/autoload/airline/extensions/tabline/formatters/default.vim b/autoload/airline/extensions/tabline/formatters/default.vim index 8b1553c5..f35ddce4 100644 --- a/autoload/airline/extensions/tabline/formatters/default.vim +++ b/autoload/airline/extensions/tabline/formatters/default.vim @@ -1,45 +1,84 @@ " MIT License. Copyright (c) 2013-2021 Bailey Ling et al. -" vim: et ts=2 sts=2 sw=2 +" vim: et ts=2 sts=2 sw=2 et scriptencoding utf-8 -function! airline#extensions#tabline#formatters#default#format(bufnr, buffers) - let fnametruncate = get(g:, 'airline#extensions#tabline#fnametruncate', 0) - let fmod = get(g:, 'airline#extensions#tabline#fnamemod', ':~:.') - let _ = '' +if !exists(":def") || (exists(":def") && get(g:, "airline_experimental", 0) == 0) + function! airline#extensions#tabline#formatters#default#format(bufnr, buffers) + let fnametruncate = get(g:, 'airline#extensions#tabline#fnametruncate', 0) + let fmod = get(g:, 'airline#extensions#tabline#fnamemod', ':~:.') + let _ = '' - let name = bufname(a:bufnr) - if empty(name) - let _ .= '[No Name]' - elseif name =~ 'term://' - " Neovim Terminal - let _ = substitute(name, '\(term:\)//.*:\(.*\)', '\1 \2', '') - else - if get(g:, 'airline#extensions#tabline#fnamecollapse', 1) - " Does not handle non-ascii characters like Cyrillic: 'D/Учёба/t.c' - "let _ .= substitute(fnamemodify(name, fmod), '\v\w\zs.{-}\ze(\\|/)', '', 'g') - let _ .= pathshorten(fnamemodify(name, fmod)) + let name = bufname(a:bufnr) + if empty(name) + let _ = '[No Name]' + elseif name =~ 'term://' + " Neovim Terminal + let _ = substitute(name, '\(term:\)//.*:\(.*\)', '\1 \2', '') else - let _ .= fnamemodify(name, fmod) + if get(g:, 'airline#extensions#tabline#fnamecollapse', 1) + " Does not handle non-ascii characters like Cyrillic: 'D/Учёба/t.c' + "let _ .= substitute(fnamemodify(name, fmod), '\v\w\zs.{-}\ze(\\|/)', '', 'g') + let _ = pathshorten(fnamemodify(name, fmod)) + else + let _ = fnamemodify(name, fmod) + endif + if a:bufnr != bufnr('%') && fnametruncate && strlen(_) > fnametruncate + let _ = airline#util#strcharpart(_, 0, fnametruncate) + endif endif - if a:bufnr != bufnr('%') && fnametruncate && strlen(_) > fnametruncate - let _ = airline#util#strcharpart(_, 0, fnametruncate) + + return airline#extensions#tabline#formatters#default#wrap_name(a:bufnr, _) + endfunction + + function! airline#extensions#tabline#formatters#default#wrap_name(bufnr, buffer_name) + let buf_nr_format = get(g:, 'airline#extensions#tabline#buffer_nr_format', '%s: ') + let buf_nr_show = get(g:, 'airline#extensions#tabline#buffer_nr_show', 0) + + let _ = buf_nr_show ? printf(buf_nr_format, a:bufnr) : '' + let _ .= substitute(a:buffer_name, '\\', '/', 'g') + + if getbufvar(a:bufnr, '&modified') == 1 + let _ .= g:airline_symbols.modified endif - endif + return _ + endfunction +else + " Vim9 Script implementation + def airline#extensions#tabline#formatters#default#format(bufnr: number, buffers: list): string + var fnametruncate = get(g:, 'airline#extensions#tabline#fnametruncate', 0) + var fmod = get(g:, 'airline#extensions#tabline#fnamemod', ':~:.') + var result = '' - return airline#extensions#tabline#formatters#default#wrap_name(a:bufnr, _) -endfunction + var name = bufname(bufnr) + if empty(name) + result = '[No Name]' + elseif name =~ 'term://' + # Neovim Terminal + result = substitute(name, '\(term:\)//.*:\(.*\)', '\1 \2', '') + else + if get(g:, 'airline#extensions#tabline#fnamecollapse', 1) + result = pathshorten(fnamemodify(name, fmod)) + else + result = fnamemodify(name, fmod) + endif + if bufnr != bufnr('%') && fnametruncate && strlen(result) > fnametruncate + result = airline#util#strcharpart(result, 0, fnametruncate) + endif + endif + return airline#extensions#tabline#formatters#default#wrap_name(bufnr, result) + enddef -function! airline#extensions#tabline#formatters#default#wrap_name(bufnr, buffer_name) - let buf_nr_format = get(g:, 'airline#extensions#tabline#buffer_nr_format', '%s: ') - let buf_nr_show = get(g:, 'airline#extensions#tabline#buffer_nr_show', 0) - let buf_modified_symbol = g:airline_symbols.modified + def airline#extensions#tabline#formatters#default#wrap_name(bufnr: number, buffer_name: string): string + var buf_nr_format = get(g:, 'airline#extensions#tabline#buffer_nr_format', '%s: ') + var buf_nr_show = get(g:, 'airline#extensions#tabline#buffer_nr_show', 0) - let _ = buf_nr_show ? printf(buf_nr_format, a:bufnr) : '' - let _ .= substitute(a:buffer_name, '\\', '/', 'g') + var result = buf_nr_show ? printf(buf_nr_format, bufnr) : '' + result ..= substitute(buffer_name, '\\', '/', 'g') - if getbufvar(a:bufnr, '&modified') == 1 - let _ .= buf_modified_symbol - endif - return _ -endfunction + if getbufvar(bufnr, '&modified') == 1 + result ..= g:airline_symbols.modified + endif + return result + enddef +endif