diff options
| author | Szymon Szukalski <szymon@szymonszukalski.com> | 2026-04-09 12:04:58 +1000 |
|---|---|---|
| committer | Szymon Szukalski <szymon@szymonszukalski.com> | 2026-04-09 12:04:58 +1000 |
| commit | 4ff3e88492225e6852e780399a81c4f27f8a10ab (patch) | |
| tree | 563f21cf60a42fabefd1ab05a42a2c27f9f522ae /lisp | |
| parent | 8fa5aa983a7be1be78d736223d733f1da1330ec2 (diff) | |
Refine focused journal session
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/ss-org.el | 56 |
1 files changed, 47 insertions, 9 deletions
diff --git a/lisp/ss-org.el b/lisp/ss-org.el index 4bbd92d..4a8836c 100644 --- a/lisp/ss-org.el +++ b/lisp/ss-org.el @@ -6,22 +6,60 @@ ;;; Code: +(require 'org) (require 'ss-core) +(defvar ss-journal-session-mode-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "C-c C-c") #'ss-journal-session-save-and-dismiss) + (define-key map (kbd "C-c C-k") #'ss-journal-session-dismiss) + map) + "Keymap for focused journal editing sessions.") + +(defconst ss-journal-session-header-line + "Journal session: C-c C-c save and dismiss, C-c C-k dismiss" + "Header line shown during focused journal editing sessions.") + +(define-minor-mode ss-journal-session-mode + "Minor mode for focused journal editing sessions." + :lighter " Journal-Session" + :keymap ss-journal-session-mode-map + (if ss-journal-session-mode + (setq-local header-line-format ss-journal-session-header-line) + (kill-local-variable 'header-line-format))) + +(defun ss-journal-session-dismiss () + "End the focused journal session without saving automatically." + (interactive) + (widen) + (ss-journal-session-mode -1) + (quit-window nil (selected-window))) + +(defun ss-journal-session-save-and-dismiss () + "Save the journal buffer, then end the focused journal session." + (interactive) + (save-buffer) + (ss-journal-session-dismiss)) + (defun ss-open-journal () - "Open `ss-journal-file', narrowing to today's entry when it exists." + "Open today's journal entry in a focused session, creating it when needed." + (interactive) + (ss-open-journal-today-session)) + +(defun ss-open-journal-today-session () + "Open today's journal entry in a focused, dismissable session." (interactive) (find-file (ss-require-existing-file ss-journal-file)) (widen) (unless (fboundp 'ss-journal-goto-date) - (goto-char (point-max))) - (when (fboundp 'ss-journal-goto-date) - (if (ss-journal-goto-date) - (progn - (org-fold-show-entry) - (org-fold-show-subtree) - (org-narrow-to-subtree)) - (goto-char (point-max))))) + (user-error "Journal date navigation is unavailable")) + (ss-journal-goto-date nil 'create) + (when (fboundp 'ss-journal-ensure-day-sections) + (ss-journal-ensure-day-sections)) + (org-fold-show-entry) + (org-fold-show-subtree) + (org-narrow-to-subtree) + (ss-journal-session-mode 1)) (defun ss-open-journal-full () "Open `ss-journal-file' with the full buffer visible." |
