Better way to put done at the end

+ Limit side effects
+ Sort done entries at the end
+ Work fine also without done entries
This commit is contained in:
David Beniamine
2016-11-25 11:26:44 +01:00
parent 0e2b110903
commit 849a7d5f61

View File

@@ -137,24 +137,28 @@ function! todo#Sort()
silent! %s/\(x\s*\d\{4}\)-\(\d\{2}\)-\(\d\{2}\)/\1\2\3/g
sort n /^x\s*/
silent! %s/\(x\s*\d\{4}\)\(\d\{2}\)/\1-\2-/g
else
let oldcursor=getpos(".")
silent normal gg
let l:first=search('^\s*x')
if l:first != 0
sort /^./r
" at this point done tasks are at the end
let l:first=search('^\s*x')
let l:last=search('^\s*x','b')
let l:diff=l:last-l:first+1
" Cut the done lines
execute ':'.l:first.'d a '.l:diff
endif
sort /@[a-zA-Z]*/ r
sort /+[a-zA-Z]*/ r
sort /\v\([A-Z]\)/ r
" Count the number of lines
silent normal gg
execute "/^\([A-Z]\)/"
let l:first=getpos(".")[1]
silent normal N
let l:last=getpos(".")[1]
let l:diff=l:last-l:first+1
" Put the sorted lines at the beginning of the file
execute ':'.l:first
execute ':d'.l:diff
silent normal gg
silent normal P
silent! %s/\(x\s*\d\{4}\)-\(\d\{2}\)-\(\d\{2}\)/\1\2\3/g
sort n /^x\s*/
sort /+[a-zA-Z]*/ r
sort /\v([A-Z])/ r
if l:first != 0
silent normal G"ap
execute ':'.l:first.','.l:last.'sort /@[a-zA-Z]*/ r'
execute ':'.l:first.','.l:last.'sort /+[a-zA-Z]*/ r'
execute ':'.l:first.','.l:last.'sort /\v([A-Z])/ r'
endif
call cursor(oldcursor)
endif
endfunction