section.vim 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. " MIT License. Copyright (c) 2013-2021 Bailey Ling et al.
  2. " vim: et ts=2 sts=2 sw=2
  3. scriptencoding utf-8
  4. call airline#init#bootstrap()
  5. let s:spc = g:airline_symbols.space
  6. function! s:wrap_accent(part, value)
  7. if exists('a:part.accent')
  8. call airline#highlighter#add_accent(a:part.accent)
  9. return '%#__accent_'.(a:part.accent).'#'.a:value.'%#__restore__#'
  10. endif
  11. return a:value
  12. endfunction
  13. function! s:create(parts, append)
  14. let _ = ''
  15. for idx in range(len(a:parts))
  16. let part = airline#parts#get(a:parts[idx])
  17. let val = ''
  18. let add_sep = get(l:, 'add_sep', 0)
  19. if exists('part.function')
  20. let func = (part.function).'()'
  21. elseif exists('part.text')
  22. let func = '"'.(part.text).'"'
  23. else
  24. if a:append > 0 && idx != 0
  25. let val .= s:spc.g:airline_left_alt_sep.s:spc
  26. endif
  27. if a:append < 0 && idx != 0
  28. let t = ''
  29. if !add_sep
  30. let t = s:spc.g:airline_right_alt_sep.s:spc
  31. endif
  32. let val = t.val
  33. endif
  34. if exists('part.raw')
  35. let _ .= s:wrap_accent(part, val.(part.raw))
  36. continue
  37. else
  38. let _ .= s:wrap_accent(part, val.a:parts[idx])
  39. continue
  40. endif
  41. endif
  42. let minwidth = get(part, 'minwidth', 0)
  43. if a:append > 0 && idx != 0
  44. let partval = printf('%%{airline#util#append(%s,%s)}', func, minwidth)
  45. " will add an extra separator, if minwidth is zero
  46. let add_sep = (minwidth == 0)
  47. elseif a:append < 0 && idx != len(a:parts) - 1
  48. let partval = printf('%%{airline#util#prepend(%s,%s)}', func, minwidth)
  49. " will add an extra separator, if minwidth is zero
  50. let add_sep = (minwidth == 0)
  51. else
  52. let partval = printf('%%{airline#util#wrap(%s,%s)}', func, minwidth)
  53. let add_sep = 0
  54. endif
  55. if exists('part.condition')
  56. let partval = substitute(partval, '{', '\="{".(part.condition)." ? "', '')
  57. let partval = substitute(partval, '}', ' : ""}', '')
  58. endif
  59. let val .= s:wrap_accent(part, partval)
  60. let _ .= val
  61. endfor
  62. return _
  63. endfunction
  64. function! airline#section#create(parts)
  65. return s:create(a:parts, 0)
  66. endfunction
  67. function! airline#section#create_left(parts)
  68. return s:create(a:parts, 1)
  69. endfunction
  70. function! airline#section#create_right(parts)
  71. return s:create(a:parts, -1)
  72. endfunction