From 02c415b428621d86893ca221b242d6eb893cc67c Mon Sep 17 00:00:00 2001 From: Justine Smithies Date: Sun, 23 Nov 2025 20:57:43 +0000 Subject: WIP Working on statusline mode change --- .vimrc | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 78 insertions(+), 17 deletions(-) diff --git a/.vimrc b/.vimrc index 11dee54..cb955f1 100644 --- a/.vimrc +++ b/.vimrc @@ -121,8 +121,8 @@ function! StatuslineMode() endif endfunction -set statusline= -set statusline+=%#Color458588# +"set statusline= +"set statusline+=%#Color458588# "set statusline+=%#DiffAdd#%{(mode()=='n')?'\ \ NORMAL\ ':''} "set statusline+=%#Color458588#%{(mode()=='i')?'\ \ INSERT\ ':''} @@ -130,19 +130,80 @@ set statusline+=%#Color458588# "set statusline+=%#VisualColor#%{(mode()=='v')?'\ \ VISUAL\ ':''} "set statusline+=%#PmenuSel#%{(mode()=='\')?'\ \ BLOCK\ ':''} -set statusline+=\ %{StatuslineMode()}\ -set statusline+=%#DiffAdd# -set statusline+=%{StatuslineGit()} -set statusline+=\ %F -set statusline+=\ %r -set statusline+=%m -set statusline+=%#CursorColumn# -set statusline+=%= -set statusline+=\ %y\ -set statusline+=%#DiffAdd# -set statusline+=\ %{&fileencoding?&fileencoding:&encoding} -set statusline+=\[%{&fileformat}\] -set statusline+=\ %p%% -set statusline+=\ %l:%c -set statusline+=\ +"set statusline+=\ %{StatuslineMode()}\ +"set statusline+=%#DiffAdd# +"set statusline+=%{StatuslineGit()} +"set statusline+=\ %F +"set statusline+=\ %r +"set statusline+=%m +"set statusline+=%#CursorColumn# +"set statusline+=%= +"set statusline+=\ %y\ +"set statusline+=%#DiffAdd# +"set statusline+=\ %{&fileencoding?&fileencoding:&encoding} +"set statusline+=\[%{&fileformat}\] +"set statusline+=\ %p%% +"set statusline+=\ %l:%c +"set statusline+=\ + +let g:mode_colors = { + \ 'n': 'StatusLineSection', + \ 'v': 'StatusLineSectionV', + \ "\": 'StatusLineSectionV', + \ 'i': 'StatusLineSectionI', + \ 'c': 'StatusLineSectionC', + \ 'r': 'StatusLineSectionR' + \ } + +fun! StatusLineRenderer() + let hl = '%#' . get(g:mode_colors, tolower(mode()), g:mode_colors.n) . '#' + + return hl + \ . ' %{StatuslineMode()} ' + \ . '%#DiffAdd#' + \ . '%{StatuslineGit()}' + \ . '%#DiffAdd#' + \ . ' %F ' + \ . ' %r ' + \ . (&modified ? ' + ' : '') + \ . '%#CursorColumn#%=' + \ . hl + \ . '%#DiffAdd#' + \ . ' %{&fileencoding?&fileencoding:&encoding}' + \ . ' [%{&fileformat}]' + \ . ' %p%% ' + \ . ' %l:%c ' +endfun + +fun! StatusLineHighlights() + hi StatusLine ctermbg=8 guibg=#313131 ctermfg=15 guifg=#cccccc + hi StatusLineNC ctermbg=0 guibg=#313131 ctermfg=8 guifg=#999999 + hi StatusLineSection ctermbg=8 guibg=#b8bb26 ctermfg=0 guifg=#333333 + hi StatusLineSectionV ctermbg=11 guibg=#928374 ctermfg=0 guifg=#000000 + hi StatusLineSectionI ctermbg=10 guibg=#83a598 ctermfg=0 guifg=#ffffff + hi StatusLineSectionC ctermbg=12 guibg=#db7b55 ctermfg=0 guifg=#000000 + hi StatusLineSectionR ctermbg=12 guibg=#ed3f45 ctermfg=0 guifg=#000000 +endfun + +call StatusLineHighlights() + +" only set default statusline once on initial startup. +" ignored on subsequent 'so $MYVIMRC' calls to prevent +" active buffer statusline from being 'blurred'. +if has('vim_starting') + let &statusline = ' %{StatusLineFilename()}%= %l:%c ' +endif + +augroup vimrc + au! + " show focussed buffer statusline + au FocusGained,VimEnter,WinEnter,BufWinEnter * + \ setlocal statusline=%!StatusLineRenderer() + + " show blurred buffer statusline + au FocusLost,VimLeave,WinLeave,BufWinLeave * + \ setlocal statusline& + " restore statusline highlights on colorscheme update + au Colorscheme * call StatusLineHighlights() +augroup END -- cgit v1.2.3