Aggiornare
Questo comportamento è stato discusso nel bug n. 34374 e unito il 15-02-2019 .
Quindi in Emacs 27, chiamare eww
con un argomento prefisso gli dice di usare un nuovo buffer invece di riutilizzare il *eww*
buffer predefinito .
Sono sorpreso che questa funzionalità non sia solo integrata. Mi manca solo?
Sì e no. Funzionalità simili sono state aggiunte in Emacs 26 come comando eww-open-in-new-buffer
, che M-RETper impostazione predefinita è associato ai buffer EWW:
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.
L'unico problema è che, al momento della scrittura, questo comando si limita a funzionare solo nei buffer EWW. In particolare, genera un user-error
collegamento se non viene trovato alcun punto significativo, come determinato dall'opzione utente 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.
Un'ulteriore limitazione del comando è che non richiede all'utente un URL o termini di ricerca, come eww
farebbe il comando .
Ecco un semplice esempio di come è possibile colmare queste differenze tra eww
e 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)))
Quello che fa è prima chiamare la interactive
specifica di eww
, che richiede URL o termini di ricerca come al solito. Quindi chiama eww-open-in-new-buffer
con gli URL o i termini di ricerca precedentemente immessi come unico URI suggerito, in modo che il comando non dia una scossa.
Questo comando funzionerà sia all'interno che senza i buffer EWW, quindi può fungere da sostituzione drop-in per impostazione predefinita eww-open-in-new-buffer
, se si preferisce:
(with-eval-after-load 'eww
(define-key eww-mode-map [remap eww-open-in-new-buffer] #'my-eww-new-buffer))
Ad ogni modo, puoi invocarlo da qualsiasi luogo M-xmy-eww-new-buffer
RETo legarlo globalmente a una chiave più conveniente.
eww
con un argomento prefisso; vedi la mia risposta qui sotto.