> Thank you Iñigo!
> that seems reasonable, can you had the defun for the
> isr/open-url as well please.
Well, my use cases are a bit convoluted, I use different browsers
depending on the web page, so I configured a specialized function
to let me select the preferred one in each case.
But note that you don't need all this complexity in the case you
mentioned initially, just use =xwidget-webkit-browse-url=.
Anyway, here you have the code:
#+begin_src emacs-lisp
;;;; open url
(setq browse-url-generic-program "firefox"
browse-url-browser-function 'eww-browse-url)
(defvar isr/open-url-browsers-list '("firefox --private-window" "firefox container"
"firefox" "firefox --new-window"
"eww" "webkit" "external" "qutebrowser"
; "flatpak run org.gnome.Eolie" "vivaldi" "vivaldi --incognito" "xwidget"
"epiphany"
"chromium-freeworld --incognito" "chromium-freeworld")
"Web browsers list.")
(defun isr/open-url (url &optional browser)
"Open URL with BROWSER.
if BROWSER is not present or symbol `external', open with default external configured browser such as firefox
If BROWSER is symbol `eww', open with internal eww browser
if BROWSER is symbol `xwidget', open with Emacs 25+ XWidget
if BROWSER is symbol `webkit', open with Emacs 28+ webkit module
if BROWSER is symbol `select', ask user for browser
if BROWSER is symbol `firefox container', open in firefox container
if BROWSER is a string, open with that browser."
(when (stringp url)
(setq url (isr/sanitize-url url))
(catch 'exit
(when (eq browser 'select)
;; https://emacs.stackexchange.com/questions/8115/make-completing-read-respect-sorting-order-of-a-collection/8122
(setq browser (completing-read "Select web browser to open the url: " isr/open-url-browsers-list))
(unless browser
(message "No browser selected")
(throw 'exit "No browser selected")))
(cond
((or (string= browser "eww") (eq browser 'eww)) (eww-browse-url url t))
((or (string= browser "external") (eq browser 'external)) (browse-url-generic url))
((or (string= browser "xwidget") (eq browser 'xwidget)) (xwidget-webkit-browse-url url t))
((or (string= browser "webkit") (eq browser 'webkit)) (webkit-browse-url url))
((or (string= browser "firefox container") (eq browser 'firefox-container))
(let ((browse-url-generic-program "firefox")
(browse-url-generic-args nil))
(browse-url-generic (concat "ext+container:name=Temp&url=" (url-encode-url url)))))
((stringp browser) (let* ((lst (split-string browser))
(browse-url-generic-program (car lst))
(browse-url-generic-args (cdr lst)))
(browse-url-generic url)))
;; (t (eww-browse-url url)))))
(t (browse-url-generic url))))))
(defun isr/open-url-at-point (&optional browser)
"Open url at point, optionally use BROWSER."
(interactive "P")
(when (equal browser '(4))
(setq browser 'select))
(let ((url (thing-at-point-url-at-point)))
(if (stringp url)
(isr/open-url url browser)
(message "No URL at point"))))
(defun isr/sanitize-url (url)
"Use saner services."
(interactive)
; twitr.gq, nitter.net, nitter.cc, nitter.eu, nitter.fdn.fr
; https://github.com/zedeus/nitter/wiki/Instances
(string-replace "twitter.com" "nitter.eu"
(string-replace "reddit.com" "teddit.net" url)))
(global-unset-key "\C-j")
(global-set-key "\C-j" 'isr/open-url-at-point)
(global-set-key "\M-j" #'(lambda () (interactive) (isr/open-url-at-point "eww")))
#+end_src
Kind regards,
--
Iñigo Serna