" Find the column where the completion starts. This must be between 1 and " col('.'). Denote links are of this form: `denote:`. function s:column() " Get the substring from the start of the line until col('.') let l = getline(".")[:col('.')] " Take the shortest prefix of a denote link. This may be any of " \matchstrpos('\= 0 return res[1] endif let res = l->matchstrpos('\matchstr('^denote:\zs.*$') let flist = glob(g:denote_directory .. "/" .. (prefix ? "*" .. prefix .. "*" : "*"), 0, v:true) let res = [] for filename in flist let noteId = denote#meta#noteIdFromFile(filename) let noteTitle = denote#meta#noteTitleFromFile(filename) if noteId == v:false || (noteId !~ '^' .. prefix && noteTitle !~ prefix) continue endif let noteTitle = noteTitle ?? '(no title)' let noteTags = denote#meta#noteTagsFromFile(filename) call add(res, { \ 'word' : 'denote:' .. noteId, \ 'abbr' : noteTitle, \ 'menu' : noteTags->join(', ') \ }) endfor return res endfunction " Completion function for denote links function denote#completion#get(findstart, base) return a:findstart == 1 ? s:column() : s:suggestions(a:base) endfunction