From 8c4d592bf9b46911f11434373a45025453fa1991 Mon Sep 17 00:00:00 2001 From: Camden Dixie O'Brien Date: Sun, 30 Oct 2022 12:24:36 +0000 Subject: [PATCH] Add custom journal stuff --- config.org | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/config.org b/config.org index 1bc6cee..e02b23b 100644 --- a/config.org +++ b/config.org @@ -1394,3 +1394,86 @@ #+begin_src emacs-lisp (global-set-key (kbd "C-~") 'flip-region-case) #+end_src + +** Journal Files + Sometimes I like to make a todo list for a day if I've a lot to do, + or write a little bit about a day if it's been particularly + eventful. In both of these cases, it would be nice to just be able + to hit a particular keybinding and have the right buffer pop up. I + was using =org-roam='s daily notes feature for this, but I ended up + getting annoyed with =org-roam= (too many features for my taste + lol). + + The convention I'm going for is for is having a particular + directory for these journal entries and then give each file a name + like "2022-10-30.org". With that in mind, there are two obvious + variables to define: + + #+begin_src emacs-lisp + (defvar journal-directory + "~/Documents/org/journal" + "Directory to store journal entries in.") + + (defvar journal-filename-format + "%F" + "Date format to use for journal entries' filenames (not including + the \".org\" extension)") + #+end_src + + I can't be bothered to handle [[help:journal-directory][journal-directory]] not existing in the + main code, so I'm just going to make sure it exists here: + + #+begin_src emacs-lisp + (unless (file-directory-p journal-directory) + (make-directory journal-directory)) + #+end_src + + The next step is to define a function to determine the filename for + today's journal entry. This is fairly straightforward, using + [[help:format-time-string][format-time-string]] to get the current date in the right format, + then sticking that together with the directory, extension, etc. + + #+begin_src emacs-lisp + (defun journal-entry-filename () + "Returns the filename for today's journal entry." + (let ((date-string (format-time-string journal-filename-format))) + (concat journal-directory "/" date-string ".org"))) + #+end_src + + If the journal entry doesn't exist yet, I want it to be populated + with the long-form date as the title: + + #+begin_src emacs-lisp + (defvar journal-title-date-format + "%A, %-e %B %+4Y" + "The date format to use for journal entries' titles.") + + (defun insert-default-journal-entry-contents () + "Insert the default journal entry contents (currently this is + just today's long-form date as a title) into the current buffer." + (insert "#+TITLE: " + (format-time-string journal-title-date-format) + "\n\n")) + #+end_src + + We can now make a function to open today's journal entry fairly + trivially using [[help:find-file][find-file]], and the above utilities. It should be + interactive, as this is what we'll be calling in the key binding. + + #+begin_src emacs-lisp + (defun open-journal-entry () + "Opens today's journal entry, populating it with the default + contents if it does not already exist." + (interactive) + (let* ((filename (journal-entry-filename)) + (new-entry (not (file-exists-p filename)))) + (find-file filename) + (when new-entry + (insert-default-journal-entry-contents)))) + #+end_src + + Finally, [[help:open-journal-entry][open-journal-entry]] can be bound to a key: + + #+begin_src emacs-lisp + (global-set-key (kbd "C-c t") 'open-journal-entry) + #+end_src