1
0
Fork 0
mirror of synced 2024-11-16 14:05:34 -05:00
ultimate-vim/sources_non_forked/vim-notes/autoload/xolox/notes/recent.vim
Maksim Pecherskiy 2deb035254 Cleaning deps.
2014-08-07 19:42:41 -04:00

100 lines
3.8 KiB
VimL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

" Vim auto-load script
" Author: Peter Odding <peter@peterodding.com>
" Last Change: May 16, 2013
" URL: http://peterodding.com/code/vim/notes/
function! xolox#notes#recent#show(bang, title_filter) " {{{1
call xolox#misc#msg#info("notes.vim %s: Generating overview of recent notes ..", g:xolox#notes#version)
" Show generated note listing all notes by last modified time.
let starttime = xolox#misc#timer#start()
let bufname = '[Recent Notes]'
" Prepare a buffer to hold the list of recent notes.
call xolox#misc#buffer#prepare({
\ 'name': bufname,
\ 'path': xolox#misc#path#merge($HOME, bufname)})
" Filter notes by pattern (argument)?
let notes = []
let title_filter = '\v' . a:title_filter
for [fname, title] in items(xolox#notes#get_fnames_and_titles(0))
if title =~? title_filter
call add(notes, [getftime(fname), title])
endif
endfor
" Start note with "You have N note(s) [matching filter]".
let readme = "You have "
if empty(notes)
let readme .= "no notes"
elseif len(notes) == 1
let readme .= "one note"
else
let readme .= len(notes) . " notes"
endif
if a:title_filter != ''
let quote_format = xolox#notes#unicode_enabled() ? '%s' : "`%s'"
let readme .= " matching " . printf(quote_format, a:title_filter)
endif
" Explain the sorting of the notes.
if empty(notes)
let readme .= "."
elseif len(notes) == 1
let readme .= ", it's listed below."
else
let readme .= ". They're listed below grouped by the day they were edited, starting with your most recently edited note."
endif
" Add the generated text to the buffer.
call setline(1, ["Recent notes", "", readme])
" Reformat the text in the buffer to auto-wrap.
normal Ggqq
" Sort, group and format the list of (matching) notes.
let last_date = ''
let list_item_format = xolox#notes#unicode_enabled() ? ' • %s' : ' * %s'
call sort(notes)
call reverse(notes)
let lines = []
for [ftime, title] in notes
let date = xolox#notes#friendly_date(ftime)
if date != last_date
call add(lines, '')
call add(lines, substitute(date, '^\w', '\u\0', '') . ':')
let last_date = date
endif
call add(lines, printf(list_item_format, title))
endfor
" Add the formatted list of notes to the buffer.
call setline(line('$') + 1, lines)
" Load the notes file type.
call xolox#notes#set_filetype()
let &l:statusline = bufname
" Change the status line
" Lock the buffer contents.
call xolox#misc#buffer#lock()
" And we're done!
call xolox#misc#timer#stop("notes.vim %s: Generated %s in %s.", g:xolox#notes#version, bufname, starttime)
endfunction
function! xolox#notes#recent#track() " {{{1
let fname = expand('%:p')
let indexfile = expand(g:notes_recentindex)
call xolox#misc#msg#debug("notes.vim %s: Recording '%s' as most recent note in %s ..", g:xolox#notes#version, fname, indexfile)
if writefile([fname], indexfile) == -1
call xolox#misc#msg#warn("notes.vim %s: Failed to record most recent note in %s!", g:xolox#notes#version, indexfile)
endif
endfunction
function! xolox#notes#recent#edit(bang) " {{{1
" Edit the most recently edited (not necessarily changed) note.
let indexfile = expand(g:notes_recentindex)
call xolox#misc#msg#debug("notes.vim %s: Recalling most recent note from %s ..", g:xolox#notes#version, indexfile)
try
let fname = readfile(indexfile)[0]
if empty(fname)
throw "The index of recent notes is empty?!"
endif
catch
call xolox#misc#msg#warn("notes.vim %s: Failed to recall most recent note from %s: %s", g:xolox#notes#version, indexfile, v:exception)
return
endtry
call xolox#misc#msg#info("notes.vim %s: Editing most recent note '%s' ..", g:xolox#notes#version, fname)
execute 'edit' . a:bang fnameescape(fname)
call xolox#notes#set_filetype()
endfunction