From a2837e21dc3b129cf05df2ac6e8a839b89dd94ef Mon Sep 17 00:00:00 2001 From: Camden Dixie O'Brien Date: Thu, 12 Jan 2023 23:45:17 +0000 Subject: [PATCH] Move journal config to before org agenda config Having it after caused errors on first start-up as the ~/Documents/org/journal directory didn't exist. Also passed an additional parameter to the call to make-directory so that it will create the ~/Documents/org directory if it doesn't exist. --- config.org | 168 +++++++++++++++++++++++++++-------------------------- 1 file changed, 85 insertions(+), 83 deletions(-) diff --git a/config.org b/config.org index 266b822..d48776f 100644 --- a/config.org +++ b/config.org @@ -251,6 +251,91 @@ 'org-insert-heading-after-current))) #+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. The + second argument to [[help:make-directory][make-directory]] specifies to create parent + directories too if necessary. + + #+begin_src emacs-lisp + (unless (file-directory-p journal-directory) + (make-directory journal-directory t)) + #+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 + ** Source Blocks Pressing tab inside a source block should indent appropriately for its language. @@ -1434,86 +1519,3 @@ #+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