dotfiles/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/log.vim

69 lines
2.3 KiB
VimL

if !isdirectory(expand(g:task_log_directory))
call mkdir(expand(g:task_log_directory), 'p')
endif
let s:history_file = expand(g:task_log_directory.'/.vim_tw.history')
let s:bookmark_file = expand(g:task_log_directory.'/.vim_tw.bookmark')
function! taskwarrior#log#history(action)
if findfile(s:history_file) == ''
call writefile([], s:history_file)
endif
if a:action == 'write' && filewritable(s:history_file) && b:hist == 1
let fl = readfile(s:history_file)
let numb = len(fl)
let last = numb ? substitute(fl[-1], '\v($|\n|\t|\s)', '', 'g') : ''
let current = join([b:command, b:filter, b:rc], ' ')
if last == substitute(current, '[\t ]', '', 'g')
return
endif
call add(fl, current)
if numb >= g:task_log_max
call remove(fl, 0)
endif
call writefile(fl, s:history_file)
elseif a:action == 'read' && filereadable(s:history_file)
call taskwarrior#init(join(split(readfile(s:history_file)[-1], ' '), ' '))
elseif a:action == 'clear'
call writefile([], s:history_file)
elseif a:action != 'write'
let hists = readfile(s:history_file)
if a:action == 'previous'
if b:hist >= len(hists)
return
endif
let b:hist += 1
elseif a:action == 'next'
if b:hist == 1
return
endif
let b:hist -= 1
endif
let hlist = split(substitute(hists[-b:hist], '\v($|\n)', ' ', ''), ' ')
if len(hlist) != 3
return
endif
let [b:command, b:filter, b:rc] = hlist
call taskwarrior#list()
endif
endfunction
function! taskwarrior#log#bookmark(action)
if findfile(s:bookmark_file) == ''
call writefile([], s:bookmark_file)
endif
if a:action == 'new' && filewritable(s:bookmark_file)
let now = b:command.' '.b:filter.' '.b:rc
let ext = readfile(s:bookmark_file)
if index(ext, now) == -1
execute 'redir >> '.s:bookmark_file
silent! echo now
redir END
echohl String
echomsg 'New bookmark added.'
echohl None
endif
elseif a:action == 'clear'
call writefile([], s:bookmark_file)
endif
endfunction