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