" File: todo.txt.vim " Description: Todo.txt filetype detection " Author: Leandro Freitas " License: Vim license " Website: http://github.com/freitass/todo.txt-vim " Version: 0.4 " Save context {{{1 let s:save_cpo = &cpo set cpo&vim " General options {{{1 " Some options lose their values when window changes. They will be set every " time this script is invocated, which is whenever a file of this type is " created or edited. setlocal textwidth=0 setlocal wrapmargin=0 " Functions {{{1 function! s:TodoTxtRemovePriority() :s/^(\w)\s\+//ge endfunction function! TodoTxtPrependDate() normal! 0"=strftime("%Y-%m-%d ") P endfunction function! TodoTxtMarkAsDone() call s:TodoTxtRemovePriority() call TodoTxtPrependDate() normal! Ix endfunction function! TodoTxtMarkAllAsDone() :g!/^x /:call TodoTxtMarkAsDone() endfunction function! s:AppendToFile(file, lines) let l:lines = [] " Place existing tasks in done.txt at the beggining of the list. if filereadable(a:file) call extend(l:lines, readfile(a:file)) endif " Append new completed tasks to the list. call extend(l:lines, a:lines) " Write to file. call writefile(l:lines, a:file) endfunction function! TodoTxtRemoveCompleted() " Check if we can write to done.txt before proceeding. let l:target_dir = expand('%:p:h') let l:todo_file = expand('%:p') let l:done_file = substitute(substitute(l:todo_file, 'todo.txt$', 'done.txt', ''), 'Todo.txt$', 'Done.txt', '') if !filewritable(l:done_file) && !filewritable(l:target_dir) echoerr "Can't write to file 'done.txt'" return endif let l:completed = [] :g/^x /call add(l:completed, getline(line(".")))|d call s:AppendToFile(l:done_file, l:completed) endfunction " Mappings {{{1 " Sort tasks {{{2 if !hasmapto("s",'n') nnoremap