here we go

This commit is contained in:
durcheinandr
2015-05-25 23:57:26 +02:00
commit 1b49ec094c
8 changed files with 373 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*.swp
doc/tags

41
README.markdown Normal file
View File

@@ -0,0 +1,41 @@
### Quick install
git clone git://github.com/freitass/todo.txt-vim.git
cd todo.txt-vim
cp -R * ~/.vim
This plugin gives syntax highlighting to [todo.txt](http://todotxt.com/) files. It also defines a few mappings, to help with editing these files:
`<leader>-s` : Sort the file
`<leader>-s+` : Sort the file on +Projects
`<leader>-s@` : Sort the file on @Contexts
`<leader>-sd` : Sort @_sched entries by due-date
`<leader>-j` : Lower the priority of the current line
`<leader>-k` : Increase the priority of the current line
`<leader>-a` : Add the priority (A) to the current line
`<leader>-b` : Add the priority (B) to the current line
`<leader>-c` : Add the priority (C) to the current line
`<leader>-d` : Insert the current date
`date<tab>` : (Insert mode) Insert the current date
Removed bindings:
`<leader>-x` : Mark task as done (inserts current date as completion date)
`<leader>-X` : Mark all tasks as completed
`<leader>-D` : Move completed tasks to done.txt
If you want the help installed, run ":helptags ~/.vim/doc" inside vim after having copied the files.
Then you will be able to get the commands help with: :h todo.txt

32
doc/todo.txt Normal file
View File

@@ -0,0 +1,32 @@
*todo.txt*
==============================================================================
COMMANDS *todo-commands*
`<leader>-s` : Sort the file
`<leader>-s+` : Sort the file on +Projects
`<leader>-s@` : Sort the file on @Contexts
`<leader>-j` : Lower the priority of the current line
`<leader>-k` : Increase the priority of the current line
`<leader>-a` : Add the priority (A) to the current line
`<leader>-b` : Add the priority (B) to the current line
`<leader>-c` : Add the priority (C) to the current line
`<leader>-d` : Insert the current date
`date<tab>` : (Insert mode) Insert the current date
`<leader>-x` : Mark task as done (inserts current date as completion date)
`<leader>-X` : Mark all tasks as completed
`<leader>-D` : Move completed tasks to done.txt
<leader> is \ by default, so <leader>-s means you type \s

13
done.txt Normal file
View File

@@ -0,0 +1,13 @@
x 2011-05-30 Create README.markdown to be published in github @doc
x 2011-05-30 Implement colorized priorities @syntax
x 2011-05-30 Implement filetype detection @ftdetect
x 2011-05-30 Sort lines per priority @ftplugin
x 2011-05-31 Highlight date, project and context of tasks with no priority @syntax
x 2011-05-31 Stop breaking lines automatically @ftplugin
x 2011-06-06 Easier date input @ftplugin
x 2011-06-06 Implement foldings @ftplugin
x 2014-04-27 2011-05-30 Contact main project for reference
x 2014-11-01 2011-05-30 Map commands to add, rm, ls, pri, depri etc @ftplugin
x 2014-11-01 2011-05-31 Start documentation @doc
x 2014-11-01 2011-06-01 Improve syntax file @syntax
x 2014-11-01 2011-06-06 Check file syntax @syntax

10
ftdetect/todo.vim Normal file
View File

@@ -0,0 +1,10 @@
" File: todo.txt.vim
" Description: Todo.txt filetype detection
" Author: Leandro Freitas <freitass@gmail.com>
" License: Vim license
" Website: http://github.com/freitass/todo.txt-vim
" Version: 0.1
autocmd BufNewFile,BufRead [Tt]odo.txt set filetype=todo
autocmd BufNewFile,BufRead [Dd]one.txt set filetype=todo

222
ftplugin/todo.vim Normal file
View File

@@ -0,0 +1,222 @@
" File: todo.txt.vim
" Description: Todo.txt filetype detection
" Author: Leandro Freitas <freitass@gmail.com>
" 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:done_file = l:target_dir.'/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
function! TodoTxtToggleComplete()
if getline('.') =~ '^x'
s/\v^x [0-9-]+ +//
else
exec "s/^/x " . strftime('%Y-%m-%d') . " /"
endif
endfunction
" Mappings {{{1
" Sort tasks {{{2
if !hasmapto("<leader>s",'n')
nnoremap <script> <silent> <buffer> <leader>s :sort<CR>
endif
if !hasmapto("<leader>s@",'n')
nnoremap <script> <silent> <buffer> <leader>s@ :sort /.\{-}\ze@/ <CR>
endif
if !hasmapto("<leader>s+",'n')
nnoremap <script> <silent> <buffer> <leader>s+ :sort /.\{-}\ze+/ <CR>
endif
" Increment and Decrement The Priority
:set nf=octal,hex,alpha
function! TodoTxtPrioritizeIncrease()
normal! 0f)h
endfunction
function! TodoTxtPrioritizeDecrease()
normal! 0f)h
endfunction
function! TodoTxtPrioritizeAdd (priority)
" Need to figure out how to only do this if the first visible letter in a line is not (
:call TodoTxtPrioritizeAddAction(a:priority)
endfunction
function! TodoTxtPrioritizeAddAction (priority)
execute "normal! mq0i(".a:priority.") \<esc>`q"
endfunction
if !hasmapto("<leader>j",'n')
nnoremap <script> <silent> <buffer> <leader>j :call TodoTxtPrioritizeIncrease()<CR>
endif
if !hasmapto("<leader>j",'v')
vnoremap <script> <silent> <buffer> <leader>j :call TodoTxtPrioritizeIncrease()<CR>
endif
if !hasmapto("<leader>k",'n')
nnoremap <script> <silent> <buffer> <leader>k :call TodoTxtPrioritizeDecrease()<CR>
endif
if !hasmapto("<leader>k",'v')
vnoremap <script> <silent> <buffer> <leader>k :call TodoTxtPrioritizeDecrease()<CR>
endif
if !hasmapto("<leader>a",'n')
nnoremap <script> <silent> <buffer> <leader>a :call TodoTxtPrioritizeAdd('A')<CR>
endif
if !hasmapto("<leader>a",'v')
vnoremap <script> <silent> <buffer> <leader>a :call TodoTxtPrioritizeAdd('A')<CR>
endif
if !hasmapto("<leader>b",'n')
nnoremap <script> <silent> <buffer> <leader>b :call TodoTxtPrioritizeAdd('B')<CR>
endif
if !hasmapto("<leader>b",'v')
vnoremap <script> <silent> <buffer> <leader>b :call TodoTxtPrioritizeAdd('B')<CR>
endif
if !hasmapto("<leader>c",'n')
nnoremap <script> <silent> <buffer> <leader>c :call TodoTxtPrioritizeAdd('C')<CR>
endif
if !hasmapto("<leader>c",'v')
vnoremap <script> <silent> <buffer> <leader>c :call TodoTxtPrioritizeAdd('C')<CR>
endif
" Insert date {{{2
if !hasmapto("date<Tab>",'i')
inoremap <script> <silent> <buffer> date<Tab> <C-R>=strftime("%Y-%m-%d")<CR>
endif
if !hasmapto("<leader>d",'n')
nnoremap <script> <silent> <buffer> <leader>d :call TodoTxtPrependDate()<CR>
endif
if !hasmapto("<leader>d",'v')
vnoremap <script> <silent> <buffer> <leader>d :call TodoTxtPrependDate()<CR>
endif
" Mark done {{{2
"if !hasmapto("<leader>x",'n')
"nnoremap <script> <silent> <buffer> <leader>x :call TodoTxtMarkAsDone()<CR>
"endif
"if !hasmapto("<leader>x",'v')
"vnoremap <script> <silent> <buffer> <leader>x :call TodoTxtMarkAsDone()<CR>
"endif
" Mark all done {{{2
"if !hasmapto("<leader>X",'n')
"nnoremap <script> <silent> <buffer> <leader>X :call TodoTxtMarkAllAsDone()<CR>
"endif
" Remove completed {{{2
"if !hasmapto("<leader>D",'n')
"nnoremap <script> <silent> <buffer> <leader>D :call TodoTxtRemoveCompleted()<CR>
"endif
" Toggle Complete {{{2
if !hasmapto("<leader>=",'n')
nnoremap <script> <silent> <buffer> <leader>= :call TodoTxtToggleComplete()<CR>
endif
" Sort @_sched by due: date {{{2
if !hasmapto("<leader>sd".'n')
nnoremap <script> <silent> <buffer> <leader>sd :sort n /due:/<CR>
endif
" Folding {{{1
" Options {{{2
setlocal foldmethod=expr
setlocal foldexpr=TodoFoldLevel(v:lnum)
setlocal foldtext=TodoFoldText()
" TodoFoldLevel(lnum) {{{2
function! TodoFoldLevel(lnum)
" The match function returns the index of the matching pattern or -1 if
" the pattern doesn't match. In this case, we always try to match a
" completed task from the beginning of the line so that the matching
" function will always return -1 if the pattern doesn't match or 0 if the
" pattern matches. Incrementing by one the value returned by the matching
" function we will return 1 for the completed tasks (they will be at the
" first folding level) while for the other lines 0 will be returned,
" indicating that they do not fold.
return match(getline(a:lnum),'\s@_data\s.\+$') + 1
endfunction
" TodoFoldText() {{{2
function! TodoFoldText()
" The text displayed at the fold is formatted as '+- N Completed tasks'
" where N is the number of lines folded.
return '+' . v:folddashes . ' '
\ . (v:foldend - v:foldstart + 1)
\ . ' Data (contacts/bookmarks) '
endfunction
" Restore context {{{1
let &cpo = s:save_cpo
" Modeline {{{1

52
syntax/todo.vim Normal file
View File

@@ -0,0 +1,52 @@
" File: todo.txt.vim
" Description: Todo.txt syntax settings
" Author: Leandro Freitas <freitass@gmail.com>
" License: Vim license
" Website: http://github.com/freitass/todo.txt-vim
" Version: 0.3
if exists("b:current_syntax")
finish
endif
syntax match TodoDone '^[xX]\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityA '^([aA])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityB '^([bB])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityC '^([cC])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityD '^([dD])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityE '^([eE])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityF '^([fF])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityG '^([gG])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityH '^([hH])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityI '^([iI])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityJ '^([jJ])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityK '^([kK])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityL '^([lL])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityM '^([mM])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityN '^([nN])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityO '^([oO])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityP '^([pP])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityQ '^([qQ])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityR '^([rR])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityS '^([sS])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityT '^([tT])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityU '^([uU])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityV '^([vV])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityW '^([wW])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityX '^([xX])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityY '^([yY])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoPriorityZ '^([zZ])\s.\+$' contains=TodoDate,TodoProject,TodoContext
syntax match TodoDate '\d\{2,4\}-\d\{2\}-\d\{2\}' contains=NONE
syntax match TodoProject '\(^\|\W\)+[^[:blank:]]\+' contains=NONE
syntax match TodoContext '\(^\|\W\)@[^[:blank:]]\+' contains=NONE
" Other priority colours might be defined by the user
highlight default link TodoDone Comment
highlight default link TodoPriorityA Constant
highlight default link TodoPriorityB Statement
highlight default link TodoPriorityC Identifier
highlight default link TodoDate PreProc
highlight default link TodoProject Special
highlight default link TodoContext Special
let b:current_syntax = "todo"

1
todo.txt Normal file
View File

@@ -0,0 +1 @@
2014-11-01 Find a way to import text into markdown and vim doc @doc