papis-vim/plugin/papis.vim
2018-08-16 23:09:04 +02:00

43 lines
1.2 KiB
VimL

function! s:yank_to_register(data)
let @" = a:data
silent! let @* = a:data
silent! let @+ = a:data
endfunction
function! s:handler(a)
let lines = a:a
if lines == [] || lines == ['','','']
return
endif
" Expect at least 2 elements, `query` and `keypress`, which may be empty
" strings.
let query = lines[0]
let keypress = lines[1]
let cmd = "normal a"
let pat = '@\v(.{-})$'
" it is possible to yank the doc id using the ctrl-y keypress
if keypress ==? "ctrl-y"
let hashes = join(filter(map(lines[2:], 'matchlist(v:val, pat)[1]'), 'len(v:val)'), "\n")
return s:yank_to_register(hashes)
" this will insert \cite{id} command for all selected citations
else
let citations = lines[2:]
let candidates = []
for line in citations
let id = matchlist(line, pat)[1]
call add(candidates, "\\cite{". id . "}")
endfor
endif
for candidate in candidates
execute join([cmd, candidate])
endfor
endfunction
command! -bang -nargs=* Papis
\ call fzf#run(fzf#wrap({'source': 'papis list <args> --format "{doc[author]}: {doc[title]} @{doc[ref]}"', 'sink*': function('<sid>handler'), 'options': '--multi --expect=ctrl-y --print-query'}))