Mercurial > dotfiles
annotate vim/autoload/quickfixed.vim @ 486:b452486b97c5
Make vim's quickfix list more awesome.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Thu, 24 Sep 2020 23:13:07 -0700 |
parents | |
children |
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 |