From 0c92f447e8e934a1b8a76c841eaf9dcc0a6ea658 Mon Sep 17 00:00:00 2001 From: Ade Attwood Date: Sun, 21 Nov 2021 16:21:21 +0000 Subject: [PATCH] chore(emacs): big refactor of org-mode This removes all of the boiler plate code that was copied when fist moving away from spacemacs and taken from the emacs from scratch config. There is some inspiration about capturing notes from org-roam and putting them into a directory for filing before they get put into the wiki. This is the first move to start managing my notes / life with org-mode and its started off really nicely. I think this will keep evolving and we can see where it goes. --- .../files/emacs/snippets/org-mode/org-header | 10 ++ site-modules/core/files/emacs/src/org.el | 95 +++++++++---------- 2 files changed, 55 insertions(+), 50 deletions(-) create mode 100644 site-modules/core/files/emacs/snippets/org-mode/org-header diff --git a/site-modules/core/files/emacs/snippets/org-mode/org-header b/site-modules/core/files/emacs/snippets/org-mode/org-header new file mode 100644 index 0000000..5d0aebb --- /dev/null +++ b/site-modules/core/files/emacs/snippets/org-mode/org-header @@ -0,0 +1,10 @@ +# -*- mode: snippet -*- +# name: Org Mode Header +# key: org-header +# -- +#+TITLE: ${1:Title} +#+AUTHOR: Ade Attwood +#+EMAIL: hello@adeattwood.co.uk +#+DATE: `(format-time-string "%Y-%m-%d")` +#+FILETAGS: +#+SETUPFILE: ../common/setup.org \ No newline at end of file diff --git a/site-modules/core/files/emacs/src/org.el b/site-modules/core/files/emacs/src/org.el index 948dac9..d8aa676 100644 --- a/site-modules/core/files/emacs/src/org.el +++ b/site-modules/core/files/emacs/src/org.el @@ -8,61 +8,43 @@ (defun efs/org-mode-setup () (org-indent-mode) - (variable-pitch-mode 1) (visual-line-mode 1)) -(defun efs/org-font-setup () - ;; Set faces for heading levels - (dolist (face '((org-level-1 . 1.2) - (org-level-2 . 1.1) - (org-level-3 . 1.05) - (org-level-4 . 1.0) - (org-level-5 . 1.1) - (org-level-6 . 1.1) - (org-level-7 . 1.1) - (org-level-8 . 1.1))) - (set-face-attribute (car face) nil :font "Lato" :weight 'regular :height (cdr face))) - - ;; Ensure that anything that should be fixed-pitch in Org files appears that way - (set-face-attribute 'org-block nil :foreground nil :inherit 'fixed-pitch) - (set-face-attribute 'org-table nil :inherit 'fixed-pitch) - (set-face-attribute 'org-formula nil :inherit 'fixed-pitch) - (set-face-attribute 'org-code nil :inherit '(shadow fixed-pitch)) - (set-face-attribute 'org-table nil :inherit '(shadow fixed-pitch)) - (set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch)) - (set-face-attribute 'org-special-keyword nil :inherit '(font-lock-comment-face fixed-pitch)) - (set-face-attribute 'org-meta-line nil :inherit '(font-lock-comment-face fixed-pitch)) - (set-face-attribute 'org-checkbox nil :inherit 'fixed-pitch) - (set-face-attribute 'line-number nil :inherit 'fixed-pitch) - (set-face-attribute 'line-number-current-line nil :inherit 'fixed-pitch)) - (use-package org :pin org :hook (org-mode . efs/org-mode-setup) :config - (efs/org-font-setup) (setq org-ellipsis " ▾") - (setq org-agenda-start-with-log-mode t) - (setq org-log-done 'time) - (setq org-log-into-drawer t) + ;; Don't fold headers when opening files I find it better to see all of the + ;; files and navigate between the headers + (setq org-startup-folded nil) + + ;;(setq org-agenda-start-with-log-mode t) + ;;(setq org-log-done 'time) + (setq org-agenda-window-setup 'current-window) - (setq org-agenda-files - '("~/Nextcloud/org/Todo.org")) (setq org-refile-targets '(("Archive.org" :maxlevel . 1))) - (setq org-agenda-files '("~/Nextcloud/org")) + (setq org-agenda-files '("~/Nextcloud/org/workbook" + "~/Nextcloud/org/notes" + "~/Nextcloud/org/wiki")) (setq org-directory "~/Nextcloud/org") - (require 'org-habit) - (add-to-list 'org-modules 'org-habit) - (setq org-habit-graph-column 60) + ;; Add notmuch link capture mainly for org-capture + (org-link-set-parameters "notmuch" + :follow 'org-notmuch-open + :store 'org-notmuch-store-link) ;; Define a kanban style set of stages for todo tasks (setq org-todo-keywords '((sequence "TODO" "WAITING" "REVIEW" "|" "DONE" "ARCHIVED"))) - ;; Save Org buffers after refiling! - (advice-add 'org-refile :after 'org-save-all-org-buffers) + (require 'org-id) + + (org-babel-do-load-languages + 'org-babel-load-languages + '((emacs-lisp . t) + (shell . t))) ;; Configure custom agenda views (setq org-agenda-custom-commands @@ -85,9 +67,30 @@ (org-agenda-files org-agenda-files))))))) (setq org-capture-templates - `(("t" "Tasks / Projects") - ("tt" "Task" entry (file+olp "~/Nextcloud/org/Todo.org" "Tasks") - "* TODO %?\n %U\n %a\n %i" :empty-lines 1)))) + `(("t" "Task" entry (file aa/create-workbook-file) "* TODO %?\n %U\n %a\n %i") + ("c" "Task Clock In" entry (file aa/create-workbook-file) "* TODO %?\n %U\n %a\n %i" :clock-in t :clock-resume t) + ("n" "New Note" entry (file aa/create-notes-file) "* Content")))) + +(defun aa/create-notes-file () + "Create an org file in ~/notes/." + (expand-file-name (format "%s-%s.org" + (format-time-string "%Y-%m-%d") + (string-trim (shell-command-to-string "uuidgen"))) + "~/Nextcloud/org/notes/")) + +(defun aa/create-workbook-file () + "Create an org file in ~/workbook/." + (expand-file-name (format "%s.org" + (format-time-string "%Y-%m")) + "~/Nextcloud/org/workbook/")) + +(defun workbook-current () + "Create an org file in ~/notes/." + (interactive) + (find-file + (expand-file-name (format "%s.org" + (format-time-string "%Y-%m")) + "~/Nextcloud/org/workbook/"))) (use-package org-bullets :after org @@ -100,7 +103,7 @@ (use-package evil-org :ensure t - :after org + :after evil-mode :hook (org-mode . (lambda () evil-org-mode)) :config (require 'evil-org-agenda) @@ -111,11 +114,3 @@ (add-to-list 'org-structure-template-alist '("sh" . "src shell")) (add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp")) (add-to-list 'org-structure-template-alist '("php" . "src php")) - -(defun efs/org-mode-visual-fill () - (setq visual-fill-column-width 100 - visual-fill-column-center-text t) - (visual-fill-column-mode 1)) - -(use-package visual-fill-column - :hook (org-mode . efs/org-mode-visual-fill))