From e5786259c45ecf02158f13703cf191a429ce8b98 Mon Sep 17 00:00:00 2001
From: Jersey <fonseca@uchicago.edu>
Date: Fri, 26 Jun 2020 14:03:53 -0500
Subject: Project specific integration

---
 plugin/bujo.vim | 53 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 44 insertions(+), 9 deletions(-)

(limited to 'plugin')

diff --git a/plugin/bujo.vim b/plugin/bujo.vim
index f29d268..983c832 100644
--- a/plugin/bujo.vim
+++ b/plugin/bujo.vim
@@ -3,19 +3,54 @@ 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
-autocmd bufnewfile todo.md call append(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"
 
+" 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
 
 
-" Open the bujo todo list file
-function s:OpenTodo()
-  "30 makes it open at width 30
-  exe ":30vs" . g:bujo#todo_file_path . "/todo.md" 
+" 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 Todo :call s:OpenTodo()
+  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"
-- 
cgit v1.2.3


From 0807b7aed40a1c9758f6944e0ee8c8f448ff6c58 Mon Sep 17 00:00:00 2001
From: Jersey <fonseca@uchicago.edu>
Date: Fri, 26 Jun 2020 14:20:02 -0500
Subject: Updated README and doc

---
 plugin/bujo.vim | 4 ++++
 1 file changed, 4 insertions(+)

(limited to 'plugin')

diff --git a/plugin/bujo.vim b/plugin/bujo.vim
index 983c832..e8b7077 100644
--- a/plugin/bujo.vim
+++ b/plugin/bujo.vim
@@ -1,3 +1,7 @@
+" bujo.vim - A minimalist todo list manager
+" Maintainer:   Jersey Fonseca <http://www.jerseyfonseca.com/>
+" Version:      0.5
+
 "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))
-- 
cgit v1.2.3