annotate vim/autoload/quickfixed.vim @ 492:b4d2eca00197

Ensure ctags config directory before writing config.
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 19 Oct 2021 18:02:50 -0700
parents b452486b97c5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
486
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 " Stolen from https://vimways.org/2018/colder-quickfix-lists/
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 " ~/.vim/autoload/quickfixed.vim
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3 function! s:isLocation()
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4 " Get dictionary of properties of the current window
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5 let wininfo = filter(getwininfo(), {i,v -> v.winnr == winnr()})[0]
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 return wininfo.loclist
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7 endfunction
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9 function! s:length()
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10 " Get the size of the current quickfix/location list
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11 return len(s:isLocation() ? getloclist(0) : getqflist())
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 endfunction
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 function! s:getProperty(key, ...)
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 " getqflist() and getloclist() expect a dictionary argument
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 " If a 2nd argument has been passed in, use it as the value, else 0
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 let l:what = {a:key : a:0 ? a:1 : 0}
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 let l:listdict = s:isLocation() ? getloclist(0, l:what) : getqflist(l:what)
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19 return get(l:listdict, a:key)
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 endfunction
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 function! s:isFirst()
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 return s:getProperty('nr') <= 1
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 endfunction
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 function! s:isLast()
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27 return s:getProperty('nr') == s:getProperty('nr', '$')
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 endfunction
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 function! s:history(goNewer)
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 " Build the command: one of colder/cnewer/lolder/lnewer
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32 let l:cmd = (s:isLocation() ? 'l' : 'c') . (a:goNewer ? 'newer' : 'older')
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34 " Apply the cmd repeatedly until we hit a non-empty list, or first/last list
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35 " is reached
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36 while 1
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37 if (a:goNewer && s:isLast()) || (!a:goNewer && s:isFirst()) | break | endif
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38 " Run the command. Use :silent to suppress message-history output.
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39 " Note that the :try wrapper is no longer necessary
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40 silent execute l:cmd
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41 if s:length() | break | endif
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42 endwhile
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44 " Set the height of the quickfix window to the size of the list, max-height 10
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45 execute 'resize' min([ 10, max([ 1, s:length() ]) ])
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
46
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47 " Echo a description of the new quickfix / location list.
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48 " And make it look like a rainbow.
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49 let l:nr = s:getProperty('nr')
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 let l:last = s:getProperty('nr', '$')
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
51 echohl MoreMsg | echon '('
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52 echohl Identifier | echon l:nr
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53 if l:last > 1
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54 echohl LineNr | echon ' of '
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55 echohl Identifier | echon l:last
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 endif
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57 echohl MoreMsg | echon ') '
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58 echohl MoreMsg | echon '['
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 echohl Identifier | echon s:length()
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60 echohl MoreMsg | echon '] '
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 echohl Normal | echon s:getProperty('title')
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62 echohl None
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63 endfunction
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65 function! quickfixed#older()
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 call s:history(0)
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67 endfunction
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69 function! quickfixed#newer()
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
70 call s:history(1)
b452486b97c5 Make vim's quickfix list more awesome.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
71 endfunction