summaryrefslogtreecommitdiff
path: root/lisp/ss-org.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/ss-org.el')
-rw-r--r--lisp/ss-org.el56
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."