diff options
Diffstat (limited to '.config/emacs/modules/bd--browse.el')
-rw-r--r-- | .config/emacs/modules/bd--browse.el | 83 |
1 files changed, 46 insertions, 37 deletions
diff --git a/.config/emacs/modules/bd--browse.el b/.config/emacs/modules/bd--browse.el index d6a09e4..fceccc3 100644 --- a/.config/emacs/modules/bd--browse.el +++ b/.config/emacs/modules/bd--browse.el @@ -2,11 +2,21 @@ ;;; Commentary: ;;; Code: -(require 'selector) -(require 'dash) (require 'fill-column) -(defvar bd/bookmarks nil) ;; in secret file -;;;; searching +(require 'transient) + +(defconst bd/bookmarks nil) +(defconst bd/browse-engine-list + '(("ddg" . ("https://www.duckduckgo.com/?q=" 3)) + ("web" . ("" 3)) + ("wkpa" . ("https://en.wikipedia.org/w/index.php?search=" 3)) + ("inv" . ("https://yewtu.be/search?q=" 0)) + ("ud" . ("https://www.urbandictionary.com/define.php?term=" 2)) + ("arch" . ("https://wiki.archlinux.org/index.php?title=Special%3ASearch&search=" 2)))) + +(defun bd/browse--engine-candidates () + (mapcar #'car bd/browse-engine-list)) + (defun bd/browse (url &optional pref &rest _) "Given PREF, launches URL in one of librewolf, torbrowser, icecat, or eww." @@ -18,40 +28,39 @@ icecat, or eww." (_ (start-process "librewolf" nil "librewolf" "--new-window" url)))) (setopt browse-url-browser-function 'bd/browse) -(defun bd/selector-bookmarks () - (selector-source-create - "Bookmarks" - :candidates - (-map - (lambda (b) (selector-candidate-create (car b) :value (cdr b))) - bd/bookmarks) - :actions - (list (lambda (x) (apply #'bd/browse x))))) - -(defmacro bd/search-candidate (name url pref) - `(selector-candidate-create - ,(concat "Search " name) - :type 'dummy - :action (lambda (_) (browse-url (concat ,url (selector-input)) ,pref)))) - -(defun bd/selector-search () - (selector-source-create - "Browser" - :candidates - (list (bd/search-candidate "DuckDuckGo" "https://www.duckduckgo.com/?q=" 3) - (bd/search-candidate "Wikipedia" "https://en.wikipedia.org/w/index.php?search=" 3) - (bd/search-candidate "Invidious" "https://yewtu.be/search?q=" 0) - (bd/search-candidate "Urban Dictionary" "https://www.urbandictionary.com/define.php?term=" 2) - (bd/search-candidate "Archwiki" "https://wiki.archlinux.org/index.php?title=Special%3ASearch&search=" 2) - (bd/search-candidate "Web" "" 3)))) - -(defun bd/visit-bookmark () - "Select and `browse-url' a bookmark." +(transient-define-argument bd/browse--engines () + "Toggles which search engine to use." + :description "engine" + :key "C-n" + :class 'transient-option + :unsavable t + :allow-empty nil + :always-read t + :argument "candidate=" + :init-value (lambda (obj) (oset obj value (car (bd/browse--engine-candidates)))) + :choices (bd/browse--engine-candidates)) + +(transient-define-suffix bd/browse--search (i) + :description "search" + :key "s" + (interactive "sstring: ") + (let ((engine (cdr (assoc (transient-arg-value "candidate=" (transient-args 'bd/browse-dispatcher)) + bd/browse-engine-list)))) + (browse-url (concat (car engine) i) (cadr engine)))) + +(transient-define-suffix bd/browse--bookmark () + :description "bookmarks" + :key "b" (interactive) - (unwind-protect - (selector - (list (bd/selector-bookmarks) - (bd/selector-search))))) + (let ((choice (completing-read "goto: " (mapcar #'car bd/bookmarks)))) + (apply #'bd/browse (cdr (assoc choice bd/bookmarks))))) + +(transient-define-prefix bd/browse-dispatcher () + ["Dispatcher > Browse\n" + [(bd/browse--engines) + "" + (bd/browse--search) + (bd/browse--bookmark)]]) (defun rip (url) "Play URL (or search string) in mpv." |