Çoklu eww tamponları oluşturmak için basit yöntem


10

M-x ewwurl veya anahtar kelimeler ister ve yeni bir *eww*tampon açar . İçinde eww-mode, Gbağlı eww, tek eww arabellek içeriği yerini alır.

Farklı web sayfaları için birden çok arabellek oluşturmak için, yeni bir arabellek oluşturmaya, eww-modemanuel olarak ayarlamaya ve ardından bir URL'yi ziyaret etmek için G(veya M-x eww) tuşuna basmaya başvurdum .

Tüm bunları benim için yapan bir işlevi kolayca yazabilirim, ancak bu işlevin sadece yerleşik olmadığı için şaşırdım. Sadece özlüyor muyum?


Emacs 27 şimdi ewwbir önek argümanı ile çağrı için destek ekliyor ; cevabımı aşağıda görebilirsiniz.
Basil

Yanıtlar:


6

Bunun ewwsizin için otomatik olarak yeni arabellekler oluşturmayacağı konusunda haklısınız. Ama ergoemacs.org bu hile kullanıyor ve harika çalışıyor!

Aşağıdakiler değerlendirildiğinde, eww olmayanM-x eww bir tampondan her yaptığınızda , benzersiz bir eww tamponu oluşturulacaktır.

;; 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)

Yeni bir ara bellekte yeni bir yeni arabellek oluşturmak istiyorsanız, aşağıdaki önerileri değerlendirin (yine de yeni ewwarabelleklere benzersiz adlar atanması için yukarıdakileri değerlendirmeniz gerekir ).

;; 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)

Bu benim için Emacs 25'te işe yaramıyor (ustadan inşa ediyorum). Ben kısmi bir düzeltme aldım rename-uniquely, ancak, ben ewweww olmayan bir tampon etkinleştirirseniz etkili . Eğer eww arabelleğindeysem, kanca değişmiyor, çünkü mod değişmiyor. En azından bunun ne olduğunu düşünüyorum.
RP Dillon

Haklısın. Ne gönderdiğim sadece M-x ewweww olmayan bir tampondan yaparsanız tam olarak amaçlandığı gibi çalışır . Yeni bir eww buffer'dayken yeni bir eww buffer üretme niyetiniz olup olmadığı belli değildi. Bir şey bulursam çözümü güncelleyeceğim. Ben de en son ustanın yapımındayım.
Kaushal Modi

Bu davranış tasarımında olduğu ewwkaynak kodunda görülen işlevi: (pop-to-buffer-same-window (if (eq major-mode 'eww-mode) (current-buffer) (get-buffer-create "*eww*"))).
Kaushal Modi

@RPDillon Sizin için tavsiye çalışmaları ile güncellemeye bakın.
Kaushal Modi

Güncelleme için teşekkürler! Aslında tavsiye kullanan yaklaşım ateş gibi görünmüyor. Bir işlevi kullanarak daha basit bir yaklaşımın bana en uygun olduğunu düşünüyorum.
RP Dillon

3

ewwBu davranışı önlemek için tasarlanmış gibi görünüyor . Bu işlev,, eww-newyeni bir eww arabelleği istendiğinde çağrılabilir:

(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

Güncelleme

Bu davranış, hata # 34374'te tartışıldı ve 2019-02-15'te birleştirildi .

Emacs 27'de, ewwbir önek argümanı ile çağrılması , ona varsayılan *eww*arabelleği yeniden kullanmak yerine yeni bir tampon kullanmasını söyler .


Bu işlevin sadece yerleşik olmadığı için şaşırdım. Sadece özlüyor muyum?

Evet ve hayır. Emacs 26'da EWW arabelleklerinde varsayılan olarak bağlı olan komut olarak benzer işlevler eklendi :eww-open-in-new-bufferM-RET

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.

Tek sorun, yazma sırasında bu komutun yalnızca EWW arabellekleriyle çalışmakla sınırlı olmasıdır. Özellikle, user-errorkullanıcı seçeneği tarafından belirlenen noktada anlamlı bir bağlantı bulunmazsa atar 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.

Komutun diğer bir sınırlaması, komutun yaptığı gibi kullanıcıdan bir URL veya arama terimleri ewwistememesidir.

Aşağıda ewwve arasındaki bu farkları nasıl köprüleyebileceğinize dair basit bir örnek 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)))

Ne yapar ilk görüşme olduğunu interactiveSpec ait ewwher zamanki gibi arama terimlerini URL'ler için istemleri veya. Daha sonra eww-open-in-new-buffer, daha önce girilen URL'lerle veya arama terimleriyle önerilen tek URI olarak çağırır , böylece komut bir öfke nöbeti atmaz.

Bu komut hem EWW arabellekleri içinde hem de olmadan çalışacaktır, böylece eww-open-in-new-bufferisterseniz varsayılan için bir yedek değiştirme görevi görebilir :

(with-eval-after-load 'eww
  (define-key eww-mode-map [remap eww-open-in-new-buffer] #'my-eww-new-buffer))

Her iki durumda da, herhangi bir yerden herhangi bir yerden başlatabilir M-xmy-eww-new-bufferRETveya daha uygun bir anahtara global olarak bağlayabilirsiniz.


0

Biraz RP Dillon snippet'ini uzattım. Hangi (defalias 'w #'af/eww)aşağıdaki işlevi kullanarak eww gibi takma adlar oluşturmak ve açmak için iyi bir aday yapar . Tek fark, *eww*arabellek zaten varsa koşullu kontroldür , daha sonra yerel ewwçağrılmazsa yeni bir tane oluşturulur .

(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

Emacs 25.1 kullanıyorum ve eww-open-in-new-bufferfonksiyon orada değil. Bu yüzden içinde olduğum eww arabelleğini yeniden adlandırmam gerekiyor, genellikle içinde bulunduğum sayfa hakkında bazı kolay başlıklarla ve ewwEmacs'ta açılan başka bir arabellekten (örneğin, arabellek modu arabelleğinden veya yönlendirilmiş arabelleklerden), sıfırdan, başka bir belge, herhangi) beni başka bir eww arabelleğine götürür. Sonunda Soradan seçmek için eww tampon listesine gidiyorum . Garip ama işe yarıyor ve birkaç adımla. Acaba neden eww-newbaşlangıçta yerleşik değildi. Tabii ki yukarıdaki kod ile daha temiz, bunu bir deneyeceğim. Fonksiyonun Emacs 26'da eklendiğini gördüğüme sevindim.


Emacs 27'de, ewwbir önek bağımsız değişkeniyle çağrı yapmak artık yeni bir EWW arabelleği oluşturur; yukarıdaki cevabımı gör.
Basil

Yeni bir tampon adı icat etmek istemiyorsanız, ile devam edin M-x rename-uniquely.
Stefan

Stefan bahşiş için teşekkür ederim. Debian
9'um var

Her neyse, Emac'larımı güncellemem gerekecek, yerleşik tarayıcıyı her zaman kullanıyorum. Ve w3m sekmelerle akışımı kırar. Eww pratik ve tüm ihtiyacım olan. Bu özellik gerçekten önemlidir, güncelleme için Basil sayesinde, paylaştığınız özel komut standart davranışa akıllı bir alternatif gibi görünüyor. Her zaman org dosyaları, bilgi arabellekleri, terminaller ve eww tarayıcı arasında gidip bir önceki sayfayı gömmeden elinizde eww olması güzel olurdu.
techapu

@Stefan bu çözüm ile gördüğüm sorun, ben tampon içinde ne olduğunu bilmem gerek bu yüzden daha sonra orada dönüyorum. Yeniden adlandırma-benzersiz çıktı ne olurdu?
techapu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.