summaryrefslogtreecommitdiff
path: root/.config/emacs/modules/bd--browse.el
diff options
context:
space:
mode:
Diffstat (limited to '.config/emacs/modules/bd--browse.el')
-rw-r--r--.config/emacs/modules/bd--browse.el83
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."