From 1e6a8d8cf8af90890ed02b70b090718a2c2d017f Mon Sep 17 00:00:00 2001 From: Don Armstrong Date: Mon, 1 Mar 2021 20:54:01 -0800 Subject: [PATCH] fix indenting of org regions --- emacs_el/configuration/don-configuration.org | 462 +++++++++---------- 1 file changed, 231 insertions(+), 231 deletions(-) diff --git a/emacs_el/configuration/don-configuration.org b/emacs_el/configuration/don-configuration.org index 9705c9b..0201061 100644 --- a/emacs_el/configuration/don-configuration.org +++ b/emacs_el/configuration/don-configuration.org @@ -542,58 +542,58 @@ value, scrolling continues until there is no more output. ([[http://emacs.stackexchange.com/q/21182/8930][source]], [[http://emacs.stackexchange.com/q/7908/8930][source]]) #+BEGIN_SRC emacs-lisp - (defun malb/indent-fold-or-complete (&optional arg) - (interactive "P") +(defun malb/indent-fold-or-complete (&optional arg) + (interactive "P") + (cond + ;; if a region is active, indent + ((use-region-p) + (indent-region (region-beginning) + (region-end))) + ;; if the next char is space or eol, but prev char not whitespace + ((and (not (active-minibuffer-window)) + (or (looking-at " ") + (looking-at "$")) + (looking-back "[^[:space:]]") + (not (looking-back "^"))) + + (cond (company-mode (company-complete-common)) + (auto-complete-mode (auto-complete)))) + + ;; no whitespace anywhere + ((and (not (active-minibuffer-window)) + (looking-at "[^[:space:]]") + (looking-back "[^[:space:]]") + (not (looking-back "^"))) (cond - ;; if a region is active, indent - ((use-region-p) - (indent-region (region-beginning) - (region-end))) - ;; if the next char is space or eol, but prev char not whitespace - ((and (not (active-minibuffer-window)) - (or (looking-at " ") - (looking-at "$")) - (looking-back "[^[:space:]]") - (not (looking-back "^"))) - - (cond (company-mode (company-complete-common)) - (auto-complete-mode (auto-complete)))) - - ;; no whitespace anywhere - ((and (not (active-minibuffer-window)) - (looking-at "[^[:space:]]") - (looking-back "[^[:space:]]") - (not (looking-back "^"))) - (cond - ((bound-and-true-p hs-minor-mode) - (save-excursion (end-of-line) (hs-toggle-hiding))) - ((bound-and-true-p outline-minor-mode) - (save-excursion (outline-cycle))))) - - ;; by default just call whatever was bound - (t - (let ((fn (or (lookup-key (current-local-map) (kbd "TAB")) - 'indent-for-tab-command))) - (if (not (called-interactively-p 'any)) - (fn arg) - (setq this-command fn) - (call-interactively fn)))))) - - (defun malb/toggle-fold () - (interactive) - (cond ((eq major-mode 'org-mode) - (org-force-cycle-archived)) - ((bound-and-true-p hs-minor-mode) - (save-excursion - (end-of-line) - (hs-toggle-hiding))) + ((bound-and-true-p hs-minor-mode) + (save-excursion (end-of-line) (hs-toggle-hiding))) + ((bound-and-true-p outline-minor-mode) + (save-excursion (outline-cycle))))) + + ;; by default just call whatever was bound + (t + (let ((fn (or (if (current-local-map) (lookup-key (current-local-map) (kbd "TAB"))) + 'indent-for-tab-command))) + (if (not (called-interactively-p 'any)) + (fn arg) + (setq this-command fn) + (call-interactively fn)))))) + +(defun malb/toggle-fold () + (interactive) + (cond ((eq major-mode 'org-mode) + (org-force-cycle-archived)) + ((bound-and-true-p hs-minor-mode) + (save-excursion + (end-of-line) + (hs-toggle-hiding))) - ((bound-and-true-p outline-minor-mode) - (save-excursion - (outline-cycle))))) + ((bound-and-true-p outline-minor-mode) + (save-excursion + (outline-cycle))))) - (bind-key "" #'malb/indent-fold-or-complete) - (bind-key "C-" #'malb/toggle-fold) +(bind-key "" #'malb/indent-fold-or-complete) +(bind-key "C-" #'malb/toggle-fold) #+END_SRC ** Tinyprocmail @@ -1768,191 +1768,191 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori #+END_SRC ** Keywords (TODO) #+BEGIN_SRC emacs-lisp - (setq org-todo-keywords - (quote ((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d)") - (sequence "WAITING(w@/!)" "HOLD(h@/!)" "|" "CANCELLED(c@/!)" "PHONE" "MEETING")))) - - (setq org-todo-keyword-faces - (quote (("TODO" :foreground "red" :weight bold) - ("NEXT" :foreground "blue" :weight bold) - ("DONE" :foreground "forest green" :weight bold) - ("WAITING" :foreground "orange" :weight bold) - ("HOLD" :foreground "magenta" :weight bold) - ("CANCELLED" :foreground "forest green" :weight bold) - ("MEETING" :foreground "forest green" :weight bold) - ("PHONE" :foreground "forest green" :weight bold)))) - - (setq org-todo-state-tags-triggers - (quote (("CANCELLED" ("CANCELLED" . t)) - ("WAITING" ("WAITING" . t)) - ("HOLD" ("WAITING") ("HOLD" . t)) - (done ("WAITING") ("HOLD")) - ("TODO" ("WAITING") ("CANCELLED") ("HOLD")) - ("NEXT" ("WAITING") ("CANCELLED") ("HOLD")) - ("DONE" ("WAITING") ("CANCELLED") ("HOLD"))))) - - - - ; (add-hook 'org-clock-out-hook 'bh/remove-empty-drawer-on-clock-out 'append) - ; add ids on creation of nodes - (add-hook 'org-capture-prepare-finalize-hook 'my/org-add-id) - - - ; resolve clocks after 10 minutes of idle; use xprintidle - ; (setq org-clock-idle-time 10) - ; (setq org-clock-x11idle-program-name "xprintidle") - - ; this is from http://doc.norang.ca/org-mode.html#Capture - ; use C-M-r for org mode capture - (global-set-key (kbd "C-M-r") 'org-capture) - - ; Targets include this file and any file contributing to the agenda - up to 9 levels deep - (setq org-refile-targets (quote ((nil :maxlevel . 9) - (org-agenda-files :maxlevel . 9)))) - - ; Use full outline paths for refile targets - we file directly with IDO - (setq org-refile-use-outline-path t) - - ; Targets complete directly with IDO - (setq org-outline-path-complete-in-steps nil) - - ; Allow refile to create parent tasks with confirmation - (setq org-refile-allow-creating-parent-nodes (quote confirm)) - - ; ; Use IDO for both buffer and file completion and ido-everywhere to t - ; (setq org-completion-use-ido t) - ; (setq ido-everywhere t) - ; (setq ido-max-directory-size 100000) - ; (ido-mode (quote both)) - ; ; Use the current window when visiting files and buffers with ido - ; (setq ido-default-file-method 'selected-window) - ; (setq ido-default-buffer-method 'selected-window) - ; ; Use the current window for indirect buffer display - ; (setq org-indirect-buffer-display 'current-window) - - - ;;;; Refile settings - ; Exclude DONE state tasks from refile targets - (defun bh/verify-refile-target () - "Exclude todo keywords with a done state from refile targets" - (not (member (nth 2 (org-heading-components)) org-done-keywords))) - - (setq org-refile-target-verify-function 'bh/verify-refile-target) - - ;; ensure that emacsclient will show just the note to be edited when invoked - ;; from Mutt, and that it will shut down emacsclient once finished; - ;; fallback to legacy behavior when not invoked via org-protocol. - (require 'org-protocol) - ; (add-hook 'org-capture-mode-hook 'delete-other-windows) - (setq my-org-protocol-flag nil) - (defadvice org-capture-finalize (after delete-frame-at-end activate) - "Delete frame at remember finalization" - (progn (if my-org-protocol-flag (delete-frame)) - (setq my-org-protocol-flag nil))) - (defadvice org-capture-refile (around delete-frame-after-refile activate) - "Delete frame at remember refile" - (if my-org-protocol-flag - (progn - (setq my-org-protocol-flag nil) - ad-do-it - (delete-frame)) - ad-do-it) - ) - (defadvice org-capture-kill (after delete-frame-at-end activate) - "Delete frame at remember abort" - (progn (if my-org-protocol-flag (delete-frame)) - (setq my-org-protocol-flag nil))) - (defadvice org-protocol-capture (before set-org-protocol-flag activate) - (setq my-org-protocol-flag t)) - - (defadvice org-insert-todo-heading (after dla/create-id activate) - (unless (org-in-item-p) - (org-id-get-create) - ) +(setq org-todo-keywords + (quote ((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d)") + (sequence "WAITING(w@/!)" "HOLD(h@/!)" "|" "CANCELLED(c@/!)" "PHONE" "MEETING")))) + +(setq org-todo-keyword-faces + (quote (("TODO" :foreground "red" :weight bold) + ("NEXT" :foreground "blue" :weight bold) + ("DONE" :foreground "forest green" :weight bold) + ("WAITING" :foreground "orange" :weight bold) + ("HOLD" :foreground "magenta" :weight bold) + ("CANCELLED" :foreground "forest green" :weight bold) + ("MEETING" :foreground "forest green" :weight bold) + ("PHONE" :foreground "forest green" :weight bold)))) + +(setq org-todo-state-tags-triggers + (quote (("CANCELLED" ("CANCELLED" . t)) + ("WAITING" ("WAITING" . t)) + ("HOLD" ("WAITING") ("HOLD" . t)) + (done ("WAITING") ("HOLD")) + ("TODO" ("WAITING") ("CANCELLED") ("HOLD")) + ("NEXT" ("WAITING") ("CANCELLED") ("HOLD")) + ("DONE" ("WAITING") ("CANCELLED") ("HOLD"))))) + + + +; (add-hook 'org-clock-out-hook 'bh/remove-empty-drawer-on-clock-out 'append) +; add ids on creation of nodes +(add-hook 'org-capture-prepare-finalize-hook 'my/org-add-id) + + +; resolve clocks after 10 minutes of idle; use xprintidle +; (setq org-clock-idle-time 10) +; (setq org-clock-x11idle-program-name "xprintidle") + +; this is from http://doc.norang.ca/org-mode.html#Capture +; use C-M-r for org mode capture +(global-set-key (kbd "C-M-r") 'org-capture) + +; Targets include this file and any file contributing to the agenda - up to 9 levels deep +(setq org-refile-targets (quote ((nil :maxlevel . 9) + (org-agenda-files :maxlevel . 9)))) + +; Use full outline paths for refile targets - we file directly with IDO +(setq org-refile-use-outline-path t) + +; Targets complete directly with IDO +(setq org-outline-path-complete-in-steps nil) + +; Allow refile to create parent tasks with confirmation +(setq org-refile-allow-creating-parent-nodes (quote confirm)) + +; ; Use IDO for both buffer and file completion and ido-everywhere to t +; (setq org-completion-use-ido t) +; (setq ido-everywhere t) +; (setq ido-max-directory-size 100000) +; (ido-mode (quote both)) +; ; Use the current window when visiting files and buffers with ido +; (setq ido-default-file-method 'selected-window) +; (setq ido-default-buffer-method 'selected-window) +; ; Use the current window for indirect buffer display +; (setq org-indirect-buffer-display 'current-window) + + +;;;; Refile settings +; Exclude DONE state tasks from refile targets +(defun bh/verify-refile-target () + "Exclude todo keywords with a done state from refile targets" + (not (member (nth 2 (org-heading-components)) org-done-keywords))) + +(setq org-refile-target-verify-function 'bh/verify-refile-target) + +;; ensure that emacsclient will show just the note to be edited when invoked +;; from Mutt, and that it will shut down emacsclient once finished; +;; fallback to legacy behavior when not invoked via org-protocol. +(require 'org-protocol) +; (add-hook 'org-capture-mode-hook 'delete-other-windows) +(setq my-org-protocol-flag nil) +(defadvice org-capture-finalize (after delete-frame-at-end activate) + "Delete frame at remember finalization" + (progn (if my-org-protocol-flag (delete-frame)) + (setq my-org-protocol-flag nil))) +(defadvice org-capture-refile (around delete-frame-after-refile activate) + "Delete frame at remember refile" + (if my-org-protocol-flag + (progn + (setq my-org-protocol-flag nil) + ad-do-it + (delete-frame)) + ad-do-it) + ) +(defadvice org-capture-kill (after delete-frame-at-end activate) + "Delete frame at remember abort" + (progn (if my-org-protocol-flag (delete-frame)) + (setq my-org-protocol-flag nil))) +(defadvice org-protocol-capture (before set-org-protocol-flag activate) + (setq my-org-protocol-flag t)) + +(defadvice org-insert-todo-heading (after dla/create-id activate) + (unless (org-in-item-p) + (org-id-get-create) ) + ) - ;; org modules - (add-to-list 'org-modules 'org-habit) - - ; this comes from http://upsilon.cc/~zack/blog/posts/2010/02/integrating_Mutt_with_Org-mode/ - (defun open-mail-in-mutt (message) - "Open a mail message in Mutt, using an external terminal. - - Message can be specified either by a path pointing inside a - Maildir, or by Message-ID." - (interactive "MPath or Message-ID: ") - (shell-command - (format "faf xterm -e \"%s %s\"" - (substitute-in-file-name "$HOME/bin/mutt_open") message))) - - ;; add support for "mutt:ID" links - (org-add-link-type "mutt" 'open-mail-in-mutt) - - (defun my-org-mode-setup () - ; (load-library "reftex") - (and (buffer-file-name) - (file-exists-p (buffer-file-name)) - (progn - ; (reftex-parse-all) - (reftex-set-cite-format - '((?b . "[[bib:%l][%l-bib]]") - (?n . "[[notes:%l][%l-notes]]") - (?c . "\\cite{%l}") - (?h . "*** %t\n:PROPERTIES:\n:Custom_ID: %l\n:END:\n[[papers:%l][%l xoj]] [[papers-pdf:%l][pdf]]"))) - )) - (define-key org-mode-map (kbd "C-c )") 'reftex-citation) - (define-key org-mode-map (kbd "C-c [") 'reftex-citation) - (define-key org-mode-map (kbd "C-c (") 'org-mode-reftex-search) - (define-key org-mode-map (kbd "C-c 0") 'reftex-view-crossref) - ) - (add-hook 'org-mode-hook 'my-org-mode-setup) +;; org modules +(add-to-list 'org-modules 'org-habit) + +; this comes from http://upsilon.cc/~zack/blog/posts/2010/02/integrating_Mutt_with_Org-mode/ +(defun open-mail-in-mutt (message) + "Open a mail message in Mutt, using an external terminal. + +Message can be specified either by a path pointing inside a +Maildir, or by Message-ID." + (interactive "MPath or Message-ID: ") + (shell-command + (format "faf xterm -e \"%s %s\"" + (substitute-in-file-name "$HOME/bin/mutt_open") message))) + +;; add support for "mutt:ID" links +(org-add-link-type "mutt" 'open-mail-in-mutt) + +(defun my-org-mode-setup () + ; (load-library "reftex") + (and (buffer-file-name) + (file-exists-p (buffer-file-name)) + (progn + ; (reftex-parse-all) + (reftex-set-cite-format + '((?b . "[[bib:%l][%l-bib]]") + (?n . "[[notes:%l][%l-notes]]") + (?c . "\\cite{%l}") + (?h . "*** %t\n:PROPERTIES:\n:Custom_ID: %l\n:END:\n[[papers:%l][%l xoj]] [[papers-pdf:%l][pdf]]"))) + )) + (define-key org-mode-map (kbd "C-c )") 'reftex-citation) + (define-key org-mode-map (kbd "C-c [") 'reftex-citation) + (define-key org-mode-map (kbd "C-c (") 'org-mode-reftex-search) + (define-key org-mode-map (kbd "C-c 0") 'reftex-view-crossref) + ) +(add-hook 'org-mode-hook 'my-org-mode-setup) - (defun org-mode-reftex-search () - (interactive) - (org-open-link-from-string (format "[[notes:%s]]" (first (reftex-citation t))))) - - (defun open-research-paper (bibtexkey) - "Open a paper by bibtex key" - (interactive "bibtex key: ") - (shell-command - (format "%s %s" - (substitute-in-file-name "$HOME/bin/bibtex_to_paper") bibtexkey))) - (org-add-link-type "papers" 'open-research-paper) - (defun open-research-paper-pdf (bibtexkey) - "Open a paper pdf by bibtex key" - (interactive "bibtex key: ") - (shell-command - (format "%s -p evince_annot %s" - (substitute-in-file-name "$HOME/bin/bibtex_to_paper") bibtexkey))) - (org-add-link-type "papers-pdf" 'open-research-paper-pdf) - - (add-to-list 'org-link-abbrev-alist - '("notes" . - "~/projects/research/paper_notes.org::#%s")) - - ; I pretty much always want hiearchical checkboxes - (setq org-hierachical-checkbox-statistics nil) - - ;; Add \begin{equation}\end{equation} templates to the org mode easy templates - (add-to-list 'org-structure-template-alist - '("E" "\\begin{equation}\n?\n\\end{equation}")) - - ;; stolen from - ;; http://www-public.it-sudparis.eu/~berger_o/weblog/2012/03/23/how-to-manage-and-export-bibliographic-notesrefs-in-org-mode/ - (defun my-rtcite-export-handler (path desc format) - (message "my-rtcite-export-handler is called : path = %s, desc = %s, format = %s" path desc format) - (let* ((search (when (string-match "::#?\\(.+\\)\\'" path) - (match-string 1 path))) - (path (substring path 0 (match-beginning 0)))) - (cond ((eq format 'latex) - (if (or (not desc) - (equal 0 (search "rtcite:" desc))) - (format "\\cite{%s}" search) - (format "\\cite[%s]{%s}" desc search)))))) - - (org-add-link-type "rtcite" - 'org-bibtex-open - 'my-rtcite-export-handler) +(defun org-mode-reftex-search () + (interactive) + (org-open-link-from-string (format "[[notes:%s]]" (first (reftex-citation t))))) + +(defun open-research-paper (bibtexkey) + "Open a paper by bibtex key" + (interactive "bibtex key: ") + (shell-command + (format "%s %s" + (substitute-in-file-name "$HOME/bin/bibtex_to_paper") bibtexkey))) +(org-add-link-type "papers" 'open-research-paper) +(defun open-research-paper-pdf (bibtexkey) + "Open a paper pdf by bibtex key" + (interactive "bibtex key: ") + (shell-command + (format "%s -p evince_annot %s" + (substitute-in-file-name "$HOME/bin/bibtex_to_paper") bibtexkey))) +(org-add-link-type "papers-pdf" 'open-research-paper-pdf) + +(add-to-list 'org-link-abbrev-alist + '("notes" . + "~/projects/research/paper_notes.org::#%s")) + +; I pretty much always want hiearchical checkboxes +(setq org-hierachical-checkbox-statistics nil) + +;; Add \begin{equation}\end{equation} templates to the org mode easy templates +(add-to-list 'org-structure-template-alist + '("E" "\\begin{equation}\n?\n\\end{equation}")) + + ;; stolen from +;; http://www-public.it-sudparis.eu/~berger_o/weblog/2012/03/23/how-to-manage-and-export-bibliographic-notesrefs-in-org-mode/ +(defun my-rtcite-export-handler (path desc format) + (message "my-rtcite-export-handler is called : path = %s, desc = %s, format = %s" path desc format) + (let* ((search (when (string-match "::#?\\(.+\\)\\'" path) + (match-string 1 path))) + (path (substring path 0 (match-beginning 0)))) + (cond ((eq format 'latex) + (if (or (not desc) + (equal 0 (search "rtcite:" desc))) + (format "\\cite{%s}" search) + (format "\\cite[%s]{%s}" desc search)))))) + +(org-add-link-type "rtcite" + 'org-bibtex-open + 'my-rtcite-export-handler) #+END_SRC -- 2.39.2