diff options
-rw-r--r-- | config.org | 1307 | ||||
-rw-r--r-- | early-init.el | 72 | ||||
-rw-r--r-- | init.el | 4 |
3 files changed, 704 insertions, 679 deletions
diff --git a/config.org b/config.org index f68f3e9..b35ed30 100644 --- a/config.org +++ b/config.org | |||
@@ -8,15 +8,15 @@ | |||
8 | 8 | ||
9 | #+begin_src emacs-lisp :noweb-ref settings | 9 | #+begin_src emacs-lisp :noweb-ref settings |
10 | (setq user-full-name "Case Duckworth" | 10 | (setq user-full-name "Case Duckworth" |
11 | user-mail-address "acdw@acdw.net") | 11 | user-mail-address "acdw@acdw.net") |
12 | #+end_src | 12 | #+end_src |
13 | 13 | ||
14 | ** Where I am | 14 | ** Where I am |
15 | 15 | ||
16 | #+begin_src emacs-lisp :noweb-ref settings | 16 | #+begin_src emacs-lisp :noweb-ref settings |
17 | (setq calendar-location-name "Baton Rouge, LA" | 17 | (setq calendar-location-name "Baton Rouge, LA" |
18 | calendar-latitude 30.4 | 18 | calendar-latitude 30.4 |
19 | calendar-longitude -91.1) | 19 | calendar-longitude -91.1) |
20 | #+end_src | 20 | #+end_src |
21 | 21 | ||
22 | ** Auth-sources | 22 | ** Auth-sources |
@@ -46,7 +46,7 @@ of unstyled content" thing. | |||
46 | 46 | ||
47 | #+begin_src emacs-lisp | 47 | #+begin_src emacs-lisp |
48 | (add-to-list 'default-frame-alist | 48 | (add-to-list 'default-frame-alist |
49 | '(tool-bar-lines . 0)) | 49 | '(tool-bar-lines . 0)) |
50 | 50 | ||
51 | (tool-bar-mode -1) | 51 | (tool-bar-mode -1) |
52 | #+end_src | 52 | #+end_src |
@@ -55,7 +55,7 @@ of unstyled content" thing. | |||
55 | 55 | ||
56 | #+begin_src emacs-lisp | 56 | #+begin_src emacs-lisp |
57 | (add-to-list 'default-frame-alist | 57 | (add-to-list 'default-frame-alist |
58 | '(menu-bar-lines . 0)) | 58 | '(menu-bar-lines . 0)) |
59 | 59 | ||
60 | (menu-bar-mode -1) | 60 | (menu-bar-mode -1) |
61 | #+end_src | 61 | #+end_src |
@@ -64,8 +64,8 @@ of unstyled content" thing. | |||
64 | 64 | ||
65 | #+begin_src emacs-lisp | 65 | #+begin_src emacs-lisp |
66 | (add-to-list 'default-frame-alist | 66 | (add-to-list 'default-frame-alist |
67 | '(vertical-scroll-bars . nil) | 67 | '(vertical-scroll-bars . nil) |
68 | '(horizontal-scroll-bars . nil)) | 68 | '(horizontal-scroll-bars . nil)) |
69 | 69 | ||
70 | (scroll-bar-mode -1) | 70 | (scroll-bar-mode -1) |
71 | (horizontal-scroll-bar-mode -1) | 71 | (horizontal-scroll-bar-mode -1) |
@@ -78,21 +78,21 @@ want it to resize by pixels -- we /are/ using a GUI, after all. | |||
78 | 78 | ||
79 | #+begin_src emacs-lisp | 79 | #+begin_src emacs-lisp |
80 | (setq-default frame-inhibit-implied-resize t | 80 | (setq-default frame-inhibit-implied-resize t |
81 | frame-resize-pixelwise t) | 81 | frame-resize-pixelwise t) |
82 | #+end_src | 82 | #+end_src |
83 | 83 | ||
84 | *** Frame titles | 84 | *** Frame titles |
85 | 85 | ||
86 | #+begin_src emacs-lisp :noweb-ref settings | 86 | #+begin_src emacs-lisp :noweb-ref settings |
87 | (setq-default frame-title-format | 87 | (setq-default frame-title-format |
88 | '("Emacs " | 88 | '("Emacs " |
89 | mode-line-client | 89 | mode-line-client |
90 | mode-line-modified | 90 | mode-line-modified |
91 | " " | 91 | " " |
92 | (:eval (if (buffer-file-name) | 92 | (:eval (if (buffer-file-name) |
93 | (abbreviate-file-name (buffer-file-name)) | 93 | (abbreviate-file-name (buffer-file-name)) |
94 | "%b")) | 94 | "%b")) |
95 | )) | 95 | )) |
96 | #+end_src | 96 | #+end_src |
97 | 97 | ||
98 | *** Fringes | 98 | *** Fringes |
@@ -130,16 +130,16 @@ and have made a custom fringe bitmap. | |||
130 | (defun hook--setup-fringes-curly-arrows () | 130 | (defun hook--setup-fringes-curly-arrows () |
131 | "Set up curly-arrow fringes." | 131 | "Set up curly-arrow fringes." |
132 | (define-fringe-bitmap 'left-curly-arrow | 132 | (define-fringe-bitmap 'left-curly-arrow |
133 | [#b11000000 | 133 | [#b11000000 |
134 | #b01100000 | 134 | #b01100000 |
135 | #b00110000 | 135 | #b00110000 |
136 | #b00011000]) | 136 | #b00011000]) |
137 | 137 | ||
138 | (define-fringe-bitmap 'right-curly-arrow | 138 | (define-fringe-bitmap 'right-curly-arrow |
139 | [#b00011000 | 139 | [#b00011000 |
140 | #b00110000 | 140 | #b00110000 |
141 | #b01100000 | 141 | #b01100000 |
142 | #b11000000])) | 142 | #b11000000])) |
143 | 143 | ||
144 | (add-hook 'after-init-hook #'hook--setup-fringes-curly-arrows) | 144 | (add-hook 'after-init-hook #'hook--setup-fringes-curly-arrows) |
145 | #+end_src | 145 | #+end_src |
@@ -150,16 +150,16 @@ and have made a custom fringe bitmap. | |||
150 | (defun hook--setup-fringes-arrows () | 150 | (defun hook--setup-fringes-arrows () |
151 | "Setup arrow fringe bitmaps." | 151 | "Setup arrow fringe bitmaps." |
152 | (define-fringe-bitmap 'left-arrow | 152 | (define-fringe-bitmap 'left-arrow |
153 | [#b00000000 | 153 | [#b00000000 |
154 | #b01010100 | 154 | #b01010100 |
155 | #b01010100 | 155 | #b01010100 |
156 | #b00000000]) | 156 | #b00000000]) |
157 | 157 | ||
158 | (define-fringe-bitmap 'right-arrow | 158 | (define-fringe-bitmap 'right-arrow |
159 | [#b00000000 | 159 | [#b00000000 |
160 | #b00101010 | 160 | #b00101010 |
161 | #b00101010 | 161 | #b00101010 |
162 | #b00000000])) | 162 | #b00000000])) |
163 | 163 | ||
164 | (add-hook 'after-init-hook #'hook--setup-fringes-arrows) | 164 | (add-hook 'after-init-hook #'hook--setup-fringes-arrows) |
165 | #+end_src | 165 | #+end_src |
@@ -170,8 +170,8 @@ and have made a custom fringe bitmap. | |||
170 | 170 | ||
171 | #+begin_src emacs-lisp :noweb-ref settings | 171 | #+begin_src emacs-lisp :noweb-ref settings |
172 | (setq-default window-divider-default-places 'right-only ; only right | 172 | (setq-default window-divider-default-places 'right-only ; only right |
173 | window-divider-default-bottom-width 2 | 173 | window-divider-default-bottom-width 2 |
174 | window-divider-default-right-width 2) | 174 | window-divider-default-right-width 2) |
175 | #+end_src | 175 | #+end_src |
176 | 176 | ||
177 | #+begin_src emacs-lisp :noweb-ref modes | 177 | #+begin_src emacs-lisp :noweb-ref modes |
@@ -185,7 +185,7 @@ This is extremely fiddly and I'd love another option. | |||
185 | 185 | ||
186 | #+begin_src emacs-lisp :noweb-ref settings | 186 | #+begin_src emacs-lisp :noweb-ref settings |
187 | (setq-default split-width-threshold 100 | 187 | (setq-default split-width-threshold 100 |
188 | split-height-threshold 50) | 188 | split-height-threshold 50) |
189 | #+end_src | 189 | #+end_src |
190 | 190 | ||
191 | *** Window layouts | 191 | *** Window layouts |
@@ -231,9 +231,9 @@ filesystem paths. | |||
231 | 231 | ||
232 | #+begin_src emacs-lisp :noweb-ref settings | 232 | #+begin_src emacs-lisp :noweb-ref settings |
233 | (setq-default uniquify-buffer-name-style 'forward | 233 | (setq-default uniquify-buffer-name-style 'forward |
234 | uniquify-separator "/" | 234 | uniquify-separator "/" |
235 | uniquify-after-kill-buffer-p t | 235 | uniquify-after-kill-buffer-p t |
236 | uniquify-ignore-buffers-re "^\\*") | 236 | uniquify-ignore-buffers-re "^\\*") |
237 | #+end_src | 237 | #+end_src |
238 | 238 | ||
239 | *** Startup buffers | 239 | *** Startup buffers |
@@ -243,12 +243,12 @@ also want it to show a cute little message to myself. | |||
243 | 243 | ||
244 | #+begin_src emacs-lisp :noweb-ref settings | 244 | #+begin_src emacs-lisp :noweb-ref settings |
245 | (setq-default inhibit-startup-screen t ; Don't show that splash screen thing. | 245 | (setq-default inhibit-startup-screen t ; Don't show that splash screen thing. |
246 | initial-buffer-choice t ; Start on *scratch* | 246 | initial-buffer-choice t ; Start on *scratch* |
247 | initial-scratch-message | 247 | initial-scratch-message |
248 | (concat ";; Howdy, " | 248 | (concat ";; Howdy, " |
249 | (nth 0 (split-string user-full-name)) "!" | 249 | (nth 0 (split-string user-full-name)) "!" |
250 | " Welcome to Emacs." | 250 | " Welcome to Emacs." |
251 | "\n\n")) | 251 | "\n\n")) |
252 | #+end_src | 252 | #+end_src |
253 | 253 | ||
254 | *** Immortal =*scratch*= buffer | 254 | *** Immortal =*scratch*= buffer |
@@ -260,7 +260,7 @@ function to the =kill-buffer-query-functions= hook that will return | |||
260 | #+begin_src emacs-lisp :noweb-ref functions | 260 | #+begin_src emacs-lisp :noweb-ref functions |
261 | (defun immortal-scratch () | 261 | (defun immortal-scratch () |
262 | (if (not (eq (current-buffer) (get-buffer "*scratch*"))) | 262 | (if (not (eq (current-buffer) (get-buffer "*scratch*"))) |
263 | t | 263 | t |
264 | (bury-buffer) | 264 | (bury-buffer) |
265 | nil)) | 265 | nil)) |
266 | #+end_src | 266 | #+end_src |
@@ -299,12 +299,12 @@ someday. | |||
299 | (interactive "P") | 299 | (interactive "P") |
300 | (pcase (or (car prefix) 0) | 300 | (pcase (or (car prefix) 0) |
301 | (0 (kill-current-buffer) | 301 | (0 (kill-current-buffer) |
302 | (unless (one-window-p) (delete-window))) | 302 | (unless (one-window-p) (delete-window))) |
303 | (4 (other-window 1) | 303 | (4 (other-window 1) |
304 | (kill-current-buffer) | 304 | (kill-current-buffer) |
305 | (unless (one-window-p) (delete-window))) | 305 | (unless (one-window-p) (delete-window))) |
306 | (16 (let ((current-prefix-arg nil)) | 306 | (16 (let ((current-prefix-arg nil)) |
307 | (kill-buffer))))) | 307 | (kill-buffer))))) |
308 | #+end_src | 308 | #+end_src |
309 | 309 | ||
310 | #+begin_src emacs-lisp :noweb-ref bindings | 310 | #+begin_src emacs-lisp :noweb-ref bindings |
@@ -327,9 +327,9 @@ have =clean-buffer-list= run at 8:00 PM. | |||
327 | 327 | ||
328 | #+begin_src emacs-lisp :noweb-ref settings | 328 | #+begin_src emacs-lisp :noweb-ref settings |
329 | (setq-default acdw/clean-buffer-list-timer | 329 | (setq-default acdw/clean-buffer-list-timer |
330 | (run-at-time "20:00" 86400 #'clean-buffer-list) | 330 | (run-at-time "20:00" 86400 #'clean-buffer-list) |
331 | clean-buffer-list-delay-general 5 | 331 | clean-buffer-list-delay-general 5 |
332 | clean-buffer-list-delay-special (* 7 24 60 60)) | 332 | clean-buffer-list-delay-special (* 7 24 60 60)) |
333 | 333 | ||
334 | (add-to-list 'clean-buffer-list-kill-buffer-names "*Completions*") | 334 | (add-to-list 'clean-buffer-list-kill-buffer-names "*Completions*") |
335 | (add-to-list 'clean-buffer-list-kill-buffer-names "*Calendar*") | 335 | (add-to-list 'clean-buffer-list-kill-buffer-names "*Calendar*") |
@@ -343,7 +343,7 @@ I like a vertical bar, but only in the selected window. | |||
343 | 343 | ||
344 | #+begin_src emacs-lisp :noweb-ref settings | 344 | #+begin_src emacs-lisp :noweb-ref settings |
345 | (setq-default cursor-type 'bar | 345 | (setq-default cursor-type 'bar |
346 | cursor-in-non-selected-windows nil) | 346 | cursor-in-non-selected-windows nil) |
347 | #+end_src | 347 | #+end_src |
348 | 348 | ||
349 | *** Don't blink the cursor | 349 | *** Don't blink the cursor |
@@ -358,9 +358,9 @@ I like a vertical bar, but only in the selected window. | |||
358 | 358 | ||
359 | #+begin_src emacs-lisp :noweb-ref settings | 359 | #+begin_src emacs-lisp :noweb-ref settings |
360 | (setq-default tab-bar-show 1 ; show the tab bar when more than 1 tab | 360 | (setq-default tab-bar-show 1 ; show the tab bar when more than 1 tab |
361 | tab-bar-new-tab-choice "*scratch*" | 361 | tab-bar-new-tab-choice "*scratch*" |
362 | tab-bar-tab-name-function | 362 | tab-bar-tab-name-function |
363 | #'tab-bar-tab-name-current-with-count) | 363 | #'tab-bar-tab-name-current-with-count) |
364 | #+end_src | 364 | #+end_src |
365 | 365 | ||
366 | *** Tab bar history | 366 | *** Tab bar history |
@@ -379,32 +379,32 @@ On Linux, I have a custom build of Iosevka that I like. | |||
379 | 379 | ||
380 | #+begin_src emacs-lisp :noweb-ref linux-specific | 380 | #+begin_src emacs-lisp :noweb-ref linux-specific |
381 | (set-face-attribute 'default nil | 381 | (set-face-attribute 'default nil |
382 | :family "Iosevka Acdw" | 382 | :family "Iosevka Acdw" |
383 | :height 105) | 383 | :height 105) |
384 | 384 | ||
385 | (set-face-attribute 'fixed-pitch nil | 385 | (set-face-attribute 'fixed-pitch nil |
386 | :family "Iosevka Acdw" | 386 | :family "Iosevka Acdw" |
387 | :height 105) | 387 | :height 105) |
388 | 388 | ||
389 | (set-face-attribute 'variable-pitch nil | 389 | (set-face-attribute 'variable-pitch nil |
390 | :family "DejaVu Serif" | 390 | :family "DejaVu Serif" |
391 | :height 110) | 391 | :height 110) |
392 | #+end_src | 392 | #+end_src |
393 | 393 | ||
394 | But on Windows, I use Consolas. | 394 | But on Windows, I use Consolas. |
395 | 395 | ||
396 | #+begin_src emacs-lisp :noweb-ref windows-specific | 396 | #+begin_src emacs-lisp :noweb-ref windows-specific |
397 | (set-face-attribute 'default nil | 397 | (set-face-attribute 'default nil |
398 | :family "Consolas" | 398 | :family "Consolas" |
399 | :height 100) | 399 | :height 100) |
400 | 400 | ||
401 | (set-face-attribute 'fixed-pitch nil | 401 | (set-face-attribute 'fixed-pitch nil |
402 | :family "Consolas" | 402 | :family "Consolas" |
403 | :height 100) | 403 | :height 100) |
404 | 404 | ||
405 | (set-face-attribute 'variable-pitch nil | 405 | (set-face-attribute 'variable-pitch nil |
406 | :family "Cambria" | 406 | :family "Cambria" |
407 | :height 105) | 407 | :height 105) |
408 | #+end_src | 408 | #+end_src |
409 | 409 | ||
410 | *** Underlines | 410 | *** Underlines |
@@ -437,18 +437,18 @@ complains), I need to fork and change that to a =cl-lib=. | |||
437 | 437 | ||
438 | #+begin_src emacs-lisp :noweb-ref packages | 438 | #+begin_src emacs-lisp :noweb-ref packages |
439 | (straight-use-package '(list-utils | 439 | (straight-use-package '(list-utils |
440 | :host github | 440 | :host github |
441 | :repo "rolandwalker/list-utils" | 441 | :repo "rolandwalker/list-utils" |
442 | :fork (:repo "duckwork/list-utils"))) | 442 | :fork (:repo "duckwork/list-utils"))) |
443 | #+end_src | 443 | #+end_src |
444 | 444 | ||
445 | ***** Persistent-soft | 445 | ***** Persistent-soft |
446 | 446 | ||
447 | #+begin_src emacs-lisp :noweb-ref packages | 447 | #+begin_src emacs-lisp :noweb-ref packages |
448 | (straight-use-package '(persistent-soft | 448 | (straight-use-package '(persistent-soft |
449 | :host github | 449 | :host github |
450 | :repo "rolandwalker/persistent-soft" | 450 | :repo "rolandwalker/persistent-soft" |
451 | :fork (:repo "duckwork/persistent-soft"))) | 451 | :fork (:repo "duckwork/persistent-soft"))) |
452 | #+end_src | 452 | #+end_src |
453 | 453 | ||
454 | ***** Font-utils | 454 | ***** Font-utils |
@@ -460,9 +460,9 @@ to stay hopeful. | |||
460 | 460 | ||
461 | #+begin_src emacs-lisp :noweb-ref packages | 461 | #+begin_src emacs-lisp :noweb-ref packages |
462 | (straight-use-package '(font-utils | 462 | (straight-use-package '(font-utils |
463 | :host github | 463 | :host github |
464 | :repo "rolandwalker/font-utils" | 464 | :repo "rolandwalker/font-utils" |
465 | :fork (:repo "duckwork/font-utils"))) | 465 | :fork (:repo "duckwork/font-utils"))) |
466 | #+end_src | 466 | #+end_src |
467 | 467 | ||
468 | ***** A function in case it comes up again | 468 | ***** A function in case it comes up again |
@@ -489,8 +489,8 @@ So... function! | |||
489 | 489 | ||
490 | #+begin_src emacs-lisp :noweb-ref packages | 490 | #+begin_src emacs-lisp :noweb-ref packages |
491 | (straight-use-package '(unicode-fonts | 491 | (straight-use-package '(unicode-fonts |
492 | :host github | 492 | :host github |
493 | :repo "rolandwalker/unicode-fonts")) | 493 | :repo "rolandwalker/unicode-fonts")) |
494 | (require 'unicode-fonts) | 494 | (require 'unicode-fonts) |
495 | #+end_src | 495 | #+end_src |
496 | 496 | ||
@@ -534,19 +534,19 @@ I want the git version. | |||
534 | 534 | ||
535 | #+begin_src emacs-lisp :noweb-ref packages | 535 | #+begin_src emacs-lisp :noweb-ref packages |
536 | (straight-use-package '(modus-themes | 536 | (straight-use-package '(modus-themes |
537 | :host gitlab | 537 | :host gitlab |
538 | :repo "protesilaos/modus-themes")) | 538 | :repo "protesilaos/modus-themes")) |
539 | #+end_src | 539 | #+end_src |
540 | 540 | ||
541 | #+begin_src emacs-lisp :noweb-ref settings | 541 | #+begin_src emacs-lisp :noweb-ref settings |
542 | (setq-default modus-themes-slanted-constructs t | 542 | (setq-default modus-themes-slanted-constructs t |
543 | modus-themes-bold-constructs t | 543 | modus-themes-bold-constructs t |
544 | modus-themes-region 'bg-only | 544 | modus-themes-region 'bg-only |
545 | modus-themes-org-blocks 'grayscale | 545 | modus-themes-org-blocks 'grayscale |
546 | modus-themes-headings '((1 . section) | 546 | modus-themes-headings '((1 . section) |
547 | (t . no-color)) | 547 | (t . no-color)) |
548 | modus-themes-scale-headings nil | 548 | modus-themes-scale-headings nil |
549 | modus-themes-mode-line nil) | 549 | modus-themes-mode-line nil) |
550 | #+end_src | 550 | #+end_src |
551 | 551 | ||
552 | **** Force headings to be =fixed-pitch= | 552 | **** Force headings to be =fixed-pitch= |
@@ -557,15 +557,15 @@ To enable the proper alignment of Org tags, I want headings to inherit from the | |||
557 | 557 | ||
558 | #+begin_src emacs-lisp :noweb-ref settings | 558 | #+begin_src emacs-lisp :noweb-ref settings |
559 | (dolist (face '(modus-theme-heading-1 | 559 | (dolist (face '(modus-theme-heading-1 |
560 | modus-theme-heading-2 | 560 | modus-theme-heading-2 |
561 | modus-theme-heading-3 | 561 | modus-theme-heading-3 |
562 | modus-theme-heading-4 | 562 | modus-theme-heading-4 |
563 | modus-theme-heading-5 | 563 | modus-theme-heading-5 |
564 | modus-theme-heading-6 | 564 | modus-theme-heading-6 |
565 | modus-theme-heading-7 | 565 | modus-theme-heading-7 |
566 | modus-theme-heading-8)) | 566 | modus-theme-heading-8)) |
567 | (doremi-face-set face | 567 | (doremi-face-set face |
568 | '((t (:inherit (face fixed-pitch bold)))))) | 568 | '((t (:inherit (face fixed-pitch bold)))))) |
569 | #+end_src | 569 | #+end_src |
570 | 570 | ||
571 | *** Change themes based on time of day | 571 | *** Change themes based on time of day |
@@ -574,27 +574,27 @@ To enable the proper alignment of Org tags, I want headings to inherit from the | |||
574 | (defun acdw/run-with-sun (sunrise-command sunset-command) | 574 | (defun acdw/run-with-sun (sunrise-command sunset-command) |
575 | "Run commands at sunrise and sunset." | 575 | "Run commands at sunrise and sunset." |
576 | (let* ((times-regex (rx (* nonl) | 576 | (let* ((times-regex (rx (* nonl) |
577 | (: (any ?s ?S) "unrise") " " | 577 | (: (any ?s ?S) "unrise") " " |
578 | (group (repeat 1 2 digit) ":" | 578 | (group (repeat 1 2 digit) ":" |
579 | (repeat 1 2 digit) | 579 | (repeat 1 2 digit) |
580 | (: (any ?a ?A ?p ?P) (any ?m ?M))) | 580 | (: (any ?a ?A ?p ?P) (any ?m ?M))) |
581 | (* nonl) | 581 | (* nonl) |
582 | (: (any ?s ?S) "unset") " " | 582 | (: (any ?s ?S) "unset") " " |
583 | (group (repeat 1 2 digit) ":" | 583 | (group (repeat 1 2 digit) ":" |
584 | (repeat 1 2 digit) | 584 | (repeat 1 2 digit) |
585 | (: (any ?a ?A ?p ?P) (any ?m ?M))) | 585 | (: (any ?a ?A ?p ?P) (any ?m ?M))) |
586 | (* nonl))) | 586 | (* nonl))) |
587 | (ss (sunrise-sunset)) | 587 | (ss (sunrise-sunset)) |
588 | (_m (string-match times-regex ss)) | 588 | (_m (string-match times-regex ss)) |
589 | (sunrise-time (match-string 1 ss)) | 589 | (sunrise-time (match-string 1 ss)) |
590 | (sunset-time (match-string 2 ss))) | 590 | (sunset-time (match-string 2 ss))) |
591 | (run-at-time sunrise-time (* 60 60 24) sunrise-command) | 591 | (run-at-time sunrise-time (* 60 60 24) sunrise-command) |
592 | (run-at-time sunset-time (* 60 60 24) sunset-command))) | 592 | (run-at-time sunset-time (* 60 60 24) sunset-command))) |
593 | #+end_src | 593 | #+end_src |
594 | 594 | ||
595 | #+begin_src emacs-lisp :noweb-ref hooks | 595 | #+begin_src emacs-lisp :noweb-ref hooks |
596 | (acdw/run-with-sun #'modus-themes-load-operandi | 596 | (acdw/run-with-sun #'modus-themes-load-operandi |
597 | #'modus-themes-load-vivendi) | 597 | #'modus-themes-load-vivendi) |
598 | #+end_src | 598 | #+end_src |
599 | 599 | ||
600 | *** Mode line | 600 | *** Mode line |
@@ -617,8 +617,8 @@ minor-modes from the modeline. | |||
617 | 617 | ||
618 | #+begin_src emacs-lisp :noweb-ref packages | 618 | #+begin_src emacs-lisp :noweb-ref packages |
619 | (straight-use-package '(blackout | 619 | (straight-use-package '(blackout |
620 | :host github | 620 | :host github |
621 | :repo "raxod502/blackout")) | 621 | :repo "raxod502/blackout")) |
622 | #+end_src | 622 | #+end_src |
623 | 623 | ||
624 | **** Which-function mode | 624 | **** Which-function mode |
@@ -633,11 +633,11 @@ Shows where we are in the modeline. | |||
633 | 633 | ||
634 | #+begin_src emacs-lisp :noweb-ref linux-specific | 634 | #+begin_src emacs-lisp :noweb-ref linux-specific |
635 | (doremi-face-set 'mode-line | 635 | (doremi-face-set 'mode-line |
636 | '((t (:family "Terminus" | 636 | '((t (:family "Terminus" |
637 | :height 1.0)))) | 637 | :height 1.0)))) |
638 | (doremi-face-set 'mode-line-inactive | 638 | (doremi-face-set 'mode-line-inactive |
639 | '((t (:family "Terminus" | 639 | '((t (:family "Terminus" |
640 | :height 1.0)))) | 640 | :height 1.0)))) |
641 | #+end_src | 641 | #+end_src |
642 | 642 | ||
643 | *** Setting faces | 643 | *** Setting faces |
@@ -683,7 +683,7 @@ systems. | |||
683 | 683 | ||
684 | #+begin_src emacs-lisp :noweb-ref settings | 684 | #+begin_src emacs-lisp :noweb-ref settings |
685 | (setq-default visible-bell nil | 685 | (setq-default visible-bell nil |
686 | ring-bell-function #'flash-mode-line) | 686 | ring-bell-function #'flash-mode-line) |
687 | #+end_src | 687 | #+end_src |
688 | 688 | ||
689 | **** Flash the mode-line | 689 | **** Flash the mode-line |
@@ -700,9 +700,9 @@ systems. | |||
700 | 700 | ||
701 | #+begin_src emacs-lisp :noweb-ref settings | 701 | #+begin_src emacs-lisp :noweb-ref settings |
702 | (setq-default minibuffer-prompt-properties | 702 | (setq-default minibuffer-prompt-properties |
703 | '(read-only t | 703 | '(read-only t |
704 | cursor-intangible t | 704 | cursor-intangible t |
705 | face minibuffer-prompt)) | 705 | face minibuffer-prompt)) |
706 | #+end_src | 706 | #+end_src |
707 | 707 | ||
708 | *** Enable a recursive minibuffer | 708 | *** Enable a recursive minibuffer |
@@ -738,8 +738,8 @@ to /hide/ those contents. | |||
738 | 738 | ||
739 | #+begin_src emacs-lisp :noweb-ref | 739 | #+begin_src emacs-lisp :noweb-ref |
740 | (setq-default completion-ignore-case t | 740 | (setq-default completion-ignore-case t |
741 | read-buffer-completion-ignore-case t | 741 | read-buffer-completion-ignore-case t |
742 | read-file-name-completion-ignore-case t) | 742 | read-file-name-completion-ignore-case t) |
743 | #+end_src | 743 | #+end_src |
744 | 744 | ||
745 | *** Icomplete | 745 | *** Icomplete |
@@ -752,7 +752,7 @@ to /hide/ those contents. | |||
752 | (setq-default | 752 | (setq-default |
753 | completion-styles '(partial-completion substring flex) | 753 | completion-styles '(partial-completion substring flex) |
754 | completion-category-overrides '((file | 754 | completion-category-overrides '((file |
755 | (styles basic substring flex)))) | 755 | (styles basic substring flex)))) |
756 | (setq-default | 756 | (setq-default |
757 | icomplete-delay-completions-threshold 0 | 757 | icomplete-delay-completions-threshold 0 |
758 | icomplete-max-delay-chars 0 | 758 | icomplete-max-delay-chars 0 |
@@ -771,8 +771,8 @@ to /hide/ those contents. | |||
771 | ("C-p" #'icomplete-backward-completions))) | 771 | ("C-p" #'icomplete-backward-completions))) |
772 | 772 | ||
773 | (acdw/bind "C-v" #'icomplete-vertical-toggle | 773 | (acdw/bind "C-v" #'icomplete-vertical-toggle |
774 | :after 'icomplete-vertical | 774 | :after 'icomplete-vertical |
775 | :map icomplete-minibuffer-map) | 775 | :map icomplete-minibuffer-map) |
776 | #+end_src | 776 | #+end_src |
777 | 777 | ||
778 | #+begin_src emacs-lisp :noweb-ref modes | 778 | #+begin_src emacs-lisp :noweb-ref modes |
@@ -825,10 +825,10 @@ default completion system. These all come from the [[https://github.com/minad/c | |||
825 | ("M-g e" #'consult-error) | 825 | ("M-g e" #'consult-error) |
826 | ;; M-s bindings (`search-map') | 826 | ;; M-s bindings (`search-map') |
827 | ("M-s g" #'consult-grep) ; alts: | 827 | ("M-s g" #'consult-grep) ; alts: |
828 | ; consult-git-grep, | 828 | ; consult-git-grep, |
829 | ; consult-ripgrep | 829 | ; consult-ripgrep |
830 | ("M-s f" #'consult-find) ; alts: | 830 | ("M-s f" #'consult-find) ; alts: |
831 | ; consult-locate | 831 | ; consult-locate |
832 | ("M-s l" #'consult-line) | 832 | ("M-s l" #'consult-line) |
833 | ("M-s m" #'consult-multi-occur) | 833 | ("M-s m" #'consult-multi-occur) |
834 | ("M-s k" #'consult-keep-lines) | 834 | ("M-s k" #'consult-keep-lines) |
@@ -842,7 +842,7 @@ default completion system. These all come from the [[https://github.com/minad/c | |||
842 | #+begin_src emacs-lisp :noweb-ref settings | 842 | #+begin_src emacs-lisp :noweb-ref settings |
843 | (autoload 'consult-register-preview "consult") ; make the compiler happy | 843 | (autoload 'consult-register-preview "consult") ; make the compiler happy |
844 | (setq-default register-preview-delay 0 | 844 | (setq-default register-preview-delay 0 |
845 | register-preview-function #'consult-register-preview) | 845 | register-preview-function #'consult-register-preview) |
846 | #+end_src | 846 | #+end_src |
847 | 847 | ||
848 | *** Marginalia :package: | 848 | *** Marginalia :package: |
@@ -863,9 +863,9 @@ I like the rich annotations provided by =marginalia=. | |||
863 | 863 | ||
864 | #+begin_src emacs-lisp :noweb-ref settings | 864 | #+begin_src emacs-lisp :noweb-ref settings |
865 | (setq-default marginalia-annotators | 865 | (setq-default marginalia-annotators |
866 | '(marginalia-annotators-heavy | 866 | '(marginalia-annotators-heavy |
867 | marginalia-annotators-light | 867 | marginalia-annotators-light |
868 | nil)) | 868 | nil)) |
869 | #+end_src | 869 | #+end_src |
870 | 870 | ||
871 | ** Imenu | 871 | ** Imenu |
@@ -931,13 +931,13 @@ little sugar on top of =define-key= et al. | |||
931 | :after PACKAGE-OR-FEATURE .. wrap key definition in `with-eval-after-load' | 931 | :after PACKAGE-OR-FEATURE .. wrap key definition in `with-eval-after-load' |
932 | :map KEYMAP .. define key in KEYMAP instead of `acdw/map'" | 932 | :map KEYMAP .. define key in KEYMAP instead of `acdw/map'" |
933 | (let* ((after (plist-get args :after)) | 933 | (let* ((after (plist-get args :after)) |
934 | (map (or (plist-get args :map) 'acdw/map)) | 934 | (map (or (plist-get args :map) 'acdw/map)) |
935 | (key (if (vectorp key) key `(kbd ,key))) | 935 | (key (if (vectorp key) key `(kbd ,key))) |
936 | (def-key `(define-key ,map ,key ,def))) | 936 | (def-key `(define-key ,map ,key ,def))) |
937 | (if after | 937 | (if after |
938 | `(with-eval-after-load ,after | 938 | `(with-eval-after-load ,after |
939 | ,def-key) | 939 | ,def-key) |
940 | def-key))) | 940 | def-key))) |
941 | 941 | ||
942 | (defmacro acdw/bind-after-map (feature keymap bindings) | 942 | (defmacro acdw/bind-after-map (feature keymap bindings) |
943 | "Wrap multiple calls to `acdw/bind' in a `with-eval-after-load' form. | 943 | "Wrap multiple calls to `acdw/bind' in a `with-eval-after-load' form. |
@@ -947,11 +947,11 @@ little sugar on top of =define-key= et al. | |||
947 | (declare (indent 2)) | 947 | (declare (indent 2)) |
948 | (let (bind-list) | 948 | (let (bind-list) |
949 | (dolist (bind bindings bind-list) | 949 | (dolist (bind bindings bind-list) |
950 | (if keymap | 950 | (if keymap |
951 | (push `(acdw/bind ,@bind :map ,keymap) bind-list) | 951 | (push `(acdw/bind ,@bind :map ,keymap) bind-list) |
952 | (push `(acdw/bind ,@bind) bind-list))) | 952 | (push `(acdw/bind ,@bind) bind-list))) |
953 | `(with-eval-after-load ,feature | 953 | `(with-eval-after-load ,feature |
954 | ,@bind-list))) | 954 | ,@bind-list))) |
955 | #+end_src | 955 | #+end_src |
956 | 956 | ||
957 | **** Turn off acdw/mode in the minibuffer | 957 | **** Turn off acdw/mode in the minibuffer |
@@ -973,8 +973,8 @@ generally use it as a leader for entering applications. | |||
973 | #+begin_src emacs-lisp :noweb-ref acdw-mode | 973 | #+begin_src emacs-lisp :noweb-ref acdw-mode |
974 | (defvar acdw/leader | 974 | (defvar acdw/leader |
975 | (let ((map (make-sparse-keymap)) | 975 | (let ((map (make-sparse-keymap)) |
976 | (c-z (global-key-binding "\C-z"))) | 976 | (c-z (global-key-binding "\C-z"))) |
977 | ;(global-unset-key "\C-z") | 977 | ;(global-unset-key "\C-z") |
978 | (define-key acdw/map "\C-z" map) | 978 | (define-key acdw/map "\C-z" map) |
979 | (define-key map "\C-z" c-z) | 979 | (define-key map "\C-z" c-z) |
980 | map)) | 980 | map)) |
@@ -1003,15 +1003,15 @@ According to [[https://github.com/mpereira/.emacs.d#make-cursor-movement-an-orde | |||
1003 | 1003 | ||
1004 | #+begin_src emacs-lisp :noweb-ref settings | 1004 | #+begin_src emacs-lisp :noweb-ref settings |
1005 | (setq-default auto-window-vscroll nil | 1005 | (setq-default auto-window-vscroll nil |
1006 | fast-but-imprecise-scrolling t) | 1006 | fast-but-imprecise-scrolling t) |
1007 | #+end_src | 1007 | #+end_src |
1008 | 1008 | ||
1009 | *** Scroll margins | 1009 | *** Scroll margins |
1010 | 1010 | ||
1011 | #+begin_src emacs-lisp :noweb-ref settings | 1011 | #+begin_src emacs-lisp :noweb-ref settings |
1012 | (setq-default scroll-margin 0 | 1012 | (setq-default scroll-margin 0 |
1013 | scroll-conservatively 101 ; if greater than 100 ... | 1013 | scroll-conservatively 101 ; if greater than 100 ... |
1014 | scroll-preserve-screen-position 1) | 1014 | scroll-preserve-screen-position 1) |
1015 | #+end_src | 1015 | #+end_src |
1016 | 1016 | ||
1017 | ** Enable commands | 1017 | ** Enable commands |
@@ -1030,8 +1030,8 @@ including here myself. This is kind of an experiment, to be honest. | |||
1030 | 1030 | ||
1031 | #+begin_src emacs-lisp :noweb-ref packages | 1031 | #+begin_src emacs-lisp :noweb-ref packages |
1032 | (straight-use-package '(crux | 1032 | (straight-use-package '(crux |
1033 | :host github | 1033 | :host github |
1034 | :repo "bbatsov/crux")) | 1034 | :repo "bbatsov/crux")) |
1035 | (require 'crux) | 1035 | (require 'crux) |
1036 | #+end_src | 1036 | #+end_src |
1037 | 1037 | ||
@@ -1052,12 +1052,12 @@ I keep all of it. | |||
1052 | 1052 | ||
1053 | #+begin_src emacs-lisp :noweb-ref modes | 1053 | #+begin_src emacs-lisp :noweb-ref modes |
1054 | (setq-default savehist-additional-variables | 1054 | (setq-default savehist-additional-variables |
1055 | '(kill-ring | 1055 | '(kill-ring |
1056 | search-ring | 1056 | search-ring |
1057 | regexp-search-ring) | 1057 | regexp-search-ring) |
1058 | history-length t ; Don't truncate | 1058 | history-length t ; Don't truncate |
1059 | history-delete-duplicates t | 1059 | history-delete-duplicates t |
1060 | savehist-autosave-interval 60) | 1060 | savehist-autosave-interval 60) |
1061 | #+end_src | 1061 | #+end_src |
1062 | 1062 | ||
1063 | #+begin_src emacs-lisp :noweb-ref modes | 1063 | #+begin_src emacs-lisp :noweb-ref modes |
@@ -1078,7 +1078,7 @@ of are readable or not when I'm not at home. | |||
1078 | 1078 | ||
1079 | #+begin_src emacs-lisp :noweb-ref settings | 1079 | #+begin_src emacs-lisp :noweb-ref settings |
1080 | (setq-default save-place-forget-unreadable-files | 1080 | (setq-default save-place-forget-unreadable-files |
1081 | (memq system-type '(gnu gnu/linux gnu/kfreebsd))) | 1081 | (memq system-type '(gnu gnu/linux gnu/kfreebsd))) |
1082 | #+end_src | 1082 | #+end_src |
1083 | 1083 | ||
1084 | #+begin_src emacs-lisp :noweb-ref modes | 1084 | #+begin_src emacs-lisp :noweb-ref modes |
@@ -1096,8 +1096,8 @@ with that. | |||
1096 | 1096 | ||
1097 | #+begin_src emacs-lisp :noweb-ref settings | 1097 | #+begin_src emacs-lisp :noweb-ref settings |
1098 | (setq-default recentf-max-menu-items 100 | 1098 | (setq-default recentf-max-menu-items 100 |
1099 | recentf-max-saved-items nil | 1099 | recentf-max-saved-items nil |
1100 | recentf-auto-cleanup 'never) | 1100 | recentf-auto-cleanup 'never) |
1101 | #+end_src | 1101 | #+end_src |
1102 | 1102 | ||
1103 | #+begin_src emacs-lisp :noweb-ref modes | 1103 | #+begin_src emacs-lisp :noweb-ref modes |
@@ -1121,14 +1121,14 @@ I also want to ignore the =no-littering-var-directory= and | |||
1121 | "When we last saved the `recentf-save-list'.") | 1121 | "When we last saved the `recentf-save-list'.") |
1122 | 1122 | ||
1123 | (when (> (time-convert (time-since recentf--last-save) 'integer) | 1123 | (when (> (time-convert (time-since recentf--last-save) 'integer) |
1124 | (* 60 5)) | 1124 | (* 60 5)) |
1125 | (setq-default recentf--last-save (time-convert nil 'integer)) | 1125 | (setq-default recentf--last-save (time-convert nil 'integer)) |
1126 | (when-unfocused #'recentf-save-list))) | 1126 | (when-unfocused #'recentf-save-list))) |
1127 | #+end_src | 1127 | #+end_src |
1128 | 1128 | ||
1129 | #+begin_src emacs-lisp :noweb-ref hooks | 1129 | #+begin_src emacs-lisp :noweb-ref hooks |
1130 | (add-function :after after-focus-change-function | 1130 | (add-function :after after-focus-change-function |
1131 | #'maybe-save-recentf) | 1131 | #'maybe-save-recentf) |
1132 | #+end_src | 1132 | #+end_src |
1133 | 1133 | ||
1134 | * Responsiveness | 1134 | * Responsiveness |
@@ -1182,7 +1182,7 @@ I'm going to try it for now. | |||
1182 | (when-unfocused #'garbage-collect)) | 1182 | (when-unfocused #'garbage-collect)) |
1183 | 1183 | ||
1184 | (add-function :after after-focus-change-function | 1184 | (add-function :after after-focus-change-function |
1185 | #'hook--gc-when-unfocused) | 1185 | #'hook--gc-when-unfocused) |
1186 | #+end_src | 1186 | #+end_src |
1187 | 1187 | ||
1188 | ** Startup time | 1188 | ** Startup time |
@@ -1197,10 +1197,10 @@ As a benchmark, on Windows, =emacs -Q= starts up in *0.188585* seconds, and | |||
1197 | (defun hook--message-startup-time () | 1197 | (defun hook--message-startup-time () |
1198 | "Message Emacs' startup time." | 1198 | "Message Emacs' startup time." |
1199 | (message "Emacs ready in %s with %d garbage collections." | 1199 | (message "Emacs ready in %s with %d garbage collections." |
1200 | (format "%.2f seconds" | 1200 | (format "%.2f seconds" |
1201 | (float-time (time-subtract after-init-time | 1201 | (float-time (time-subtract after-init-time |
1202 | before-init-time))) | 1202 | before-init-time))) |
1203 | gcs-done)) | 1203 | gcs-done)) |
1204 | 1204 | ||
1205 | (add-hook 'emacs-startup-hook #'hook--message-startup-time) | 1205 | (add-hook 'emacs-startup-hook #'hook--message-startup-time) |
1206 | #+end_src | 1206 | #+end_src |
@@ -1224,15 +1224,15 @@ It's 2020. Let's encode files like it is. | |||
1224 | (set-selection-coding-system 'utf-8-unix) | 1224 | (set-selection-coding-system 'utf-8-unix) |
1225 | 1225 | ||
1226 | (setq-default locale-coding-system 'utf-8-unix | 1226 | (setq-default locale-coding-system 'utf-8-unix |
1227 | coding-system-for-read 'utf-8-unix | 1227 | coding-system-for-read 'utf-8-unix |
1228 | coding-system-for-write 'utf-8-unix | 1228 | coding-system-for-write 'utf-8-unix |
1229 | buffer-file-coding-system 'utf-8-unix | 1229 | buffer-file-coding-system 'utf-8-unix |
1230 | |||
1231 | org-export-coding-system 'utf-8-unix | ||
1232 | org-html-coding-system 'utf-8-unix ; doesn't take from above | ||
1233 | 1230 | ||
1234 | default-process-coding-system '(utf-8-unix . utf-8-unix) | 1231 | org-export-coding-system 'utf-8-unix |
1235 | x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)) | 1232 | org-html-coding-system 'utf-8-unix ; doesn't take from above |
1233 | |||
1234 | default-process-coding-system '(utf-8-unix . utf-8-unix) | ||
1235 | x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)) | ||
1236 | #+end_src | 1236 | #+end_src |
1237 | 1237 | ||
1238 | *** UNIX-style line endings | 1238 | *** UNIX-style line endings |
@@ -1244,7 +1244,7 @@ This function is from the [[https://www.emacswiki.org/emacs/EndOfLineTips][Emacs | |||
1244 | "Convert line endings to UNIX, dammit." | 1244 | "Convert line endings to UNIX, dammit." |
1245 | (let ((coding-str (symbol-name buffer-file-coding-system))) | 1245 | (let ((coding-str (symbol-name buffer-file-coding-system))) |
1246 | (when (string-match "-\\(?:dos\\|mac\\)$" coding-str) | 1246 | (when (string-match "-\\(?:dos\\|mac\\)$" coding-str) |
1247 | (set-buffer-file-coding-system 'unix)))) | 1247 | (set-buffer-file-coding-system 'unix)))) |
1248 | #+end_src | 1248 | #+end_src |
1249 | 1249 | ||
1250 | I add it to both =file-find-hook= /and/ =before-save-hook= because I'm | 1250 | I add it to both =file-find-hook= /and/ =before-save-hook= because I'm |
@@ -1271,19 +1271,19 @@ Notepad can handle UNIX line endings, so I don't want to hear it. | |||
1271 | 1271 | ||
1272 | #+begin_src emacs-lisp :noweb-ref settings | 1272 | #+begin_src emacs-lisp :noweb-ref settings |
1273 | (setq-default backup-by-copying t | 1273 | (setq-default backup-by-copying t |
1274 | ;; Don't delete old versions | 1274 | ;; Don't delete old versions |
1275 | delete-old-versions -1 | 1275 | delete-old-versions -1 |
1276 | ;; Make numeric backups unconditionally | 1276 | ;; Make numeric backups unconditionally |
1277 | version-control t | 1277 | version-control t |
1278 | ;; Also backup files covered by version control | 1278 | ;; Also backup files covered by version control |
1279 | vc-make-backup-files t) | 1279 | vc-make-backup-files t) |
1280 | #+end_src | 1280 | #+end_src |
1281 | 1281 | ||
1282 | #+begin_src emacs-lisp :noweb-ref no-littering | 1282 | #+begin_src emacs-lisp :noweb-ref no-littering |
1283 | (let ((dir (no-littering-expand-var-file-name "backup"))) | 1283 | (let ((dir (no-littering-expand-var-file-name "backup"))) |
1284 | (make-directory dir :parents) | 1284 | (make-directory dir :parents) |
1285 | (setq-default backup-directory-alist | 1285 | (setq-default backup-directory-alist |
1286 | `((".*" . ,dir)))) | 1286 | `((".*" . ,dir)))) |
1287 | #+end_src | 1287 | #+end_src |
1288 | 1288 | ||
1289 | ** Autosaves :package: | 1289 | ** Autosaves :package: |
@@ -1295,8 +1295,8 @@ Bozhidar Batsov's [[https://github.com/bbatsov/super-save][super-save]] package. | |||
1295 | (setq-default auto-save-default nil) | 1295 | (setq-default auto-save-default nil) |
1296 | 1296 | ||
1297 | (setq-default super-save-remote-files nil | 1297 | (setq-default super-save-remote-files nil |
1298 | super-save-exclude '(".gpg") | 1298 | super-save-exclude '(".gpg") |
1299 | super-save-auto-save-when-idle t) | 1299 | super-save-auto-save-when-idle t) |
1300 | #+end_src | 1300 | #+end_src |
1301 | 1301 | ||
1302 | #+begin_src emacs-lisp :noweb-ref packages | 1302 | #+begin_src emacs-lisp :noweb-ref packages |
@@ -1360,7 +1360,7 @@ that's the only time I accidentally call it, anyway. | |||
1360 | 1. Enable =auto-fill-mode= with text modes. | 1360 | 1. Enable =auto-fill-mode= with text modes. |
1361 | 1361 | ||
1362 | #+begin_src emacs-lisp :noweb-ref hooks | 1362 | #+begin_src emacs-lisp :noweb-ref hooks |
1363 | (add-hook 'text-mode-hook #'auto-fill-mode) | 1363 | (add-hook 'text-mode-hook #'auto-fill-mode) |
1364 | #+end_src | 1364 | #+end_src |
1365 | 1365 | ||
1366 | 2a. Enable =visual-line-mode= everywhere. I do this because when I'm typing a | 1366 | 2a. Enable =visual-line-mode= everywhere. I do this because when I'm typing a |
@@ -1402,19 +1402,19 @@ This has to be done /before/ loading the package. It's included in | |||
1402 | (dolist (margin '(right-margin left-margin)) | 1402 | (dolist (margin '(right-margin left-margin)) |
1403 | (dolist (button '(mouse-1 mouse-2 mouse-3)) | 1403 | (dolist (button '(mouse-1 mouse-2 mouse-3)) |
1404 | (global-set-key (vector margin button) | 1404 | (global-set-key (vector margin button) |
1405 | (global-key-binding (vector button))))) | 1405 | (global-key-binding (vector button))))) |
1406 | 1406 | ||
1407 | (mouse-wheel-mode +1) | 1407 | (mouse-wheel-mode +1) |
1408 | 1408 | ||
1409 | (when (bound-and-true-p mouse-wheel-mode) | 1409 | (when (bound-and-true-p mouse-wheel-mode) |
1410 | (dolist (margin '(right-margin left-margin)) | 1410 | (dolist (margin '(right-margin left-margin)) |
1411 | (dolist (event '(mouse-wheel-down-event | 1411 | (dolist (event '(mouse-wheel-down-event |
1412 | mouse-wheel-up-event | 1412 | mouse-wheel-up-event |
1413 | wheel-down | 1413 | wheel-down |
1414 | wheel-up | 1414 | wheel-up |
1415 | mouse-4 | 1415 | mouse-4 |
1416 | mouse-5)) | 1416 | mouse-5)) |
1417 | (global-set-key (vector margin event) #'mwheel-scroll)))) | 1417 | (global-set-key (vector margin event) #'mwheel-scroll)))) |
1418 | #+END_SRC | 1418 | #+END_SRC |
1419 | 1419 | ||
1420 | **** Then: =visual-fill-column= :package: | 1420 | **** Then: =visual-fill-column= :package: |
@@ -1454,10 +1454,10 @@ enabled). | |||
1454 | 1454 | ||
1455 | #+begin_src emacs-lisp :noweb-ref settings | 1455 | #+begin_src emacs-lisp :noweb-ref settings |
1456 | (setq-default whitespace-style '(empty ; remove blank lines at buffer edges | 1456 | (setq-default whitespace-style '(empty ; remove blank lines at buffer edges |
1457 | indentation ; clean up indentation | 1457 | indentation ; clean up indentation |
1458 | ;; fix mixed spaces and tabs | 1458 | ;; fix mixed spaces and tabs |
1459 | space-before-tab | 1459 | space-before-tab |
1460 | space-after-tab)) | 1460 | space-after-tab)) |
1461 | #+end_src | 1461 | #+end_src |
1462 | 1462 | ||
1463 | *** Clean up whitespace on save | 1463 | *** Clean up whitespace on save |
@@ -1600,8 +1600,8 @@ from =undo-fu=. | |||
1600 | 1600 | ||
1601 | #+begin_src emacs-lisp :noweb-ref settings | 1601 | #+begin_src emacs-lisp :noweb-ref settings |
1602 | (setq-default undo-fu-session-incompatible-files | 1602 | (setq-default undo-fu-session-incompatible-files |
1603 | '("/COMMIT_EDITMSG\\'" | 1603 | '("/COMMIT_EDITMSG\\'" |
1604 | "/git-rebase-todo\\'")) | 1604 | "/git-rebase-todo\\'")) |
1605 | #+end_src | 1605 | #+end_src |
1606 | 1606 | ||
1607 | #+begin_src emacs-lisp :noweb-ref no-littering | 1607 | #+begin_src emacs-lisp :noweb-ref no-littering |
@@ -1644,12 +1644,12 @@ I want to search by regexp by default. | |||
1644 | 1644 | ||
1645 | #+begin_src emacs-lisp :noweb-ref settings | 1645 | #+begin_src emacs-lisp :noweb-ref settings |
1646 | (setq-default anzu-mode-lighter "" ; hide anzu-mode in the modeline | 1646 | (setq-default anzu-mode-lighter "" ; hide anzu-mode in the modeline |
1647 | anzu-replace-to-string-separator " → ") | 1647 | anzu-replace-to-string-separator " → ") |
1648 | 1648 | ||
1649 | ;; Set up anzu in the modeline | 1649 | ;; Set up anzu in the modeline |
1650 | (setq-default anzu-cons-mode-line-p nil) | 1650 | (setq-default anzu-cons-mode-line-p nil) |
1651 | (setcar (cdr (assq 'isearch-mode minor-mode-alist)) | 1651 | (setcar (cdr (assq 'isearch-mode minor-mode-alist)) |
1652 | '(:eval (concat " " (anzu--update-mode-line)))) | 1652 | '(:eval (concat " " (anzu--update-mode-line)))) |
1653 | #+end_src | 1653 | #+end_src |
1654 | 1654 | ||
1655 | *** Regex | 1655 | *** Regex |
@@ -1721,7 +1721,7 @@ Let's use =hunspell=. | |||
1721 | (with-eval-after-load "ispell" | 1721 | (with-eval-after-load "ispell" |
1722 | (setenv "LANG" "en_US") | 1722 | (setenv "LANG" "en_US") |
1723 | (setq-default ispell-program-name "hunspell" | 1723 | (setq-default ispell-program-name "hunspell" |
1724 | ispell-dictionary "en_US") | 1724 | ispell-dictionary "en_US") |
1725 | (ispell-set-spellchecker-params)) | 1725 | (ispell-set-spellchecker-params)) |
1726 | 1726 | ||
1727 | (setq ispell-personal-dictionary "~/.hunspell_personal") | 1727 | (setq ispell-personal-dictionary "~/.hunspell_personal") |
@@ -1750,8 +1750,8 @@ Display corrections with =completing-read=. | |||
1750 | 1750 | ||
1751 | #+begin_src emacs-lisp :noweb-ref bindings | 1751 | #+begin_src emacs-lisp :noweb-ref bindings |
1752 | (acdw/bind "C-;" #'flyspell-correct-wrapper | 1752 | (acdw/bind "C-;" #'flyspell-correct-wrapper |
1753 | :after 'flyspell | 1753 | :after 'flyspell |
1754 | :map flyspell-mode-map) | 1754 | :map flyspell-mode-map) |
1755 | #+end_src | 1755 | #+end_src |
1756 | 1756 | ||
1757 | * Reading | 1757 | * Reading |
@@ -1768,7 +1768,7 @@ Display corrections with =completing-read=. | |||
1768 | 1768 | ||
1769 | #+begin_src emacs-lisp :noweb-ref modes | 1769 | #+begin_src emacs-lisp :noweb-ref modes |
1770 | (add-hook 'iscroll-mode-hook | 1770 | (add-hook 'iscroll-mode-hook |
1771 | #'(lambda () (blackout 'iscroll-mode))) | 1771 | #'(lambda () (blackout 'iscroll-mode))) |
1772 | #+end_src | 1772 | #+end_src |
1773 | 1773 | ||
1774 | ** Reading mode | 1774 | ** Reading mode |
@@ -1780,16 +1780,16 @@ A custom mode to make reading comfy | |||
1780 | "Make reading comfier." | 1780 | "Make reading comfier." |
1781 | :lighter " Read" ; later: book emoji | 1781 | :lighter " Read" ; later: book emoji |
1782 | (if acdw/reading-mode | 1782 | (if acdw/reading-mode |
1783 | (progn ;; turn on | 1783 | (progn ;; turn on |
1784 | (text-scale-increase +1) | 1784 | (text-scale-increase +1) |
1785 | (visual-fill-column-mode +1) | 1785 | (visual-fill-column-mode +1) |
1786 | (iscroll-mode +1) | 1786 | (iscroll-mode +1) |
1787 | (display-fill-column-indicator-mode -1)) | 1787 | (display-fill-column-indicator-mode -1)) |
1788 | (progn ;; turn off | 1788 | (progn ;; turn off |
1789 | (text-scale-increase 0) | 1789 | (text-scale-increase 0) |
1790 | (visual-fill-column-mode -1) | 1790 | (visual-fill-column-mode -1) |
1791 | (iscroll-mode -1) | 1791 | (iscroll-mode -1) |
1792 | (display-fill-column-indicator-mode +1)))) | 1792 | (display-fill-column-indicator-mode +1)))) |
1793 | #+end_src | 1793 | #+end_src |
1794 | 1794 | ||
1795 | * Programming | 1795 | * Programming |
@@ -1819,18 +1819,18 @@ to auto-fill in programming modes, but /only/ the comments. | |||
1819 | 1819 | ||
1820 | #+begin_src emacs-lisp :noweb-ref settings | 1820 | #+begin_src emacs-lisp :noweb-ref settings |
1821 | (setq-default show-paren-delay 0 | 1821 | (setq-default show-paren-delay 0 |
1822 | ;; Show the matching paren if visible, else the whole expression | 1822 | ;; Show the matching paren if visible, else the whole expression |
1823 | show-paren-style 'mixed | 1823 | show-paren-style 'mixed |
1824 | show-paren-when-point-inside-paren t | 1824 | show-paren-when-point-inside-paren t |
1825 | show-paren-when-point-in-periphery t) | 1825 | show-paren-when-point-in-periphery t) |
1826 | #+end_src | 1826 | #+end_src |
1827 | 1827 | ||
1828 | *** COMMENT Smart parentheses :package: | 1828 | *** COMMENT Smart parentheses :package: |
1829 | 1829 | ||
1830 | #+begin_src emacs-lisp :noweb-ref packages | 1830 | #+begin_src emacs-lisp :noweb-ref packages |
1831 | (straight-use-package '(smartparens | 1831 | (straight-use-package '(smartparens |
1832 | :host github | 1832 | :host github |
1833 | :repo "Fuco1/smartparens")) | 1833 | :repo "Fuco1/smartparens")) |
1834 | (require 'smartparens-config) | 1834 | (require 'smartparens-config) |
1835 | #+end_src | 1835 | #+end_src |
1836 | 1836 | ||
@@ -1838,7 +1838,7 @@ to auto-fill in programming modes, but /only/ the comments. | |||
1838 | 1838 | ||
1839 | #+begin_src emacs-lisp :noweb-ref settings | 1839 | #+begin_src emacs-lisp :noweb-ref settings |
1840 | (setq-default sp-show-pair-delay 0 | 1840 | (setq-default sp-show-pair-delay 0 |
1841 | sp-show-pair-from-inside t) | 1841 | sp-show-pair-from-inside t) |
1842 | #+end_src | 1842 | #+end_src |
1843 | 1843 | ||
1844 | #+begin_src emacs-lisp :noweb-ref hooks | 1844 | #+begin_src emacs-lisp :noweb-ref hooks |
@@ -1857,7 +1857,7 @@ to auto-fill in programming modes, but /only/ the comments. | |||
1857 | (add-hook 'prog-mode-hook #'smartparens-mode) | 1857 | (add-hook 'prog-mode-hook #'smartparens-mode) |
1858 | 1858 | ||
1859 | (dolist (hook '(lisp-mode-hook | 1859 | (dolist (hook '(lisp-mode-hook |
1860 | emacs-lisp-mode-hook)) | 1860 | emacs-lisp-mode-hook)) |
1861 | (add-hook hook #'smartparens-strict-mode)) | 1861 | (add-hook hook #'smartparens-strict-mode)) |
1862 | #+end_src | 1862 | #+end_src |
1863 | 1863 | ||
@@ -1937,15 +1937,15 @@ checks for a shebang). | |||
1937 | 1937 | ||
1938 | #+begin_src emacs-lisp :noweb-ref hooks | 1938 | #+begin_src emacs-lisp :noweb-ref hooks |
1939 | (add-hook 'after-save-hook | 1939 | (add-hook 'after-save-hook |
1940 | #'executable-make-buffer-file-executable-if-script-p) | 1940 | #'executable-make-buffer-file-executable-if-script-p) |
1941 | #+end_src | 1941 | #+end_src |
1942 | 1942 | ||
1943 | ** Compilation | 1943 | ** Compilation |
1944 | 1944 | ||
1945 | #+begin_src emacs-lisp :noweb-ref settings | 1945 | #+begin_src emacs-lisp :noweb-ref settings |
1946 | (setq-default compilation-ask-about-save nil ; just save | 1946 | (setq-default compilation-ask-about-save nil ; just save |
1947 | compilation-always-kill t ; kill the old processes | 1947 | compilation-always-kill t ; kill the old processes |
1948 | compilation-scroll-output 'first-error) | 1948 | compilation-scroll-output 'first-error) |
1949 | #+end_src | 1949 | #+end_src |
1950 | 1950 | ||
1951 | #+begin_src emacs-lisp :noweb-ref bindings | 1951 | #+begin_src emacs-lisp :noweb-ref bindings |
@@ -1969,7 +1969,7 @@ of (I suppose) generic files. | |||
1969 | 1969 | ||
1970 | #+begin_src emacs-lisp :noweb-ref settings | 1970 | #+begin_src emacs-lisp :noweb-ref settings |
1971 | (setq-default eval-expression-print-length nil | 1971 | (setq-default eval-expression-print-length nil |
1972 | eval-expression-print-level nil) | 1972 | eval-expression-print-level nil) |
1973 | #+end_src | 1973 | #+end_src |
1974 | 1974 | ||
1975 | **** Indent Elisp like Common Lisp | 1975 | **** Indent Elisp like Common Lisp |
@@ -2021,6 +2021,31 @@ installed. | |||
2021 | (straight-use-package 'i3wm-config-mode)) | 2021 | (straight-use-package 'i3wm-config-mode)) |
2022 | #+end_src | 2022 | #+end_src |
2023 | 2023 | ||
2024 | *** Shell scripts | ||
2025 | |||
2026 | **** Shellcheck | ||
2027 | |||
2028 | #+begin_src emacs-lisp :noweb-ref packages | ||
2029 | (straight-use-package 'flymake-shellcheck) | ||
2030 | (autoload 'flymake-shellcheck-load "flymake-shellcheck") | ||
2031 | #+end_src | ||
2032 | |||
2033 | #+begin_src emacs-lisp :noweb-ref hooks | ||
2034 | (add-hook 'sh-mode-hook #'flymake-shellcheck-load) | ||
2035 | #+end_src | ||
2036 | |||
2037 | **** Formatting | ||
2038 | |||
2039 | #+begin_src emacs-lisp :noweb-ref modes | ||
2040 | (when (executable-find "shfmt") | ||
2041 | (reformatter-define sh-format | ||
2042 | :program "shfmt" | ||
2043 | |||
2044 | :lighter "Shfmt") | ||
2045 | |||
2046 | (add-hook 'sh-mode-hook #'sh-format-on-save-mode)) | ||
2047 | #+end_src | ||
2048 | |||
2024 | * Applications | 2049 | * Applications |
2025 | 2050 | ||
2026 | Emacs is well-known for its ability to subsume one's entire computing | 2051 | Emacs is well-known for its ability to subsume one's entire computing |
@@ -2039,8 +2064,8 @@ I like using Firefox. | |||
2039 | 2064 | ||
2040 | #+begin_src emacs-lisp :noweb-ref settings | 2065 | #+begin_src emacs-lisp :noweb-ref settings |
2041 | (setq-default browse-url-browser-function 'browse-url-firefox | 2066 | (setq-default browse-url-browser-function 'browse-url-firefox |
2042 | browse-url-new-window-flag t | 2067 | browse-url-new-window-flag t |
2043 | browse-url-firefox-new-window-is-tab t) | 2068 | browse-url-firefox-new-window-is-tab t) |
2044 | #+end_src | 2069 | #+end_src |
2045 | 2070 | ||
2046 | At work, I need to tell Emacs where Firefox is. | 2071 | At work, I need to tell Emacs where Firefox is. |
@@ -2053,7 +2078,7 @@ At work, I need to tell Emacs where Firefox is. | |||
2053 | 2078 | ||
2054 | #+begin_src emacs-lisp :noweb-ref settings | 2079 | #+begin_src emacs-lisp :noweb-ref settings |
2055 | (setq-default shr-max-width fill-column | 2080 | (setq-default shr-max-width fill-column |
2056 | shr-width fill-column) | 2081 | shr-width fill-column) |
2057 | #+end_src | 2082 | #+end_src |
2058 | 2083 | ||
2059 | ** Dired | 2084 | ** Dired |
@@ -2071,10 +2096,10 @@ move up a directory with a keybinding, I'll change =-a= to =-A=. | |||
2071 | 2096 | ||
2072 | #+begin_src emacs-lisp :noweb-ref settings | 2097 | #+begin_src emacs-lisp :noweb-ref settings |
2073 | (setq-default dired-recursive-copies 'always | 2098 | (setq-default dired-recursive-copies 'always |
2074 | dired-recursive-deletes 'always | 2099 | dired-recursive-deletes 'always |
2075 | delete-by-moving-to-trash t | 2100 | delete-by-moving-to-trash t |
2076 | dired-listing-switches "-AFgho --group-directories-first" | 2101 | dired-listing-switches "-AFgho --group-directories-first" |
2077 | dired-dwim-target t) | 2102 | dired-dwim-target t) |
2078 | #+end_src | 2103 | #+end_src |
2079 | 2104 | ||
2080 | #+begin_src emacs-lisp :noweb-ref bindings | 2105 | #+begin_src emacs-lisp :noweb-ref bindings |
@@ -2156,8 +2181,8 @@ true, please feel free to hack this repo and change this paragraph. | |||
2156 | 2181 | ||
2157 | #+begin_src emacs-lisp :noweb-ref packages | 2182 | #+begin_src emacs-lisp :noweb-ref packages |
2158 | (dolist (feat '(gitattributes-mode | 2183 | (dolist (feat '(gitattributes-mode |
2159 | gitconfig-mode | 2184 | gitconfig-mode |
2160 | gitignore-mode)) | 2185 | gitignore-mode)) |
2161 | (straight-use-package feat) | 2186 | (straight-use-package feat) |
2162 | (require feat)) | 2187 | (require feat)) |
2163 | #+end_src | 2188 | #+end_src |
@@ -2168,8 +2193,8 @@ I love crosswords. I love Emacs. There ya go. | |||
2168 | 2193 | ||
2169 | #+begin_src emacs-lisp :noweb-ref packages | 2194 | #+begin_src emacs-lisp :noweb-ref packages |
2170 | (straight-use-package '(crossword | 2195 | (straight-use-package '(crossword |
2171 | :host github | 2196 | :host github |
2172 | :repo "Boruch-Baum/emacs-crossword")) | 2197 | :repo "Boruch-Baum/emacs-crossword")) |
2173 | #+end_src | 2198 | #+end_src |
2174 | 2199 | ||
2175 | #+begin_src emacs-lisp :noweb-ref settings | 2200 | #+begin_src emacs-lisp :noweb-ref settings |
@@ -2178,7 +2203,7 @@ I love crosswords. I love Emacs. There ya go. | |||
2178 | 2203 | ||
2179 | #+begin_src emacs-lisp :noweb-ref no-littering | 2204 | #+begin_src emacs-lisp :noweb-ref no-littering |
2180 | (setq-default crossword-save-path | 2205 | (setq-default crossword-save-path |
2181 | (no-littering-expand-var-file-name "crosswords/")) | 2206 | (no-littering-expand-var-file-name "crosswords/")) |
2182 | (unless (file-exists-p crossword-save-path) | 2207 | (unless (file-exists-p crossword-save-path) |
2183 | (make-directory crossword-save-path :parents)) | 2208 | (make-directory crossword-save-path :parents)) |
2184 | #+end_src | 2209 | #+end_src |
@@ -2195,30 +2220,30 @@ bad, to be honest. Let's change em. | |||
2195 | 2220 | ||
2196 | #+begin_src emacs-lisp :noweb-ref settings | 2221 | #+begin_src emacs-lisp :noweb-ref settings |
2197 | (doremi-face-set 'crossword-current-face | 2222 | (doremi-face-set 'crossword-current-face |
2198 | '((((class color) | 2223 | '((((class color) |
2199 | (background light)) | 2224 | (background light)) |
2200 | (:inherit 'normal :foreground "black" | 2225 | (:inherit 'normal :foreground "black" |
2201 | :background "lightgreen")) | 2226 | :background "lightgreen")) |
2202 | (((class color) | 2227 | (((class color) |
2203 | (background dark)) | 2228 | (background dark)) |
2204 | (:inherit 'normal :foreground "white" | 2229 | (:inherit 'normal :foreground "white" |
2205 | :background "darkgreen")) | 2230 | :background "darkgreen")) |
2206 | (t | 2231 | (t |
2207 | (:inherit 'normal :foreground "black" | 2232 | (:inherit 'normal :foreground "black" |
2208 | :background "darkgreen")))) | 2233 | :background "darkgreen")))) |
2209 | 2234 | ||
2210 | (doremi-face-set 'crossword-other-dir-face | 2235 | (doremi-face-set 'crossword-other-dir-face |
2211 | '((((class color) | 2236 | '((((class color) |
2212 | (background light)) | 2237 | (background light)) |
2213 | (:inherit 'normal :foreground "black" | 2238 | (:inherit 'normal :foreground "black" |
2214 | :background "darkgrey")) | 2239 | :background "darkgrey")) |
2215 | (((class color) | 2240 | (((class color) |
2216 | (background dark)) | 2241 | (background dark)) |
2217 | (:inherit 'normal :foreground "black" | 2242 | (:inherit 'normal :foreground "black" |
2218 | :background "darkgrey")) | 2243 | :background "darkgrey")) |
2219 | (t | 2244 | (t |
2220 | (:inherit 'normal :foreground "black" | 2245 | (:inherit 'normal :foreground "black" |
2221 | :background "darkgrey")))) | 2246 | :background "darkgrey")))) |
2222 | #+end_src | 2247 | #+end_src |
2223 | 2248 | ||
2224 | ** TODO Gnus | 2249 | ** TODO Gnus |
@@ -2243,9 +2268,9 @@ See [[https://github.com/redguardtoo/mastering-emacs-in-one-year-guide/blob/mast | |||
2243 | 2268 | ||
2244 | #+begin_src emacs-lisp :noweb-ref settings | 2269 | #+begin_src emacs-lisp :noweb-ref settings |
2245 | (setq-default elfeed-db-directory | 2270 | (setq-default elfeed-db-directory |
2246 | (expand-file-name "elfeed/db" | 2271 | (expand-file-name "elfeed/db" |
2247 | (or (getenv "XDG_CACHE_HOME") | 2272 | (or (getenv "XDG_CACHE_HOME") |
2248 | "~/.cache"))) | 2273 | "~/.cache"))) |
2249 | #+end_src | 2274 | #+end_src |
2250 | 2275 | ||
2251 | #+begin_src emacs-lisp :noweb-ref hooks | 2276 | #+begin_src emacs-lisp :noweb-ref hooks |
@@ -2260,92 +2285,92 @@ See [[https://github.com/redguardtoo/mastering-emacs-in-one-year-guide/blob/mast | |||
2260 | 2285 | ||
2261 | #+begin_src emacs-lisp :noweb-ref settings | 2286 | #+begin_src emacs-lisp :noweb-ref settings |
2262 | (setq elfeed-feeds | 2287 | (setq elfeed-feeds |
2263 | `( | 2288 | `( |
2264 | ("https://computer.rip/rss.xml" tech newsletter) | 2289 | ("https://computer.rip/rss.xml" tech newsletter) |
2265 | ("https://weather-broker-cdn.api.bbci.co.uk/en/forecast/rss/3day/4315588" weather) | 2290 | ("https://weather-broker-cdn.api.bbci.co.uk/en/forecast/rss/3day/4315588" weather) |
2266 | ("https://www.realbakingwithrose.com/month?format=rss" food) | 2291 | ("https://www.realbakingwithrose.com/month?format=rss" food) |
2267 | ("https://xfnw.tilde.institute/sandcats/feed.rss" fwend pix) | 2292 | ("https://xfnw.tilde.institute/sandcats/feed.rss" fwend pix) |
2268 | ("https://www.makeworld.gq/feed.xml" blag) | 2293 | ("https://www.makeworld.gq/feed.xml" blag) |
2269 | ("https://whyarentyoucoding.com/feed.xml" comix) | 2294 | ("https://whyarentyoucoding.com/feed.xml" comix) |
2270 | ("https://xkcd.com/atom.xml" comix) | 2295 | ("https://xkcd.com/atom.xml" comix) |
2271 | ("https://falseknees.com/rss.xml" comix) | 2296 | ("https://falseknees.com/rss.xml" comix) |
2272 | ("https://chrisman.github.io/rss.xml" fwend dozens blag) | 2297 | ("https://chrisman.github.io/rss.xml" fwend dozens blag) |
2273 | ("https://tilde.team/~dozens/dreams/rss.xml" fwend dozens blag) | 2298 | ("https://tilde.team/~dozens/dreams/rss.xml" fwend dozens blag) |
2274 | ("https://society.neocities.org/rss.xml" fwend dozens) | 2299 | ("https://society.neocities.org/rss.xml" fwend dozens) |
2275 | ("https://supervegan.neocities.org/feed.xml" fwend dozens food) | 2300 | ("https://supervegan.neocities.org/feed.xml" fwend dozens food) |
2276 | ("https://blog.astrosnail.pt.eu.org/feed.atom" tech blag) | 2301 | ("https://blog.astrosnail.pt.eu.org/feed.atom" tech blag) |
2277 | ("https://www.greghendershott.com/feeds/all.atom.xml" tech blag) | 2302 | ("https://www.greghendershott.com/feeds/all.atom.xml" tech blag) |
2278 | ("https://hans.gerwitz.com/feeds/writing.rss" fwend) | 2303 | ("https://hans.gerwitz.com/feeds/writing.rss" fwend) |
2279 | ("http://planet.lisp.org/rss20.xml" tech lisp) | 2304 | ("http://planet.lisp.org/rss20.xml" tech lisp) |
2280 | ("https://wflewis.com/feed.xml" blag fwend) | 2305 | ("https://wflewis.com/feed.xml" blag fwend) |
2281 | ("HTTPS://atthis.link/rss.xml" blag tech) | 2306 | ("HTTPS://atthis.link/rss.xml" blag tech) |
2282 | ("https://rachelbythebay.com/w/atom.xml" blag tech) | 2307 | ("https://rachelbythebay.com/w/atom.xml" blag tech) |
2283 | ("https://notes.neeasade.net/rss_full.xml" blag tech) | 2308 | ("https://notes.neeasade.net/rss_full.xml" blag tech) |
2284 | ("https://www.uninformativ.de/blog/feeds/en.atom" blag tech) | 2309 | ("https://www.uninformativ.de/blog/feeds/en.atom" blag tech) |
2285 | ("http://blog.z3bra.org/rss/feed.xml" blag tech) | 2310 | ("http://blog.z3bra.org/rss/feed.xml" blag tech) |
2286 | ("https://blog.sanctum.geek.nz/feed/" blag tech) | 2311 | ("https://blog.sanctum.geek.nz/feed/" blag tech) |
2287 | ("https://drewdevault.com/blog/index.xml" blag tech) | 2312 | ("https://drewdevault.com/blog/index.xml" blag tech) |
2288 | ("https://usesthis.com/feed.atom" tech) | 2313 | ("https://usesthis.com/feed.atom" tech) |
2289 | ("https://occasionallycogent.com/feed.xml" blag) | 2314 | ("https://occasionallycogent.com/feed.xml" blag) |
2290 | ("https://www.murilopereira.com/index.xml" blag tech) | 2315 | ("https://www.murilopereira.com/index.xml" blag tech) |
2291 | ("https://botanistinthekitchen.blog/feed/" blag food) | 2316 | ("https://botanistinthekitchen.blog/feed/" blag food) |
2292 | ("https://www.careercenterbr.com/feed/" work) | 2317 | ("https://www.careercenterbr.com/feed/" work) |
2293 | ("https://blog.ebrpl.com/feed/" work) | 2318 | ("https://blog.ebrpl.com/feed/" work) |
2294 | (,(concat ; long-ass url | 2319 | (,(concat ; long-ass url |
2295 | "https://lemmy.ml/feeds/front/" | 2320 | "https://lemmy.ml/feeds/front/" |
2296 | "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9." | 2321 | "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9." |
2297 | "eyJpZCI6MTY4MjQsImlzcyI6ImxlbW15Lm1sIn0" | 2322 | "eyJpZCI6MTY4MjQsImlzcyI6ImxlbW15Lm1sIn0" |
2298 | ".yE2zUGjvlEuTZZi3TiF9HR7L7ITM9f_" | 2323 | ".yE2zUGjvlEuTZZi3TiF9HR7L7ITM9f_" |
2299 | "fQnquyYLgdJ4.xml?sort=Active") | 2324 | "fQnquyYLgdJ4.xml?sort=Active") |
2300 | news) | 2325 | news) |
2301 | ("https://lobste.rs/rss" news tech) | 2326 | ("https://lobste.rs/rss" news tech) |
2302 | ("https://feeds.npr.org/1001/rss.xml" news) | 2327 | ("https://feeds.npr.org/1001/rss.xml" news) |
2303 | (,(concat ; long-ass url | 2328 | (,(concat ; long-ass url |
2304 | "https://tilde.news/rss?token=" | 2329 | "https://tilde.news/rss?token=" |
2305 | "FvdFj8rQkhrBy9j1yON1t6RYKDdcuG1MoUlyvRICmbgDGCf2JTWAEObDhdgt") | 2330 | "FvdFj8rQkhrBy9j1yON1t6RYKDdcuG1MoUlyvRICmbgDGCf2JTWAEObDhdgt") |
2306 | news tildes tech) | 2331 | news tildes tech) |
2307 | ("https://www.acdw.net/atom.xml" fwend) | 2332 | ("https://www.acdw.net/atom.xml" fwend) |
2308 | ("https://envs.net/~lucidiot/rsrsss/feed.xml" fwend) | 2333 | ("https://envs.net/~lucidiot/rsrsss/feed.xml" fwend) |
2309 | ("https://planet.emacslife.com/atom.xml" emacs tech) | 2334 | ("https://planet.emacslife.com/atom.xml" emacs tech) |
2310 | ("http://tilde.town/~lucidiot/fridaypostcard.xml" tildes art) | 2335 | ("http://tilde.town/~lucidiot/fridaypostcard.xml" tildes art) |
2311 | ("https://quasivoid.net/feed.atom" tildes) | 2336 | ("https://quasivoid.net/feed.atom" tildes) |
2312 | ("https://benjaminwil.info/feed.xml" tildes fwend) | 2337 | ("https://benjaminwil.info/feed.xml" tildes fwend) |
2313 | ("https://benjaminwil.info/antisocial/feed.xml" tildes) | 2338 | ("https://benjaminwil.info/antisocial/feed.xml" tildes) |
2314 | ("https://blog.ryliejamesthomas.net/feed/" tildes) | 2339 | ("https://blog.ryliejamesthomas.net/feed/" tildes) |
2315 | ("https://p1k3.com/feed" tildes) | 2340 | ("https://p1k3.com/feed" tildes) |
2316 | ("https://cosmic.voyage/rss.xml" tildes fiction sci-fi) | 2341 | ("https://cosmic.voyage/rss.xml" tildes fiction sci-fi) |
2317 | ("https://jackreid.xyz/index.xml" tildes) | 2342 | ("https://jackreid.xyz/index.xml" tildes) |
2318 | ("http://lambdacreate.com/static/feed.rss" tildes fwend) | 2343 | ("http://lambdacreate.com/static/feed.rss" tildes fwend) |
2319 | ("https://gaffen.co.uk/feed.xml" tildes) | 2344 | ("https://gaffen.co.uk/feed.xml" tildes) |
2320 | ("https://gmb.21x2.net/rss.xml" tildes) | 2345 | ("https://gmb.21x2.net/rss.xml" tildes) |
2321 | ("https://www.insom.me.uk/feed.xml" tildes) | 2346 | ("https://www.insom.me.uk/feed.xml" tildes) |
2322 | ("https://invisibleup.com/atom.xml" tildes) | 2347 | ("https://invisibleup.com/atom.xml" tildes) |
2323 | ("https://m455.casa/feed.rss" tildes fwend) | 2348 | ("https://m455.casa/feed.rss" tildes fwend) |
2324 | ("https://petras.space/index.xml" tildes) | 2349 | ("https://petras.space/index.xml" tildes) |
2325 | ("https://www.benovermyer.com/post/index.xml" tildes) | 2350 | ("https://www.benovermyer.com/post/index.xml" tildes) |
2326 | ("https://tilde.town/~trm/blog/atom.xml" tildes) | 2351 | ("https://tilde.town/~trm/blog/atom.xml" tildes) |
2327 | ("https://tilde.team/feed.rss" tildes) | 2352 | ("https://tilde.team/feed.rss" tildes) |
2328 | ("http://ajroach42.com/feed.xml" tildes) | 2353 | ("http://ajroach42.com/feed.xml" tildes) |
2329 | ("http://tilde.town/~mroik/blog/rss.xml" tildes) | 2354 | ("http://tilde.town/~mroik/blog/rss.xml" tildes) |
2330 | ("https://hamster.dance/blog/rss/" tildes) | 2355 | ("https://hamster.dance/blog/rss/" tildes) |
2331 | ("https://m455.neocities.org/feed.rss" tildes fwend) | 2356 | ("https://m455.neocities.org/feed.rss" tildes fwend) |
2332 | ("https://eli.li/feed.rss" tildes fwend) | 2357 | ("https://eli.li/feed.rss" tildes fwend) |
2333 | ("https://aiweirdness.com/rss" tech) | 2358 | ("https://aiweirdness.com/rss" tech) |
2334 | ("http://tilde.town/~m455/javapool.rss" tilde) | 2359 | ("http://tilde.town/~m455/javapool.rss" tilde) |
2335 | ("https://spwhitton.name/blog/index.rss" blag) | 2360 | ("https://spwhitton.name/blog/index.rss" blag) |
2336 | (,(concat "https://www.theadvocate.com/search/?" | 2361 | (,(concat "https://www.theadvocate.com/search/?" |
2337 | ;; Let's Build A URL!!! | 2362 | ;; Let's Build A URL!!! |
2338 | "f=rss" ; RSS feed | 2363 | "f=rss" ; RSS feed |
2339 | "&l=10" ; 10 most recent (length) | 2364 | "&l=10" ; 10 most recent (length) |
2340 | "&c[]=" ; I'm guessing ... categories? | 2365 | "&c[]=" ; I'm guessing ... categories? |
2341 | "baton_rouge/news*," | 2366 | "baton_rouge/news*," |
2342 | "baton_rouge/opinion*" | 2367 | "baton_rouge/opinion*" |
2343 | "?t=article" ; type=article | 2368 | "?t=article" ; type=article |
2344 | ) | 2369 | ) |
2345 | news) | 2370 | news) |
2346 | ("https://esoteric.codes/rss" tech) | 2371 | ("https://esoteric.codes/rss" tech) |
2347 | ("https://wphicks.github.io/feed.xml" blag) | 2372 | ("https://wphicks.github.io/feed.xml" blag) |
2348 | )) | 2373 | )) |
2349 | #+end_src | 2374 | #+end_src |
2350 | 2375 | ||
2351 | ** 0x0 (null pointer) :package: | 2376 | ** 0x0 (null pointer) :package: |
@@ -2355,7 +2380,7 @@ others. | |||
2355 | 2380 | ||
2356 | #+begin_src emacs-lisp :noweb-ref packages | 2381 | #+begin_src emacs-lisp :noweb-ref packages |
2357 | (straight-use-package '(0x0 | 2382 | (straight-use-package '(0x0 |
2358 | :repo "https://git.sr.ht/~zge/nullpointer-emacs")) | 2383 | :repo "https://git.sr.ht/~zge/nullpointer-emacs")) |
2359 | #+end_src | 2384 | #+end_src |
2360 | 2385 | ||
2361 | #+begin_src emacs-lisp :noweb-ref settings | 2386 | #+begin_src emacs-lisp :noweb-ref settings |
@@ -2368,27 +2393,27 @@ others. | |||
2368 | 2393 | ||
2369 | #+begin_src emacs-lisp :noweb-ref packages | 2394 | #+begin_src emacs-lisp :noweb-ref packages |
2370 | (straight-use-package '(elpher | 2395 | (straight-use-package '(elpher |
2371 | :repo "git://thelambdalab.xyz/elpher.git")) | 2396 | :repo "git://thelambdalab.xyz/elpher.git")) |
2372 | #+end_src | 2397 | #+end_src |
2373 | 2398 | ||
2374 | #+begin_src emacs-lisp :noweb-ref settings | 2399 | #+begin_src emacs-lisp :noweb-ref settings |
2375 | (setq-default elpher-ipv4-always t) | 2400 | (setq-default elpher-ipv4-always t) |
2376 | 2401 | ||
2377 | (doremi-face-set 'elpher-gemini-heading1 | 2402 | (doremi-face-set 'elpher-gemini-heading1 |
2378 | '((t (:inherit (modus-theme-heading-1) | 2403 | '((t (:inherit (modus-theme-heading-1) |
2379 | :height 1.0)))) | 2404 | :height 1.0)))) |
2380 | (doremi-face-set 'elpher-gemini-heading2 | 2405 | (doremi-face-set 'elpher-gemini-heading2 |
2381 | '((t (:inherit (modus-theme-heading-2) | 2406 | '((t (:inherit (modus-theme-heading-2) |
2382 | :height 1.0)))) | 2407 | :height 1.0)))) |
2383 | (doremi-face-set 'elpher-gemini-heading3 | 2408 | (doremi-face-set 'elpher-gemini-heading3 |
2384 | '((t (:inherit (modus-theme-heading-3) | 2409 | '((t (:inherit (modus-theme-heading-3) |
2385 | :height 1.0)))) | 2410 | :height 1.0)))) |
2386 | #+end_src | 2411 | #+end_src |
2387 | 2412 | ||
2388 | #+begin_src emacs-lisp :noweb-ref no-littering | 2413 | #+begin_src emacs-lisp :noweb-ref no-littering |
2389 | (setq-default elpher-certificate-directory | 2414 | (setq-default elpher-certificate-directory |
2390 | (no-littering-expand-var-file-name | 2415 | (no-littering-expand-var-file-name |
2391 | "elpher-certificates/")) | 2416 | "elpher-certificates/")) |
2392 | #+end_src | 2417 | #+end_src |
2393 | 2418 | ||
2394 | #+begin_src emacs-lisp :noweb-ref bindings | 2419 | #+begin_src emacs-lisp :noweb-ref bindings |
@@ -2407,28 +2432,28 @@ others. | |||
2407 | 2432 | ||
2408 | #+begin_src emacs-lisp :noweb-ref packages | 2433 | #+begin_src emacs-lisp :noweb-ref packages |
2409 | (straight-use-package '(gemini-mode | 2434 | (straight-use-package '(gemini-mode |
2410 | :repo "https://git.carcosa.net/jmcbray/gemini.el.git")) | 2435 | :repo "https://git.carcosa.net/jmcbray/gemini.el.git")) |
2411 | #+end_src | 2436 | #+end_src |
2412 | 2437 | ||
2413 | #+begin_src emacs-lisp :noweb-ref settings | 2438 | #+begin_src emacs-lisp :noweb-ref settings |
2414 | (add-to-list 'auto-mode-alist | 2439 | (add-to-list 'auto-mode-alist |
2415 | '("\\.\\(gemini\\|gmi\\)\\'" . gemini-mode)) | 2440 | '("\\.\\(gemini\\|gmi\\)\\'" . gemini-mode)) |
2416 | 2441 | ||
2417 | (doremi-face-set 'gemini-heading-face-1 | 2442 | (doremi-face-set 'gemini-heading-face-1 |
2418 | '((t (:inherit (elpher-gemini-heading1))))) | 2443 | '((t (:inherit (elpher-gemini-heading1))))) |
2419 | (doremi-face-set 'gemini-heading-face2 | 2444 | (doremi-face-set 'gemini-heading-face2 |
2420 | '((t (:inherit (elpher-gemini-heading2))))) | 2445 | '((t (:inherit (elpher-gemini-heading2))))) |
2421 | (doremi-face-set 'gemini-heading-face3 | 2446 | (doremi-face-set 'gemini-heading-face3 |
2422 | '((t (:inherit (elpher-gemini-heading3))))) | 2447 | '((t (:inherit (elpher-gemini-heading3))))) |
2423 | #+end_src | 2448 | #+end_src |
2424 | 2449 | ||
2425 | *** Gemini-write :package: | 2450 | *** Gemini-write :package: |
2426 | 2451 | ||
2427 | #+begin_src emacs-lisp :noweb-ref packages | 2452 | #+begin_src emacs-lisp :noweb-ref packages |
2428 | (straight-use-package '(gemini-write | 2453 | (straight-use-package '(gemini-write |
2429 | :repo "https://alexschroeder.ch/cgit/gemini-write" | 2454 | :repo "https://alexschroeder.ch/cgit/gemini-write" |
2430 | :fork (:repo "https://tildegit.org/acdw/gemini-write" | 2455 | :fork (:repo "https://tildegit.org/acdw/gemini-write" |
2431 | :branch "main"))) | 2456 | :branch "main"))) |
2432 | 2457 | ||
2433 | (with-eval-after-load 'elpher | 2458 | (with-eval-after-load 'elpher |
2434 | (require 'gemini-write)) | 2459 | (require 'gemini-write)) |
@@ -2448,7 +2473,7 @@ one day. | |||
2448 | "Start an `eshell', or bury its buffer if focused." | 2473 | "Start an `eshell', or bury its buffer if focused." |
2449 | (interactive) | 2474 | (interactive) |
2450 | (if (string= (buffer-name) "*eshell*") ;; XXX: brittle | 2475 | (if (string= (buffer-name) "*eshell*") ;; XXX: brittle |
2451 | (bury-buffer) | 2476 | (bury-buffer) |
2452 | (eshell))) | 2477 | (eshell))) |
2453 | #+end_src | 2478 | #+end_src |
2454 | 2479 | ||
@@ -2526,10 +2551,10 @@ I want to use the newest version of Org that I can. | |||
2526 | (defun acdw/org-mode-prettify () | 2551 | (defun acdw/org-mode-prettify () |
2527 | "Prettify `org-mode'." | 2552 | "Prettify `org-mode'." |
2528 | (dolist (cell '(("[ ]" . ?☐) ("[X]" . ?☑) ("[-]" . ?◐) | 2553 | (dolist (cell '(("[ ]" . ?☐) ("[X]" . ?☑) ("[-]" . ?◐) |
2529 | ("#+BEGIN_SRC" . ?✎) ("#+begin_src" . ?✎) | 2554 | ("#+BEGIN_SRC" . ?✎) ("#+begin_src" . ?✎) |
2530 | ("#+BEGIN_QUOTE" . ?❝) ("#+begin_quote" . ?❝) | 2555 | ("#+BEGIN_QUOTE" . ?❝) ("#+begin_quote" . ?❝) |
2531 | ("#+END_QUOTE" . ?❞) ("#+end_quote" . ?❞) | 2556 | ("#+END_QUOTE" . ?❞) ("#+end_quote" . ?❞) |
2532 | ("#+END_SRC" . ?■) ("#+end_src" . ?■))) | 2557 | ("#+END_SRC" . ?■) ("#+end_src" . ?■))) |
2533 | (add-to-list 'prettify-symbols-alist cell :append)) | 2558 | (add-to-list 'prettify-symbols-alist cell :append)) |
2534 | (prettify-symbols-mode +1)) | 2559 | (prettify-symbols-mode +1)) |
2535 | #+end_src | 2560 | #+end_src |
@@ -2545,23 +2570,23 @@ from [[https://github.com/KaratasFurkan/.emacs.d#org-1][Furkan Karataş]]. | |||
2545 | #+begin_src emacs-lisp :noweb-ref modes | 2570 | #+begin_src emacs-lisp :noweb-ref modes |
2546 | (with-eval-after-load 'org | 2571 | (with-eval-after-load 'org |
2547 | (font-lock-add-keywords 'org-mode | 2572 | (font-lock-add-keywords 'org-mode |
2548 | '(("^ *\\([-]\\) " | 2573 | '(("^ *\\([-]\\) " |
2549 | (0 (prog1 () | 2574 | (0 (prog1 () |
2550 | (compose-region (match-beginning 1) (match-end 1) "•")))))) | 2575 | (compose-region (match-beginning 1) (match-end 1) "•")))))) |
2551 | (font-lock-add-keywords 'org-mode | 2576 | (font-lock-add-keywords 'org-mode |
2552 | '(("^ *\\([+]\\) " | 2577 | '(("^ *\\([+]\\) " |
2553 | (0 (prog1 () | 2578 | (0 (prog1 () |
2554 | (compose-region (match-beginning 1) (match-end 1) "◦")))))) | 2579 | (compose-region (match-beginning 1) (match-end 1) "◦")))))) |
2555 | 2580 | ||
2556 | (defface org-checkbox-done-text | 2581 | (defface org-checkbox-done-text |
2557 | '((t (:inherit 'font-lock-comment-face :slant normal))) | 2582 | '((t (:inherit 'font-lock-comment-face :slant normal))) |
2558 | "Face for the text part of a checked org-mode checkbox." | 2583 | "Face for the text part of a checked org-mode checkbox." |
2559 | :group 'org) | 2584 | :group 'org) |
2560 | 2585 | ||
2561 | (font-lock-add-keywords | 2586 | (font-lock-add-keywords |
2562 | 'org-mode | 2587 | 'org-mode |
2563 | `(("^[ \t]*\\(?:[-+*]\\|[0-9]+[).]\\)[ \t]+\\(\\(?:\\[@\\(?:start:\\)?[0-9]+\\][ \t]*\\)?\\[\\(?:X\\|\\([0-9]+\\)/\\2\\)\\][^\n]*\n\\)" | 2588 | `(("^[ \t]*\\(?:[-+*]\\|[0-9]+[).]\\)[ \t]+\\(\\(?:\\[@\\(?:start:\\)?[0-9]+\\][ \t]*\\)?\\[\\(?:X\\|\\([0-9]+\\)/\\2\\)\\][^\n]*\n\\)" |
2564 | 1 'org-checkbox-done-text prepend)) | 2589 | 1 'org-checkbox-done-text prepend)) |
2565 | 'append)) | 2590 | 'append)) |
2566 | #+end_src | 2591 | #+end_src |
2567 | 2592 | ||
@@ -2569,14 +2594,14 @@ from [[https://github.com/KaratasFurkan/.emacs.d#org-1][Furkan Karataş]]. | |||
2569 | 2594 | ||
2570 | #+begin_src emacs-lisp :noweb-ref packages | 2595 | #+begin_src emacs-lisp :noweb-ref packages |
2571 | (straight-use-package '(org-appear | 2596 | (straight-use-package '(org-appear |
2572 | :host github | 2597 | :host github |
2573 | :repo "awth13/org-appear")) | 2598 | :repo "awth13/org-appear")) |
2574 | #+end_src | 2599 | #+end_src |
2575 | 2600 | ||
2576 | #+begin_src emacs-lisp :noweb-ref settings | 2601 | #+begin_src emacs-lisp :noweb-ref settings |
2577 | (setq-default org-appear-autoemphasis t | 2602 | (setq-default org-appear-autoemphasis t |
2578 | org-appear-autolinks nil | 2603 | org-appear-autolinks nil |
2579 | org-appear-autosubmarkers t) | 2604 | org-appear-autosubmarkers t) |
2580 | #+end_src | 2605 | #+end_src |
2581 | 2606 | ||
2582 | #+begin_src emacs-lisp :noweb-ref hooks | 2607 | #+begin_src emacs-lisp :noweb-ref hooks |
@@ -2588,16 +2613,16 @@ from [[https://github.com/KaratasFurkan/.emacs.d#org-1][Furkan Karataş]]. | |||
2588 | #+begin_src emacs-lisp :noweb-ref settings | 2613 | #+begin_src emacs-lisp :noweb-ref settings |
2589 | (with-eval-after-load 'org-tempo | 2614 | (with-eval-after-load 'org-tempo |
2590 | (dolist (cell '(("el" . "src emacs-lisp") | 2615 | (dolist (cell '(("el" . "src emacs-lisp") |
2591 | ("cr" . "src emacs-lisp :noweb-ref requires") | 2616 | ("cr" . "src emacs-lisp :noweb-ref requires") |
2592 | ("cf" . "src emacs-lisp :noweb-ref functions") | 2617 | ("cf" . "src emacs-lisp :noweb-ref functions") |
2593 | ("cs" . "src emacs-lisp :noweb-ref settings") | 2618 | ("cs" . "src emacs-lisp :noweb-ref settings") |
2594 | ("cm" . "src emacs-lisp :noweb-ref modes") | 2619 | ("cm" . "src emacs-lisp :noweb-ref modes") |
2595 | ("cl" . "src emacs-lisp :noweb-ref linux-specific") | 2620 | ("cl" . "src emacs-lisp :noweb-ref linux-specific") |
2596 | ("cw" . "src emacs-lisp :noweb-ref windows-specific") | 2621 | ("cw" . "src emacs-lisp :noweb-ref windows-specific") |
2597 | ("cp" . "src emacs-lisp :noweb-ref packages") | 2622 | ("cp" . "src emacs-lisp :noweb-ref packages") |
2598 | ("ch" . "src emacs-lisp :noweb-ref hooks") | 2623 | ("ch" . "src emacs-lisp :noweb-ref hooks") |
2599 | ("cb" . "src emacs-lisp :noweb-ref bindings") | 2624 | ("cb" . "src emacs-lisp :noweb-ref bindings") |
2600 | ("cnl" . "src emacs-lisp :noweb-ref no-littering"))) | 2625 | ("cnl" . "src emacs-lisp :noweb-ref no-littering"))) |
2601 | (add-to-list 'org-structure-template-alist cell))) | 2626 | (add-to-list 'org-structure-template-alist cell))) |
2602 | #+end_src | 2627 | #+end_src |
2603 | 2628 | ||
@@ -2611,7 +2636,7 @@ from [[https://github.com/KaratasFurkan/.emacs.d#org-1][Furkan Karataş]]. | |||
2611 | ;; MAYBE: Use `org-element-lineage'. | 2636 | ;; MAYBE: Use `org-element-lineage'. |
2612 | (when-let* ((parent (org-element-property :parent element))) | 2637 | (when-let* ((parent (org-element-property :parent element))) |
2613 | (or (eq type (car parent)) | 2638 | (or (eq type (car parent)) |
2614 | (unpackaged/org-element-descendant-of type parent)))) | 2639 | (unpackaged/org-element-descendant-of type parent)))) |
2615 | 2640 | ||
2616 | (defun unpackaged/org-return-dwim (&optional default) | 2641 | (defun unpackaged/org-return-dwim (&optional default) |
2617 | "A helpful replacement for `org-return'. With prefix, call `org-return'. | 2642 | "A helpful replacement for `org-return'. With prefix, call `org-return'. |
@@ -2623,94 +2648,94 @@ from [[https://github.com/KaratasFurkan/.emacs.d#org-1][Furkan Karataş]]. | |||
2623 | ;; http://kitchingroup.cheme.cmu.edu/blog/2017/04/09/A-better-return-in-org-mode/ | 2648 | ;; http://kitchingroup.cheme.cmu.edu/blog/2017/04/09/A-better-return-in-org-mode/ |
2624 | (interactive "P") | 2649 | (interactive "P") |
2625 | (if default | 2650 | (if default |
2626 | (org-return) | 2651 | (org-return) |
2627 | (cond | 2652 | (cond |
2628 | ;; Act depending on context around point. | 2653 | ;; Act depending on context around point. |
2629 | 2654 | ||
2630 | ;; NOTE: I prefer RET to not follow links, but by uncommenting | 2655 | ;; NOTE: I prefer RET to not follow links, but by uncommenting |
2631 | ;; this block, links will be followed. | 2656 | ;; this block, links will be followed. |
2632 | ;; FURTHER NOTE: Ideally, I would follow links unless point | 2657 | ;; FURTHER NOTE: Ideally, I would follow links unless point |
2633 | ;; /appeared/ to be at the end of the line (even if it's still | 2658 | ;; /appeared/ to be at the end of the line (even if it's still |
2634 | ;; inside the link) -- when it would do `org-return'. That | 2659 | ;; inside the link) -- when it would do `org-return'. That |
2635 | ;; would take some /doing/, however. | 2660 | ;; would take some /doing/, however. |
2636 | 2661 | ||
2637 | ;; ((eq 'link (car (org-element-context))) | 2662 | ;; ((eq 'link (car (org-element-context))) |
2638 | ;; ;; Link: Open it. | 2663 | ;; ;; Link: Open it. |
2639 | ;; (org-open-at-point-global)) | 2664 | ;; (org-open-at-point-global)) |
2640 | 2665 | ||
2641 | ((org-at-heading-p) | 2666 | ((org-at-heading-p) |
2642 | ;; Heading: Move to position after entry content. | 2667 | ;; Heading: Move to position after entry content. |
2643 | ;; NOTE: This is probably the most interesting feature of this function. | 2668 | ;; NOTE: This is probably the most interesting feature of this function. |
2644 | (let ((heading-start (org-entry-beginning-position))) | 2669 | (let ((heading-start (org-entry-beginning-position))) |
2645 | (goto-char (org-entry-end-position)) | 2670 | (goto-char (org-entry-end-position)) |
2646 | (cond ((and (org-at-heading-p) | 2671 | (cond ((and (org-at-heading-p) |
2647 | (= heading-start (org-entry-beginning-position))) | 2672 | (= heading-start (org-entry-beginning-position))) |
2648 | ;; Entry ends on its heading; add newline after | 2673 | ;; Entry ends on its heading; add newline after |
2649 | (end-of-line) | 2674 | (end-of-line) |
2650 | (insert "\n\n")) | 2675 | (insert "\n\n")) |
2651 | (t | 2676 | (t |
2652 | ;; Entry ends after its heading; back up | 2677 | ;; Entry ends after its heading; back up |
2653 | (forward-line -1) | 2678 | (forward-line -1) |
2654 | (end-of-line) | 2679 | (end-of-line) |
2655 | (when (org-at-heading-p) | 2680 | (when (org-at-heading-p) |
2656 | ;; At the same heading | 2681 | ;; At the same heading |
2657 | (forward-line) | 2682 | (forward-line) |
2658 | (insert "\n") | 2683 | (insert "\n") |
2659 | (forward-line -1)) | 2684 | (forward-line -1)) |
2660 | ;; FIXME: looking-back is supposed to be called with | 2685 | ;; FIXME: looking-back is supposed to be called with |
2661 | ;; more arguments. | 2686 | ;; more arguments. |
2662 | (while (not (looking-back (rx | 2687 | (while (not (looking-back (rx |
2663 | (repeat 3 | 2688 | (repeat 3 |
2664 | (seq (optional blank) | 2689 | (seq (optional blank) |
2665 | "\n"))) | 2690 | "\n"))) |
2666 | nil)) | 2691 | nil)) |
2667 | (insert "\n")) | 2692 | (insert "\n")) |
2668 | (forward-line -1))))) | 2693 | (forward-line -1))))) |
2669 | 2694 | ||
2670 | ((org-at-item-checkbox-p) | 2695 | ((org-at-item-checkbox-p) |
2671 | ;; Checkbox: Insert new item with checkbox. | 2696 | ;; Checkbox: Insert new item with checkbox. |
2672 | (org-insert-todo-heading nil)) | 2697 | (org-insert-todo-heading nil)) |
2673 | 2698 | ||
2674 | ((org-in-item-p) | 2699 | ((org-in-item-p) |
2675 | ;; Plain list. Yes, this gets a little complicated... | 2700 | ;; Plain list. Yes, this gets a little complicated... |
2676 | (let ((context (org-element-context))) | 2701 | (let ((context (org-element-context))) |
2677 | (if (or (eq 'plain-list (car context)) ; First item in list | 2702 | (if (or (eq 'plain-list (car context)) ; First item in list |
2678 | (and (eq 'item (car context)) | 2703 | (and (eq 'item (car context)) |
2679 | (not (eq (org-element-property :contents-begin context) | 2704 | (not (eq (org-element-property :contents-begin context) |
2680 | (org-element-property :contents-end context)))) | 2705 | (org-element-property :contents-end context)))) |
2681 | ;; Element in list item, e.g. a link | 2706 | ;; Element in list item, e.g. a link |
2682 | (unpackaged/org-element-descendant-of 'item context)) | 2707 | (unpackaged/org-element-descendant-of 'item context)) |
2683 | ;; Non-empty item: Add new item. | 2708 | ;; Non-empty item: Add new item. |
2684 | (org-insert-item) | 2709 | (org-insert-item) |
2685 | ;; Empty item: Close the list. | 2710 | ;; Empty item: Close the list. |
2686 | ;; TODO: Do this with org functions rather than operating | 2711 | ;; TODO: Do this with org functions rather than operating |
2687 | ;; on the text. Can't seem to find the right function. | 2712 | ;; on the text. Can't seem to find the right function. |
2688 | (delete-region (line-beginning-position) (line-end-position)) | 2713 | (delete-region (line-beginning-position) (line-end-position)) |
2689 | (insert "\n")))) | 2714 | (insert "\n")))) |
2690 | 2715 | ||
2691 | ((when (fboundp 'org-inlinetask-in-task-p) | 2716 | ((when (fboundp 'org-inlinetask-in-task-p) |
2692 | (org-inlinetask-in-task-p)) | 2717 | (org-inlinetask-in-task-p)) |
2693 | ;; Inline task: Don't insert a new heading. | 2718 | ;; Inline task: Don't insert a new heading. |
2694 | (org-return)) | 2719 | (org-return)) |
2695 | 2720 | ||
2696 | ((org-at-table-p) | 2721 | ((org-at-table-p) |
2697 | (cond ((save-excursion | 2722 | (cond ((save-excursion |
2698 | (beginning-of-line) | 2723 | (beginning-of-line) |
2699 | ;; See `org-table-next-field'. | 2724 | ;; See `org-table-next-field'. |
2700 | (cl-loop with end = (line-end-position) | 2725 | (cl-loop with end = (line-end-position) |
2701 | for cell = (org-element-table-cell-parser) | 2726 | for cell = (org-element-table-cell-parser) |
2702 | always (equal (org-element-property :contents-begin cell) | 2727 | always (equal (org-element-property :contents-begin cell) |
2703 | (org-element-property :contents-end cell)) | 2728 | (org-element-property :contents-end cell)) |
2704 | while (re-search-forward "|" end t))) | 2729 | while (re-search-forward "|" end t))) |
2705 | ;; Empty row: end the table. | 2730 | ;; Empty row: end the table. |
2706 | (delete-region (line-beginning-position) (line-end-position)) | 2731 | (delete-region (line-beginning-position) (line-end-position)) |
2707 | (org-return)) | 2732 | (org-return)) |
2708 | (t | 2733 | (t |
2709 | ;; Non-empty row: call `org-return'. | 2734 | ;; Non-empty row: call `org-return'. |
2710 | (org-return)))) | 2735 | (org-return)))) |
2711 | (t | 2736 | (t |
2712 | ;; All other cases: call `org-return'. | 2737 | ;; All other cases: call `org-return'. |
2713 | (org-return))))) | 2738 | (org-return))))) |
2714 | #+end_src | 2739 | #+end_src |
2715 | 2740 | ||
2716 | #+begin_src emacs-lisp :noweb-ref bindings | 2741 | #+begin_src emacs-lisp :noweb-ref bindings |
@@ -2727,34 +2752,34 @@ from [[https://github.com/KaratasFurkan/.emacs.d#org-1][Furkan Karataş]]. | |||
2727 | exist after each headings's drawers." | 2752 | exist after each headings's drawers." |
2728 | (interactive "P") | 2753 | (interactive "P") |
2729 | (org-map-entries (lambda () | 2754 | (org-map-entries (lambda () |
2730 | (org-with-wide-buffer | 2755 | (org-with-wide-buffer |
2731 | ;; `org-map-entries' narrows the buffer, which prevents us | 2756 | ;; `org-map-entries' narrows the buffer, which prevents us |
2732 | ;; from seeing newlines before the current heading, so we | 2757 | ;; from seeing newlines before the current heading, so we |
2733 | ;; do this part widened. | 2758 | ;; do this part widened. |
2734 | (while (not (looking-back "\n\n" nil)) | 2759 | (while (not (looking-back "\n\n" nil)) |
2735 | ;; Insert blank lines before heading. | 2760 | ;; Insert blank lines before heading. |
2736 | (insert "\n"))) | 2761 | (insert "\n"))) |
2737 | (let ((end (org-entry-end-position))) | 2762 | (let ((end (org-entry-end-position))) |
2738 | ;; Insert blank lines before entry content | 2763 | ;; Insert blank lines before entry content |
2739 | (forward-line) | 2764 | (forward-line) |
2740 | (while (and (org-at-planning-p) | 2765 | (while (and (org-at-planning-p) |
2741 | (< (point) (point-max))) | 2766 | (< (point) (point-max))) |
2742 | ;; Skip planning lines | 2767 | ;; Skip planning lines |
2743 | (forward-line)) | 2768 | (forward-line)) |
2744 | (while (re-search-forward org-drawer-regexp end t) | 2769 | (while (re-search-forward org-drawer-regexp end t) |
2745 | ;; Skip drawers. You might think that `org-at-drawer-p' | 2770 | ;; Skip drawers. You might think that `org-at-drawer-p' |
2746 | ;; would suffice, but for some reason it doesn't work | 2771 | ;; would suffice, but for some reason it doesn't work |
2747 | ;; correctly when operating on hidden text. This | 2772 | ;; correctly when operating on hidden text. This |
2748 | ;; works, taken from `org-agenda-get-some-entry-text'. | 2773 | ;; works, taken from `org-agenda-get-some-entry-text'. |
2749 | (re-search-forward "^[ \t]*:END:.*\n?" end t) | 2774 | (re-search-forward "^[ \t]*:END:.*\n?" end t) |
2750 | (goto-char (match-end 0))) | 2775 | (goto-char (match-end 0))) |
2751 | (unless (or (= (point) (point-max)) | 2776 | (unless (or (= (point) (point-max)) |
2752 | (org-at-heading-p) | 2777 | (org-at-heading-p) |
2753 | (looking-at-p "\n")) | 2778 | (looking-at-p "\n")) |
2754 | (insert "\n")))) | 2779 | (insert "\n")))) |
2755 | t (if prefix | 2780 | t (if prefix |
2756 | nil | 2781 | nil |
2757 | 'tree))) | 2782 | 'tree))) |
2758 | #+end_src | 2783 | #+end_src |
2759 | 2784 | ||
2760 | I fix the headline spacing every time I save. | 2785 | I fix the headline spacing every time I save. |
@@ -2763,7 +2788,7 @@ I fix the headline spacing every time I save. | |||
2763 | (defun hook--org-mode-fix-blank-lines () | 2788 | (defun hook--org-mode-fix-blank-lines () |
2764 | (when (eq major-mode 'org-mode) | 2789 | (when (eq major-mode 'org-mode) |
2765 | (let ((current-prefix-arg 4)) ; Emulate C-u | 2790 | (let ((current-prefix-arg 4)) ; Emulate C-u |
2766 | (call-interactively 'unpackaged/org-fix-blank-lines)))) | 2791 | (call-interactively 'unpackaged/org-fix-blank-lines)))) |
2767 | 2792 | ||
2768 | (add-hook 'before-save-hook #'hook--org-mode-fix-blank-lines) | 2793 | (add-hook 'before-save-hook #'hook--org-mode-fix-blank-lines) |
2769 | #+end_src | 2794 | #+end_src |
@@ -2780,19 +2805,19 @@ Inspo: | |||
2780 | 2805 | ||
2781 | #+begin_src emacs-lisp :noweb-ref settings | 2806 | #+begin_src emacs-lisp :noweb-ref settings |
2782 | (setq-default org-agenda-files ; look for files in ~/org | 2807 | (setq-default org-agenda-files ; look for files in ~/org |
2783 | (list org-directory) | 2808 | (list org-directory) |
2784 | ;; agenda | 2809 | ;; agenda |
2785 | org-agenda-span 5 | 2810 | org-agenda-span 5 |
2786 | org-agenda-skip-scheduled-if-done t | 2811 | org-agenda-skip-scheduled-if-done t |
2787 | org-agenda-skip-deadline-if-done t | 2812 | org-agenda-skip-deadline-if-done t |
2788 | org-deadline-warning-days 2 | 2813 | org-deadline-warning-days 2 |
2789 | ;; logging | 2814 | ;; logging |
2790 | org-log-into-drawer "LOGBOOK" | 2815 | org-log-into-drawer "LOGBOOK" |
2791 | org-log-done t | 2816 | org-log-done t |
2792 | ;; archive | 2817 | ;; archive |
2793 | org-archive-location (concat (expand-file-name ".archive.org" | 2818 | org-archive-location (concat (expand-file-name ".archive.org" |
2794 | org-directory) | 2819 | org-directory) |
2795 | "::")) | 2820 | "::")) |
2796 | #+end_src | 2821 | #+end_src |
2797 | 2822 | ||
2798 | #+begin_src emacs-lisp :noweb-ref bindings | 2823 | #+begin_src emacs-lisp :noweb-ref bindings |
@@ -2841,12 +2866,12 @@ altogether. Hm. | |||
2841 | 2866 | ||
2842 | #+begin_src emacs-lisp :noweb-ref settings | 2867 | #+begin_src emacs-lisp :noweb-ref settings |
2843 | (setq-default org-todo-keywords | 2868 | (setq-default org-todo-keywords |
2844 | '((sequence | 2869 | '((sequence |
2845 | "TODO(t)" "STARTED(s)" | 2870 | "TODO(t)" "STARTED(s)" |
2846 | "WAITING(w@/!)" "SOMEDAY(.)" | 2871 | "WAITING(w@/!)" "SOMEDAY(.)" |
2847 | "|" "DONE(x!)" "CANCELLED(c@/!)") | 2872 | "|" "DONE(x!)" "CANCELLED(c@/!)") |
2848 | (sequence "RECUR(r)" "|" "DONE(x!)") | 2873 | (sequence "RECUR(r)" "|" "DONE(x!)") |
2849 | (sequence "MEETING(m)"))) | 2874 | (sequence "MEETING(m)"))) |
2850 | #+end_src | 2875 | #+end_src |
2851 | 2876 | ||
2852 | ** Org Capture | 2877 | ** Org Capture |
@@ -2871,29 +2896,29 @@ TODO, and Diary. | |||
2871 | org-capture-templates | 2896 | org-capture-templates |
2872 | `(;; Todo -- these go to the Inbox for further processing | 2897 | `(;; Todo -- these go to the Inbox for further processing |
2873 | ("t" "Quick Task" entry | 2898 | ("t" "Quick Task" entry |
2874 | (file ,acdw/org-inbox-file) | 2899 | (file ,acdw/org-inbox-file) |
2875 | "* TODO %^{Task}\n" | 2900 | "* TODO %^{Task}\n" |
2876 | :immediate-finish t) | 2901 | :immediate-finish t) |
2877 | ("T" "Task" entry | 2902 | ("T" "Task" entry |
2878 | (file ,acdw/org-inbox-file) | 2903 | (file ,acdw/org-inbox-file) |
2879 | "* TODO %^{Task}\n") | 2904 | "* TODO %^{Task}\n") |
2880 | ("." "Today" entry | 2905 | ("." "Today" entry |
2881 | (file ,acdw/org-inbox-file) | 2906 | (file ,acdw/org-inbox-file) |
2882 | "* TODO %^{Task}\nSCHEDULED: %t\n" | 2907 | "* TODO %^{Task}\nSCHEDULED: %t\n" |
2883 | :immediate-finish t) | 2908 | :immediate-finish t) |
2884 | ;; Meetings | 2909 | ;; Meetings |
2885 | ("m" "Meeting" entry | 2910 | ("m" "Meeting" entry |
2886 | (file ,acdw/org-inbox-file) | 2911 | (file ,acdw/org-inbox-file) |
2887 | "* MEETING %^{Meeting}\n%^T\n\n%?") | 2912 | "* MEETING %^{Meeting}\n%^T\n\n%?") |
2888 | ;; Diary -- for the special Diary file | 2913 | ;; Diary -- for the special Diary file |
2889 | ("j" "Diary entry" entry | 2914 | ("j" "Diary entry" entry |
2890 | (file+olp+datetree ,acdw/org-diary-file) | 2915 | (file+olp+datetree ,acdw/org-diary-file) |
2891 | "* %U\n\n%?" | 2916 | "* %U\n\n%?" |
2892 | :empty-lines 1) | 2917 | :empty-lines 1) |
2893 | ;; Books to read | 2918 | ;; Books to read |
2894 | ("b" "Book to read" entry | 2919 | ("b" "Book to read" entry |
2895 | (file+headline "books.org" "Later") | 2920 | (file+headline "books.org" "Later") |
2896 | "* TOREAD %^{Title} | 2921 | "* TOREAD %^{Title} |
2897 | :PROPERTIES: | 2922 | :PROPERTIES: |
2898 | :Author: %^{Author} | 2923 | :Author: %^{Author} |
2899 | :END:\n" :immediate-finish t))) | 2924 | :END:\n" :immediate-finish t))) |
@@ -2939,23 +2964,23 @@ any data loss. Here's what all that looks like. | |||
2939 | #+begin_src emacs-lisp | 2964 | #+begin_src emacs-lisp |
2940 | (let ((win-app-dir "~/Applications")) | 2965 | (let ((win-app-dir "~/Applications")) |
2941 | (dolist (path (list | 2966 | (dolist (path (list |
2942 | ;; Windows | 2967 | ;; Windows |
2943 | (expand-file-name "exe" win-app-dir) | 2968 | (expand-file-name "exe" win-app-dir) |
2944 | (expand-file-name "exe/bin" win-app-dir) | 2969 | (expand-file-name "exe/bin" win-app-dir) |
2945 | (expand-file-name "Git/bin" win-app-dir) | 2970 | (expand-file-name "Git/bin" win-app-dir) |
2946 | (expand-file-name "Git/usr/bin" win-app-dir) | 2971 | (expand-file-name "Git/usr/bin" win-app-dir) |
2947 | (expand-file-name "Git/mingw64/bin" win-app-dir) | 2972 | (expand-file-name "Git/mingw64/bin" win-app-dir) |
2948 | (expand-file-name "Everything" win-app-dir) | 2973 | (expand-file-name "Everything" win-app-dir) |
2949 | (expand-file-name "Win-builds/bin" win-app-dir) | 2974 | (expand-file-name "Win-builds/bin" win-app-dir) |
2950 | (expand-file-name "Z/bin" win-app-dir) | 2975 | (expand-file-name "Z/bin" win-app-dir) |
2951 | ;; Linux | 2976 | ;; Linux |
2952 | (expand-file-name "bin" user-emacs-directory) | 2977 | (expand-file-name "bin" user-emacs-directory) |
2953 | (expand-file-name "~/bin") | 2978 | (expand-file-name "~/bin") |
2954 | (expand-file-name "~/.local/bin") | 2979 | (expand-file-name "~/.local/bin") |
2955 | (expand-file-name "~/Scripts") | 2980 | (expand-file-name "~/Scripts") |
2956 | )) | 2981 | )) |
2957 | (when (file-exists-p path) | 2982 | (when (file-exists-p path) |
2958 | (add-to-list 'exec-path path :append)))) | 2983 | (add-to-list 'exec-path path :append)))) |
2959 | 2984 | ||
2960 | ;; Set $PATH | 2985 | ;; Set $PATH |
2961 | (setenv "PATH" (mapconcat #'identity exec-path path-separator)) | 2986 | (setenv "PATH" (mapconcat #'identity exec-path path-separator)) |
@@ -2984,19 +3009,19 @@ function so I can call it in another wrapper. | |||
2984 | "Bootstrap straight.el." | 3009 | "Bootstrap straight.el." |
2985 | (defvar bootstrap-version) | 3010 | (defvar bootstrap-version) |
2986 | (let ((bootstrap-file | 3011 | (let ((bootstrap-file |
2987 | (expand-file-name | 3012 | (expand-file-name |
2988 | "straight/repos/straight.el/bootstrap.el" | 3013 | "straight/repos/straight.el/bootstrap.el" |
2989 | user-emacs-directory)) | 3014 | user-emacs-directory)) |
2990 | (bootstrap-version 5)) | 3015 | (bootstrap-version 5)) |
2991 | (unless (file-exists-p bootstrap-file) | 3016 | (unless (file-exists-p bootstrap-file) |
2992 | (with-current-buffer | 3017 | (with-current-buffer |
2993 | (url-retrieve-synchronously | 3018 | (url-retrieve-synchronously |
2994 | (concat | 3019 | (concat |
2995 | "https://raw.githubusercontent.com/" | 3020 | "https://raw.githubusercontent.com/" |
2996 | "raxod502/straight.el/develop/install.el") | 3021 | "raxod502/straight.el/develop/install.el") |
2997 | 'silent 'inhibit-cookies) | 3022 | 'silent 'inhibit-cookies) |
2998 | (goto-char (point-max)) | 3023 | (goto-char (point-max)) |
2999 | (eval-print-last-sexp))) | 3024 | (eval-print-last-sexp))) |
3000 | (load bootstrap-file nil 'nomessage))) | 3025 | (load bootstrap-file nil 'nomessage))) |
3001 | #+end_src | 3026 | #+end_src |
3002 | 3027 | ||
@@ -3008,22 +3033,22 @@ the repo using git, /then/ run the bootstrap code. | |||
3008 | (when (executable-find "git") | 3033 | (when (executable-find "git") |
3009 | (unless (ignore-errors (acdw/bootstrap-straight)) | 3034 | (unless (ignore-errors (acdw/bootstrap-straight)) |
3010 | (let ((msg "Straight.el didn't bootstrap correctly. Cloning directly")) | 3035 | (let ((msg "Straight.el didn't bootstrap correctly. Cloning directly")) |
3011 | (message "%s..." msg) | 3036 | (message "%s..." msg) |
3012 | (call-process "git" nil | 3037 | (call-process "git" nil |
3013 | (get-buffer-create "*bootstrap-straight-messages*") nil | 3038 | (get-buffer-create "*bootstrap-straight-messages*") nil |
3014 | "clone" | 3039 | "clone" |
3015 | "https://github.com/raxod502/straight.el" | 3040 | "https://github.com/raxod502/straight.el" |
3016 | (expand-file-name "straight/repos/straight.el" | 3041 | (expand-file-name "straight/repos/straight.el" |
3017 | user-emacs-directory)) | 3042 | user-emacs-directory)) |
3018 | (message "%s...Done." msg) | 3043 | (message "%s...Done." msg) |
3019 | (acdw/bootstrap-straight)))) | 3044 | (acdw/bootstrap-straight)))) |
3020 | #+end_src | 3045 | #+end_src |
3021 | 3046 | ||
3022 | ** Ignore =straight/build/= | 3047 | ** Ignore =straight/build/= |
3023 | 3048 | ||
3024 | #+begin_src emacs-lisp :noweb-ref settings | 3049 | #+begin_src emacs-lisp :noweb-ref settings |
3025 | (add-to-list 'recentf-exclude (expand-file-name "straight/build/" | 3050 | (add-to-list 'recentf-exclude (expand-file-name "straight/build/" |
3026 | user-emacs-directory)) | 3051 | user-emacs-directory)) |
3027 | #+end_src | 3052 | #+end_src |
3028 | 3053 | ||
3029 | * System integration | 3054 | * System integration |
@@ -3059,13 +3084,13 @@ This function require [[https://github.com/simonthum/git-sync][git-sync]]. | |||
3059 | (interactive) | 3084 | (interactive) |
3060 | (message "Git-Syncing %s..." directory) | 3085 | (message "Git-Syncing %s..." directory) |
3061 | (let ((proc (start-process "git-sync" | 3086 | (let ((proc (start-process "git-sync" |
3062 | (get-buffer-create (format "*git-sync:%s*" directory)) | 3087 | (get-buffer-create (format "*git-sync:%s*" directory)) |
3063 | "git" "-C" (expand-file-name directory) "sync"))) | 3088 | "git" "-C" (expand-file-name directory) "sync"))) |
3064 | (add-function :after (process-sentinel proc) | 3089 | (add-function :after (process-sentinel proc) |
3065 | (lambda (proc ev) | 3090 | (lambda (proc ev) |
3066 | (cond | 3091 | (cond |
3067 | ((string-match "finished\n\\'" ev) | 3092 | ((string-match "finished\n\\'" ev) |
3068 | (message "Git-Syncing %s...Done." directory))))))) | 3093 | (message "Git-Syncing %s...Done." directory))))))) |
3069 | #+end_src | 3094 | #+end_src |
3070 | 3095 | ||
3071 | **** ~/org | 3096 | **** ~/org |
@@ -3110,7 +3135,7 @@ machine git.example.com user acdw password hahayeahrightyamoroniwouldn'tgiveyout | |||
3110 | #+begin_src emacs-lisp :noweb-ref hooks | 3135 | #+begin_src emacs-lisp :noweb-ref hooks |
3111 | (autoload 'magit-process-password-auth-source "magit") | 3136 | (autoload 'magit-process-password-auth-source "magit") |
3112 | (add-hook 'magit-process-find-password-functions | 3137 | (add-hook 'magit-process-find-password-functions |
3113 | #'magit-process-password-auth-source) | 3138 | #'magit-process-password-auth-source) |
3114 | #+end_src | 3139 | #+end_src |
3115 | 3140 | ||
3116 | *** TRAMP | 3141 | *** TRAMP |
@@ -3131,9 +3156,9 @@ from [[https://github.com/grandfoobah/spartan-emacs/blob/master/spartan-layers/s | |||
3131 | 3156 | ||
3132 | #+begin_src emacs-lisp :noweb-ref settings | 3157 | #+begin_src emacs-lisp :noweb-ref settings |
3133 | (setq-default tramp-default-method "ssh" | 3158 | (setq-default tramp-default-method "ssh" |
3134 | tramp-copy-size-limit nil | 3159 | tramp-copy-size-limit nil |
3135 | tramp-use-ssh-controlmaster-options nil | 3160 | tramp-use-ssh-controlmaster-options nil |
3136 | tramp-default-remote-shell "/bin/bash") | 3161 | tramp-default-remote-shell "/bin/bash") |
3137 | #+end_src | 3162 | #+end_src |
3138 | 3163 | ||
3139 | ** Linux (home) | 3164 | ** Linux (home) |
@@ -3154,8 +3179,8 @@ your =$PATH= somewhere. | |||
3154 | 3179 | ||
3155 | #+begin_src sh :shebang "#!/bin/sh" :tangle (if (eq system-type 'gnu/linux) "~/bin/em" "") | 3180 | #+begin_src sh :shebang "#!/bin/sh" :tangle (if (eq system-type 'gnu/linux) "~/bin/em" "") |
3156 | if ! emacsclient -nc "$@"; then | 3181 | if ! emacsclient -nc "$@"; then |
3157 | emacs --daemon | 3182 | emacs --daemon |
3158 | emacsclient -nc "$@" | 3183 | emacsclient -nc "$@" |
3159 | fi | 3184 | fi |
3160 | #+end_src | 3185 | #+end_src |
3161 | 3186 | ||
@@ -3195,7 +3220,7 @@ section come from [[https://github.com/termitereform/JunkPile/blob/master/emacs- | |||
3195 | 3220 | ||
3196 | #+begin_src emacs-lisp :noweb-ref windows-specific | 3221 | #+begin_src emacs-lisp :noweb-ref windows-specific |
3197 | (setenv "DICPATH" (expand-file-name "exe/share/hunspell" | 3222 | (setenv "DICPATH" (expand-file-name "exe/share/hunspell" |
3198 | "~/Applications/")) | 3223 | "~/Applications/")) |
3199 | #+end_src | 3224 | #+end_src |
3200 | 3225 | ||
3201 | *** Settings | 3226 | *** Settings |
@@ -3207,13 +3232,13 @@ See also [[https://github.com/bbatsov/prelude/blob/master/core/prelude-windows.e | |||
3207 | 3232 | ||
3208 | #+begin_src emacs-lisp | 3233 | #+begin_src emacs-lisp |
3209 | (setq-default w32-allow-system-shell t ; enable cmd.exe as shell | 3234 | (setq-default w32-allow-system-shell t ; enable cmd.exe as shell |
3210 | ;; modifier keys | 3235 | ;; modifier keys |
3211 | w32-pass-lwindow-to-system nil | 3236 | w32-pass-lwindow-to-system nil |
3212 | w32-lwindow-modifier 'super | 3237 | w32-lwindow-modifier 'super |
3213 | w32-pass-rwindow-to-system nil | 3238 | w32-pass-rwindow-to-system nil |
3214 | w32-rwindow-modifier 'super | 3239 | w32-rwindow-modifier 'super |
3215 | w32-pass-apps-to-system nil | 3240 | w32-pass-apps-to-system nil |
3216 | w32-apps-modifier 'hyper) | 3241 | w32-apps-modifier 'hyper) |
3217 | #+end_src | 3242 | #+end_src |
3218 | 3243 | ||
3219 | *** Scripts | 3244 | *** Scripts |
@@ -3298,38 +3323,38 @@ have them all out of sync. | |||
3298 | #+begin_src gitconfig :tangle (if (eq system-type 'windows-nt) "~/.gitconfig" "") | 3323 | #+begin_src gitconfig :tangle (if (eq system-type 'windows-nt) "~/.gitconfig" "") |
3299 | # tangled from ~/.emacs.d/config.org | 3324 | # tangled from ~/.emacs.d/config.org |
3300 | [github] | 3325 | [github] |
3301 | user = duckwork | 3326 | user = duckwork |
3302 | [credential] | 3327 | [credential] |
3303 | helper = store | 3328 | helper = store |
3304 | [user] | 3329 | [user] |
3305 | name = Case Duckworth | 3330 | name = Case Duckworth |
3306 | email = acdw@acdw.net | 3331 | email = acdw@acdw.net |
3307 | [pull] | 3332 | [pull] |
3308 | rebase = false | 3333 | rebase = false |
3309 | [core] | 3334 | [core] |
3310 | excludesfile = ~/.gitignore | 3335 | excludesfile = ~/.gitignore |
3311 | attributesfile = ~/.gitattributes | 3336 | attributesfile = ~/.gitattributes |
3312 | autocrlf = false | 3337 | autocrlf = false |
3313 | eol = lf | 3338 | eol = lf |
3314 | [diff "lisp"] | 3339 | [diff "lisp"] |
3315 | # basic | 3340 | # basic |
3316 | #xfuncname = "^(\\(.*)$" | 3341 | #xfuncname = "^(\\(.*)$" |
3317 | # advanced | 3342 | # advanced |
3318 | xfuncname = "^(((;;;+ )|\\(|([ \t]+\\(((cl-|el-patch-)?def(un|var|macro|method|custom)|gb/))).*)$" | 3343 | xfuncname = "^(((;;;+ )|\\(|([ \t]+\\(((cl-|el-patch-)?def(un|var|macro|method|custom)|gb/))).*)$" |
3319 | [diff "org"] | 3344 | [diff "org"] |
3320 | xfuncname = "^(\\*+ +.*)$" | 3345 | xfuncname = "^(\\*+ +.*)$" |
3321 | 3346 | ||
3322 | [url "https://github.com/"] | 3347 | [url "https://github.com/"] |
3323 | insteadOf = gh: | 3348 | insteadOf = gh: |
3324 | pushInsteadOf = gh: | 3349 | pushInsteadOf = gh: |
3325 | 3350 | ||
3326 | [url "https://gitlab.com/"] | 3351 | [url "https://gitlab.com/"] |
3327 | insteadOf = gl: | 3352 | insteadOf = gl: |
3328 | pushInsteadOf = gl: | 3353 | pushInsteadOf = gl: |
3329 | 3354 | ||
3330 | [url "https://git.sr.ht/"] | 3355 | [url "https://git.sr.ht/"] |
3331 | insteadOf = sr: | 3356 | insteadOf = sr: |
3332 | pushInsteadOf = sr: | 3357 | pushInsteadOf = sr: |
3333 | #+end_src | 3358 | #+end_src |
3334 | 3359 | ||
3335 | * Appendices | 3360 | * Appendices |
@@ -3449,14 +3474,14 @@ Bind it to =C-z i= because =C-z C-c= is taken for capture. | |||
3449 | (let ((config (locate-user-emacs-file "config.org"))) | 3474 | (let ((config (locate-user-emacs-file "config.org"))) |
3450 | ;; tangle | 3475 | ;; tangle |
3451 | (with-current-buffer (find-file-noselect config) | 3476 | (with-current-buffer (find-file-noselect config) |
3452 | (message "Tangling config.org...") | 3477 | (message "Tangling config.org...") |
3453 | (let ((prog-mode-hook nil) | 3478 | (let ((prog-mode-hook nil) |
3454 | (inhibit-redisplay t) | 3479 | (inhibit-redisplay t) |
3455 | (inhibit-message t)) | 3480 | (inhibit-message t)) |
3456 | (add-to-list 'load-path (locate-user-emacs-file | 3481 | (add-to-list 'load-path (locate-user-emacs-file |
3457 | "straight/build/org/")) | 3482 | "straight/build/org/")) |
3458 | (require 'org) | 3483 | (require 'org) |
3459 | (org-babel-tangle))) | 3484 | (org-babel-tangle))) |
3460 | (message "Tangling config.org... Done.") | 3485 | (message "Tangling config.org... Done.") |
3461 | ;; load init files | 3486 | ;; load init files |
3462 | (load (locate-user-emacs-file "early-init.el")) | 3487 | (load (locate-user-emacs-file "early-init.el")) |
@@ -3500,15 +3525,15 @@ the needed boolean expression to tangle config.org. Booleans, yall! | |||
3500 | #+begin_src emacs-lisp | 3525 | #+begin_src emacs-lisp |
3501 | (message "%s..." "Loading init.el") | 3526 | (message "%s..." "Loading init.el") |
3502 | (let* (;; Speed up init | 3527 | (let* (;; Speed up init |
3503 | (gc-cons-threshold most-positive-fixnum) | 3528 | (gc-cons-threshold most-positive-fixnum) |
3504 | ;; (gc-cons-percentage 0.6) | 3529 | ;; (gc-cons-percentage 0.6) |
3505 | (file-name-handler-alist nil) | 3530 | (file-name-handler-alist nil) |
3506 | ;; Config file names | 3531 | ;; Config file names |
3507 | (config (expand-file-name "config" | 3532 | (config (expand-file-name "config" |
3508 | user-emacs-directory)) | 3533 | user-emacs-directory)) |
3509 | (config.el (concat config ".el")) | 3534 | (config.el (concat config ".el")) |
3510 | (config.org (concat config ".org")) | 3535 | (config.org (concat config ".org")) |
3511 | (straight-org-dir (locate-user-emacs-file "straight/build/org"))) | 3536 | (straight-org-dir (locate-user-emacs-file "straight/build/org"))) |
3512 | ;; Okay, let's figure this out. | 3537 | ;; Okay, let's figure this out. |
3513 | ;; `and' evaluates each form, and returns nil on the first that | 3538 | ;; `and' evaluates each form, and returns nil on the first that |
3514 | ;; returns nil. `unless' only executes its body if the test | 3539 | ;; returns nil. `unless' only executes its body if the test |
@@ -3518,12 +3543,12 @@ the needed boolean expression to tangle config.org. Booleans, yall! | |||
3518 | ;; 2. Try to load the config. If it errors (nil), it'll bubble that | 3543 | ;; 2. Try to load the config. If it errors (nil), it'll bubble that |
3519 | ;; to the `and' and the body will be evaluated. | 3544 | ;; to the `and' and the body will be evaluated. |
3520 | (unless (and (not (file-newer-than-file-p config.org config.el)) | 3545 | (unless (and (not (file-newer-than-file-p config.org config.el)) |
3521 | (load config :noerror)) | 3546 | (load config :noerror)) |
3522 | ;; A plain require here just loads the older `org' | 3547 | ;; A plain require here just loads the older `org' |
3523 | ;; in Emacs' install dir. We need to add the newer | 3548 | ;; in Emacs' install dir. We need to add the newer |
3524 | ;; one to the `load-path', hopefully that's all. | 3549 | ;; one to the `load-path', hopefully that's all. |
3525 | (when (file-exists-p straight-org-dir) | 3550 | (when (file-exists-p straight-org-dir) |
3526 | (add-to-list 'load-path straight-org-dir)) | 3551 | (add-to-list 'load-path straight-org-dir)) |
3527 | ;; Load config.org | 3552 | ;; Load config.org |
3528 | (message "%s..." "Loading config.org") | 3553 | (message "%s..." "Loading config.org") |
3529 | (require 'org) | 3554 | (require 'org) |
diff --git a/early-init.el b/early-init.el index 1a26b03..056670a 100644 --- a/early-init.el +++ b/early-init.el | |||
@@ -18,21 +18,21 @@ | |||
18 | ;; BOOTSTRAP PACKAGE MANAGEMENT | 18 | ;; BOOTSTRAP PACKAGE MANAGEMENT |
19 | (let ((win-app-dir "~/Applications")) | 19 | (let ((win-app-dir "~/Applications")) |
20 | (dolist (path (list | 20 | (dolist (path (list |
21 | ;; Windows | 21 | ;; Windows |
22 | (expand-file-name "exe" win-app-dir) | 22 | (expand-file-name "exe" win-app-dir) |
23 | (expand-file-name "exe/bin" win-app-dir) | 23 | (expand-file-name "exe/bin" win-app-dir) |
24 | (expand-file-name "Git/bin" win-app-dir) | 24 | (expand-file-name "Git/bin" win-app-dir) |
25 | (expand-file-name "Git/usr/bin" win-app-dir) | 25 | (expand-file-name "Git/usr/bin" win-app-dir) |
26 | (expand-file-name "Git/mingw64/bin" win-app-dir) | 26 | (expand-file-name "Git/mingw64/bin" win-app-dir) |
27 | (expand-file-name "Everything" win-app-dir) | 27 | (expand-file-name "Everything" win-app-dir) |
28 | (expand-file-name "Win-builds/bin" win-app-dir) | 28 | (expand-file-name "Win-builds/bin" win-app-dir) |
29 | (expand-file-name "Z/bin" win-app-dir) | 29 | (expand-file-name "Z/bin" win-app-dir) |
30 | ;; Linux | 30 | ;; Linux |
31 | (expand-file-name "bin" user-emacs-directory) | 31 | (expand-file-name "bin" user-emacs-directory) |
32 | (expand-file-name "~/bin") | 32 | (expand-file-name "~/bin") |
33 | (expand-file-name "~/.local/bin") | 33 | (expand-file-name "~/.local/bin") |
34 | (expand-file-name "~/Scripts") | 34 | (expand-file-name "~/Scripts") |
35 | )) | 35 | )) |
36 | (when (file-exists-p path) | 36 | (when (file-exists-p path) |
37 | (add-to-list 'exec-path path :append)))) | 37 | (add-to-list 'exec-path path :append)))) |
38 | 38 | ||
@@ -43,49 +43,49 @@ | |||
43 | "Bootstrap straight.el." | 43 | "Bootstrap straight.el." |
44 | (defvar bootstrap-version) | 44 | (defvar bootstrap-version) |
45 | (let ((bootstrap-file | 45 | (let ((bootstrap-file |
46 | (expand-file-name | 46 | (expand-file-name |
47 | "straight/repos/straight.el/bootstrap.el" | 47 | "straight/repos/straight.el/bootstrap.el" |
48 | user-emacs-directory)) | 48 | user-emacs-directory)) |
49 | (bootstrap-version 5)) | 49 | (bootstrap-version 5)) |
50 | (unless (file-exists-p bootstrap-file) | 50 | (unless (file-exists-p bootstrap-file) |
51 | (with-current-buffer | 51 | (with-current-buffer |
52 | (url-retrieve-synchronously | 52 | (url-retrieve-synchronously |
53 | (concat | 53 | (concat |
54 | "https://raw.githubusercontent.com/" | 54 | "https://raw.githubusercontent.com/" |
55 | "raxod502/straight.el/develop/install.el") | 55 | "raxod502/straight.el/develop/install.el") |
56 | 'silent 'inhibit-cookies) | 56 | 'silent 'inhibit-cookies) |
57 | (goto-char (point-max)) | 57 | (goto-char (point-max)) |
58 | (eval-print-last-sexp))) | 58 | (eval-print-last-sexp))) |
59 | (load bootstrap-file nil 'nomessage))) | 59 | (load bootstrap-file nil 'nomessage))) |
60 | (when (executable-find "git") | 60 | (when (executable-find "git") |
61 | (unless (ignore-errors (acdw/bootstrap-straight)) | 61 | (unless (ignore-errors (acdw/bootstrap-straight)) |
62 | (let ((msg "Straight.el didn't bootstrap correctly. Cloning directly")) | 62 | (let ((msg "Straight.el didn't bootstrap correctly. Cloning directly")) |
63 | (message "%s..." msg) | 63 | (message "%s..." msg) |
64 | (call-process "git" nil | 64 | (call-process "git" nil |
65 | (get-buffer-create "*bootstrap-straight-messages*") nil | 65 | (get-buffer-create "*bootstrap-straight-messages*") nil |
66 | "clone" | 66 | "clone" |
67 | "https://github.com/raxod502/straight.el" | 67 | "https://github.com/raxod502/straight.el" |
68 | (expand-file-name "straight/repos/straight.el" | 68 | (expand-file-name "straight/repos/straight.el" |
69 | user-emacs-directory)) | 69 | user-emacs-directory)) |
70 | (message "%s...Done." msg) | 70 | (message "%s...Done." msg) |
71 | (acdw/bootstrap-straight)))) | 71 | (acdw/bootstrap-straight)))) |
72 | ;; SETUP FRAME | 72 | ;; SETUP FRAME |
73 | (add-to-list 'default-frame-alist | 73 | (add-to-list 'default-frame-alist |
74 | '(tool-bar-lines . 0)) | 74 | '(tool-bar-lines . 0)) |
75 | 75 | ||
76 | (tool-bar-mode -1) | 76 | (tool-bar-mode -1) |
77 | (add-to-list 'default-frame-alist | 77 | (add-to-list 'default-frame-alist |
78 | '(menu-bar-lines . 0)) | 78 | '(menu-bar-lines . 0)) |
79 | 79 | ||
80 | (menu-bar-mode -1) | 80 | (menu-bar-mode -1) |
81 | (add-to-list 'default-frame-alist | 81 | (add-to-list 'default-frame-alist |
82 | '(vertical-scroll-bars . nil) | 82 | '(vertical-scroll-bars . nil) |
83 | '(horizontal-scroll-bars . nil)) | 83 | '(horizontal-scroll-bars . nil)) |
84 | 84 | ||
85 | (scroll-bar-mode -1) | 85 | (scroll-bar-mode -1) |
86 | (horizontal-scroll-bar-mode -1) | 86 | (horizontal-scroll-bar-mode -1) |
87 | (setq-default frame-inhibit-implied-resize t | 87 | (setq-default frame-inhibit-implied-resize t |
88 | frame-resize-pixelwise t) | 88 | frame-resize-pixelwise t) |
89 | (setq-default indicate-empty-lines t) | 89 | (setq-default indicate-empty-lines t) |
90 | (setq-default indicate-buffer-boundaries 'right) | 90 | (setq-default indicate-buffer-boundaries 'right) |
91 | (setq-default visual-line-fringe-indicators '(left-curly-arrow nil)) | 91 | (setq-default visual-line-fringe-indicators '(left-curly-arrow nil)) |
diff --git a/init.el b/init.el index 28238aa..a0e072f 100644 --- a/init.el +++ b/init.el | |||
@@ -23,7 +23,7 @@ | |||
23 | (file-name-handler-alist nil) | 23 | (file-name-handler-alist nil) |
24 | ;; Config file names | 24 | ;; Config file names |
25 | (config (expand-file-name "config" | 25 | (config (expand-file-name "config" |
26 | user-emacs-directory)) | 26 | user-emacs-directory)) |
27 | (config.el (concat config ".el")) | 27 | (config.el (concat config ".el")) |
28 | (config.org (concat config ".org")) | 28 | (config.org (concat config ".org")) |
29 | (straight-org-dir (locate-user-emacs-file "straight/build/org"))) | 29 | (straight-org-dir (locate-user-emacs-file "straight/build/org"))) |
@@ -36,7 +36,7 @@ | |||
36 | ;; 2. Try to load the config. If it errors (nil), it'll bubble that | 36 | ;; 2. Try to load the config. If it errors (nil), it'll bubble that |
37 | ;; to the `and' and the body will be evaluated. | 37 | ;; to the `and' and the body will be evaluated. |
38 | (unless (and (not (file-newer-than-file-p config.org config.el)) | 38 | (unless (and (not (file-newer-than-file-p config.org config.el)) |
39 | (load config :noerror)) | 39 | (load config :noerror)) |
40 | ;; A plain require here just loads the older `org' | 40 | ;; A plain require here just loads the older `org' |
41 | ;; in Emacs' install dir. We need to add the newer | 41 | ;; in Emacs' install dir. We need to add the newer |
42 | ;; one to the `load-path', hopefully that's all. | 42 | ;; one to the `load-path', hopefully that's all. |