diff options
| -rw-r--r-- | README.md | 38 | ||||
| -rw-r--r-- | doc/vim-recently-used.txt | 22 | ||||
| -rwxr-xr-x | plugin/vim-fancy-line.vim | 176 |
3 files changed, 236 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..d808107 --- /dev/null +++ b/README.md | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | # vim-fancy-line | ||
| 2 | |||
| 3 | This statusline is kept minimalistic and easy to understand. Its main feature | ||
| 4 | is, that it uses Vims highlight groups correctly and displays the status- | ||
| 5 | and tab-bar after the definitions in the currently selected colorscheme. | ||
| 6 | That means, that the highlight groups `StatusLine`, `StatusLineNC`, | ||
| 7 | `StatusLineTerm` and `StatusLineTermNC` are considered. Otherwise the bars | ||
| 8 | look similar to powerline, but that is no wonder, because the `` symbol | ||
| 9 | is the only one, which used to be available in code page 437 and thus broadly | ||
| 10 | compatible. | ||
| 11 | |||
| 12 | ## Installation | ||
| 13 | |||
| 14 | This should be sufficient: | ||
| 15 | |||
| 16 | git clone https://git.entwicklerseite.de/vim-fancy-line \ | ||
| 17 | ~/.vim/pack/coderonline/start/vim-fancy-line | ||
| 18 | |||
| 19 | Or as submodule: | ||
| 20 | |||
| 21 | git submodule add https://git.entwicklerseite.de/vim-fancy-line \ | ||
| 22 | ~/.vim/pack/coderonline/start/vim-fancy-line | ||
| 23 | |||
| 24 | Or download the zip file and extract it under `~/.vim/pack/coderonline/start/`. | ||
| 25 | |||
| 26 | ## Installation using plugin managers | ||
| 27 | |||
| 28 | ### vim-plug | ||
| 29 | |||
| 30 | Plug 'coderonline/vim-fancy-line' | ||
| 31 | |||
| 32 | ### dein.vim | ||
| 33 | |||
| 34 | call dein#add('coderonline/vim-fancy-line') | ||
| 35 | |||
| 36 | ## Design goals | ||
| 37 | |||
| 38 | * Keep it simple | ||
diff --git a/doc/vim-recently-used.txt b/doc/vim-recently-used.txt new file mode 100644 index 0000000..f8cb8d6 --- /dev/null +++ b/doc/vim-recently-used.txt | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | *vim-fancy-line.txt* A plugin to make the status and tab line look nicer | ||
| 2 | |||
| 3 | ============================================================================== | ||
| 4 | USAGE INSTRUCTIONS *vim-recently-used-usage* | ||
| 5 | |||
| 6 | |||
| 7 | While this plugin does not have any configuration options in Vim right now, | ||
| 8 | it is necessary to configure the operating system to get the best use out | ||
| 9 | of it. It is recommend to install powerline-console-fonts and set them in | ||
| 10 | `/etc/vconsole.conf` so that the linux terminal displays the bars correctly. | ||
| 11 | |||
| 12 | |||
| 13 | CONSOLE FONTS | ||
| 14 | |||
| 15 | To test ca console font try this (it will not survive a reboot as long | ||
| 16 | as it is not copied to vconsole.conf): | ||
| 17 | |||
| 18 | $ setfont /usr/share/kbd/consolefont/ter-powerline-v16n.psf.gz | ||
| 19 | $ showconsolefont | ||
| 20 | |||
| 21 | |||
| 22 | vim:tw=78:ts=8:ft=help:norl: | ||
diff --git a/plugin/vim-fancy-line.vim b/plugin/vim-fancy-line.vim new file mode 100755 index 0000000..8e470ff --- /dev/null +++ b/plugin/vim-fancy-line.vim | |||
| @@ -0,0 +1,176 @@ | |||
| 1 | scriptencoding utf-8 | ||
| 2 | |||
| 3 | augroup MAX_FANCYLINE | ||
| 4 | set noshowmode | " mode would otherwise be shown twice- in lightline and below. We want to deactivate one. | ||
| 5 | set laststatus=2 | " required by AirLine and Lightline, without status line does not appear until a window split | ||
| 6 | |||
| 7 | |||
| 8 | if (&term ==? 'linux' && &termguicolors == 0) | ||
| 9 | let g:group_active = 'StatusLineTerm' | ||
| 10 | let g:group_inactive = 'StatusLineTermNC' | ||
| 11 | let g:group_tabline = 'TabLine' | ||
| 12 | let g:status_sym_start = '' | ||
| 13 | let g:status_sym_end = '▶' | ||
| 14 | let g:status_sym_sep_start = '│' | ||
| 15 | let g:status_sym_sep_end = '│' | ||
| 16 | let g:symbol_branch = '' | ||
| 17 | let g:symbol_screen_edge = '░' | ||
| 18 | else | ||
| 19 | let g:group_active = 'StatusLine' | ||
| 20 | let g:group_inactive = 'StatusLineNC' | ||
| 21 | let g:group_tabline = 'TabLine' | ||
| 22 | let g:status_sym_start = '' | ||
| 23 | let g:status_sym_end = '' | ||
| 24 | let g:status_sym_sep_start = '│' | ||
| 25 | let g:status_sym_sep_end = '│' | ||
| 26 | let g:symbol_branch = '' | ||
| 27 | let g:symbol_screen_edge = '░' | ||
| 28 | endif | ||
| 29 | |||
| 30 | |||
| 31 | " this function reverts foreground color and background color of a given | ||
| 32 | " highlight group and returns the name of a newly created _invert group | ||
| 33 | function! CreateInvertGroup(highlight_group) | ||
| 34 | |||
| 35 | if(synIDattr(synIDtrans(hlID(a:highlight_group)), 'reverse')==0) | ||
| 36 | let w:color=synIDattr(hlID(a:highlight_group), 'bg#') | ||
| 37 | let w:termcolor=synIDattr(hlID(a:highlight_group), 'bg') | ||
| 38 | else | ||
| 39 | let w:color=synIDattr(hlID(a:highlight_group), 'fg#') | ||
| 40 | let w:termcolor=synIDattr(hlID(a:highlight_group), 'fg') | ||
| 41 | endif | ||
| 42 | |||
| 43 | let l:retval=a:highlight_group.'_invert' | ||
| 44 | if(exists('w:color') && w:color ==# '') | ||
| 45 | let w:color = 'NONE' | ||
| 46 | endif | ||
| 47 | if(exists('w:termcolor') && w:termcolor ==# '') | ||
| 48 | let w:termcolor = 'NONE' | ||
| 49 | endif | ||
| 50 | |||
| 51 | silent! exec 'highlight! '.l:retval.' guifg='.w:color | ||
| 52 | silent! exec 'highlight! '.l:retval.' ctermfg='.w:termcolor | ||
| 53 | |||
| 54 | return l:retval | ||
| 55 | endfunction | ||
| 56 | |||
| 57 | function! UpdateStatus(highlight_group) | ||
| 58 | let l:invert_group = CreateInvertGroup(a:highlight_group) | ||
| 59 | let l:mode = get({ | ||
| 60 | \ 'n' : 'normal', | ||
| 61 | \ 'i' : 'insert', | ||
| 62 | \ 'R' : 'replace', | ||
| 63 | \ 'v' : 'visual', | ||
| 64 | \ 'V' : 'visual line', | ||
| 65 | \ "\<C-V>" : 'visual block', | ||
| 66 | \ 'c' : 'command', | ||
| 67 | \ 's' : 'select', | ||
| 68 | \ 'S' : 'select line', | ||
| 69 | \ "\<C-s>" : 'select block', | ||
| 70 | \ 't' : 'terminal' | ||
| 71 | \ }, mode(), mode()) | ||
| 72 | return '' | ||
| 73 | \ .'%#StatusLineHighlight#' | ||
| 74 | \ .'%#'.a:highlight_group.'#' | ||
| 75 | \ .g:symbol_screen_edge | ||
| 76 | \ .'%{&buftype != "" ? " ".&buftype : ""}' | ||
| 77 | \ .' '.l:mode.g:status_sym_sep_start | ||
| 78 | \ .'%{argc() > 1 ? " ".(argidx() + 1).":".argc()." ".g:status_sym_sep_start : ""}' | ||
| 79 | \ .'%{haslocaldir() ? fnamemodify(getcwd(), ":.:~")." " :""}' | ||
| 80 | \ .'%{&readonly ? " 🔒" : ""}' | ||
| 81 | \ .'%{&modified ? " 💾 " : ""}' | ||
| 82 | \ .'%{" [".winbufnr(0)."] "}' | ||
| 83 | \ .'%{bufname("%") == "" ? "" : fnamemodify(expand("%"), ":~:.")}' | ||
| 84 | \ .'%{&titlestring ? has("nvim") ? b:term_title:expand(&titlestring) : "" }' | ||
| 85 | \ .'%{exists("w:quickfix_title") ? w:quickfix_title : ""}' | ||
| 86 | \ .' ' | ||
| 87 | \ .'%#'.l:invert_group.'#' | ||
| 88 | \ .g:status_sym_end | ||
| 89 | \ .'%<' | ||
| 90 | \ .'' | ||
| 91 | \ .'%=' | ||
| 92 | \ .'' | ||
| 93 | \ .'%#'.l:invert_group.'#' | ||
| 94 | \ .g:status_sym_start | ||
| 95 | \ .'%#'.a:highlight_group.'#'.' ' | ||
| 96 | \ .'%{&buftype == "" ? "" : &buftype." ".g:status_sym_sep_end." "}' | ||
| 97 | \ .'%{&filetype == "" ? "" :&filetype." ".g:status_sym_sep_end." "}' | ||
| 98 | \ .'%{&spell ? &spelllang." ".g:status_sym_sep_end : ""}' | ||
| 99 | \ .'%{&fileencoding =~ "^$\\|^utf\-8$" ? "" : &fileencoding." ".g:status_sym_sep_end." "}' | ||
| 100 | \ .'%{&fileformat =~ "^$\\|^unix$" ? "" : &fileformat." ".g:status_sym_sep_end}' | ||
| 101 | \ .' ' | ||
| 102 | \ .'%cx%-l: ' | ||
| 103 | \ .g:status_sym_sep_end | ||
| 104 | \ .' ' | ||
| 105 | \ .'%p%% ' | ||
| 106 | \ .g:symbol_screen_edge | ||
| 107 | \ .'%#NonText#' | ||
| 108 | endfunction | ||
| 109 | |||
| 110 | function! UpdateTabline(highlight_group) | ||
| 111 | let l:invert_group = CreateInvertGroup(a:highlight_group) | ||
| 112 | let l:git_branch = FugitiveHead() | ||
| 113 | return '' | ||
| 114 | \ .'%#'.a:highlight_group.'#' | ||
| 115 | \ .g:symbol_screen_edge | ||
| 116 | \ .' ' | ||
| 117 | \ .'%#'.a:highlight_group.'#' | ||
| 118 | \ .'%-2( %)' | ||
| 119 | \ .'%{fnamemodify(getcwd(-1), ":~")}' | ||
| 120 | \ .' ' | ||
| 121 | \ .'%{FugitiveHead() == "" ? "" : g:status_sym_sep_start." ".g:symbol_branch." ".FugitiveHead()}' | ||
| 122 | \ .' ' | ||
| 123 | \ .'%#'.l:invert_group.'#' | ||
| 124 | \ .g:status_sym_end | ||
| 125 | \ .'%<' | ||
| 126 | \ .'%=' | ||
| 127 | \ .'%#'.l:invert_group.'#' | ||
| 128 | \ .g:status_sym_start | ||
| 129 | \ .'%(%#'.a:highlight_group.'#%)' | ||
| 130 | \ .' ' | ||
| 131 | \ .'%-2(%)' | ||
| 132 | \ .'%(%#'.a:highlight_group.'#%)' | ||
| 133 | \ .'%(%{v:servername} %{v:this_session}%)' | ||
| 134 | \ .g:status_sym_sep_end.' ' | ||
| 135 | \ .'%-3(%)' | ||
| 136 | \ .'%#'.a:highlight_group.'#' | ||
| 137 | \ .'%{tabpagenr()}/%{tabpagenr()}' | ||
| 138 | \ .' ' | ||
| 139 | \ .g:symbol_screen_edge | ||
| 140 | \ .'%##' | ||
| 141 | endfunction | ||
| 142 | |||
| 143 | |||
| 144 | if $USER ==? 'root' | ||
| 145 | let highlight_group_root = "ErrorMsg" | ||
| 146 | let invert_group = CreateInvertGroup(highlight_group_root) | ||
| 147 | let g:group_tabline = highlight_group_root | ||
| 148 | endif | ||
| 149 | |||
| 150 | function! ApplyColorScheme() | ||
| 151 | " set termguicolors | " When on, uses highlight-guifg and highlight-guibg attributes in the terminal (=24bit color) incompatible with nvim | ||
| 152 | " set t_ut= | ||
| 153 | " set up statusline, global and current window individually | ||
| 154 | set statusline=%!UpdateStatus(g:group_inactive) | ||
| 155 | setlocal statusline=%!UpdateStatus(g:group_active) | ||
| 156 | " set up the tabline (match colors) | ||
| 157 | set tabline=%!UpdateTabline(g:group_tabline) | ||
| 158 | |||
| 159 | " otherwise 'bold' can mess up icon sizes and I do not know why | ||
| 160 | highlight! StatusLine cterm=reverse | ||
| 161 | " exec 'highlight! User3 guifg=#D2A032 guibg='.l:fgcolor | ||
| 162 | |||
| 163 | " workaround for VertSplit looking as a repeated slash, because its an | ||
| 164 | " italic bar... | ||
| 165 | highlight! VertSplit gui=NONE cterm=NONE term=NONE | ||
| 166 | endfunction | ||
| 167 | call ApplyColorScheme() | ||
| 168 | |||
| 169 | " apply colors from the loaded colorscheme... | ||
| 170 | " when changing the colorscheme also apply new colors to the statusbar... | ||
| 171 | autocmd ColorScheme * call ApplyColorScheme() | ||
| 172 | autocmd WinEnter * setlocal statusline=%!UpdateStatus(g:group_active) | ||
| 173 | autocmd WinLeave * setlocal statusline< | ||
| 174 | augroup END " MAX_FANCYLINE | ||
| 175 | |||
| 176 | " vim: shiftwidth=4 tabstop=4 expandtab softtabstop=4 | ||
