79 lines
2.4 KiB
VimL
79 lines
2.4 KiB
VimL
" Clear location list
|
|
function denote#loclist#clear()
|
|
call setloclist(0, [], ' ')
|
|
endfunction
|
|
|
|
" Local helper function to retrieve and format the title.
|
|
function s:titleFromBuf(buf)
|
|
let l:name=denote#meta#noteTitleFromFile(bufname(a:buf))
|
|
return strchars(l:name, 1) <= g:denote_loc_title_columns
|
|
\ ? printf('%' .. g:denote_loc_title_columns .. 's', l:name)
|
|
\ : printf('%.' .. (g:denote_loc_title_columns - 1) .. 's', l:name) .. '…'
|
|
endfunction
|
|
|
|
" Local helper function to truncate text with match at the given column as a
|
|
" string of at most `width` columns.
|
|
function s:formatText(text, col, width)
|
|
return a:col <= a:width
|
|
\ ? a:text
|
|
\ : a:text[a:col-float2nr(a:width*0.3):]
|
|
endfunction
|
|
|
|
" This modifies the location list for pretty display.
|
|
function denote#loclist#textReferences(info)
|
|
let l:items=getloclist(a:info.winid)
|
|
let l:l=[]
|
|
let l:width=winwidth(0) - g:denote_loc_title_columns - 19
|
|
for idx in range(a:info.start_idx - 1, a:info.end_idx - 1)
|
|
let l:e=l:items[idx]
|
|
let l:name=s:titleFromBuf(l:e.bufnr)
|
|
let l:lnum=printf('%5d', l:e.lnum)
|
|
let l:col=printf('%3d', l:e.col)
|
|
call add(l:l, l:name ..
|
|
\ ' | ' .. l:lnum .. ' l:col ' .. l:col ..
|
|
\ ' | ' .. s:formatText(l:items[idx].text, l:col, l:width))
|
|
endfor
|
|
return l:l
|
|
endfunction
|
|
|
|
" This modifies the location list for pretty display.
|
|
function denote#loclist#textNoteList(info)
|
|
let l:items=getloclist(a:info.winid)
|
|
let l:l=[]
|
|
for idx in range(a:info.start_idx - 1, a:info.end_idx - 1)
|
|
let l:e=l:items[idx]
|
|
let l:name=s:titleFromBuf(l:e.bufnr)
|
|
let l:ntags=denote#meta#noteTagsFromFile(bufname(l:e.bufnr))->join()
|
|
call add(l:l, l:name .. ' | ' .. l:ntags)
|
|
endfor
|
|
return l:l
|
|
endfunction
|
|
|
|
" Re-populate location list with denote entries
|
|
function denote#loclist#fill(title, files)
|
|
" Clear first
|
|
call setloclist(0, [], ' ')
|
|
" Set properties
|
|
call setloclist(0, [], 'r',
|
|
\ {'title': a:title,
|
|
\ 'quickfixtextfunc' : 'denote#loclist#textNoteList',
|
|
\ 'context' : 'denote'})
|
|
" Populate
|
|
let l:notes=[]
|
|
for f in a:files
|
|
call add(l:notes, {
|
|
\ 'filename' : f,
|
|
\ 'lnum' : 1
|
|
\ })
|
|
endfor
|
|
call setloclist(0, l:notes, 'a')
|
|
endfunction
|
|
|
|
" Specify location list as denote-grep list
|
|
function denote#loclist#setgrep(title)
|
|
call setloclist(0, [], 'r',
|
|
\ {'title': a:title,
|
|
\ 'quickfixtextfunc' : 'denote#loclist#textReferences',
|
|
\ 'context' : 'denote'})
|
|
endfunction
|