]> git.madduck.net Git - etc/vim.git/blob - .vim/bundle/vim-lsp/autoload/vital/_lsp/VS/Vim/Buffer.vim

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Do not set EDITOR/VISUAL for shell
[etc/vim.git] / .vim / bundle / vim-lsp / autoload / vital / _lsp / VS / Vim / Buffer.vim
1 " ___vital___
2 " NOTE: lines between '" ___vital___' is generated by :Vitalize.
3 " Do not modify the code nor insert new lines before '" ___vital___'
4 function! s:_SID() abort
5   return matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze__SID$')
6 endfunction
7 execute join(['function! vital#_lsp#VS#Vim#Buffer#import() abort', printf("return map({'add': '', 'do': '', 'create': '', 'get_line_count': '', 'pseudo': '', 'ensure': '', 'load': ''}, \"vital#_lsp#function('<SNR>%s_' . v:key)\")", s:_SID()), 'endfunction'], "\n")
8 delfunction s:_SID
9 " ___vital___
10 let s:Do = { -> {} }
11
12 let g:___VS_Vim_Buffer_id = get(g:, '___VS_Vim_Buffer_id', 0)
13
14 "
15 " get_line_count
16 "
17 if exists('*nvim_buf_line_count')
18   function! s:get_line_count(bufnr) abort
19     return nvim_buf_line_count(a:bufnr)
20   endfunction
21 elseif has('patch-8.2.0019')
22   function! s:get_line_count(bufnr) abort
23     return getbufinfo(a:bufnr)[0].linecount
24   endfunction
25 else
26   function! s:get_line_count(bufnr) abort
27     if bufnr('%') == bufnr(a:bufnr)
28       return line('$')
29     endif
30     return len(getbufline(a:bufnr, '^', '$'))
31   endfunction
32 endif
33
34 "
35 " create
36 "
37 function! s:create(...) abort
38   let g:___VS_Vim_Buffer_id += 1
39   let l:bufname = printf('VS.Vim.Buffer: %s: %s',
40   \   g:___VS_Vim_Buffer_id,
41   \   get(a:000, 0, 'VS.Vim.Buffer.Default')
42   \ )
43   return s:load(l:bufname)
44 endfunction
45
46 "
47 " ensure
48 "
49 function! s:ensure(expr) abort
50   if !bufexists(a:expr)
51     if type(a:expr) == type(0)
52       throw printf('VS.Vim.Buffer: `%s` is not valid expr.', a:expr)
53     endif
54     call s:add(a:expr)
55   endif
56   return bufnr(a:expr)
57 endfunction
58
59 "
60 " add
61 "
62 if exists('*bufadd')
63   function! s:add(name) abort
64     let l:bufnr = bufadd(a:name)
65     call setbufvar(l:bufnr, '&buflisted', 1)
66   endfunction
67 else
68   function! s:add(name) abort
69     badd `=a:name`
70   endfunction
71 endif
72
73 "
74 " load
75 "
76 if exists('*bufload')
77   function! s:load(expr) abort
78     let l:bufnr = s:ensure(a:expr)
79     if !bufloaded(l:bufnr)
80       call bufload(l:bufnr)
81     endif
82     return l:bufnr
83   endfunction
84 else
85   function! s:load(expr) abort
86     let l:curr_bufnr = bufnr('%')
87     try
88       let l:bufnr = s:ensure(a:expr)
89       execute printf('keepalt keepjumps silent %sbuffer', l:bufnr)
90     catch /.*/
91       echomsg string({ 'exception': v:exception, 'throwpoint': v:throwpoint })
92     finally
93       execute printf('noautocmd keepalt keepjumps silent %sbuffer', l:curr_bufnr)
94     endtry
95     return l:bufnr
96   endfunction
97 endif
98
99 "
100 " do
101 "
102 function! s:do(bufnr, func) abort
103   let l:curr_bufnr = bufnr('%')
104   if l:curr_bufnr == a:bufnr
105     call a:func()
106     return
107   endif
108
109   try
110     execute printf('noautocmd keepalt keepjumps silent %sbuffer', a:bufnr)
111     call a:func()
112   catch /.*/
113     echomsg string({ 'exception': v:exception, 'throwpoint': v:throwpoint })
114   finally
115     execute printf('noautocmd keepalt keepjumps silent %sbuffer', l:curr_bufnr)
116   endtry
117 endfunction
118
119 "
120 " pseudo
121 "
122 function! s:pseudo(filepath) abort
123   if !filereadable(a:filepath)
124     throw printf('VS.Vim.Buffer: `%s` is not valid filepath.', a:filepath)
125   endif
126
127   " create pseudo buffer
128   let l:bufname = printf('VSVimBufferPseudo://%s', a:filepath)
129   if bufexists(l:bufname)
130     return s:ensure(l:bufname)
131   endif
132
133   let l:bufnr = s:ensure(l:bufname)
134   let l:group = printf('VS_Vim_Buffer_pseudo:%s', l:bufnr)
135   execute printf('augroup %s', l:group)
136     execute printf('autocmd BufReadCmd <buffer=%s> call setline(1, readfile(bufname("%")[20 : -1])) | try | filetype detect | catch /.*/ | endtry | augroup %s | autocmd! | augroup END', l:bufnr, l:group)
137   augroup END
138   return l:bufnr
139 endfunction
140