Files
vim-airline/autoload/airline/extensions/tabpanel.vim
T
Christian Brabandt 7fe264257e extensions: Add a tabpanel extension
Add a new tabpanel extension that provides airline-styled formatting
for Vim's vertical tab panel feature. Uses airline tabline highlight
groups (TabPanelFill, TabPanelSel, TabPanel) and refreshes them on
theme changes. Requires a Vim version with 'tabpanel' support.

Extension implemented using Vim9Script so not Neovim compatible

fixes:  #2724
closes: #2746

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-12 08:12:11 +00:00

119 lines
2.5 KiB
VimL

vim9script
# MIT License. Copyright (c) 2013-2026 Christian Brabandt et al.
# vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
var spc = g:airline_symbols.space
def IsTabModified(tabnr: number): bool
if !g:airline_detect_modified
return false
endif
for bi in tabpagebuflist(tabnr)
if getbufvar(bi, '&modified')
return true
endif
endfor
return false
enddef
export def Get(): string
var tabnr = g:actual_curtabpage
var curtab = tabpagenr()
var label = ''
if tabnr == 1
label ..= '%#airline_tabfill#'
label ..= get(g:, 'airline#extensions#tabpanel#label', '[tabs]') .. "\n"
endif
var buflist = tabpagebuflist(tabnr)
var winnr = tabpagewinnr(tabnr)
var bufnr = buflist[winnr - 1]
var title = fnamemodify(bufname(bufnr), ':t')
if empty(title)
title = '[No Name]'
endif
if tabnr == curtab
if IsTabModified(tabnr)
label ..= '%#airline_tabmod#'
else
label ..= '%#airline_tabsel#'
endif
else
if IsTabModified(tabnr)
label ..= '%#airline_tabmod_unsel#'
else
label ..= '%#airline_tab#'
endif
endif
if get(g:, 'airline#extensions#tabline#show_tab_nr', 1)
label ..= spc .. tabnr
label ..= spc
endif
label ..= title .. spc
return label
enddef
def LinkHighlights(): void
highlight! link TabPanelFill airline_tabfill
highlight! link TabPanelSel airline_tabsel
highlight! link TabPanel airline_tab
enddef
export def LoadTheme(_: dict<any>): number
LinkHighlights()
return 0
enddef
def Enable(): void
LinkHighlights()
&tabpanel = '%!airline#extensions#tabpanel#Get()'
var cols = get(g:, 'airline#extensions#tabpanel#columns', 20)
var align = get(g:, 'airline#extensions#tabpanel#align', '')
var opts = 'columns:' .. cols
if !empty(align)
opts ..= ',align:' .. align
endif
&tabpanelopt = opts
&showtabpanel = 2
enddef
def Disable(): void
highlight! link TabPanelFill NONE
highlight! link TabPanelSel NONE
highlight! link TabPanel NONE
&tabpanel = ''
&tabpanelopt = ''
&showtabpanel = 0
enddef
export def Init(ext: dict<any>): void
if !exists('+tabpanel')
return
endif
autocmd_add([{
group: 'airline_tabpanel',
event: 'User',
pattern: 'AirlineToggledOn',
cmd: 'Enable()',
replace: true,
}])
autocmd_add([{
group: 'airline_tabpanel',
event: 'User',
pattern: 'AirlineToggledOff',
cmd: 'Disable()',
replace: true,
}])
ext.add_theme_func('airline#extensions#tabpanel#LoadTheme')
Enable()
enddef