Méthode simple pour créer plusieurs tampons eww


10

M-x ewwdemande une URL ou des mots clés et ouvre un nouveau *eww*tampon. Dans eww-mode, Gest lié à eww, qui remplace le contenu du tampon eww unique.

Pour créer plusieurs tampons pour différentes pages Web, j'ai eu recours à la création d'un nouveau tampon, à un réglage eww-modemanuel, puis à une pression sur G(ou M-x eww) pour visiter une URL.

Je peux facilement écrire une fonction qui fait tout cela pour moi, mais je suis surpris que cette fonctionnalité ne soit pas uniquement intégrée. Suis-je juste en train de le manquer?


Emacs 27 ajoute désormais la prise en charge de l'appel ewwavec un argument préfixe; voir ma réponse ci-dessous.
Basil

Réponses:


6

Vous avez raison, cela ewwne crée pas automatiquement de nouveaux tampons pour vous. Mais j'ai utilisé cette astuce de ergoemacs.org et cela fonctionne très bien!

Avec l'évaluation ci-dessous, chaque fois que vous le faites à M-x ewwpartir d'un tampon non-eww , un tampon eww unique sera créé.

;; Auto-rename new eww buffers
(defun xah-rename-eww-hook ()
  "Rename eww browser's buffer so sites open in new page."
  (rename-buffer "eww" t))
(add-hook 'eww-mode-hook #'xah-rename-eww-hook)

Si vous souhaitez générer un nouveau tampon eww tout en étant dans un tampon eww, évaluez les conseils ci-dessous (vous devrez toujours évaluer ce qui précède afin que les nouveaux ewwtampons se voient attribuer des noms uniques).

;; C-u M-x eww will force a new eww buffer
(defun modi/force-new-eww-buffer (orig-fun &rest args)
  "When prefix argument is used, a new eww buffer will be created,
regardless of whether the current buffer is in `eww-mode'."
  (if current-prefix-arg
      (with-temp-buffer
        (apply orig-fun args))
    (apply orig-fun args)))  
(advice-add 'eww :around #'modi/force-new-eww-buffer)

Cela ne semble pas fonctionner pour moi dans Emacs 25 (je construis à partir du maître). J'ai cependant obtenu une correction partielle en utilisant rename-uniquelyce qui est efficace si ewwj'active à partir d'un tampon non-eww. Si je suis dans un tampon eww, cependant, le crochet ne se déclenche pas, car le mode ne change pas. Au moins, je pense que c'est ce qui se passe.
RP Dillon

Vous avez raison. Ce que j'ai publié ne fonctionne exactement comme prévu que si vous le faites à M-x ewwpartir d'un tampon non électronique. Il n'était pas clair si vous aviez l'intention de faire apparaître un nouveau tampon eww dans un tampon eww. Je mettrai à jour la solution si je trouve quelque chose. Je suis également sur la dernière version de master.
Kaushal Modi

Ce comportement est dans la conception de la ewwfonction comme on le voit dans le code source: (pop-to-buffer-same-window (if (eq major-mode 'eww-mode) (current-buffer) (get-buffer-create "*eww*"))).
Kaushal Modi

@RPDillon Voir la mise à jour avec les conseils qui vous conviennent.
Kaushal Modi

Merci pour la mise à jour! L'approche basée sur les conseils ne semble pas vraiment fonctionner. Je pense qu'une approche plus simple utilisant une fonction pourrait me convenir le mieux.
RP Dillon

3

Il semble ewwest conçu pour éviter ce comportement. Cette fonction eww-new,, peut être appelée lorsqu'un nouveau tampon eww est souhaité:

(defun eww-new ()
  (interactive)
  (let ((url (read-from-minibuffer "Enter URL or keywords: ")))
    (switch-to-buffer (generate-new-buffer "eww"))
    (eww-mode)
    (eww url)))

3

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.


0

J'ai étendu un extrait de RP Dillon . Ce qui en fait un bon candidat pour créer un alias comme (defalias 'w #'af/eww)et ouvrir eww en utilisant la fonction ci-dessous. La seule différence est la vérification conditionnelle si le *eww*tampon existe déjà, puis un nouveau est créé, sinon le natif ewwest invoqué.

(defun af/eww ()
  (interactive)
  (let ((eww-current-buffer (get-buffer "*eww*"))
         (url nil))
    (if (eq eww-current-buffer nil)
      (eww)
      (setq url (read-from-minibuffer "Enter URL or keywords: "))
      (switch-to-buffer (generate-new-buffer "eww"))
      (eww-mode)
      (eww url)
    )))

0

J'utilise Emacs 25.1 et la eww-open-in-new-bufferfonction n'est pas là. Je dois donc renommer le tampon eww dans lequel je me trouve, généralement avec un titre simple sur la page dans laquelle je me trouve, et appeler à nouveau à ewwpartir de tout autre tampon ouvert dans Emacs (par exemple à partir du tampon en mode tampon ou des tampons dired, à partir de zéro, un autre document, n'importe lequel) m'amène à un autre tampon eww. Enfin, je vais Sà la liste des tampons eww pour sélectionner à partir de là. Bizarre mais ça marche, et en quelques étapes. Je me demande pourquoi eww-newn'a pas été intégré dès le départ. Bien sûr, il est plus propre avec le code ci-dessus, je vais essayer. Je suis content de voir que la fonction a été ajoutée dans Emacs 26.


Dans Emacs 27, l'appel ewwavec un argument préfixe crée maintenant un nouveau tampon EWW; voir ma réponse ci-dessus.
Basil

Si vous ne voulez pas inventer un nouveau nom de tampon, allez-y M-x rename-uniquely.
Stefan

Merci Stefan pour le conseil. J'ai Debian 9 et je suis tellement loin d'Emacs 27 :(
techapu

Quoi qu'il en soit, je devrai mettre à jour mes Emacs, j'utilise tout le temps le navigateur intégré. Et w3m brise mon flux avec les onglets. Eww est pratique et c'est tout ce dont j'ai besoin. Cette fonctionnalité est vraiment importante, merci Basil pour la mise à jour, la commande personnalisée que vous partagez semble être une alternative intelligente au comportement standard. Je passe tout le temps entre les fichiers org, les tampons d'informations, les terminaux et le navigateur eww et ce serait bien d'avoir eww à portée de main sans enterrer la page précédente.
techapu

@Stefan le problème que je vois avec cette solution est que j'ai besoin de savoir ce qu'il y a dans le tampon, donc j'y retourne plus tard. Quelle serait la sortie uniquement renommée?
techapu
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.