scrollbar.vim 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. " MIT License. Copyright (c) 2013-2021
  2. " vim: et ts=2 sts=2 sw=2 et
  3. scriptencoding utf-8
  4. function! airline#extensions#scrollbar#calculate() abort
  5. if winwidth(0) > get(g:, 'airline#extensions#scrollbar#minwidth', 200)
  6. \ && get(w:, 'airline_active', 0)
  7. let overwrite = 0
  8. if &encoding ==? 'utf-8' && !get(g:, 'airline_symbols_ascii', 0)
  9. let [left, right, middle] = [ '|', '|', '█']
  10. let overwrite = 1
  11. else
  12. let [left, right, middle] = [ '[', ']', '-']
  13. endif
  14. let spc = get(g:, 'airline_symbols.space', ' ')
  15. let width = 20 " max width, plus one border and indicator
  16. let perc = (line('.') + 0.0) / (line('$') + 0.0)
  17. let before = float2nr(round(perc * width))
  18. if before >= 0 && line('.') == 1
  19. let before = 0
  20. let left = (overwrite ? '' : left)
  21. endif
  22. let after = width - before
  23. if (after <= 1 && line('.') == line('$'))
  24. let after = 0
  25. let right = (overwrite ? '' : right)
  26. endif
  27. return left . repeat(spc, before) . middle . repeat(spc, after) . right
  28. else
  29. return ''
  30. endif
  31. endfunction
  32. function! airline#extensions#scrollbar#init(ext) abort
  33. call airline#parts#define_function('scrollbar', 'airline#extensions#scrollbar#calculate')
  34. endfunction