diff options
-rw-r--r-- | init.el | 3 | ||||
-rw-r--r-- | lisp/acdw.el | 69 |
2 files changed, 72 insertions, 0 deletions
diff --git a/init.el b/init.el index 2c18993..759541a 100644 --- a/init.el +++ b/init.el | |||
@@ -886,6 +886,9 @@ if ripgrep is installed, otherwise `consult-grep'." | |||
886 | (elpher-go url)) | 886 | (elpher-go url)) |
887 | (t (apply fn url args)))) | 887 | (t (apply fn url args)))) |
888 | 888 | ||
889 | ;; And buttonize gemini:// links. | ||
890 | (acdw/add-button-url-regexp-protocol "gemini") | ||
891 | |||
889 | (:when-loaded | 892 | (:when-loaded |
890 | (setup (:straight (gemini-write | 893 | (setup (:straight (gemini-write |
891 | :host nil | 894 | :host nil |
diff --git a/lisp/acdw.el b/lisp/acdw.el index 9ac315c..ce3e9f8 100644 --- a/lisp/acdw.el +++ b/lisp/acdw.el | |||
@@ -408,6 +408,75 @@ Prompt only if there are unsaved changes." | |||
408 | ((t (:foreground "dim gray")))))) | 408 | ((t (:foreground "dim gray")))))) |
409 | 409 | ||
410 | 410 | ||
411 | ;;; URL regexp | ||
412 | ;; really, I just want to add gemini:// protocol, but I'm going to do some | ||
413 | ;; reverse-engineering here. | ||
414 | |||
415 | (defvar acdw/button-protocols '("http" | ||
416 | "https" | ||
417 | "shttp" | ||
418 | "shttps" | ||
419 | "ftp" | ||
420 | "file" | ||
421 | "gopher" | ||
422 | "nntp" | ||
423 | "news" | ||
424 | "telnet" | ||
425 | "wais" | ||
426 | "mailto" | ||
427 | "info") | ||
428 | "The list of protocols to splice into `browse-url-button-regexp'.") | ||
429 | |||
430 | (defun acdw/build-button-url-regexp () | ||
431 | "Build `browse-url-button-regexp' from `acdw/button-protocols'. | ||
432 | I used `xr' (not included in Emacs) to get the RX form of the | ||
433 | default, so I can easily splice the list into it. THIS IS | ||
434 | BRITTLE AF!!!" | ||
435 | (rx | ||
436 | (seq word-boundary | ||
437 | (group | ||
438 | (group | ||
439 | (or "www." | ||
440 | (seq | ||
441 | (group | ||
442 | (eval (cons 'or acdw/button-protocols))) | ||
443 | ":"))) | ||
444 | (opt | ||
445 | (group "//" | ||
446 | (one-or-more | ||
447 | (any "0-9a-z" "._-")) | ||
448 | ":" | ||
449 | (zero-or-more | ||
450 | (any "0-9")))) | ||
451 | (or | ||
452 | (seq | ||
453 | (one-or-more | ||
454 | (any "0-9a-z" "!#$%&*+,./:;=?@\\_~-" word)) | ||
455 | "(" | ||
456 | (one-or-more | ||
457 | (any "0-9a-z" "!#$%&*+,./:;=?@\\_~-" word)) | ||
458 | (zero-or-more | ||
459 | (any "0-9a-z" "#$%&*+/=@\\_~-" word)) | ||
460 | ")" | ||
461 | (opt | ||
462 | (one-or-more | ||
463 | (any "0-9a-z" "!#$%&*+,./:;=?@\\_~-" word)) | ||
464 | (any "0-9a-z" "#$%&*+/=@\\_~-" word))) | ||
465 | (seq | ||
466 | (one-or-more | ||
467 | (any "0-9a-z" "!#$%&*+,./:;=?@\\_~-" word)) | ||
468 | (any "0-9a-z" "#$%&*+/=@\\_~-" word)))))) | ||
469 | ) | ||
470 | |||
471 | (defun acdw/add-button-url-regexp-protocol (proto) | ||
472 | "Add PROTO to `browse-url-button-regexp' | ||
473 | First, add PROTO to `acdw/button-protocols'. | ||
474 | Then, build `browse-url-button-regexp' with the new protocol." | ||
475 | (add-to-list 'acdw/button-protocols proto) | ||
476 | (setq browse-url-button-regexp (acdw/build-button-url-regexp))) | ||
477 | |||
478 | |||
479 | |||
411 | ;;; Keymaps | 480 | ;;; Keymaps |
412 | 481 | ||
413 | (defvar acdw/leader | 482 | (defvar acdw/leader |