Actualizar
Este comportamiento se discutió en el error # 34374 y se fusionó el 15/02/2019 .
Entonces, en Emacs 27, llamar eww
con un argumento de prefijo le dice que use un nuevo búfer en lugar de reutilizar el *eww*
búfer predeterminado .
Me sorprende que esta funcionalidad no sea solo incorporada. ¿Me lo estoy perdiendo?
Si y no. Se agregó una funcionalidad similar en Emacs 26 como el comando eww-open-in-new-buffer
, que está vinculado a los M-RETbúferes EWW de forma predeterminada:
eww-open-in-new-buffer is an interactive compiled Lisp function in
‘eww.el’.
It is bound to M-RET, <menu-bar> <Eww> <Follow URL in new buffer>.
(eww-open-in-new-buffer)
Fetch link at point in a new EWW buffer.
El único problema es que, al momento de escribir, este comando se limita a trabajar solo en buffers EWW. En particular, arroja un user-error
enlace si no se encuentra un enlace significativo en el punto, según lo determinado por la opción del usuario eww-suggest-uris
:
eww-suggest-uris is a variable defined in ‘eww.el’.
Its value is
(eww-links-at-point url-get-url-at-point eww-current-url)
Documentation:
List of functions called to form the list of default URIs for ‘eww’.
Each of the elements is a function returning either a string or a list
of strings. The results will be joined into a single list with
duplicate entries (if any) removed.
You can customize this variable.
This variable was introduced, or its default value was changed, in
version 25.1 of Emacs.
Una limitación adicional del comando es que no solicita al usuario una URL o términos de búsqueda, como lo eww
haría el comando .
Aquí hay un ejemplo simple de cómo podría salvar estas diferencias entre eww
y eww-open-in-new-buffer
:
(defun my-eww-new-buffer (url)
"Like `eww', but fetch URL in a new EWW buffer."
(interactive (advice-eval-interactive-spec (cadr (interactive-form 'eww))))
(let ((eww-suggest-uris (list (lambda () url))))
(eww-open-in-new-buffer)))
Lo que esto hace es primero llamar a la interactive
especificación de eww
, que solicita URL o términos de búsqueda como de costumbre. Luego llama eww-open-in-new-buffer
con las URL de entrada o los términos de búsqueda previamente ingresados como el único URI sugerido, para que el comando no haga berrinche.
Este comando funcionará tanto dentro como fuera de los buffers EWW, por lo que puede actuar como un reemplazo directo para el valor predeterminado eww-open-in-new-buffer
, si lo prefiere:
(with-eval-after-load 'eww
(define-key eww-mode-map [remap eww-open-in-new-buffer] #'my-eww-new-buffer))
De cualquier manera, puede invocarlo desde cualquier lugar M-xmy-eww-new-buffer
RETo vincularlo globalmente a una tecla más conveniente.
eww
con un argumento prefijo; mira mi respuesta a continuación.