summaryrefslogtreecommitdiff
path: root/.vim/miniplugins
diff options
context:
space:
mode:
authorSyndamia <kamen@syndamia.com>2023-02-25 11:21:06 +0200
committerSyndamia <kamen@syndamia.com>2023-02-25 11:21:06 +0200
commitcf7ba097e63d46d770af317c645caf1e8fae49d7 (patch)
tree4da6c2e42a78f4016e32c84b1a694597ac348e88 /.vim/miniplugins
parent9e8621385d27b8d060e471e1cf3b81aa1033cc7f (diff)
downloaddotfiles-cf7ba097e63d46d770af317c645caf1e8fae49d7.tar
dotfiles-cf7ba097e63d46d770af317c645caf1e8fae49d7.tar.gz
dotfiles-cf7ba097e63d46d770af317c645caf1e8fae49d7.zip
[.vim/mp/tl] Added tabline miniplugin, completely replacing lightline
Diffstat (limited to '.vim/miniplugins')
-rw-r--r--.vim/miniplugins/tabline.vim85
1 files changed, 85 insertions, 0 deletions
diff --git a/.vim/miniplugins/tabline.vim b/.vim/miniplugins/tabline.vim
new file mode 100644
index 0000000..63d927a
--- /dev/null
+++ b/.vim/miniplugins/tabline.vim
@@ -0,0 +1,85 @@
+let tabcap = ''
+let tabmiddlecap = ''
+
+set tabline=%!TablineGenerator()
+
+" Tab data/helper functions {{{
+ function! TabFilename(n)
+ let buflist = tabpagebuflist(a:n)
+ let winnr = tabpagewinnr(a:n)
+ let _ = (expand('#'..buflist[winnr - 1]..':t') !=# '') ? expand('#'..buflist[winnr - 1]..':t') : '[No Name]'
+
+ " Limit the width of tabs, so they don't go out of the screen
+ let tabNameLengthMax = &columns/(((tabpagenr('$') > 0) ? tabpagenr('$') : 0) + 5)
+
+ return WebDevIconsGetFileTypeSymbol(_) .. ' ' .. _[0:tabNameLengthMax]
+ endfunction
+
+ function! TabReadonly(n)
+ let winnr = tabpagewinnr(a:n)
+ return gettabwinvar(a:n, winnr, '&readonly') ? ' ' : ''
+ endfunction
+
+ function! TabModified(n)
+ let winnr = tabpagewinnr(a:n)
+ return gettabwinvar(a:n, winnr, '&modified') ? ' ' : (gettabwinvar(a:n, winnr, '&modifiable') ? '' : ' ')
+ endfunction
+" }}}
+
+" Colors {{{
+ hi TLTab ctermfg=252 ctermbg=242
+ hi TLTabSel ctermfg=252 ctermbg=235
+ hi TLRest ctermfg=248 ctermbg=238
+
+ let s:hi_tltab = hlget('TLTab')[0]
+ let s:hi_tltabsel = hlget('TLTabSel')[0]
+ let s:hi_tlrest = hlget('TLRest')[0]
+ call hlset([#{name: 'TLTabSelLC', ctermfg: s:hi_tltab['ctermbg'], ctermbg: s:hi_tltabsel['ctermbg'] },
+ \ #{name: 'TLTabSelRC', ctermfg: s:hi_tltabsel['ctermbg'], ctermbg: s:hi_tltab['ctermbg'] },
+ \ #{name: 'TLTabSelRCF', ctermfg: s:hi_tltabsel['ctermbg'], ctermbg: s:hi_tlrest['ctermbg'] },
+ \ #{name: 'TLTabRCF', ctermfg: s:hi_tltab['ctermbg'], ctermbg: s:hi_tlrest['ctermbg'] }])
+" }}}
+
+function! TablineGenerator()
+ let s = ''
+
+ " For each tab i
+ for i in range(1, tabpagenr('$'))
+ " Sets the tab page number, so that mouse clicks work
+ let s ..= '%' .. i .. 'T'
+
+ let innerText = '%{TabFilename(' .. i .. ')}%{TabReadonly(' .. i .. ')}%{TabModified(' .. i .. ')} '
+
+ " If tab is the selected one
+ if i == tabpagenr()
+ " If tab isn't the left most
+ if i > 1
+ let s ..= '%#TLTabSelLC#%{tabcap}'
+ endif
+
+ let s ..= '%#TLTabSel# ' .. l:innerText
+
+ " If tab is the last one, right cap bg color has to be different
+ let s ..= (i == tabpagenr('$') ? '%#TLTabSelRCF#' : '%#TLTabSelRC#') .. '%{tabcap}'
+
+ else
+ let s ..= '%#TLTab#'
+ " If tab isn't to the right of selected and isn't the left most
+ if (i-1 != tabpagenr()) && (i > 1)
+ let s ..= '%{tabmiddlecap}'
+ endif
+
+ let s ..= ' ' .. l:innerText
+
+ " Last tab has to have a tabcap
+ if i == tabpagenr('$')
+ let s ..= '%#TLTabRCF#%{tabcap}'
+ endif
+ endif
+ endfor
+
+ " After last tab, fill with TLRest
+ let s ..= '%#TLRest#%T'
+
+ return s
+endfunction