summaryrefslogtreecommitdiff
path: root/plugin/bujo.vim
blob: 983c8326514367c81594776babe66707345313c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
"Make bujo directory if it doesn't exist"
let g:bujo#todo_file_path = get(g:, "bujo#todo_file_path", $HOME . "/.cache/bujo")
if empty(glob(g:bujo#todo_file_path))
  call mkdir(g:bujo#todo_file_path)
endif

" InGitRepository() tells us if the directory we are currently working in
" is a git repository. It makes use of the 'git rev-parse --is-inside-work-tree'
" command. This command outputs true to the shell if so, and a STDERR message 
" otherwise.
"
" We will use this function to know whether we should open a specific
" project's todo list, or a global todo list.
function s:InGitRepository()
  :silent let bool = system("git rev-parse --is-inside-work-tree")

  " The git function will return true with some leading characters
  " if we are in a repository. So, we split off those characters
  " and just check the first word.
  if split(bool, '\v\n')[0] == 'true'
    return 1
  endif
endfunction


" GetToplevelFolder() gives us a clean name of the git repository that we are
" currently working in
function s:GetToplevelFolder()
    let absolute_path = system("git rev-parse --show-toplevel")
    let repo_name = split(absolute_path, "/")
    let repo_name_clean = split(repo_name[-1], '\v\n')[0]
    return repo_name_clean
endfunction

" OpenTodo() opens the respective todo.md file from $HOME/.cache/bujo
" If we are in a git repository, we open the todo.md for that git repository.
" Otherwise, we open the global todo file.
function s:OpenTodo(...)
  " If an argument was passed in, we open the general file
  " a:0 will be false if no argument was passed in (a:0 == 0) 
  if a:0 || !s:InGitRepository()
    exe ":30vs" . g:bujo#todo_file_path . "/todo.md" 
  else 
    let repo_name_clean = s:GetToplevelFolder()
    exe ":30vs" . g:bujo#todo_file_path . "/" . repo_name_clean . "/todo.md"
  endif
endfunction

if !exists(":Todo")
  command -nargs=? Todo :call s:OpenTodo(<f-args>)
endif

autocmd bufnewfile todo.md call append(0, '#' . split(expand('%:p:h:t'), '\v\n')[0] . " todo")  
autocmd bufnewfile todo.md call append(1, 'Date: ')
autocmd bufnewfile,bufread,filewritepre todo.md exe "g/Date: */s/Date: *.*/Date: " .strftime("%a %d %b %Y")
autocmd bufnewfile,Bufwritepre,filewritepre todo.md execute "normal Go"