Files
vim-denote/plugin/denote.vim
2026-02-17 16:18:18 +01:00

93 lines
2.9 KiB
VimL

" Global configurations {{{1
" Restrict basic operations to these files:
if !exists('g:denote_note_file_extensions')
let g:denote_note_file_extensions=['md', 'org']
endif
" Number of columns used for the title in the location window.
if !exists('g:denote_loc_title_columns')
let g:denote_loc_title_columns=40
endif
" Local functions {{{1
" Put all notes of the given tag to the location list. The tag argument is
" mandatory.
function s:DenoteNotesByTag(tag)
" Clear location list
call denote#loclist#clear()
" Find files
let files = glob("*_" .. a:tag .. "*", 0, v:true)->filter('v:val =~ "_' .. a:tag .. '\\(==\\|@@\\|__\\|_\\|\\.\\)"')
" Populate location list
let locTitle="Denote notes: " .. a:tag
call setloclist(0, [], 'r',
\ {'title': locTitle,
\ 'quickfixtextfunc' : 'denote#loclist#textNoteList'})
let notes=[]
for f in files
call add(notes, {
\ 'filename' : f,
\ 'lnum' : 1
\ })
endfor
call setloclist(0, notes, 'a')
endfunction
" Put all notes of the given tag to the location list. The search argument may be
" empty. For improving search, white spaces are replaced by the * |wildcard|.
function s:DenoteNotes(search)
let s = substitute(" " .. a:search .. " ", " ", "*", "g")
" Clear location list
call denote#loclist#clear()
" Find files
let files = glob(s, 0, v:true)
" Populate location list
let locTitle="Denote notes search:" .. a:search
call setloclist(0, [], 'r',
\ {'title': locTitle,
\ 'quickfixtextfunc' : 'denote#loclist#textNoteList'})
let notes=[]
for f in files
call add(notes, {
\ 'filename' : f,
\ 'lnum' : 1
\ })
endfor
call setloclist(0, notes, 'a')
endfunction
" This function implements the similar functionality of :vimgrep, but for
" denote notes.
function s:DenoteGrep(search)
" Clear location list
call denote#loclist#clear()
" Grep all greppable files
let fpat=map(copy(g:denote_note_file_extensions), {_, e -> "*." .. e})->join()
execute "lvimgrep " .. a:search .. " " .. fpat
" Adjust location list: set title and specify display function
call setloclist(0, [], 'r',
\ {'title': 'Denote grep: ' .. a:search,
\ 'quickfixtextfunc' : 'denote#loclist#textReferences'})
lclose
lopen
endfunction
" This function is used to autocomplete the tags in user commands.
function s:tagList(ArgLead, cmdLine, CursorPos)
let files=glob("*", 0, v:true)
let tags=[]
for f in files
let tags=extend(tags, denote#meta#noteTagsFromFile(f))
endfor
return uniq(sort(tags))->join("\n")
endfunction
" Public commands and key mappings {{{1
command -nargs=* Denote :call <SID>DenoteNotes(<q-args>)
command -nargs=1 -complete=custom,<SID>tagList DenoteTag :call <SID>DenoteNotesByTag(<q-args>)
command -nargs=+ DenoteGrep :call <SID>DenoteGrep(<q-args>)
" Useful key mappings
nnoremap <silent> <Plug>DenoteList :Denote<CR>:lclose<CR>:lopen<CR>:resize 20<CR>
nnoremap <silent> <Plug>DenoteBackReferences :DenoteBackReferences<CR>:lclose<CR>:lopen<CR>:resize 20<CR>