feat(gs/emacs): Generate org agenda commands from project tags
Auto-generate org agenda commands from project tags of the form `project__foo_bar`, prefixed with `p` and named based on the first letters of the words in the project. there is (obviously) some overlap here but that can be fixed by just adding extra underscores to things to disambiguate. Change-Id: If07b15a21d8bcb6df6245e8c6e4731041930ecc1 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1926 Reviewed-by: glittershark <grfn@gws.fyi> Tested-by: BuildkiteCI
This commit is contained in:
		
							parent
							
								
									c4136447b3
								
							
						
					
					
						commit
						2f7b688389
					
				
					 1 changed files with 35 additions and 2 deletions
				
			
		| 
						 | 
					@ -4,6 +4,36 @@
 | 
				
			||||||
(defun notes-file (f)
 | 
					(defun notes-file (f)
 | 
				
			||||||
  (concat org-directory (if (string-prefix-p "/" f) "" "/") f))
 | 
					  (concat org-directory (if (string-prefix-p "/" f) "" "/") f))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defun grfn/org-project-tag->key (tag)
 | 
				
			||||||
 | 
					  (s-replace-regexp "^project__" "" tag))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defun grfn/org-project-tag->name (tag)
 | 
				
			||||||
 | 
					  (s-titleized-words
 | 
				
			||||||
 | 
					   (s-join " " (s-split "_" (grfn/org-project-tag->key tag)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defun grfn/org-project-tag->keys (tag)
 | 
				
			||||||
 | 
					  (s-join "" (cons "p"
 | 
				
			||||||
 | 
					                   (-map (lambda (s) (substring-no-properties s 0 1))
 | 
				
			||||||
 | 
					                         (s-split "_" (grfn/org-project-tag->key tag))))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defun grfn/org-projects->agenda-commands (project-tags)
 | 
				
			||||||
 | 
					  (loop for tag in project-tags
 | 
				
			||||||
 | 
					        collect `(,(grfn/org-project-tag->keys tag)
 | 
				
			||||||
 | 
					                  ,(grfn/org-project-tag->name tag)
 | 
				
			||||||
 | 
					                  tags-todo
 | 
				
			||||||
 | 
					                  ,tag)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defun grfn/org-projects ()
 | 
				
			||||||
 | 
					  (loop for (tag) in
 | 
				
			||||||
 | 
					        (org-global-tags-completion-table
 | 
				
			||||||
 | 
					         (directory-files-recursively "~/notes" "\\.org$"))
 | 
				
			||||||
 | 
					        when (s-starts-with-p "project__" tag)
 | 
				
			||||||
 | 
					        collect tag))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(comment
 | 
				
			||||||
 | 
					 (grfn/org-projects->agenda-commands (grfn/org-projects))
 | 
				
			||||||
 | 
					 )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(setq
 | 
					(setq
 | 
				
			||||||
 org-directory (expand-file-name "~/notes")
 | 
					 org-directory (expand-file-name "~/notes")
 | 
				
			||||||
 +org-dir (expand-file-name "~/notes")
 | 
					 +org-dir (expand-file-name "~/notes")
 | 
				
			||||||
| 
						 | 
					@ -78,12 +108,15 @@
 | 
				
			||||||
 org-todo-keywords '((sequence "TODO(t)" "ACTIVE(a)" "|" "DONE(d)" "RUNNING(r)")
 | 
					 org-todo-keywords '((sequence "TODO(t)" "ACTIVE(a)" "|" "DONE(d)" "RUNNING(r)")
 | 
				
			||||||
                     (sequence "NEXT(n)" "WAITING(w)" "LATER(l)" "|" "CANCELLED(c)"))
 | 
					                     (sequence "NEXT(n)" "WAITING(w)" "LATER(l)" "|" "CANCELLED(c)"))
 | 
				
			||||||
 org-agenda-custom-commands
 | 
					 org-agenda-custom-commands
 | 
				
			||||||
 '(("p" "Sprint Tasks" tags-todo "sprint")
 | 
					 `(("S" "Sprint Tasks" tags-todo "sprint")
 | 
				
			||||||
   ("i" "Inbox" tags "inbox")
 | 
					   ("i" "Inbox" tags "inbox")
 | 
				
			||||||
   ("r" "Running jobs" todo "RUNNING")
 | 
					   ("r" "Running jobs" todo "RUNNING")
 | 
				
			||||||
   ("w" "@Work" tags-todo "@work")
 | 
					   ("w" "@Work" tags-todo "@work")
 | 
				
			||||||
   ("n" . "Next...")
 | 
					   ("n" . "Next...")
 | 
				
			||||||
   ("np" "Next Sprint" tags-todo "next_sprint|sprint_planning"))
 | 
					   ("np" "Next Sprint" tags-todo "next_sprint|sprint_planning")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   ("p" . "Project...")
 | 
				
			||||||
 | 
					   ,@(grfn/org-projects->agenda-commands (grfn/org-projects)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 org-agenda-dim-blocked-tasks nil
 | 
					 org-agenda-dim-blocked-tasks nil
 | 
				
			||||||
 org-enforce-todo-dependencies nil
 | 
					 org-enforce-todo-dependencies nil
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue