diff options
Diffstat (limited to 'plugin/bujo.vim')
| -rw-r--r-- | plugin/bujo.vim | 57 |
1 files changed, 48 insertions, 9 deletions
diff --git a/plugin/bujo.vim b/plugin/bujo.vim index f29d268..e8b7077 100644 --- a/plugin/bujo.vim +++ b/plugin/bujo.vim | |||
| @@ -1,21 +1,60 @@ | |||
| 1 | " bujo.vim - A minimalist todo list manager | ||
| 2 | " Maintainer: Jersey Fonseca <http://www.jerseyfonseca.com/> | ||
| 3 | " Version: 0.5 | ||
| 4 | |||
| 1 | "Make bujo directory if it doesn't exist" | 5 | "Make bujo directory if it doesn't exist" |
| 2 | let g:bujo#todo_file_path = get(g:, "bujo#todo_file_path", $HOME . "/.cache/bujo") | 6 | let g:bujo#todo_file_path = get(g:, "bujo#todo_file_path", $HOME . "/.cache/bujo") |
| 3 | if empty(glob(g:bujo#todo_file_path)) | 7 | if empty(glob(g:bujo#todo_file_path)) |
| 4 | call mkdir(g:bujo#todo_file_path) | 8 | call mkdir(g:bujo#todo_file_path) |
| 5 | endif | 9 | endif |
| 6 | autocmd bufnewfile todo.md call append(0, '#Todo') | 10 | |
| 7 | autocmd bufnewfile todo.md call append(1, 'Date: ') | 11 | " InGitRepository() tells us if the directory we are currently working in |
| 8 | autocmd bufnewfile,bufread,filewritepre todo.md exe "g/Date: */s/Date: *.*/Date: " .strftime("%a %d %b %Y") | 12 | " is a git repository. It makes use of the 'git rev-parse --is-inside-work-tree' |
| 9 | autocmd bufnewfile,Bufwritepre,filewritepre todo.md execute "normal Go" | 13 | " command. This command outputs true to the shell if so, and a STDERR message |
| 14 | " otherwise. | ||
| 15 | " | ||
| 16 | " We will use this function to know whether we should open a specific | ||
| 17 | " project's todo list, or a global todo list. | ||
| 18 | function s:InGitRepository() | ||
| 19 | :silent let bool = system("git rev-parse --is-inside-work-tree") | ||
| 20 | |||
| 21 | " The git function will return true with some leading characters | ||
| 22 | " if we are in a repository. So, we split off those characters | ||
| 23 | " and just check the first word. | ||
| 24 | if split(bool, '\v\n')[0] == 'true' | ||
| 25 | return 1 | ||
| 26 | endif | ||
| 27 | endfunction | ||
| 10 | 28 | ||
| 11 | 29 | ||
| 30 | " GetToplevelFolder() gives us a clean name of the git repository that we are | ||
| 31 | " currently working in | ||
| 32 | function s:GetToplevelFolder() | ||
| 33 | let absolute_path = system("git rev-parse --show-toplevel") | ||
| 34 | let repo_name = split(absolute_path, "/") | ||
| 35 | let repo_name_clean = split(repo_name[-1], '\v\n')[0] | ||
| 36 | return repo_name_clean | ||
| 37 | endfunction | ||
| 12 | 38 | ||
| 13 | " Open the bujo todo list file | 39 | " OpenTodo() opens the respective todo.md file from $HOME/.cache/bujo |
| 14 | function s:OpenTodo() | 40 | " If we are in a git repository, we open the todo.md for that git repository. |
| 15 | "30 makes it open at width 30 | 41 | " Otherwise, we open the global todo file. |
| 16 | exe ":30vs" . g:bujo#todo_file_path . "/todo.md" | 42 | function s:OpenTodo(...) |
| 43 | " If an argument was passed in, we open the general file | ||
| 44 | " a:0 will be false if no argument was passed in (a:0 == 0) | ||
| 45 | if a:0 || !s:InGitRepository() | ||
| 46 | exe ":30vs" . g:bujo#todo_file_path . "/todo.md" | ||
| 47 | else | ||
| 48 | let repo_name_clean = s:GetToplevelFolder() | ||
| 49 | exe ":30vs" . g:bujo#todo_file_path . "/" . repo_name_clean . "/todo.md" | ||
| 50 | endif | ||
| 17 | endfunction | 51 | endfunction |
| 18 | 52 | ||
| 19 | if !exists(":Todo") | 53 | if !exists(":Todo") |
| 20 | command Todo :call s:OpenTodo() | 54 | command -nargs=? Todo :call s:OpenTodo(<f-args>) |
| 21 | endif | 55 | endif |
| 56 | |||
| 57 | autocmd bufnewfile todo.md call append(0, '#' . split(expand('%:p:h:t'), '\v\n')[0] . " todo") | ||
| 58 | autocmd bufnewfile todo.md call append(1, 'Date: ') | ||
| 59 | autocmd bufnewfile,bufread,filewritepre todo.md exe "g/Date: */s/Date: *.*/Date: " .strftime("%a %d %b %Y") | ||
| 60 | autocmd bufnewfile,Bufwritepre,filewritepre todo.md execute "normal Go" | ||
