From 9360a54e6208c87911530ea8005b626680fa2e88 Mon Sep 17 00:00:00 2001 From: Case Duckworth Date: Fri, 7 Jan 2022 17:30:46 -0600 Subject: Gah, so many changes --- init.el | 62 +++++++++++++++++++++++++++++++++---------------- lisp/+init.el | 50 +++++++++++++++++++++------------------- lisp/+org.el | 74 ++++++++++++++++++++++++++++++++++++++++++----------------- lisp/acdw.el | 19 +++++++-------- 4 files changed, 131 insertions(+), 74 deletions(-) diff --git a/init.el b/init.el index 19513ea..b32dfce 100644 --- a/init.el +++ b/init.el @@ -115,6 +115,7 @@ (:global "C-c C-r" #'reading-mode)) (setup (:require user-save) + (add-hook 'user-save-hook #'+clean-empty-lines) (user-save-mode +1)) (setup +key @@ -176,9 +177,9 @@ browse-url-secondary-browser-function) args))) (cons (+browse-url-secondary-browser-regexps-combine) ; non-text websites - browse-url-secondary-browser-function) + browse-url-secondary-browser-function) (cons "." ; everything else - +browse-url-browser-function))) + +browse-url-browser-function))) ;; Transform URLs before passing to `browse-url' (:option +browse-url-transformations `((,(rx "//" (or "youtube.com" "youtu.be")) @@ -463,9 +464,14 @@ "" #'+org-table-copy-down "C-c C-l" #'+org-insert-link-dwim "C-c C-n" #'+org-next-heading-widen - "C-c C-p" #'+org-previous-heading-widen) + "C-c C-p" #'+org-previous-heading-widen + "C-c C-o" #'+org-open-at-point-dwim) (:local-hook user-save-hook #'+org-before-save@prettify-buffer) (advice-add #'org-delete-backward-char :override #'+org-delete-backward-char) + ;; (define-advice org-open-at-point (:around (fn &rest r) open-external) + ;; "Open links from org externally." + ;; (let ((browse-url-browser-function browse-url-secondary-browser-function)) + ;; (apply fn r))) (with-eval-after-load 'org (org-clock-persistence-insinuate) (org-link-set-parameters "tel" :follow #'+org-tel-open)) @@ -504,15 +510,18 @@ (+org-capture-templates-setf "tt" `("Today!" entry (file "todo.org") ,(concat "* TODO %^{Title}\n" - "DEADLINE: %t\n" - "\n%?"))) + "DEADLINE: %t\n" + "\n%?"))) (+org-capture-templates-setf "ts" `("Someday..." entry (file "todo.org") ,(concat "* TODO %^{Title}\n" - ":PROPERTIES:\n" - ":CREATED: [%<%F %T>]\n" - ":END:\n" - "\n%?"))) + ":PROPERTIES:\n" + ":CREATED: [%<%F %T>]\n" + ":END:\n" + "\n%?"))) + (+org-capture-templates-setf "l" + `("Link" entry (file "links.org") + "* %(+org-insert-link-dwim) %^g\n\n")) (+org-capture-sort)) (setup org-contacts @@ -533,6 +542,10 @@ ";; ABANDON ALL HOPE YE WHO ENTER HERE\n\n") (add-hook 'kill-buffer-query-functions #'+scratch-immortal)) +(setup shr + (:option shr-width (- fill-column 5) ; pad out for wide letters + shr-use-fonts t)) + (setup text (:hook #'turn-on-auto-fill)) @@ -544,7 +557,8 @@ (setup (:straight ace-window) (:require +ace-window) (:option aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l) - aw-display-mode-overlay nil) + aw-display-mode-overlay nil + aw-scope 'frame) (:+key "M-o" #'+ace-window-or-switch-buffer) (:face aw-mode-line-face ((t (:foreground "red")))) (+ace-window-display-mode +1)) @@ -914,13 +928,19 @@ See also `crux-reopen-as-root-mode'." (:bind "SPC" #'+elfeed-scroll-up-command "S-SPC" #'+elfeed-scroll-down-command) (:hook #'reading-mode) - (define-advice elfeed-show-entry (:after (&rest _)) - "Re-flow the entry a short time after showing it." - (run-at-time 0.1 nil #'elfeed-show-refresh)))) + ;; (define-advice elfeed-show-entry (:after (&rest _)) + ;; "Re-flow the entry a short time after showing it." + ;; (run-at-time 0.1 nil #'elfeed-show-refresh)) + )) (setup (:straight elfeed-org) + (:also-load +org-capture) (:option rmh-elfeed-org-files (list (elfeed/ "elfeed.org" t))) - (elfeed-org)) + (elfeed-org) + (+org-capture-templates-setf "f" + `("Feed" entry + (file+olp ,(car rmh-elfeed-org-files) "Feeds") + "* %? %^g"))) (setup (:straight elpher)) @@ -990,7 +1010,7 @@ See also `crux-reopen-as-root-mode'." (:+key "M-q" #'filldent-dwim)) (setup (:straight flyspell-correct) - (:+also-load +flyspell-correct ) + (:also-load +flyspell-correct) (:option flyspell-correct--cr-key ";") (:bind-into flyspell "C-;" #'flyspell-correct-wrapper @@ -1041,11 +1061,12 @@ See also `crux-reopen-as-root-mode'." (setup (:straight god-mode) (setq god-mode-enable-function-key-translation nil) - (:also-load +god-mode) - (:+key "C-M-g" #'god-local-mode) + (:require god-mode + +god-mode) + (:+key "C-M-g" #'god-mode-all) (:with-mode god-local-mode (:bind "i" #'+god-mode-insert - "a" #'+god-mode-append))) + "a" nil))) (setup (:straight helpful) (run-with-idle-timer 0.5 nil @@ -1260,6 +1281,7 @@ See also `crux-reopen-as-root-mode'." (setup (:straight (sophomore :host github :repo "duckwork/sophomore.el")) + (sophomore-enable #'narrow-to-region) (sophomore-disable #'view-hello-file) (sophomore-mode +1)) @@ -1288,8 +1310,8 @@ See also `crux-reopen-as-root-mode'." (:bind "t" #'titlecase-dwim))) (setup (:straight topsy) - (:hook-into prog-mode - circe-chat-mode) + (:hook-into ;;prog-mode + circe-chat-mode) (:when-loaded (:option topsy-header-line-format diff --git a/lisp/+init.el b/lisp/+init.el index 360a1b9..c1f3cb5 100644 --- a/lisp/+init.el +++ b/lisp/+init.el @@ -37,41 +37,43 @@ are sorted lexigraphically." nil ;; Sort function (lambda (s1 s2) - (let ((s1 (cdr s1)) (s2 (cdr s2))) - (cond + (let ((s1 (cdr s1)) (s2 (cdr s2))) + (cond ;; Sort everything /not/ `setup' /before/ `setup' ((and (+init--sexp-setup-p s1) - (not (+init--sexp-setup-p s2))) + (not (+init--sexp-setup-p s2))) nil) ((and (+init--sexp-setup-p s2) - (not (+init--sexp-setup-p s1))) + (not (+init--sexp-setup-p s1))) t) ;; otherwise... (t (let ((s1-straight (+init--sexp-setup-p s1 :straight)) (s2-straight (+init--sexp-setup-p s2 :straight)) (s1-require (+init--sexp-setup-p s1 :require)) (s2-require (+init--sexp-setup-p s2 :require))) - (cond - ;; `:straight' setups have extra processing - ((and s1-straight s2-straight) - (let* ((r (rx (: ":straight" (? "-when") (* space) (? "(")))) - (s1 (replace-regexp-in-string r "" s1)) - (s2 (replace-regexp-in-string r "" s2))) + (cond + ;; `:straight' setups have extra processing + ((and s1-straight s2-straight) + (let* ((r (rx (: ":straight" (? "-when") (* space) (? "(")))) + (s1 (replace-regexp-in-string r "" s1)) + (s2 (replace-regexp-in-string r "" s2))) (string< s1 s2))) - ;; `:require' setups go first - ((and s1-require (not s2-require)) t) - ((and s2-require (not s1-require)) nil) - ;; `:straight' setups go last - ((and s1-straight (not s2-straight)) nil) - ((and s2-straight (not s1-straight)) t) - ;; otherwise, sort lexigraphically - (t (string< s1 s2)))))))))))) + ;; `:require' setups go first + ((and s1-require (not s2-require)) t) + ((and s2-require (not s1-require)) nil) + ;; `:straight' setups go last + ((and s1-straight (not s2-straight)) nil) + ((and s2-straight (not s1-straight)) t) + ;; otherwise, sort lexigraphically + (t (string< s1 s2)))))))))))) (defun +init-sort-then-save () "Sort init.el, then save it." (interactive) (+init-sort) - (save-buffer)) + (if (fboundp #'user-save-buffer) + (user-save-buffer) + (save-buffer))) ;;; Add `setup' forms to `imenu-generic-expression' @@ -79,11 +81,11 @@ are sorted lexigraphically." "Recognize `setup' forms in `imenu'." ;; `imenu-generic-expression' automatically becomes buffer-local when set (setf (alist-get "Setup" imenu-generic-expression nil nil 'string-equal) - (list - (rx (: bol (* space) - "(setup" (+ space) - (group (? "(") (* nonl)))) - 1))) + (list + (rx (: bol (* space) + "(setup" (+ space) + (group (? "(") (* nonl)))) + 1))) ;;; Major mode diff --git a/lisp/+org.el b/lisp/+org.el index fc1caea..090af5a 100644 --- a/lisp/+org.el +++ b/lisp/+org.el @@ -253,9 +253,9 @@ instead of the true count." ;;; org-insert-link-dwim - https://xenodium.com/emacs-dwim-do-what-i-mean/ -(defun +org-insert-link-dwim () +(defun +org-insert-link-dwim (&optional interactivep) "Like `org-insert-link' but with personal dwim preferences." - (interactive) + (interactive '(t)) (let* ((point-in-link (org-in-regexp org-link-any-re 1)) (clipboard-url (when (string-match-p (rx (sequence bos @@ -266,25 +266,30 @@ instead of the true count." (current-kill 0))) (region-content (when (region-active-p) (buffer-substring-no-properties (region-beginning) - (region-end))))) - (cond ((and region-content clipboard-url (not point-in-link)) - (delete-region (region-beginning) (region-end)) - (insert (org-link-make-string clipboard-url region-content))) - ((and clipboard-url (not point-in-link)) - (insert (org-link-make-string - clipboard-url - (read-string "title: " - (with-current-buffer - (url-retrieve-synchronously - clipboard-url) - (dom-text - (car - (dom-by-tag (libxml-parse-html-region - (point-min) - (point-max)) - 'title)))))))) - (t - (call-interactively 'org-insert-link))))) + (region-end)))) + (org-link (when clipboard-url + (org-link-make-string + clipboard-url + (or region-content + (read-string "title: " + (with-current-buffer + (url-retrieve-synchronously + clipboard-url) + (dom-text + (car + (dom-by-tag (libxml-parse-html-region + (point-min) + (point-max)) + 'title)))))))))) + (if interactivep + (cond ((and region-content clipboard-url (not point-in-link)) + (delete-region (region-beginning) (region-end)) + (insert org-link)) + ((and clipboard-url (not point-in-link)) + (insert org-link)) + (t + (call-interactively 'org-insert-link))) + org-link))) ;;; Navigate headings with widening @@ -409,5 +414,32 @@ the deletion might narrow the column." (dotimes (_ fill-column) (insert "-"))) +;; Follow links, DWIM style + +(defun +org-open-at-point-dwim (&optional arg) + "Open thing at point, or if there isn't something, list things." + (interactive "P") + (save-excursion + (let* ((this-char-type (org-element-type (org-element-context))) + (prev-char-type (save-excursion + (backward-char) + (org-element-type (org-element-context)))) + (types '(citation citation-reference clock comment comment-block + footnote-definition footnote-reference headline + inline-src-block inlinetask keyword link + node-property planning src-block timestamp)) + (type this-char-type)) + (when (and (memq this-char-type types) (memq prev-char-type types)) + (backward-char) + (setq type prev-char-type)) ; what the fuckckckckck + (if (memq type types) + (progn (org-open-at-point arg)) + (while (not + (progn + (org-back-to-heading) + (car (org-offer-links-in-entry (current-buffer) (point) 1)))) + (org-up-heading-all 1)) + (org-open-at-point arg))))) + (provide '+org) ;;; +org.el ends here diff --git a/lisp/acdw.el b/lisp/acdw.el index 9361cdf..262c15e 100644 --- a/lisp/acdw.el +++ b/lisp/acdw.el @@ -143,7 +143,7 @@ within a `with-current-buffer' form." (let ((pred (or predicate t))) (dolist (buf (buffer-list)) (with-current-buffer buf - (when (funcall pred buf) + (when (if (fboundp pred) (funcall pred buf) pred) (funcall func)))))) ;; https://github.com/cstby/emacs.d/blob/main/init.el#L67 @@ -176,14 +176,15 @@ surrounded by empty lines, so opening a paragraph means to make three blank lines, then place the point on the second one." (interactive "*") (unless (derived-mode-p 'special-mode 'lui-mode 'comint-mode) - ;; Go to next blank line. This /isn't/ `end-of-paragraph-text' because - ;; that's weird with org, and I'm guessing other modes too. - (while (not (looking-at "^$")) - (forward-line 1)) - (newline) - (delete-blank-lines) - (newline 2) - (previous-line))) + ;; Go to next blank line. This /isn't/ `end-of-paragraph-text' because + ;; that's weird with org, and I'm guessing other modes too. + (while (and (not (looking-at "^$")) + (< (point) (point-max))) + (forward-line 1)) + (newline) + (delete-blank-lines) + (newline 2) + (previous-line))) (defun +split-window-then (&optional where arg) "Split the window into a new buffer. -- cgit 1.4.1-21-gabe81