changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate emacs/default.el

changeset 96: 301fd45bbe73
parent: 17b6d1f39506
child: d111e98f7c18
author: ellis <ellis@rwest.io>
date: Wed, 13 Dec 2023 20:02:36 -0500
permissions: -rw-r--r--
description: big refactor of lisp code
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
1
 ;;; default.el --- default config -*- lexical-binding: t -*-
27
1142c97f92ab emacs config
ellis <ellis@rwest.io>
parents: 26
diff changeset
2
 
1142c97f92ab emacs config
ellis <ellis@rwest.io>
parents: 26
diff changeset
3
 ;;; Code:
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
4
 ;;; Settings
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
5
 (put 'upcase-region 'disabled nil)
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
6
 (put 'list-threads 'disabled nil)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
7
 (put 'list-timers 'disabled nil)
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
8
 (setq show-paren-context-when-offscreen 'overlay)
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
9
 (setopt
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
10
  ;; tabs = bad
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
11
  indent-tabs-mode nil
31
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
12
  make-backup-files nil
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
13
  auto-save-list-file-prefix (expand-file-name "auto-save/." user-emacs-directory)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
14
  tramp-auto-save-directory (expand-file-name "auto-save/tramp/" user-emacs-directory)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
15
  dired-free-space nil
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
16
  mml-attach-file-at-the-end t
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
17
  dired-mouse-drag-files t
31
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
18
  confirm-kill-emacs nil
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
19
  confirm-kill-processes nil
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
20
  use-short-answers t
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
21
  display-time-format "%Y-%m-%d %H:%M"
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
22
  ring-bell-function 'ignore
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
23
  completion-ignore-case t
33
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
24
  ;; NOTE 2023-11-04: you need to add the following lines to ~/.gnupg/gpg-agent.conf:
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
25
  ;; allow-emacs-pinentry
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
26
  ;; allow-loopback-pinentry
41
2b878ae73a84 emacs, skel, krypt
ellis <ellis@rwest.io>
parents: 38
diff changeset
27
  epg-pinentry-mode 'loopback
31
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
28
  shr-use-colors nil
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
29
  shr-use-fonts nil
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
30
  shr-max-image-proportion 0.6
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
31
  shr-image-animate nil
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
32
  shr-discard-aria-hidden t
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
33
  bookmark-default-file (expand-file-name "bookmarks" user-emacs-directory)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
34
  project-list-file (expand-file-name "projects" user-emacs-directory)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
35
  emms-directory (expand-file-name "emms" user-emacs-directory)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
36
  gnus-cache-directory (expand-file-name "gnus" user-emacs-directory)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
37
  url-cache-directory (expand-file-name "url" user-emacs-directory)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
38
  tab-always-indent 'complete
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
39
  shr-cookie-policy nil
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
40
  ;; NOTE 2023-11-04: EXPERIMENTAL
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
41
  shr-use-xwidgets-for-media t
31
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
42
  browse-url-browser-function 'browse-url-default-browser
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
43
  eww-auto-rename-buffer 'title
31
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
44
  eww-search-prefix "https://duckduckgo.com/html?q="
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
45
  view-read-only t)
27
1142c97f92ab emacs config
ellis <ellis@rwest.io>
parents: 26
diff changeset
46
 
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
47
 ;;; Variables
33
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
48
 (defvar user-custom-file (expand-file-name (format "%s.el" user-login-name) user-emacs-directory))
32
62d07dc38929 user directories
ellis <ellis@rwest.io>
parents: 31
diff changeset
49
 (defvar user-home-directory (expand-file-name "~"))
62d07dc38929 user directories
ellis <ellis@rwest.io>
parents: 31
diff changeset
50
 (defvar user-lab-directory (expand-file-name "lab" user-home-directory))
62d07dc38929 user directories
ellis <ellis@rwest.io>
parents: 31
diff changeset
51
 (defvar user-stash-directory (expand-file-name "stash" user-home-directory))
62d07dc38929 user directories
ellis <ellis@rwest.io>
parents: 31
diff changeset
52
 (defvar user-store-directory (expand-file-name "store" user-home-directory))
62d07dc38929 user directories
ellis <ellis@rwest.io>
parents: 31
diff changeset
53
 (defvar user-shed-directory (expand-file-name "shed" user-home-directory))
62d07dc38929 user directories
ellis <ellis@rwest.io>
parents: 31
diff changeset
54
 (defvar user-mail-directory (expand-file-name "mail" user-home-directory))
62d07dc38929 user directories
ellis <ellis@rwest.io>
parents: 31
diff changeset
55
 (defvar user-media-directory (expand-file-name "media" user-home-directory))
62d07dc38929 user directories
ellis <ellis@rwest.io>
parents: 31
diff changeset
56
 
41
2b878ae73a84 emacs, skel, krypt
ellis <ellis@rwest.io>
parents: 38
diff changeset
57
 (defvar default-theme 'leuven-dark)
2b878ae73a84 emacs, skel, krypt
ellis <ellis@rwest.io>
parents: 38
diff changeset
58
 (defvar company-source-directory (join-paths user-lab-directory "comp"))
2b878ae73a84 emacs, skel, krypt
ellis <ellis@rwest.io>
parents: 38
diff changeset
59
 (defvar company-domain "compiler.company")
2b878ae73a84 emacs, skel, krypt
ellis <ellis@rwest.io>
parents: 38
diff changeset
60
 (defvar company-name "The Compiler Company, LLC")
2b878ae73a84 emacs, skel, krypt
ellis <ellis@rwest.io>
parents: 38
diff changeset
61
 (defvar company-vc-domain "vc.compiler.company")
2b878ae73a84 emacs, skel, krypt
ellis <ellis@rwest.io>
parents: 38
diff changeset
62
 (defvar company-home "the.compiler.company")
2b878ae73a84 emacs, skel, krypt
ellis <ellis@rwest.io>
parents: 38
diff changeset
63
 
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
64
 ;;; Theme
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
65
 (defun load-default-theme () (interactive) (load-theme default-theme))
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
66
 
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
67
 (add-hook 'after-init-hook #'load-default-theme)
27
1142c97f92ab emacs config
ellis <ellis@rwest.io>
parents: 26
diff changeset
68
 
1142c97f92ab emacs config
ellis <ellis@rwest.io>
parents: 26
diff changeset
69
 ;;; Packages
1142c97f92ab emacs config
ellis <ellis@rwest.io>
parents: 26
diff changeset
70
 (package-initialize)
28
bc174808bc53 emacs and rust/lib/tenex
ellis <ellis@rwest.io>
parents: 27
diff changeset
71
 
27
1142c97f92ab emacs config
ellis <ellis@rwest.io>
parents: 26
diff changeset
72
 (with-eval-after-load 'package
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
73
   (setq package-archives
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
74
     '(("gnu" . "https://elpa.gnu.org/packages/")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
75
       ("nongnu" . "https://elpa.nongnu.org/nongnu/")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
76
       ("melpa" . "https://melpa.org/packages/"))
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
77
     use-package-always-ensure t
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
78
     use-package-expand-minimally t)
28
bc174808bc53 emacs and rust/lib/tenex
ellis <ellis@rwest.io>
parents: 27
diff changeset
79
   (add-packages
33
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
80
    org-web-tools ;; web parsing
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
81
    citeproc ;; citations
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
82
    all-the-icons all-the-icons-dired all-the-icons-ibuffer ;; icons
44
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
83
    corfu orderless cape ;; completion
33
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
84
    slime ;; common lisp server
44
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
85
    slime-company
33
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
86
    which-key ;; key helper
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
87
    ;; langs
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
88
    rust-mode)
28
bc174808bc53 emacs and rust/lib/tenex
ellis <ellis@rwest.io>
parents: 27
diff changeset
89
   (package-install-selected-packages t))
26
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 24
diff changeset
90
 
45
ad67a57b0134 rocksdb bindings and emacs config
ellis <ellis@rwest.io>
parents: 44
diff changeset
91
 ;;; Env
62
e310b68526b9 elisp and lisp
ellis <ellis@rwest.io>
parents: 60
diff changeset
92
 (require 'exec-path-from-shell)
e310b68526b9 elisp and lisp
ellis <ellis@rwest.io>
parents: 60
diff changeset
93
 (exec-path-from-shell-copy-env "SSH_AGENT_PID")
e310b68526b9 elisp and lisp
ellis <ellis@rwest.io>
parents: 60
diff changeset
94
 (exec-path-from-shell-copy-env "SSH_AUTH_SOCK")
e310b68526b9 elisp and lisp
ellis <ellis@rwest.io>
parents: 60
diff changeset
95
 (exec-path-from-shell-copy-env "PATH")
45
ad67a57b0134 rocksdb bindings and emacs config
ellis <ellis@rwest.io>
parents: 44
diff changeset
96
 (add-to-list 'exec-path (expand-file-name "~/.cargo/bin/"))
ad67a57b0134 rocksdb bindings and emacs config
ellis <ellis@rwest.io>
parents: 44
diff changeset
97
 (add-to-list 'exec-path (expand-file-name "~/.local/bin/"))
ad67a57b0134 rocksdb bindings and emacs config
ellis <ellis@rwest.io>
parents: 44
diff changeset
98
 (add-to-list 'exec-path "/bin/")
ad67a57b0134 rocksdb bindings and emacs config
ellis <ellis@rwest.io>
parents: 44
diff changeset
99
 (add-to-list 'exec-path "/usr/local/sbin/")
ad67a57b0134 rocksdb bindings and emacs config
ellis <ellis@rwest.io>
parents: 44
diff changeset
100
 
33
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
101
 ;;; Completions
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
102
 (use-package corfu
44
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
103
   :init (global-corfu-mode))
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
104
 
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
105
 (use-package cape
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
106
   ;; Bind dedicated completion commands
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
107
   ;; Alternative prefix keys: C-c p, M-p, M-+, ...
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
108
   :bind (("C-c p p" . completion-at-point) ;; capf
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
109
          ("C-c p t" . complete-tag)        ;; etags
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
110
          ("C-c p d" . cape-dabbrev)        ;; or dabbrev-completion
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
111
          ("C-c p h" . cape-history)
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
112
          ("C-c p f" . cape-file)
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
113
          ("C-c p k" . cape-keyword)
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
114
          ("C-c p s" . cape-elisp-symbol)
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
115
          ("C-c p e" . cape-elisp-block)
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
116
          ("C-c p a" . cape-abbrev)
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
117
          ("C-c p l" . cape-line)
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
118
          ("C-c p w" . cape-dict)
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
119
          ("C-c p :" . cape-emoji)
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
120
          ("C-c p \\" . cape-tex)
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
121
          ("C-c p _" . cape-tex)
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
122
          ("C-c p ^" . cape-tex)
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
123
          ("C-c p &" . cape-sgml)
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
124
          ("C-c p r" . cape-rfc1345))
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
125
   :init
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
126
   ;; Add to the global default value of `completion-at-point-functions' which is
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
127
   ;; used by `completion-at-point'.  The order of the functions matters, the
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
128
   ;; first function returning a result wins.  Note that the list of buffer-local
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
129
   ;; completion functions takes precedence over the global list.
60
ee94191a3fb0 add zstd, todos
ellis <ellis@rwest.io>
parents: 59
diff changeset
130
   ;; (add-to-list 'completion-at-point-functions #'cape-dabbrev)
ee94191a3fb0 add zstd, todos
ellis <ellis@rwest.io>
parents: 59
diff changeset
131
   ;; (add-to-list 'completion-at-point-functions #'cape-abbrev)
59
ce1a5c531abf el cleanup
ellis <ellis@rwest.io>
parents: 58
diff changeset
132
   ;; (add-to-list 'completion-at-point-functions #'cape-history)
60
ee94191a3fb0 add zstd, todos
ellis <ellis@rwest.io>
parents: 59
diff changeset
133
   ;; (add-to-list 'completion-at-point-functions #'cape-keyword)
ee94191a3fb0 add zstd, todos
ellis <ellis@rwest.io>
parents: 59
diff changeset
134
   ;; (add-to-list 'completion-at-point-functions #'cape-file)
59
ce1a5c531abf el cleanup
ellis <ellis@rwest.io>
parents: 58
diff changeset
135
   ;; (add-to-list 'completion-at-point-functions #'cape-line)
ce1a5c531abf el cleanup
ellis <ellis@rwest.io>
parents: 58
diff changeset
136
   ;; (add-to-list 'completion-at-point-functions #'cape-elisp-block)
60
ee94191a3fb0 add zstd, todos
ellis <ellis@rwest.io>
parents: 59
diff changeset
137
   ;; (add-to-list 'completion-at-point-functions #'cape-tex)
59
ce1a5c531abf el cleanup
ellis <ellis@rwest.io>
parents: 58
diff changeset
138
   ;; (add-to-list 'completion-at-point-functions #'cape-sgml)
ce1a5c531abf el cleanup
ellis <ellis@rwest.io>
parents: 58
diff changeset
139
   ;; (add-to-list 'completion-at-point-functions #'cape-rfc1345)
ce1a5c531abf el cleanup
ellis <ellis@rwest.io>
parents: 58
diff changeset
140
   ;; (add-to-list 'completion-at-point-functions #'cape-dict)
ce1a5c531abf el cleanup
ellis <ellis@rwest.io>
parents: 58
diff changeset
141
   ;; (add-to-list 'completion-at-point-functions #'cape-elisp-symbol)
ce1a5c531abf el cleanup
ellis <ellis@rwest.io>
parents: 58
diff changeset
142
   ;; (add-to-list 'completion-at-point-functions #'cape-emoji)
ce1a5c531abf el cleanup
ellis <ellis@rwest.io>
parents: 58
diff changeset
143
   )
33
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
144
 
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
145
 (use-package orderless
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
146
   :custom
33
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
147
   (completion-styles '(orderless basic))
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
148
   (completion-category-overrides '((file (styles basic partial-completion)))))
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
149
 
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
150
 ;;; Desktop
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
151
 (setopt desktop-dirname (expand-file-name "sessions" user-emacs-directory))
33
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
152
 
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
153
 ;;; Multisession
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
154
 (setq multisession-storage 'sqlite)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
155
 
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
156
 ;;; VC
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
157
 ;; use rhg, fallback to hg. see hgrc
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
158
 (if (file-exists-p "~/.local/bin/rhg")
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
159
     (setq hg-binary "~/.local/bin/rhg"))
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
160
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
161
 ;;; Dired
29
920ded613f45 cargo update
ellis <ellis@rwest.io>
parents: 28
diff changeset
162
 (add-hook 'dired-mode-hook #'all-the-icons-dired-mode)
920ded613f45 cargo update
ellis <ellis@rwest.io>
parents: 28
diff changeset
163
 (add-hook 'ibuffer-mode-hook #'all-the-icons-ibuffer-mode)
26
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 24
diff changeset
164
 
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
165
 ;;; Lisp
26
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 24
diff changeset
166
 (use-package lisp-mode
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 24
diff changeset
167
   :ensure nil
33
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
168
   :custom
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
169
   inferior-lisp-program "sbcl"
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
170
   scheme-program-name "gsi"
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
171
   guile-program "guile"
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
172
   cmulisp-program "lisp"
e3b0ec661dfa added inbox.el, more emacs config
ellis <ellis@rwest.io>
parents: 32
diff changeset
173
   scsh-program "scsh")
26
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 24
diff changeset
174
 
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 24
diff changeset
175
 (use-package slime
44
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
176
   :ensure t
26
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 24
diff changeset
177
   :config
44
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
178
   (setq slime-contribs '(slime-fancy slime-quicklisp))
53
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
179
 
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
180
   (put 'make-instance 'common-lisp-indent-function 1)
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
181
   (put 'reinitialize-instance 'common-lisp-indent-function 1)
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
182
 
26
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 24
diff changeset
183
   (defvar slime-toggle nil)
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 24
diff changeset
184
   (defun slime-toggle ()
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 24
diff changeset
185
     "toggle between lisp file and slime-repl"
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 24
diff changeset
186
     (interactive)
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 24
diff changeset
187
     (if (eq major-mode 'slime-repl-mode)
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
188
     (setq slime-toggle (pop-to-buffer (or slime-toggle (read-buffer "lisp file: "))))
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
189
       (progn
44
cc85ab013035 added slime-cape, config stuff
ellis <ellis@rwest.io>
parents: 41
diff changeset
190
         (setq slime-toggle (current-buffer))
53
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
191
         (slime-repl))))
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
192
 
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
193
   (defun clouseau-inspect (string)
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
194
     "Inspect a lisp value with Clouseau. make sure to load clouseau
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
195
 with a custom core or in your init file before using this
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
196
 function: '(ql:quickload :clouseau)'."
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
197
     (interactive
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
198
      (list (slime-read-from-minibuffer
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
199
             "Inspect value (evaluated): "
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
200
             (slime-sexp-at-point))))
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
201
     (let ((inspector 'cl-user::*clouseau-inspector*))
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
202
       (slime-eval-async
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
203
           `(cl:progn
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
204
             (cl:defvar ,inspector nil)
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
205
             ;; (Re)start the inspector if necessary.
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
206
             (cl:unless (cl:and (clim:application-frame-p ,inspector)
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
207
                                (clim-internals::frame-process ,inspector))
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
208
                        (cl:setf ,inspector (cl:nth-value 1 (clouseau:inspect nil :new-process t))))
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
209
             ;; Tell the inspector to visualize the correct datum.
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
210
             (cl:setf (clouseau:root-object ,inspector :run-hook-p t)
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
211
                      (cl:eval (cl:read-from-string ,string)))
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
212
             ;; Return nothing.
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
213
             (cl:values)))))
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
214
 
daad2b8bb63f init nlp
ellis <ellis@rwest.io>
parents: 45
diff changeset
215
   (define-key slime-prefix-map (kbd "i") 'clouseau-inspect))
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
216
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
217
 ;;; Rust
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
218
 (add-hook 'rust-mode-hook 'eglot-ensure)
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
219
 (setq rust-rustfmt-switches nil
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
220
       rust-indent-offset 2)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
221
 
26
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 24
diff changeset
222
 (with-eval-after-load 'eglot
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 24
diff changeset
223
   (add-to-list 'eglot-server-programs '(rust-mode . ("rust-analyzer"))))
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
224
 
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
225
 ;;; Python
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
226
 (setq python-indent-offset 2)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
227
 (add-hook 'python-mode-hook 'eglot-ensure)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
228
 
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
229
 ;;; Bash
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
230
 (setq sh-basic-offset 2)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
231
 
31
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
232
 ;;; Comments
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
233
 (defcustom prog-comment-keywords
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
234
   '("TODO" "REVIEW" "FIX" "HACK" "RESEARCH")
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
235
   "List of strings with comment keywords."
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
236
   :group 'default)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
237
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
238
 (defcustom prog-comment-timestamp-format-concise "%F"
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
239
   "Specifier for date in `prog-comment-timestamp-keyword'.
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
240
 Refer to the doc string of `format-time-string' for the available
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
241
 options."
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
242
   :group 'default)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
243
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
244
 (defcustom prog-comment-timestamp-format-verbose "%F %T %z"
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
245
   "Like `prog-comment-timestamp-format-concise', but longer."
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
246
   :group 'default)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
247
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
248
 ;;;###autoload
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
249
 (defun prog-comment-dwim (arg)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
250
   "Flexible, do-what-I-mean commenting.
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
251
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
252
 If region is active and ARG is either a numeric argument greater
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
253
 than one or a universal prefix (\\[universal-argument]), then
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
254
 apply `comment-kill' on all comments in the region.
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
255
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
256
 If the region is active and no ARG is supplied, or is equal to a
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
257
 numeric prefix of 1, then toggle the comment status of the region.
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
258
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
259
 Else toggle the comment status of the line at point.  With a
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
260
 numeric prefix ARG, do so for ARGth lines (negative prefix
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
261
 operates on the lines before point)."
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
262
   (interactive "p")
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
263
   (cond
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
264
    ((and (> arg 1) (use-region-p))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
265
     (let* ((beg (region-beginning))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
266
            (end (region-end))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
267
            (num (count-lines beg end)))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
268
       (save-excursion
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
269
         (goto-char beg)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
270
         (comment-kill num))))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
271
    ((use-region-p)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
272
     (comment-or-uncomment-region (region-beginning) (region-end)))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
273
    (t
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
274
     (save-excursion (comment-line (or arg 1))))))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
275
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
276
 (defvar prog-comment--keyword-hist '()
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
277
   "Input history of selected comment keywords.")
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
278
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
279
 (defun prog-comment--keyword-prompt (keywords)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
280
   "Prompt for candidate among KEYWORDS."
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
281
   (let ((def (car prog-comment--keyword-hist)))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
282
     (completing-read
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
283
      (format "Select keyword [%s]: " def)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
284
      keywords nil nil nil 'prog-comment--keyword-hist def)))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
285
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
286
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
287
 ;;;###autoload
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
288
 (defun prog-comment-timestamp-keyword (keyword &optional verbose)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
289
   "Add timestamped comment with KEYWORD.
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
290
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
291
 When called interactively, the list of possible keywords is that
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
292
 of `prog-comment-keywords', though it is possible to
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
293
 input arbitrary text.
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
294
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
295
 If point is at the beginning of the line or if line is empty (no
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
296
 characters at all or just indentation), the comment is started
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
297
 there in accordance with `comment-style'.  Any existing text
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
298
 after the point will be pushed to a new line and will not be
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
299
 turned into a comment.
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
300
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
301
 If point is anywhere else on the line, the comment is indented
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
302
 with `comment-indent'.
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
303
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
304
 The comment is always formatted as 'DELIMITER KEYWORD DATE:',
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
305
 with the date format being controlled by the variable
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
306
 `prog-comment-timestamp-format-concise'.
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
307
 
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
308
 With optional VERBOSE argument (such as a prefix argument
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
309
 `\\[universal-argument]'), use an alternative date format, as
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
310
 specified by `prog-comment-timestamp-format-verbose'."
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
311
   (interactive
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
312
    (list
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
313
     (prog-comment--keyword-prompt prog-comment-keywords)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
314
     current-prefix-arg))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
315
   (let* ((date (if verbose
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
316
                    comment-timestamp-format-verbose
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
317
          prog-comment-timestamp-format-concise))
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
318
      (string (format "%s %s: " keyword (format-time-string date)))
31
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
319
          (beg (point)))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
320
     (cond
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
321
      ((or (eq beg (point-at-bol))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
322
           (default-line-regexp-p 'empty))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
323
       (let* ((maybe-newline (unless (default-line-regexp-p 'empty 1) "\n")))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
324
         ;; NOTE 2021-07-24: we use this `insert' instead of
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
325
         ;; `comment-region' because of a yet-to-be-determined bug that
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
326
         ;; traps `undo' to the two states between the insertion of the
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
327
         ;; string and its transformation into a comment.
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
328
         (insert
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
329
          (concat comment-start
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
330
                  ;; NOTE 2021-07-24: See function `comment-add' for
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
331
                  ;; why we need this.
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
332
                  (make-string
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
333
                   (comment-add nil)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
334
                   (string-to-char comment-start))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
335
                  comment-padding
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
336
                  string
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
337
                  comment-end))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
338
         (indent-region beg (point))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
339
         (when maybe-newline
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
340
           (save-excursion (insert maybe-newline)))))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
341
      (t
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
342
       (comment-indent t)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
343
       (insert (concat " " string))))))
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
344
 
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
345
 (setq hexl-bits 8)
31
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
346
 (setq tab-width 4)
f28229bc9b58 emacs defaults
ellis <ellis@rwest.io>
parents: 30
diff changeset
347
 
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
348
 ;;; Keyboard Macros
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
349
 (defun toggle-macro-recording ()
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
350
   (interactive)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
351
   (if defining-kbd-macro
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
352
       (end-kbd-macro)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
353
     (start-kbd-macro nil)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
354
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
355
 (defun play-macro-if-not-playing ()
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
356
   (interactive)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
357
   (if defining-kbd-macro
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
358
       (end-kbd-macro)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
359
     (call-last-kbd-macro)))
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
360
 
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
361
 ;;; Registers
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
362
 ;; - additional register vtypes: buffer
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
363
 (defun decrement-register (number register)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
364
   "Subtract NUMBER from the contents of register REGISTER.
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
365
 Interactively, NUMBER is the prefix arg."
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
366
   (interactive "p\ncDecrement register: ")
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
367
   (increment-register (- number) register))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
368
 
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
369
 (defun copy-register (a b)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
370
   "Copy register A to B."
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
371
   (interactive
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
372
    (list (register-read-with-preview "From register: ")
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
373
      (register-read-with-preview "To register: ")))
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
374
   (set-register b (get-register a)))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
375
 
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
376
 (defun buffer-to-register (register &optional delete)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
377
   "Put current buffer in register - this would also work for
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
378
   just buffers, as switch-to-buffer can use both, but it
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
379
   facilitates for easier saving/restoring of registers."
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
380
   (interactive "cPut current buffername in register: \nP.")
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
381
   (set-register register (cons 'buffer (buffer-name (current-buffer)))))
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
382
 
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
383
 (defun file-to-register (register &optional delete)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
384
   "This is better than put-buffer-in-register for file-buffers, because a closed
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
385
    file can be opened again, but does not work for no-file-buffers."
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
386
   (interactive "cPut the filename of current buffer in register: \nP")
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
387
   (set-register register (cons 'file (buffer-file-name (current-buffer)))))
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
388
 
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
389
 (defun file-query-to-register (register &optional delete)
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
390
   (interactive
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
391
    (list
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
392
     (register-read-with-preview "File query to register: ")))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
393
   (set-register register (list 'file-query (buffer-file-name (current-buffer)) (point))))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
394
 
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
395
 ;; additional register-val handlers
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
396
 ;; (cl-defmethod register-val-jump-to :around ((val cons) delete)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
397
 ;;   (cond
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
398
 ;;    (t (cl-call-next-method val delete))))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
399
 
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
400
 ;;; Outlines
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
401
 (defun outline-hook (&optional rx)
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
402
   "Enable `outline-minor-mode' and set `outline-regexp'."
57
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 53
diff changeset
403
   (when rx (setq-local outline-regexp rx))
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 53
diff changeset
404
   (outline-minor-mode 1))
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
405
 
57
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 53
diff changeset
406
 (setq outline-minor-mode-use-buttons nil)
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
407
 
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
408
 (defun add-outline-hook (mode &optional rx)
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
409
   (let ((sym (symb mode "-hook")))
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
410
     (add-hook sym (lambda () (outline-hook rx)))))
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
411
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
412
 (defmacro outline-hooks (&rest pairs)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
413
   `(mapc (lambda (x) (add-outline-hook (car x) (cadr x))) ',pairs))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
414
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
415
 (outline-hooks (asm-mode ";;;+")
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
416
            (nasm-mode ";;;+")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
417
            (rust-mode "\\(//!\\|////+\\)")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
418
            (sh-mode "###+")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
419
            (sh-script-mode "###+")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
420
            (makefile-mode "###+")
57
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 53
diff changeset
421
            (conf-mode "###+")
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 53
diff changeset
422
            (common-lisp-mode)
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 53
diff changeset
423
            (emacs-lisp-mode)
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 53
diff changeset
424
            (lisp-data-mode)
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 53
diff changeset
425
            (org-mode)
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 53
diff changeset
426
            (css-mode)
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 53
diff changeset
427
            (html-mode)
be036d2eefea emacs updates
ellis <ellis@rwest.io>
parents: 53
diff changeset
428
            (skel-mode))
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
429
 
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
430
 ;;; Scratch
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
431
 (defcustom default-scratch-buffer-mode 'lisp-interaction-mode
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
432
   "Default major mode for new scratch buffers"
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
433
   :group 'default)
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
434
 
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
435
 ;; Adapted from the `scratch.el' package by Ian Eure.
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
436
 (defun default-scratch-list-modes ()
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
437
   "List known major modes."
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
438
   (cl-loop for sym the symbols of obarray
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
439
            for name = (symbol-name sym)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
440
            when (and (functionp sym)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
441
                      (not (member sym minor-mode-list))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
442
                      (string-match "-mode$" name)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
443
                      (not (string-match "--" name)))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
444
            collect name))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
445
 
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
446
 (defun default-scratch-buffer-setup (region &optional mode)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
447
   "Add contents to `scratch' buffer and name it accordingly.
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
448
 
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
449
 REGION is added to the contents to the new buffer.
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
450
 
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
451
 Use the current buffer's major mode by default.  With optional
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
452
 MODE use that major mode instead."
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
453
   (let* ((major (or mode major-mode))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
454
          (string (format "Scratch buffer for: %s\n\n" major))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
455
          (text (concat string region))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
456
          (buf (format "*Scratch for %s*" major)))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
457
     (with-current-buffer (get-buffer-create buf)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
458
       (funcall major)
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
459
       (save-excursion
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
460
         (insert text)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
461
         (goto-char (point-min))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
462
         (comment-region (point-at-bol) (point-at-eol)))
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
463
       (vertical-motion 2))
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
464
     (pop-to-buffer buf)))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
465
 
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
466
 ;;;###autoload
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
467
 (defun default-scratch-buffer (&optional arg)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
468
   "Produce a bespoke scratch buffer matching current major mode.
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
469
 
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
470
 With optional ARG as a prefix argument (\\[universal-argument]),
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
471
 use `default-scratch-buffer-mode'.
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
472
 
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
473
 With ARG as a double prefix argument, prompt for a major mode
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
474
 with completion.
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
475
 
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
476
 If region is active, copy its contents to the new scratch
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
477
 buffer."
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
478
   (interactive "P")
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
479
   (let* ((default-mode default-scratch-buffer-mode)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
480
          (modes (default-scratch-list-modes))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
481
          (region (with-current-buffer (current-buffer)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
482
                    (if (region-active-p)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
483
                        (buffer-substring-no-properties
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
484
                         (region-beginning)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
485
                         (region-end))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
486
                      "")))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
487
          (m))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
488
     (pcase (prefix-numeric-value arg)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
489
       (16 (progn
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
490
             (setq m (intern (completing-read "Select major mode: " modes nil t)))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
491
             (default-scratch-buffer-setup region m)))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
492
       (4 (default-scratch-buffer-setup region default-mode))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
493
       (_ (default-scratch-buffer-setup region)))))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
494
 
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
495
 ;;;###autoload
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
496
 (defun scratch-new ()
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
497
   "create a new scratch buffer. (could be *scratch* - *scratchN*)"
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
498
   (interactive)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
499
   (let ((n 0)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
500
         bufname)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
501
     (while (progn
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
502
              (setq bufname
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
503
            (concat "*scratch"
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
504
                            (if (= n 0) "" (int-to-string n))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
505
                            "*"))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
506
              (setq n (1+ n))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
507
              (get-buffer bufname)))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
508
     (switch-to-buffer (get-buffer-create bufname))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
509
     (insert initial-scratch-message)
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
510
     (lisp-interaction-mode)))
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
511
 
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
512
 ;;; Shell
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
513
 (defun set-no-process-query-on-exit ()
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
514
   (let ((proc (get-buffer-process (current-buffer))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
515
     (when (processp proc)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
516
       (set-process-query-on-exit-flag proc nil))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
517
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
518
 (add-hook 'shell-mode-hook 'set-no-process-query-on-exit)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
519
 (add-hook 'term-exec-hook 'set-no-process-query-on-exit)
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
520
 
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
521
 ;;; Eshell
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
522
 (defun eshell-new()
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
523
   "Open a new instance of eshell."
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
524
   (interactive)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
525
   (eshell 'Z))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
526
 
30
bb274c6c126a emacs defaults and keys
ellis <ellis@rwest.io>
parents: 29
diff changeset
527
 (setq eshell-highlight-prompt t
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
528
       eshell-hist-ignoredups t
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
529
       eshell-save-history-on-exit t
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
530
       eshell-prefer-lisp-functions nil
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
531
       eshell-destroy-buffer-when-process-dies t)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
532
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
533
 (add-hook 'eshell-mode-hook
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
534
       (lambda ()
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
535
         (eshell/alias "d" "dired $1")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
536
         (eshell/alias "ff" "find-file $1")
41
2b878ae73a84 emacs, skel, krypt
ellis <ellis@rwest.io>
parents: 38
diff changeset
537
         (eshell/alias "hgfe" "hg-fast-export.sh")))
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
538
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
539
 (defun eshell/clear ()
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
540
   "Clear the eshell buffer."
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
541
   (let ((inhibit-read-only t))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
542
     (erase-buffer)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
543
     (eshell-send-input)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
544
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
545
 (defun eshell-quit-or-delete-char (arg)
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
546
   (interactive "p")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
547
   (if (and (eolp) (looking-back eshell-prompt-regexp))
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
548
       (progn
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
549
         (eshell-life-is-too-much) ; Why not? (eshell/exit)
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
550
         (ignore-errors
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
551
           (delete-window)))
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
552
     (delete-forward-char arg)))
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
553
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
554
 (add-hook 'eshell-mode-hook
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
555
           (lambda ()
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
556
             (bind-keys :map eshell-mode-map
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
557
                        ("C-d" . eshell-quit-or-delete-char))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
558
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
559
 (defun eshell-next-prompt (n)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
560
   "Move to end of Nth next prompt in the buffer. See `eshell-prompt-regexp'."
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
561
   (interactive "p")
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
562
   (re-search-forward eshell-prompt-regexp nil t n)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
563
   (when eshell-highlight-prompt
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
564
     (while (not (get-text-property (line-beginning-position) 'read-only) )
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
565
       (re-search-forward eshell-prompt-regexp nil t n)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
566
   (eshell-skip-prompt))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
567
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
568
 (defun eshell-previous-prompt (n)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
569
   "Move to end of Nth previous prompt in the buffer. See `eshell-prompt-regexp'."
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
570
   (interactive "p")
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
571
   (backward-char)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
572
   (eshell-next-prompt (- n)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
573
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
574
 (defun eshell-insert-history ()
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
575
   "Displays the eshell history to select and insert back into your eshell."
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
576
   (interactive)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
577
   (insert (ido-completing-read "Eshell history: "
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
578
                                (delete-dups
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
579
                                 (ring-elements eshell-history-ring)))))
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
580
 ;;; Tramp
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
581
 
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
582
 (setopt tramp-default-method "ssh"
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
583
         tramp-default-user user-login-name
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
584
         tramp-default-host "localhost")
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
585
 ;;; Org
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
586
 ;; todos
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
587
 (setq org-todo-keywords
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
588
       '((type "TBD(0!)" "TODO(t!)" "|")
93
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents: 75
diff changeset
589
         (type "WIP(w!)" "|")
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents: 75
diff changeset
590
         (sequence "FIND(q!)" "READ(r@!)" "WATCH(W@!)" "|")
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents: 75
diff changeset
591
         (sequence "RESEARCH(s!)" "RECORD(e!)" "|")
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents: 75
diff changeset
592
         (sequence "OUTLINE(O!)" "RESEARCH(A!)" "DRAFT(M!)" "REVIEW(R!)" "|")
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents: 75
diff changeset
593
         (sequence "FIX(i!)" "TEST(t!)" "|")
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents: 75
diff changeset
594
         (type "GOTO(g!)" "HACK(h!)" "NOTE(n!)" "CODE(c!)" "LINK(l!)" "|")
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents: 75
diff changeset
595
         (type "KLUDGE(k@!)" "|")
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents: 75
diff changeset
596
         (sequence "|" "DONE(d!)" "NOPE(x@!)" "FOUND(f@!)")))
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
597
 ;; captures
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
598
 (setq org-capture-templates
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
599
       '(("t" "task" entry (file "inbox.org") "* %^{title}\n- %?" :prepend t)
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
600
     ("1" "current-task-item" item (clock) "%i%?")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
601
     ("2" "current-task-checkbox" checkitem (clock) "%i%?")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
602
     ("3" "current-task-region" plain (clock) "%i" :immediate-finish t :empty-lines 1)
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
603
     ("4" "current-task-kill" plain (clock) "%c" :immediate-finish t :empty-lines 1)
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
604
     ("l" "log" item (file+headline "log.org" "log") "%U %?" :prepend t)
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
605
     ("s" "secret" table-line (file+function "krypt" org-ask-location) "| %^{key} | %^{val} |" :immediate-finish t :kill-buffer t)
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
606
     ("n" "note" plain (file+function "notes.org" org-ask-location) "%?")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
607
     ("i" "idea" entry (file "inbox.org") "* OUTLINE %?\n:notes:\n:end:\n- _outline_ [/]\n  - [ ] \n  - [ ] \n- _refs_" :prepend t)
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
608
     ("b" "bug" entry (file "inbox.org") "* FIX %?\n- _review_\n- _fix_\n- _test_" :prepend t)
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
609
     ("r" "research" entry (file "inbox.org") "* RESEARCH %?\n:notes:\n:end:\n- _refs_" :prepend t)))
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
610
 (setq org-html-htmlize-output-type 'css
41
2b878ae73a84 emacs, skel, krypt
ellis <ellis@rwest.io>
parents: 38
diff changeset
611
       org-html-head-include-default-style nil
2b878ae73a84 emacs, skel, krypt
ellis <ellis@rwest.io>
parents: 38
diff changeset
612
       ;; comp2 default
2b878ae73a84 emacs, skel, krypt
ellis <ellis@rwest.io>
parents: 38
diff changeset
613
       org-ascii-text-width 80)
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
614
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
615
 (org-crypt-use-before-save-magic)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
616
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
617
 (setq org-structure-template-alist
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
618
       '(("s" . "src")
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
619
     ("e" . "src emacs-lisp")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
620
     ("x" . "src shell")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
621
     ("l" . "src lisp")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
622
     ("h" . "export html")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
623
     ("p" . "src python")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
624
     ("r" . "src rust")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
625
     ("E" . "example")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
626
     ("q" . "quote")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
627
     ("c" . "center")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
628
     ("C" . "comment")
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
629
     ("v" . "verse")))
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
630
 
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents: 93
diff changeset
631
 (setopt org-preview-latex-image-directory "~/.emacs.d/.cache/ltximg"
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents: 93
diff changeset
632
         org-latex-image-default-width "8cm"
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents: 93
diff changeset
633
         org-refile-use-cache t
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents: 93
diff changeset
634
         org-refile-allow-creating-parent-nodes 'confirm
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
635
 
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents: 93
diff changeset
636
         org-refile-targets '((nil :maxlevel . 3)
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents: 93
diff changeset
637
                              (org-agenda-files :maxlevel . 3))
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents: 93
diff changeset
638
         org-confirm-babel-evaluate nil
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents: 93
diff changeset
639
         org-src-fontify-natively t
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents: 93
diff changeset
640
         org-src-tabs-act-natively t
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents: 93
diff changeset
641
         org-footnote-section nil
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents: 93
diff changeset
642
         org-log-into-drawer t
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents: 93
diff changeset
643
         org-log-states-order-reversed nil
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents: 93
diff changeset
644
         org-clock-persist 'history)
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
645
 
96
301fd45bbe73 big refactor of lisp code
ellis <ellis@rwest.io>
parents: 93
diff changeset
646
 (add-hook 'after-init-hook #'org-clock-persistence-insinuate)
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
647
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
648
 (defun org-todo-at-date (date)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
649
   "create a todo entry for a given date."
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
650
   (interactive (list (org-time-string-to-time (org-read-date))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
651
   (cl-flet ((org-current-effective-time (&rest r) date)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
652
             (org-today (&rest r) (time-to-days date)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
653
     (cond ((eq major-mode 'org-mode) (org-todo))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
654
           ((eq major-mode 'org-agenda-mode) (org-agenda-todo)))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
655
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
656
 (defun org-ask-location ()
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
657
   "prompt for a location\"\""
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
658
   (let* ((org-refile-targets '((nil :maxlevel . 9)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
659
          (hd (condition-case nil
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
660
                  (car (org-refile-get-location))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
661
                (error (car org-refile-history)))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
662
     (goto-char (point-min))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
663
     (outline-next-heading)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
664
     (if (re-search-forward
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
665
          (format org-complex-heading-regexp-format (regexp-quote hd))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
666
          nil t)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
667
         (goto-char (point-at-bol))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
668
       (goto-char (point-max))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
669
       (or (bolp) (insert "\n"))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
670
       (insert "* " hd "\n")))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
671
   (end-of-line))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
672
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
673
 (defun org-capture-fileref-snippet (f type headers func-name)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
674
   (let* ((code-snippet
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
675
           (buffer-substring-no-properties (mark) (- (point) 1)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
676
          (file-name   (buffer-file-name))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
677
          (file-base   (file-name-nondirectory file-name))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
678
          (line-number (line-number-at-pos (region-beginning)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
679
          (initial-txt (if (null func-name)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
680
                           (format "From [[file:%s::%s][%s]]:"
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
681
                                   file-name line-number file-base)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
682
                         (format "From ~%s~ (in [[file:%s::%s][%s]]):"
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
683
                                 func-name file-name line-number
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
684
                                 file-base))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
685
     (format "
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
686
     %s
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
687
     #+BEGIN_%s %s
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
688
  %s
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
689
     #+END_%s" initial-txt type headers code-snippet type)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
690
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
691
 (defun org-capture-clip-snippet (f)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
692
   "Given a file, F, this captures the currently selected text
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
693
      within an Org EXAMPLE block and a backlink to the file."
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
694
   (with-current-buffer (find-buffer-visiting f)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
695
     (org-capture-fileref-snippet f "EXAMPLE" "" nil)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
696
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
697
 (defun org-capture-code-snippet (f)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
698
   "Given a file, F, this captures the currently selected text
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
699
      within an Org SRC block with a language based on the current mode
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
700
      and a backlink to the function and the file."
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
701
   (with-current-buffer (find-buffer-visiting f)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
702
     (let ((org-src-mode (replace-regexp-in-string "-mode" "" (format "%s" major-mode)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
703
           (func-name (which-function)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
704
       (org-capture-fileref-snippet f "SRC" org-src-mode func-name))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
705
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
706
 (defun region-to-clocked-task (start end)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
707
   "Copies the selected text to the currently clocked in org-mode task."
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
708
   (interactive "r")
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
709
   (org-capture-string (buffer-substring-no-properties start end) "3"))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
710
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
711
 (setq org-global-properties
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
712
       '(quote (("EFFORT_ALL" . "0:15 0:30 0:45 1:00 2:00 3:00 4:00 5:00 6:00 0:00")
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
713
                ("STYLE_ALL" . "habit"))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
714
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
715
 (defun org-mode-ask-effort ()
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
716
   "Ask for an effort estimate when clocking in."
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
717
   (unless (org-entry-get (point) "Effort")
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
718
     (let ((effort
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
719
            (completing-read
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
720
             "Effort: "
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
721
             (org-entry-get-multivalued-property (point) "Effort"))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
722
       (unless (equal effort "")
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
723
         (org-set-property "Effort" effort)))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
724
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
725
 (add-hook 'org-clock-in-prepare-hook
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
726
           'org-mode-ask-effort)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
727
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
728
 ;;;###autoload
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
729
 (defun org-adjust-tags-column-reset-tags ()
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
730
   "In org-mode buffers it will reset tag position according to
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
731
 `org-tags-column'."
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
732
   (when (and
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
733
          (not (string= (buffer-name) "*Remember*"))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
734
          (eql major-mode 'org-mode))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
735
     (let ((b-m-p (buffer-modified-p)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
736
       (condition-case nil
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
737
           (save-excursion
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
738
             (goto-char (point-min))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
739
             (command-execute 'outline-next-visible-heading)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
740
             ;; disable (message) that org-set-tags generates
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
741
             (flet ((message (&rest ignored) nil))
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
742
           (org-set-tags 1 t))
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
743
             (set-buffer-modified-p b-m-p))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
744
         (error nil)))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
745
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
746
 ;;;###autoload
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
747
 (defun org-align-all-tables ()
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
748
   "align all tables in current buffer"
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
749
   (interactive)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
750
   (org-table-map-tables 'org-table-align 'quietly))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
751
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
752
 (defun org-remove-redundant-tags ()
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
753
   "Remove redundant tags of headlines in current buffer.
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
754
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
755
 A tag is considered redundant if it is local to a headline and
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
756
 inherited by a parent headline."
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
757
   (interactive)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
758
   (when (eq major-mode 'org-mode)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
759
     (save-excursion
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
760
       (org-map-entries
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
761
        (lambda ()
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
762
          (let ((alltags (split-string (or (org-entry-get (point) "ALLTAGS") "") ":"))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
763
                local inherited tag)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
764
            (dolist (tag alltags)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
765
              (if (get-text-property 0 'inherited tag)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
766
                  (push tag inherited) (push tag local)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
767
            (dolist (tag local)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
768
              (if (member tag inherited) (org-toggle-tag tag 'off)))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
769
        t nil))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
770
 ;;;; Agenda
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
771
 (defvar org-agenda-overriding-header)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
772
 (defvar org-agenda-sorting-strategy)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
773
 (defvar org-agenda-restrict)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
774
 (defvar org-agenda-restrict-begin)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
775
 (defvar org-agenda-restrict-end)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
776
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
777
 ;;;###autoload
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
778
 (defun org-agenda-reschedule-to-today ()
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
779
   (interactive)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
780
   (flet ((org-read-date (&rest rest) (current-time)))
34
882a5c1e7b9f emacs config
ellis <ellis@rwest.io>
parents: 33
diff changeset
781
     (call-interactively 'org-agenda-schedule)))
21
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
782
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
783
 ;; Patch org-mode to use vertical splitting
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
784
 (defadvice org-prepare-agenda (after org-fix-split)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
785
   (toggle-window-split))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
786
 (ad-activate 'org-prepare-agenda)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
787
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
788
 (add-hook 'org-agenda-mode-hook (lambda () (hl-line-mode 1)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
789
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
790
 (defun org-agenda-log-mode-colorize-block ()
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
791
   "Set different line spacing based on clock time duration."
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
792
   (save-excursion
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
793
     (let* ((colors (cl-case (alist-get 'background-mode (frame-parameters))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
794
                      (light
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
795
                       (list "#F6B1C3" "#FFFF9D" "#BEEB9F" "#ADD5F7"))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
796
                      (dark
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
797
                       (list "#aa557f" "DarkGreen" "DarkSlateGray" "DarkSlateBlue"))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
798
            pos
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
799
            duration)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
800
       (nconc colors colors)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
801
       (goto-char (point-min))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
802
       (while (setq pos (next-single-property-change (point) 'duration))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
803
         (goto-char pos)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
804
         (when (and (not (equal pos (point-at-eol)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
805
                    (setq duration (org-get-at-bol 'duration)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
806
           ;; larger duration bar height
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
807
           (let ((line-height (if (< duration 15) 1.0 (+ 0.5 (/ duration 30))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
808
                 (ov (make-overlay (point-at-bol) (1+ (point-at-eol)))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
809
             (overlay-put ov 'face `(:background ,(car colors) :foreground "black"))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
810
             (setq colors (cdr colors))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
811
             (overlay-put ov 'line-height line-height)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
812
             (overlay-put ov 'line-spacing (1- line-height))))))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
813
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
814
 (add-hook 'org-agenda-finalize-hook #'org-agenda-log-mode-colorize-block)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
815
 
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
816
 ;;;###autoload
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
817
 (defun org-agenda-current-subtree-or-region (only-todos)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
818
   "Display an agenda view for the current subtree or region.
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
819
  With prefix, display only TODO-keyword items."
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
820
   (interactive "P")
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
821
   (let ((starting-point (point))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
822
         header)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
823
     (with-current-buffer (or (buffer-base-buffer (current-buffer))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
824
                              (current-buffer))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
825
       (if (use-region-p)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
826
           (progn
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
827
             (setq header "Region")
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
828
             (put 'org-agenda-files 'org-restrict (list (buffer-file-name (current-buffer))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
829
             (setq org-agenda-restrict (current-buffer))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
830
             (move-marker org-agenda-restrict-begin (region-beginning))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
831
             (move-marker org-agenda-restrict-end
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
832
                          (save-excursion
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
833
                            ;; If point is at beginning of line, include
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
834
                            ;; heading on that line by moving forward 1.
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
835
                            (goto-char (1+ (region-end)))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
836
                            (org-end-of-subtree))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
837
         ;; No region; restrict to subtree.
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
838
         (save-excursion
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
839
           (save-restriction
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
840
             ;; In case the command was called from an indirect buffer, set point
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
841
             ;; in the base buffer to the same position while setting restriction.
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
842
             (widen)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
843
             (goto-char starting-point)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
844
             (setq header "Subtree")
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
845
             (org-agenda-set-restriction-lock))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
846
       ;; NOTE: Unlike other agenda commands, binding `org-agenda-sorting-strategy'
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
847
       ;; around `org-search-view' seems to have no effect.
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
848
       (let ((org-agenda-sorting-strategy '(priority-down timestamp-up))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
849
             (org-agenda-overriding-header header))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
850
         (org-search-view (if only-todos t nil) "*"))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
851
       (org-agenda-remove-restriction-lock t)
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
852
       (message nil))))
3a0dac7e29ae Signed-off-by: ellis <ellis@rwest.io>
ellis <ellis@rwest.io>
parents:
diff changeset
853
 
24
35ec32058823 tenex updates - util wrappers
ellis <ellis@rwest.io>
parents: 21
diff changeset
854
 ;;; Tempo
35ec32058823 tenex updates - util wrappers
ellis <ellis@rwest.io>
parents: 21
diff changeset
855
 (setq tempo-interactive t)
26
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 24
diff changeset
856
 
51a8370766f7 emacs config
ellis <ellis@rwest.io>
parents: 24
diff changeset
857
 (provide 'default)
27
1142c97f92ab emacs config
ellis <ellis@rwest.io>
parents: 26
diff changeset
858
 ;; default.el ends here