From 19be781b8b37320633faaf60d08599f0c8375942 Mon Sep 17 00:00:00 2001 From: Random936 Date: Thu, 11 Jan 2024 21:22:04 -0800 Subject: [PATCH] Added shortcuts for org-roam dailies and better dynamic habits --- .emacs.d/functions.org | 43 +++++++++++++++++++++++++++++++++++++++--- .emacs.d/org.org | 13 +------------ 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/.emacs.d/functions.org b/.emacs.d/functions.org index 62863d4..fa6802f 100644 --- a/.emacs.d/functions.org +++ b/.emacs.d/functions.org @@ -2,9 +2,30 @@ As of now, I haven't added anything here, though I do expect to start adding some custom functions as I learn more about Elisp. +* Org Roam Shortcuts + +Shortcut to goto todays org-roam dailies document. + +#+begin_src emacs-lisp +(defun jm/org-roam-goto-day (days) + (let* ((rel-time (+ (time-convert (current-time) 'integer) (* days 86400))) + (path (format-time-string "%Y-%m-%d.org" rel-time)) + (full-path (file-name-concat org-roam-directory "daily" path))) + (if (file-exists-p full-path) + (find-file full-path) + (org-roam-dailies--capture rel-time)))) + +(jm/leader-keys + "op" '((lambda () (interactive) (jm/org-roam-goto-day -1)) :which-key "Open/create yesterday's daily notes file") + "ot" '((lambda () (interactive) (jm/org-roam-goto-day 0)) :which-key "Open/create today's daily notes file") + "on" '((lambda () (interactive) (jm/org-roam-goto-day 1)) :which-key "Open/create tomorrow's daily notes file")) +#+end_src + * Capture Template Functions -These functions are for my org roam daily capture template. +These functions are for my org roam daily capture template. + +** Helper Functions #+begin_src emacs-lisp (defun jm/dt-filter-tasks (helper query) @@ -17,7 +38,11 @@ These functions are for my org roam daily capture template. (car (org-property-values "ID"))))) (when (stringp item-id) (format "%s [[id:%s][%s]]" prefix item-id item-name)))) +#+end_src +** Queries + +#+begin_src emacs-lisp (defun jm/dt-get-priority (priority &optional prompt) (jm/dt-filter-tasks (lambda () (when (equal priority (org-entry-get nil "PRIORITY")) @@ -35,9 +60,21 @@ These functions are for my org roam daily capture template. (defun jm/dt-get-status (status &optional prompt) (jm/dt-filter-tasks (lambda () (jm/dt-format-link (or prompt "- [ ]"))) (concat "TODO=\"" status "\""))) +#+end_src -(defun jm/dt-dynamic-habits (habit week-days) +** Dynamic Habits + +#+begin_src emacs-lisp +(defun jm/dt-habit (habit) (let* ((org-date (or (org-capture-get :default-time) (current-time))) (today (downcase (format-time-string "%a" org-date)))) - (when (seq-contains-p week-days today) habit))) + (when (seq-contains-p (cdr habit) today) + (car habit)))) + +(defun jm/dt-habits (habits) + (let ((out-list '())) + (dolist (habit habits out-list) + (when-let (out (jm/dt-habit habit)) + (push out out-list))) + (mapconcat #'identity out-list "\n"))) #+end_src diff --git a/.emacs.d/org.org b/.emacs.d/org.org index f598eca..32e2534 100644 --- a/.emacs.d/org.org +++ b/.emacs.d/org.org @@ -13,16 +13,6 @@ This installs the org package and creates a setup function to enable/disable cer (visual-line-mode 1) (add-to-list 'org-link-frame-setup '(file . find-file))) ; Open link in current window not other window. - -;; Shortcut to goto todays org-roam dailies document. -(defun jm/org-roam-goto-today () - (interactive) - (let* ((path (format-time-string "%Y-%m-%d.org" )) - (full-path (file-name-concat org-roam-directory "daily" path))) - (if (file-exists-p full-path) - (find-file full-path) - (org-roam-dailies-capture-today)))) - (use-package org :hook (org-mode . jm/org-mode-setup) :config @@ -40,8 +30,7 @@ This installs the org package and creates a setup function to enable/disable cer org-time-stamp-custom-formats '("%m-%d-%y %a" . "%m-%d-%y %a %I:%M %p")) (jm/leader-keys - "oa" '(org-agenda :which-key "Org agenda") - "ot" '(jm/org-roam-goto-today :which-key "Open/create daily notes file"))) + "oa" '(org-agenda :which-key "Org agenda"))) #+end_src * Evil Org