More flexible file naming (Request #2)
CHG: More flexible file naming files matching one of the following are todo
files:
YYYY-MM-[Tt]odo.txt
YYYY-MM-DD[Tt]odo.txt
[Tt]odo-YYYY-MM.txt
[Tt]odo-YYYY-MM-DD.txt
[Tt]odo.txt
[Tt]oday.txt
YYYY-MM-[Dd]one.txt
YYYY-MM-DD[Dd]one.txt
[Dd]one-YYYY-MM.txt
[Dd]one-YYYY-MM-DD.txt
[Dd]one.txt
[Dd]one-[Tt]oday.txt
Moreover, remove complete tasks (<LocalLeader>D) moves the task to the
done.txt file corresponding to the current todo.txt, aka if you are editing
2015-07-07-todo.txt, the done file while be 2015-07-07-done.txt.
This behaviour can be cancelled by fixing the done filename using
g:TodoTxtForceDoneName
FIX: Bug while completing empty file
This commit is contained in:
@@ -65,7 +65,13 @@ endfunction
|
||||
|
||||
function! TodoTxtRemoveCompleted()
|
||||
" Check if we can write to done.txt before proceeding.
|
||||
let l:target_dir = expand('%:p:h')
|
||||
let l:target_dir = expand('%:p:h')
|
||||
if exists("g:TodoTxtForceDoneName")
|
||||
let l:done=g:TodoTxtForceDoneName
|
||||
else
|
||||
let l:done=substitute(substitute(expand('%:t'),'todo','done',''),'Todo','Done','')
|
||||
fi
|
||||
let l:done_file = l:target_dir.'/'.l:done
|
||||
echo "Writing to ".l:done_file
|
||||
if !filewritable(l:done_file) && !filewritable(l:target_dir)
|
||||
echoerr "Can't write to file 'done.txt'"
|
||||
@@ -79,7 +85,7 @@ endfunction
|
||||
|
||||
function! TodoTxtSort()
|
||||
" vim :sort is usually stable
|
||||
" we sort first on contexts, then on projects and then on priority
|
||||
" we sort first on contexts, then on projects and then on priority
|
||||
if expand('%')=~'done.*.txt'
|
||||
silent! %s/\(x\s*\d\{4}\)-\(\d\{2}\)-\(\d\{2}\)/\1\2\3/g
|
||||
sort n /^x\s*/
|
||||
@@ -277,20 +283,20 @@ endfunction
|
||||
endfunction
|
||||
|
||||
" Simple keyword completion on all buffers
|
||||
function! TodoKeywordComplete(base)
|
||||
" Search for matchs
|
||||
let res = []
|
||||
for bufnr in range(1,bufnr('$'))
|
||||
let lines=getbufline(bufnr,1,"$")
|
||||
for line in lines
|
||||
if line =~ a:base
|
||||
" init temporary item
|
||||
let item={}
|
||||
let item.word=substitute(line,'.*\('.a:base.'\S*\).*','\1',"")
|
||||
call add(res,item)
|
||||
endif
|
||||
function! TodoKeywordComplete(base)
|
||||
" Search for matchs
|
||||
let res = []
|
||||
for bufnr in range(1,bufnr('$'))
|
||||
let lines=getbufline(bufnr,1,"$")
|
||||
for line in lines
|
||||
if line =~ a:base
|
||||
" init temporary item
|
||||
let item={}
|
||||
let item.word=substitute(line,'.*\('.a:base.'\S*\).*','\1',"")
|
||||
call add(res,item)
|
||||
endif
|
||||
endfor
|
||||
endfor
|
||||
endfor
|
||||
return res
|
||||
endfunction
|
||||
|
||||
@@ -326,33 +332,35 @@ fun! TodoComplete(findstart, base)
|
||||
endfor
|
||||
call sort(res)
|
||||
" Here all results are sorted in res, but we need to merge them
|
||||
let ret=[]
|
||||
let curitem={}
|
||||
let curitem.word=res[0].word
|
||||
let curitem.related=[]
|
||||
let curitem.buffers=[]
|
||||
for it in res
|
||||
if curitem.word==it.word
|
||||
" Merge results
|
||||
if index(curitem.related,it.related) <0
|
||||
let ret=[]
|
||||
if res != []
|
||||
let curitem={}
|
||||
let curitem.word=res[0].word
|
||||
let curitem.related=[]
|
||||
let curitem.buffers=[]
|
||||
for it in res
|
||||
if curitem.word==it.word
|
||||
" Merge results
|
||||
if index(curitem.related,it.related) <0
|
||||
call add(curitem.related,it.related)
|
||||
endif
|
||||
if index(curitem.buffers,it.buffers) <0
|
||||
call add(curitem.buffers,it.buffers)
|
||||
endif
|
||||
else
|
||||
" Create the definitive item
|
||||
let resitem={}
|
||||
let resitem.word=curitem.word
|
||||
let resitem.info=opp=='+'?"Projects":"Contexts"
|
||||
let resitem.info.=": ".join(curitem.related, ", ")
|
||||
\."\nBuffers: ".join(curitem.buffers, ", ")
|
||||
call add(ret,resitem)
|
||||
" Init new item from it
|
||||
let curitem.word=it.word
|
||||
let curitem.related=[it.related]
|
||||
let curitem.buffers=[it.buffers]
|
||||
endif
|
||||
if index(curitem.buffers,it.buffers) <0
|
||||
call add(curitem.buffers,it.buffers)
|
||||
endif
|
||||
else
|
||||
" Create the definitive item
|
||||
let resitem={}
|
||||
let resitem.word=curitem.word
|
||||
let resitem.info=opp=='+'?"Projects":"Contexts"
|
||||
let resitem.info.=": ".join(curitem.related, ", ")
|
||||
\."\nBuffers: ".join(curitem.buffers, ", ")
|
||||
call add(ret,resitem)
|
||||
" Init new item from it
|
||||
let curitem.word=it.word
|
||||
let curitem.related=[it.related]
|
||||
let curitem.buffers=[it.buffers]
|
||||
endif
|
||||
endif
|
||||
endfor
|
||||
endif
|
||||
return ret
|
||||
endif
|
||||
|
||||
Reference in New Issue
Block a user