diff options
-rw-r--r-- | init.el | 157 | ||||
-rw-r--r-- | lisp/acdw-org.el | 97 | ||||
-rw-r--r-- | lisp/acdw.el | 31 |
3 files changed, 127 insertions, 158 deletions
diff --git a/init.el b/init.el index 208cfe8..cbdec9a 100644 --- a/init.el +++ b/init.el | |||
@@ -19,7 +19,7 @@ | |||
19 | ;;; Setup | 19 | ;;; Setup |
20 | 20 | ||
21 | ;;;; `setup' | 21 | ;;;; `setup' |
22 | (straight-use-package '(setup :host nil :repo "https://git.sr.ht/~zge/setup")) | 22 | (straight-use-package '(setup :host nil :repo "https://git.sr.ht/~pkal/setup")) |
23 | (require 'setup) | 23 | (require 'setup) |
24 | 24 | ||
25 | (setup setup | 25 | (setup setup |
@@ -174,25 +174,31 @@ | |||
174 | custom-unlispify-tag-names nil | 174 | custom-unlispify-tag-names nil |
175 | custom-variable-default-form 'lisp) | 175 | custom-variable-default-form 'lisp) |
176 | 176 | ||
177 | (defun unpackaged/custom-toggle-all-more-hide (&rest _) | 177 | ;; `Custom-mode-hook' fires /before/ the widgets are built, so I have to |
178 | "Toggle all \"More/Hide\" widgets in current buffer." | 178 | ;; install advice after the widgets are made. |
179 | (interactive) | 179 | (advice-add |
180 | (widget-map-buttons (lambda (widget _) | 180 | 'custom-buffer-create :after |
181 | (pcase (widget-get widget :off) | 181 | (defun custom-buffer@expand-widgets (&rest _) |
182 | ("More" (widget-apply-action widget))) | 182 | "Expand descriptions and values of variables in `Custom-mode' buffers." |
183 | nil))) | 183 | (interactive) |
184 | (advice-add 'custom-buffer-create | 184 | ;; "More/Hide" widgets (thanks alphapapa!) |
185 | :after #'unpackaged/custom-toggle-all-more-hide) | 185 | (widget-map-buttons (lambda (widget _) |
186 | 186 | (pcase (widget-get widget :off) | |
187 | (defun acdw/custom-toggle-showing-all-values (&rest _) | 187 | ("More" (widget-apply-action widget))) |
188 | "Toggle all \"Show Value\" widgets in current buffer." | 188 | nil)) |
189 | (interactive) | 189 | ;; "Show Value" widgets (the little triangles) |
190 | (widget-map-buttons (lambda (widget _) | 190 | (widget-map-buttons (lambda (widget _) |
191 | (pcase (widget-get widget :off) | 191 | (pcase (widget-get widget :off) |
192 | ("Show Value" (widget-apply-action widget))) | 192 | ("Show Value" (widget-apply-action widget))) |
193 | nil))) | 193 | nil)))) |
194 | (advice-add 'custom-buffer-create | 194 | |
195 | :after #'acdw/custom-toggle-showing-all-values)) | 195 | (add-hook ; thanks u/oantolin! |
196 | 'Custom-mode-hook | ||
197 | (defun custom-mode@imenu () | ||
198 | "Build `imenu' for `Custom-mode'." | ||
199 | (setq imenu-generic-expression | ||
200 | '(("Faces" "^\\(?:Show\\|Hide\\) \\(.*\\) face: \\[sample\\]" 1) | ||
201 | ("Variables" "^\\(?:Show Value\\|Hide\\) \\([^:\n]*\\)" 1)))))) | ||
196 | 202 | ||
197 | (setup debugger | 203 | (setup debugger |
198 | (:hook visual-line-mode) | 204 | (:hook visual-line-mode) |
@@ -337,8 +343,7 @@ | |||
337 | erc-fill-static-center 14 | 343 | erc-fill-static-center 14 |
338 | erc-format-nick-function #'erc-format-truncate-@nick | 344 | erc-format-nick-function #'erc-format-truncate-@nick |
339 | erc-header-line-face-method #'erc/update-header-line-show-disconnected | 345 | erc-header-line-face-method #'erc/update-header-line-show-disconnected |
340 | erc-hide-list '("NICK" "MODE" "JOIN" "NICK" "PART" "QUIT" | 346 | erc-hide-list '("NICK" "MODE" "JOIN" "PART" "QUIT") |
341 | "324" "329" "332" "333" "353" "477") | ||
342 | erc-interpret-controls-p t | 347 | erc-interpret-controls-p t |
343 | erc-interpret-mirc-color t | 348 | erc-interpret-mirc-color t |
344 | erc-join-buffer 'bury | 349 | erc-join-buffer 'bury |
@@ -347,7 +352,7 @@ | |||
347 | erc-kill-server-buffer-on-quit t | 352 | erc-kill-server-buffer-on-quit t |
348 | erc-nick "acdw" | 353 | erc-nick "acdw" |
349 | erc-nick-truncate (- erc-fill-static-center 1) | 354 | erc-nick-truncate (- erc-fill-static-center 1) |
350 | erc-prompt (lambda () (acdw-erc/prompt)) | 355 | erc-prompt #'acdw-erc/prompt |
351 | erc-prompt-for-password nil ; use ~/.authinfo | 356 | erc-prompt-for-password nil ; use ~/.authinfo |
352 | erc-rename-buffers t | 357 | erc-rename-buffers t |
353 | erc-server erc-default-server | 358 | erc-server erc-default-server |
@@ -356,7 +361,8 @@ | |||
356 | (mapcar #'car erc-autojoin-channels-alist)) | 361 | (mapcar #'car erc-autojoin-channels-alist)) |
357 | erc-server-coding-system '(utf-8 . utf-8) | 362 | erc-server-coding-system '(utf-8 . utf-8) |
358 | erc-track-exclude-types (append erc-hide-list | 363 | erc-track-exclude-types (append erc-hide-list |
359 | '("AWAY")) | 364 | '("AWAY" |
365 | "353" "324" "329" "332" "333" "477")) | ||
360 | erc-track-exclude-server-buffer t | 366 | erc-track-exclude-server-buffer t |
361 | erc-track-position-in-mode-line 'before-modes | 367 | erc-track-position-in-mode-line 'before-modes |
362 | erc-track-visibility nil ; only the selected frame | 368 | erc-track-visibility nil ; only the selected frame |
@@ -845,12 +851,6 @@ like a dumbass." | |||
845 | "M-u" upcase-dwim | 851 | "M-u" upcase-dwim |
846 | "M-l" downcase-dwim) | 852 | "M-l" downcase-dwim) |
847 | 853 | ||
848 | ;; (when (display-graphic-p) | ||
849 | ;; (:global "<escape>" keyboard-escape-quit)) | ||
850 | |||
851 | ;; Remap C-h to DEL -- <f1> can be the "help" key | ||
852 | ;; (define-key key-translation-map [?\C-h] [?\C-?]) | ||
853 | |||
854 | (:global "C-c t" acdw/insert-iso-date | 854 | (:global "C-c t" acdw/insert-iso-date |
855 | "C-z" nil)) | 855 | "C-z" nil)) |
856 | 856 | ||
@@ -939,7 +939,6 @@ if ripgrep is installed, otherwise `consult-grep'." | |||
939 | ;; C-x bindings (`ctl-x-map') | 939 | ;; C-x bindings (`ctl-x-map') |
940 | "C-x M-:" consult-complex-command | 940 | "C-x M-:" consult-complex-command |
941 | "C-x b" consult-buffer | 941 | "C-x b" consult-buffer |
942 | "<f1>" consult-buffer ; trying this out ... | ||
943 | "C-x 4 b" consult-buffer-other-window | 942 | "C-x 4 b" consult-buffer-other-window |
944 | "C-x 5 b" consult-buffer-other-frame | 943 | "C-x 5 b" consult-buffer-other-frame |
945 | ;; Custom M-# bindings for fast register access | 944 | ;; Custom M-# bindings for fast register access |
@@ -1006,15 +1005,14 @@ if ripgrep is installed, otherwise `consult-grep'." | |||
1006 | (:advise completing-read-multiple | 1005 | (:advise completing-read-multiple |
1007 | :filter-args #'crm-indicator)) | 1006 | :filter-args #'crm-indicator)) |
1008 | 1007 | ||
1009 | (with-eval-after-load 'vertico | 1008 | (with-eval-after-loads (vertico consult) |
1010 | (with-eval-after-load 'consult | 1009 | (when (boundp 'consult-crm-map) |
1011 | (when (boundp 'consult-crm-map) | 1010 | (define-key consult-crm-map "\r" #'+vertico-crm-exit) |
1012 | (define-key consult-crm-map "\r" #'+vertico-crm-exit) | 1011 | (define-key consult-crm-map "\t" #'vertico-exit) |
1013 | (define-key consult-crm-map "\t" #'vertico-exit) | 1012 | (defun +vertico-crm-exit () |
1014 | (defun +vertico-crm-exit () | 1013 | (interactive) |
1015 | (interactive) | 1014 | (run-at-time 0 nil #'vertico-exit) |
1016 | (run-at-time 0 nil #'vertico-exit) | 1015 | (funcall #'vertico-exit))))) |
1017 | (funcall #'vertico-exit)))))) | ||
1018 | 1016 | ||
1019 | (setup (:straight crux) | 1017 | (setup (:straight crux) |
1020 | 1018 | ||
@@ -1086,11 +1084,10 @@ if ripgrep is installed, otherwise `consult-grep'." | |||
1086 | #'which-key--hide-popup-ignore-command) | 1084 | #'which-key--hide-popup-ignore-command) |
1087 | embark-become-indicator embark-action-indicator) | 1085 | embark-become-indicator embark-action-indicator) |
1088 | 1086 | ||
1089 | (with-eval-after-load 'embark | 1087 | (with-eval-after-loads (embark consult) |
1090 | (with-eval-after-load 'consult | 1088 | (setup (:straight embark-consult) |
1091 | (setup (:straight embark-consult) | 1089 | (add-hook 'embark-collect-mode-hook |
1092 | (add-hook 'embark-collect-mode-hook | 1090 | #'consult-preview-at-point-mode)))) |
1093 | #'consult-preview-at-point-mode))))) | ||
1094 | 1091 | ||
1095 | (setup (:straight epithet) | 1092 | (setup (:straight epithet) |
1096 | (add-hook 'Info-selection-hook #'epithet-rename-buffer) | 1093 | (add-hook 'Info-selection-hook #'epithet-rename-buffer) |
@@ -1201,6 +1198,7 @@ if ripgrep is installed, otherwise `consult-grep'." | |||
1201 | (setup (:straight (mastodon | 1198 | (setup (:straight (mastodon |
1202 | :host github | 1199 | :host github |
1203 | :repo "mooseyboots/mastodon.el")) | 1200 | :repo "mooseyboots/mastodon.el")) |
1201 | (:straight request) | ||
1204 | (:option mastodon-instance-url "https://writing.exchange" | 1202 | (:option mastodon-instance-url "https://writing.exchange" |
1205 | mastodon-auth-source-file (car auth-sources) | 1203 | mastodon-auth-source-file (car auth-sources) |
1206 | mastodon-client--token-file (acdw/dir "mastodon.plstore"))) | 1204 | mastodon-client--token-file (acdw/dir "mastodon.plstore"))) |
@@ -1301,35 +1299,39 @@ if ripgrep is installed, otherwise `consult-grep'." | |||
1301 | (setup (:straight org) | 1299 | (setup (:straight org) |
1302 | (:straight org-contrib) | 1300 | (:straight org-contrib) |
1303 | (require 'acdw-org) ; so I don't clutter up init.el | 1301 | (require 'acdw-org) ; so I don't clutter up init.el |
1304 | (:option org-adapt-indentation nil | 1302 | (:option |
1305 | org-catch-invisible-edits 'smart | 1303 | org-adapt-indentation nil |
1306 | org-clock-clocked-in-display 'mode-line | 1304 | org-catch-invisible-edits 'smart |
1307 | org-clock-string-limit 7 ; gives time and not title | 1305 | org-clock-clocked-in-display 'mode-line |
1308 | org-confirm-babel-evaluate nil | 1306 | org-clock-string-limit 7 ; gives time and not title |
1309 | org-ellipsis " …" | 1307 | org-confirm-babel-evaluate nil |
1310 | org-export-coding-system 'utf-8-unix | 1308 | org-directory "~/org" |
1311 | org-export-headline-levels 8 | 1309 | org-ellipsis " …" |
1312 | org-export-with-section-numbers nil | 1310 | org-export-coding-system 'utf-8-unix |
1313 | org-export-with-smart-quotes t | 1311 | org-export-headline-levels 8 |
1314 | org-export-with-sub-superscripts t | 1312 | org-export-with-section-numbers nil |
1315 | org-export-with-toc nil | 1313 | org-export-with-smart-quotes t |
1316 | org-fontify-done-headline t | 1314 | org-export-with-sub-superscripts t |
1317 | org-fontify-quote-and-verse-blocks t | 1315 | org-export-with-toc nil |
1318 | org-fontify-whole-heading-line t | 1316 | org-fontify-done-headline t |
1319 | org-hide-emphasis-markers t | 1317 | org-fontify-quote-and-verse-blocks t |
1320 | org-html-coding-system 'utf-8-unix | 1318 | org-fontify-whole-heading-line t |
1321 | org-imenu-depth 3 | 1319 | org-hide-emphasis-markers t |
1322 | org-outline-path-complete-in-steps nil | 1320 | org-html-coding-system 'utf-8-unix |
1323 | org-pretty-entities t | 1321 | org-image-actual-width '(300) |
1324 | org-refile-use-outline-path 'file | 1322 | org-imenu-depth 3 |
1325 | org-special-ctrl-a/e t | 1323 | org-outline-path-complete-in-steps nil |
1326 | org-special-ctrl-k t | 1324 | org-pretty-entities t |
1327 | org-src-fontify-natively t | 1325 | org-refile-use-outline-path 'file |
1328 | org-src-tab-acts-natively t | 1326 | org-special-ctrl-a/e t |
1329 | org-src-window-setup 'current-window | 1327 | org-special-ctrl-k t |
1330 | org-startup-truncated nil | 1328 | org-src-fontify-natively t |
1331 | org-tags-column 0 ; (- 0 fill-column -3) | 1329 | org-src-tab-acts-natively t |
1332 | org-directory "~/org") | 1330 | org-src-window-setup 'current-window |
1331 | org-startup-truncated nil | ||
1332 | org-startup-with-inline-images t | ||
1333 | org-tags-column 0 ; (- 0 fill-column -3) | ||
1334 | ) | ||
1333 | 1335 | ||
1334 | (:bind "RET" acdw-org/return-dwim | 1336 | (:bind "RET" acdw-org/return-dwim |
1335 | "<S-return>" acdw-org/org-table-copy-down | 1337 | "<S-return>" acdw-org/org-table-copy-down |
@@ -1348,7 +1350,10 @@ if ripgrep is installed, otherwise `consult-grep'." | |||
1348 | acdw/org-fix-lines-before-save) | 1350 | acdw/org-fix-lines-before-save) |
1349 | 1351 | ||
1350 | (advice-add 'org-delete-backward-char | 1352 | (advice-add 'org-delete-backward-char |
1351 | :override #'acdw-org/delete-backward-char)) | 1353 | :override #'acdw-org/delete-backward-char) |
1354 | |||
1355 | (setup (:straight org-appear) | ||
1356 | (:hook-into org-mode))) | ||
1352 | 1357 | ||
1353 | (setup (:straight paredit) | 1358 | (setup (:straight paredit) |
1354 | 1359 | ||
@@ -1463,6 +1468,8 @@ if ripgrep is installed, otherwise `consult-grep'." | |||
1463 | 1468 | ||
1464 | (global-undo-fu-session-mode +1)) | 1469 | (global-undo-fu-session-mode +1)) |
1465 | 1470 | ||
1471 | (setup (:straight unfill)) | ||
1472 | |||
1466 | (setup (:straight (unfocused | 1473 | (setup (:straight (unfocused |
1467 | :host github | 1474 | :host github |
1468 | :repo "duckwork/unfocused")) | 1475 | :repo "duckwork/unfocused")) |
diff --git a/lisp/acdw-org.el b/lisp/acdw-org.el index 189ac67..f8f23c6 100644 --- a/lisp/acdw-org.el +++ b/lisp/acdw-org.el | |||
@@ -243,74 +243,13 @@ the deletion might narrow the column." | |||
243 | (org-table-copy-down n) | 243 | (org-table-copy-down n) |
244 | (acdw-org/return-dwim n))) | 244 | (acdw-org/return-dwim n))) |
245 | 245 | ||
246 | (defun acdw-org/count-words (start end) | ||
247 | "Count words between START and END, respecting `org-mode' conventions." | ||
248 | (interactive (list nil nil)) | ||
249 | (require 'cl-lib) | ||
250 | (require 'ox) | ||
251 | (message "Counting words...") | ||
252 | (cond ((not (called-interactively-p 'any)) | ||
253 | (let ((words 0)) | ||
254 | (save-excursion | ||
255 | (save-restriction | ||
256 | (narrow-to-region start end) | ||
257 | (goto-char (point-min)) | ||
258 | (while (< (point) (point-max)) | ||
259 | (cond | ||
260 | ;; Ignore comments | ||
261 | ((or (org-at-comment-p) | ||
262 | (org-in-commented-heading-p)) nil) | ||
263 | ;; Ignore tables | ||
264 | ((org-at-table-p) nil) | ||
265 | ;; Ignore hyperlinks, but count the descriptions | ||
266 | ((looking-at org-bracket-link-analytic-regexp) | ||
267 | (when-let ((desc (match-string-no-properties 5))) | ||
268 | (save-match-data | ||
269 | (setq words (+ words | ||
270 | (length (remove "" | ||
271 | (org-split-string | ||
272 | desc "\\W"))))))) | ||
273 | (goto-char (match-end 0))) | ||
274 | ;; Ignore source code blocks | ||
275 | ((org-in-src-block-p) nil) | ||
276 | ;; Ignore footnotes | ||
277 | ((or (org-footnote-at-definition-p) | ||
278 | (org-footnote-at-reference-p)) | ||
279 | nil) | ||
280 | ;; else... check the context | ||
281 | (t (let ((contexts (org-context))) | ||
282 | (cond | ||
283 | ;; Ignore tags, TODO keywords, etc. | ||
284 | ((or (assoc :todo-keyword contexts) | ||
285 | (assoc :priority contexts) | ||
286 | (assoc :keyword contexts) | ||
287 | (assoc :checkbox contexts)) | ||
288 | nil) | ||
289 | ;; Ignore sections tagged :no-export | ||
290 | ((assoc :tags contexts) | ||
291 | (if (cl-intersection (org-get-tags-at) | ||
292 | org-export-exclude-tags | ||
293 | :test 'equal) | ||
294 | (org-forward-same-level 1) | ||
295 | nil)) | ||
296 | ;; else... count the word | ||
297 | (t (setq words (1+ words))))))) | ||
298 | (re-search-forward "\\w+\\W*"))) | ||
299 | words))) | ||
300 | ((use-region-p) | ||
301 | (message "%d words in region" | ||
302 | (acdw-org/count-words (region-beginning) (region-end)))) | ||
303 | (t | ||
304 | (message "%d words in buffer" | ||
305 | (acdw-org/count-words (point-min) (point-max)))))) | ||
306 | |||
307 | ;; This isn't the best code, but it'll do. | 246 | ;; This isn't the best code, but it'll do. |
308 | (defun acdw-org/count-words-stupidly (start end &optional limit) | 247 | (defun acdw-org/count-words-stupidly (start end &optional limit) |
309 | "Count words between START and END, ignoring a lot. | 248 | "Count words between START and END, ignoring a lot. |
310 | 249 | ||
311 | Since this function is, for some reason, pricy, the optional | 250 | Since this function is, for some reason, pricy, the optional |
312 | parameter LIMIT sets a word limit at which to stop counting. | 251 | parameter LIMIT sets a word limit at which to stop counting. |
313 | Once the function hits that number, it'll return \"-LIMIT\" | 252 | Once the function hits that number, it'll return -LIMIT |
314 | instead of the true count." | 253 | instead of the true count." |
315 | (interactive (list nil nil)) | 254 | (interactive (list nil nil)) |
316 | (cond ((not (called-interactively-p 'any)) | 255 | (cond ((not (called-interactively-p 'any)) |
@@ -334,13 +273,35 @@ instead of the true count." | |||
334 | ((or (looking-at org-drawer-regexp) | 273 | ((or (looking-at org-drawer-regexp) |
335 | (looking-at org-clock-drawer-re)) | 274 | (looking-at org-clock-drawer-re)) |
336 | (search-forward ":END:" nil :noerror)) | 275 | (search-forward ":END:" nil :noerror)) |
276 | ;; Ignore tables | ||
277 | ((org-at-table-p) (forward-line)) | ||
278 | ;; Ignore hyperlinks, but count the descriptions | ||
279 | ((looking-at org-bracket-link-analytic-regexp) | ||
280 | (when-let ((desc (match-string-no-properties 5))) | ||
281 | (save-match-data | ||
282 | (setq words (+ words | ||
283 | (length (remove "" | ||
284 | (org-split-string | ||
285 | desc "\\W"))))))) | ||
286 | (goto-char (match-end 0))) | ||
287 | ;; Ignore source blocks | ||
288 | ((org-in-src-block-p) (foreward-line)) | ||
337 | ;; Count everything else | 289 | ;; Count everything else |
338 | (t (setq words (1+ words)) | 290 | (t |
339 | (if (and limit | 291 | ;; ... unless it's in a few weird contexts |
340 | (> words limit)) | 292 | (let ((contexts (org-context))) |
341 | (setq words limit | 293 | (cond ((or (assoc :todo-keyword contexts) |
342 | continue nil)) | 294 | (assoc :priority contexts) |
343 | (forward-word-strictly)))))) | 295 | (assoc :keyword contexts) |
296 | (assoc :checkbox contexts)) | ||
297 | (forward-word-strictly)) | ||
298 | |||
299 | (t (setq words (1+ words)) | ||
300 | (if (and limit | ||
301 | (> words limit)) | ||
302 | (setq words (- limit) | ||
303 | continue nil)) | ||
304 | (forward-word-strictly))))))))) | ||
344 | words)) | 305 | words)) |
345 | ((use-region-p) | 306 | ((use-region-p) |
346 | (message "%d words in region" | 307 | (message "%d words in region" |
diff --git a/lisp/acdw.el b/lisp/acdw.el index eab0719..2aa6c1f 100644 --- a/lisp/acdw.el +++ b/lisp/acdw.el | |||
@@ -87,21 +87,6 @@ ARG). When called with multiple arguments or a list, it returns | |||
87 | (save-restriction | 87 | (save-restriction |
88 | (unfill-region (point-min) (point-max)))))) | 88 | (unfill-region (point-min) (point-max)))))) |
89 | 89 | ||
90 | (defun kill-ring-save-unfilled (start end &optional region) | ||
91 | "Unfill, kill, then re-fill the region defined by START and END positions. | ||
92 | REGION is passed straight to `kill-ring-save'." | ||
93 | (interactive "*r") | ||
94 | (let ((sentence-end-double-space nil)) | ||
95 | (unfill-region start end) | ||
96 | (kill-ring-save | ||
97 | ;; A quick hack to try and ameliorate the "Args out of range" error when | ||
98 | ;; `unfill-region' removes some newlines. I'm not sure if this will work | ||
99 | ;; if calling from Lisp or other such nonsense. | ||
100 | (max start (point-min)) | ||
101 | (min end (point-max)) | ||
102 | region)) | ||
103 | (fill-region start end)) | ||
104 | |||
105 | (defmacro when-unfocused (name &rest forms) | 90 | (defmacro when-unfocused (name &rest forms) |
106 | "Define a function NAME, executing FORMS, that fires when Emacs | 91 | "Define a function NAME, executing FORMS, that fires when Emacs |
107 | is unfocused." | 92 | is unfocused." |
@@ -123,6 +108,22 @@ is unfocused." | |||
123 | ,@body) | 108 | ,@body) |
124 | (message "%s... Done." ,message))) | 109 | (message "%s... Done." ,message))) |
125 | 110 | ||
111 | (defmacro with-eval-after-loads (files &rest body) | ||
112 | "Execute BODY after FILES are loaded. | ||
113 | This macro simplifies `with-eval-after-load' for multiple nested | ||
114 | features." | ||
115 | (declare (indent 1) (debug (form def-body))) | ||
116 | (waterfall-list 'with-eval-after-load files body)) | ||
117 | |||
118 | (defun waterfall-list (car list rest) | ||
119 | "Cons CAR with each element in LIST in a waterfall fashion, end with REST. | ||
120 | For use with the `with-eval-after-loads' function." | ||
121 | (cond ((atom list) `(,car ',list ,@rest)) | ||
122 | ((= 1 (length list)) `(,car ',(car list) ,@rest)) | ||
123 | (t | ||
124 | `(,car ',(car list) | ||
125 | ,(waterfall-list car (cdr list) rest))))) | ||
126 | |||
126 | 127 | ||
127 | ;;; Comment-or-uncomment-sexp | 128 | ;;; Comment-or-uncomment-sexp |
128 | ;; from https://endlessparentheses.com/a-comment-or-uncomment-sexp-command.html | 129 | ;; from https://endlessparentheses.com/a-comment-or-uncomment-sexp-command.html |