Add custom journal stuff
This commit is contained in:
parent
2d9607f5cb
commit
8c4d592bf9
83
config.org
83
config.org
@ -1394,3 +1394,86 @@
|
|||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(global-set-key (kbd "C-~") 'flip-region-case)
|
(global-set-key (kbd "C-~") 'flip-region-case)
|
||||||
#+end_src
|
#+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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user