Mettre à jour
Ce comportement a été discuté dans le bogue # 34374 et fusionné le 2019-02-15 .
Ainsi, dans Emacs 27, l'appel ewwavec un argument préfixe lui indique d'utiliser un nouveau tampon au lieu de réutiliser le *eww*tampon par défaut .
Je suis surpris que cette fonctionnalité ne soit pas seulement intégrée. Suis-je juste en train de le manquer?
Oui et non. Des fonctionnalités similaires ont été ajoutées dans Emacs 26 en tant que commande eww-open-in-new-buffer, qui est liée aux M-RETtampons EWW par défaut:
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.
Le seul problème est qu'au moment de l'écriture, cette commande se limite à fonctionner uniquement dans les tampons EWW. En particulier, il lance un user-errorsi aucun lien significatif n'est trouvé au point, comme déterminé par l'option utilisateur 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.
Une autre limitation de la commande est qu'elle ne demande pas à l'utilisateur une URL ou des termes de recherche, comme le ewwferait la commande .
Voici un exemple simple de la façon dont vous pouvez combler ces différences entre ewwet 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)))
Ce que cela fait, c'est d'abord appeler la interactivespécification de eww, qui demande des URL ou des termes de recherche comme d'habitude. Il appelle ensuite eww-open-in-new-bufferavec les URL ou les termes de recherche précédemment entrés comme seul URI suggéré, afin que la commande ne fasse pas de crise.
Cette commande fonctionnera à la fois dans et sans les tampons EWW, elle peut donc agir comme un remplacement de remplacement pour la valeur par défaut eww-open-in-new-buffer, si vous préférez:
(with-eval-after-load 'eww
(define-key eww-mode-map [remap eww-open-in-new-buffer] #'my-eww-new-buffer))
Quoi qu'il en soit, vous pouvez l'invoquer de n'importe où M-xmy-eww-new-bufferRETou le lier globalement à une clé plus pratique.
ewwavec un argument préfixe; voir ma réponse ci-dessous.