;;; ss-org.el --- Base Org configuration -*- lexical-binding: t; -*- ;;; Commentary: ;; Shared Org setup and note-opening helpers. ;;; 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 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) (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." (interactive) (find-file (ss-require-existing-file ss-journal-file)) (widen)) (defun ss-open-moc () "Open the central MOC note." (interactive) (find-file (ss-require-existing-file ss-moc-file))) (defun ss-org-setup () "Initialize base Org configuration." (use-package org :ensure nil :config (setq org-directory ss-org-directory org-hide-emphasis-markers t org-agenda-search-headline-for-time t) (add-hook 'org-mode-hook (lambda () (setq-local org-hide-emphasis-markers t) (font-lock-flush) (font-lock-ensure)))) (use-package git-auto-commit-mode :ensure t :pin melpa :commands (git-auto-commit-mode) :init (setq gac-shell-and (if (string-match-p "fish\\'" shell-file-name) " ; and " " && "))) (add-hook 'emacs-startup-hook (lambda () (find-file (ss-require-existing-file ss-moc-file))))) (provide 'ss-org) ;;; ss-org.el ends here