From a6fd6508c9f853df9f0a61079f2268cd88e3d5f7 Mon Sep 17 00:00:00 2001 From: Case Duckworth Date: Mon, 16 Aug 2021 22:48:29 -0500 Subject: Break out functionality into other files --- lisp/acdw-browse-url.el | 122 ++++++++++++++++++++++++++++++++++++++++++++++++ lisp/acdw-consult.el | 37 +++++++++++++++ lisp/acdw-lisp.el | 25 ++++++++++ lisp/acdw.el | 79 ++----------------------------- 4 files changed, 187 insertions(+), 76 deletions(-) create mode 100644 lisp/acdw-browse-url.el create mode 100644 lisp/acdw-consult.el create mode 100644 lisp/acdw-lisp.el (limited to 'lisp') diff --git a/lisp/acdw-browse-url.el b/lisp/acdw-browse-url.el new file mode 100644 index 0000000..93f470c --- /dev/null +++ b/lisp/acdw-browse-url.el @@ -0,0 +1,122 @@ +;;; acdw-browse-url.el -*- lexical-binding: t; coding: utf-8-unix -*- +;; +;; Add-ons to `browse-url'. + +(defvar browse-url-mpv-arguments nil + "Arguments to pass to mpv in `browse-url-mpv'.") + +(defun browse-url-mpv (url &optional new-window) + "Play `URL' in mpv." + (interactive (browse-url-interactive-arg "Video URL: ")) + (ignore new-window) ;; mpv always opens a new window + (let* ((url (browse-url-encode-url url)) + (process-environment (browse-url-process-environment))) + (message "Playing %s in mpv..." url) + (apply #'start-process + (concat "mpv " url) nil + "mpv" + (append + browse-url-mpv-arguments + (list url))))) + +(defvar browse-url-feh-arguments '("--auto-zoom" + "--geometry" "800x600") + "Arguments to pass to feh in `browse-url-feh'.") + +(defun browse-url-feh (url &optional new-window) + "Open `URL' in feh." + (interactive (browse-url-interactive-arg "Video URL: ")) + (ignore new-window) ;; mpv always opens a new window + (let* ((url (browse-url-encode-url url)) + (process-environment (browse-url-process-environment))) + (message "Opening %s in feh..." url) + (apply #'start-process + (concat "feh " url) nil + "feh" + (append + browse-url-feh-arguments + (list url))))) + +(defun acdw/browse-url-set-handlers (handlers) + "Set handlers for `browse-url'. +If Emacs' version is 28 or higher, set `browse-url-handlers'. +Else, set `browse-url-browser-function'; it's deprecated in 28+." + (set-default (if (version< emacs-version "28") + #'browse-url-browser-function + #'browse-url-handlers) + handlers)) + +;;; URL regexp +;; really, I just want to add gemini:// protocol, but I'm going to do some +;; reverse-engineering here. +(defvar acdw/button-protocols '("http" + "https" + "shttp" + "shttps" + "ftp" + "file" + "gopher" + "nntp" + "news" + "telnet" + "wais" + "mailto" + "info") + "The list of protocols to splice into `browse-url-button-regexp'.") + +(defun acdw/build-button-url-regexp () + "Build `browse-url-button-regexp' from `acdw/button-protocols'. +I used `xr' (not included in Emacs) to get the RX form of the +default, so I can easily splice the list into it. THIS IS +BRITTLE AF!!!" + (rx-to-string ; thanks wgreenhouse! + `(seq word-boundary + (group + (group + (or "www." + (seq + (group (or ,@acdw/button-protocols)) + ":"))) + (opt + (group "//" + (one-or-more + (any "0-9a-z" "._-")) + ":" + (zero-or-more + (any "0-9")))) + (or + (seq + (one-or-more + (any "0-9a-z" "!#$%&*+,./:;=?@\\_~-" word)) + "(" + (one-or-more + (any "0-9a-z" "!#$%&*+,./:;=?@\\_~-" word)) + (zero-or-more + (any "0-9a-z" "#$%&*+/=@\\_~-" word)) + ")" + (opt + (one-or-more + (any "0-9a-z" "!#$%&*+,./:;=?@\\_~-" word)) + (any "0-9a-z" "#$%&*+/=@\\_~-" word))) + (seq + (one-or-more + (any "0-9a-z" "!#$%&*+,./:;=?@\\_~-" word)) + (any "0-9a-z" "#$%&*+/=@\\_~-" word))))))) + +(defun acdw/add-button-url-regexp-protocol (proto) + "Add PROTO to `browse-url-button-regexp' +First, add PROTO to `acdw/button-protocols'. +Then, build `browse-url-button-regexp' with the new protocol." + (add-to-list 'acdw/button-protocols proto) + (setq-default browse-url-button-regexp (acdw/build-button-url-regexp))) + +;;; Browse-URL tweaks + +;; convert twitter.com to nitter +(defun acdw/eww-browse-twitter-url (url &rest args) + "Browse a Twitter.com URL using Nitter." + (let* ((nitter "nitter.snopyta.org") + (url (replace-regexp-in-string "twitter\\.com" nitter url))) + (eww-browse-url url args))) + +(provide 'acdw-browse-url) diff --git a/lisp/acdw-consult.el b/lisp/acdw-consult.el new file mode 100644 index 0000000..e6995f5 --- /dev/null +++ b/lisp/acdw-consult.el @@ -0,0 +1,37 @@ +;;; acdw-consult.el -*- lexical-binding: t; coding: utf-8-unix -*- + +;; Customization for consult. + +(require 'consult) + +;; "Sensible" functions +(defun acdw-consult/sensible-grep (&optional arg) + "Perform `consult-git-grep' if in a git project, otherwise `consult-ripgrep' +if ripgrep is installed, otherwise `consult-grep'." + (interactive "P") + (cond ((executable-find "rg") + (call-interactively #'consult-ripgrep)) + ((string-equal (vc-backend buffer-file-name) "Git") + (call-interactively #'consult-git-grep)) + (t (call-interactively #'consult-grep)))) + +(defun acdw-consult/sensible-find (&optional arg) + "Peform `consult-locate' if locate is installed, otehrwise `consult-find'." + (interactive "P") + (cond ((executable-find "locate") (call-interactively #'consult-locate)) + (t (call-interactively #'consult-find)))) + +;; Orderless Regexp Compiler! -- from Consult Wiki +(defun consult--orderless-regexp-compiler (input type) + (setq input (orderless-pattern-compiler input)) + (cons + (mapcar (lambda (r) (consult--convert-regexp r type)) input) + (lambda (str) (orderless--highlight input str)))) + +(defun acdw-consult/complete-in-region (&rest args) + (apply (if vertico-mode + #'consult-completion-in-region + #'completion--in-region) + args)) + +(provide 'acdw-consult) diff --git a/lisp/acdw-lisp.el b/lisp/acdw-lisp.el new file mode 100644 index 0000000..8f551c9 --- /dev/null +++ b/lisp/acdw-lisp.el @@ -0,0 +1,25 @@ +;;; acdw-lisp.el -*- lexical-binding: t; coding: utf-8-unix -*- +;; +;; Extras for Lisp modes. + +(defvar lispy-modes '(emacs-lisp-mode + eval-expression-minibuffer + ielm-mode + lisp-mode + lisp-interaction-mode + scheme-mode + slime-repl-mode + sly-mrepl-mode) + "List of modes that are lisp-like enough to hook packages into.") + +(defun acdw/eval-region-or-buffer () + (interactive) + (if (region-active-p) + (let ((begin (region-beginning)) + (end (region-end))) + (with-message (format "Evaluating %S -> %S" begin end) + (eval-region begin end))) + (with-message "Evaluating buffer" + (eval-buffer)))) + +(provide 'acdw-lisp) diff --git a/lisp/acdw.el b/lisp/acdw.el index 2aa6c1f..8cbe16d 100644 --- a/lisp/acdw.el +++ b/lisp/acdw.el @@ -318,7 +318,9 @@ With a prefix argument, run git pull on the repo first." (insert s) (let ((sentence-end-double-space nil)) (unfill-region (point-min) (point-max))) - (copy-region-as-kill (point-min) (point-max))))) + (copy-region-as-kill (point-min) (point-max)) + (when (called-interactively-p 'interactive) + (indicate-copied-region))))) (defun acdw/dir (&optional file make-directory) "Place Emacs files in one place. @@ -442,81 +444,6 @@ It's called 'require-private' for historical reasons." (load (expand-file-name "private.el" user-emacs-directory) :noerror :nomessage)) - -;;; URL regexp -;; really, I just want to add gemini:// protocol, but I'm going to do some -;; reverse-engineering here. - -(defvar acdw/button-protocols '("http" - "https" - "shttp" - "shttps" - "ftp" - "file" - "gopher" - "nntp" - "news" - "telnet" - "wais" - "mailto" - "info") - "The list of protocols to splice into `browse-url-button-regexp'.") - -(defun acdw/build-button-url-regexp () - "Build `browse-url-button-regexp' from `acdw/button-protocols'. -I used `xr' (not included in Emacs) to get the RX form of the -default, so I can easily splice the list into it. THIS IS -BRITTLE AF!!!" - (rx-to-string ; thanks wgreenhouse! - `(seq word-boundary - (group - (group - (or "www." - (seq - (group (or ,@acdw/button-protocols)) - ":"))) - (opt - (group "//" - (one-or-more - (any "0-9a-z" "._-")) - ":" - (zero-or-more - (any "0-9")))) - (or - (seq - (one-or-more - (any "0-9a-z" "!#$%&*+,./:;=?@\\_~-" word)) - "(" - (one-or-more - (any "0-9a-z" "!#$%&*+,./:;=?@\\_~-" word)) - (zero-or-more - (any "0-9a-z" "#$%&*+/=@\\_~-" word)) - ")" - (opt - (one-or-more - (any "0-9a-z" "!#$%&*+,./:;=?@\\_~-" word)) - (any "0-9a-z" "#$%&*+/=@\\_~-" word))) - (seq - (one-or-more - (any "0-9a-z" "!#$%&*+,./:;=?@\\_~-" word)) - (any "0-9a-z" "#$%&*+/=@\\_~-" word))))))) - -(defun acdw/add-button-url-regexp-protocol (proto) - "Add PROTO to `browse-url-button-regexp' -First, add PROTO to `acdw/button-protocols'. -Then, build `browse-url-button-regexp' with the new protocol." - (add-to-list 'acdw/button-protocols proto) - (setq-default browse-url-button-regexp (acdw/build-button-url-regexp))) - -;;; Browse-URL tweaks - -;; convert twitter.com to nitter -(defun acdw/eww-browse-twitter-url (url &rest args) - "Browse a Twitter.com URL using Nitter." - (let* ((nitter "nitter.snopyta.org") - (url (replace-regexp-in-string "twitter\\.com" nitter url))) - (eww-browse-url url args))) - ;;; Recentf renaming with dired ;; from ... somewhere. 'rjs', apparently? -- cgit 1.4.1-21-gabe81