immersive.vim 1011 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. vim9script
  2. # Immersive mode function
  3. export def Immersive()
  4. # Check if writer mode is on, by fetching the bacground color of the
  5. # separator (15 = white) and, if it's on, turns it off
  6. if matchstr(execute('hi VertSplit'), 'ctermfg=\zs\d\d') == '15'
  7. hi VertSplit ctermfg=black
  8. hi NonText ctermfg=lightblue
  9. set laststatus=1
  10. set rnu
  11. only
  12. return
  13. endif
  14. # Formating
  15. hi VertSplit ctermfg=white # Hides split separtor
  16. hi NonText ctermfg=white # Hides blank line character
  17. set laststatus=0 # Hides status line
  18. set nornu # Turn off relative numbers
  19. var Resize_window = (new: number) => {
  20. var curr = winwidth(0)
  21. var op = (curr < new) ? '>' : '<'
  22. feedkeys(abs(new - curr) .. "\<C-w>" .. op, 'x')
  23. }
  24. # Make two read-only buffers to act as margins
  25. const margin_size = (winwidth(0) - &tw) / 2
  26. var mod = (margin_size % 2 == 0) ? 0 : 1
  27. vnew | set nomodifiable | vnew | set nomodifiable
  28. Resize_window(margin_size)
  29. wincmd l
  30. Resize_window(margin_size + mod - 2)
  31. wincmd l
  32. wincmd R
  33. enddef