एकाधिक eww बफ़र्स बनाने के लिए सरल विधि


10

M-x ewwurl या कीवर्ड के लिए संकेत देता है और एक नया *eww*बफर खोलता है । में eww-mode, के Gलिए बाध्य है eww, जो एकल eww बफर की सामग्री को प्रतिस्थापित करता है।

विभिन्न वेबपृष्ठों के लिए कई बफ़र्स बनाने के लिए, मैंने एक नया बफर बनाने, eww-modeमैन्युअल रूप से सेट करने , फिर एक URL पर जाने के लिए G(या M-x eww) दबाने का सहारा लिया है ।

मैं आसानी से एक फ़ंक्शन लिख सकता हूं जो मेरे लिए यह सब करता है, लेकिन मुझे आश्चर्य है कि यह कार्यक्षमता सिर्फ अंतर्निहित नहीं है। क्या मैं इसे याद कर रहा हूं?


Emacs 27 अब ewwएक उपसर्ग तर्क के साथ कॉल करने के लिए समर्थन जोड़ता है; मेरा जवाब नीचे देखें।
तुलसी

जवाबों:


6

आप सही हैं जो ewwस्वचालित रूप से आपके लिए नए बफ़र्स नहीं बनाता है। लेकिन मैं ergoemacs.org से इस ट्रिक का उपयोग कर रहा हूं और यह बहुत अच्छा है!

नीचे दिए गए eval'ed के साथ, हर बार जब आप M-x ewwएक गैर-ईएवी बफर से करते हैं, तो एक अद्वितीय ईएवी बफर बनाया जाएगा।

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

यदि आप एक eww बफ़र में रहते हुए एक नया eww बफ़र स्पॉन करना चाहते हैं, तो नीचे दी गई सलाह को स्पष्ट करें (आपको अभी भी उपरोक्त एवैल्यू करने की आवश्यकता होगी ताकि नए ewwबफ़र्स को अनन्य नाम असाइन किए जाएँ)।

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

यह मेरे लिए Emacs 25 में काम नहीं कर रहा है (मैं मास्टर से निर्माण कर रहा हूं)। मुझे आंशिक फिक्सिंग का उपयोग करना पड़ा rename-uniquely, हालांकि, अगर मैं ewwगैर-ईएवी बफर से सक्रिय करता हूं तो यह प्रभावी है । यदि मैं एक eww बफर में हूँ, हालांकि, हुक आग नहीं करता है, क्योंकि मोड बदल नहीं रहा है। कम से कम मुझे लगता है कि यही हो रहा है।
आरपी डिलन

आप सही हे। मैंने जो पोस्ट किया है वह ठीक उसी तरह से काम करता है जैसा कि आप M-x ewwएक गैर-ईएवी बफर से करते हैं। यह स्पष्ट नहीं था कि क्या आप एक ईएवी बफर में रहते हुए एक नया ईडब्ल्यू बफर स्पॉन बनाने का इरादा कर रहे थे। अगर मैं कुछ लेकर आता हूं तो मैं समाधान को अपडेट करूंगा। मैं मास्टर के नवीनतम निर्माण पर भी हूं।
कौशल मोदी

यह व्यवहार ewwफ़ंक्शन के डिज़ाइन में है जैसा कि स्रोत कोड में देखा गया है (pop-to-buffer-same-window (if (eq major-mode 'eww-mode) (current-buffer) (get-buffer-create "*eww*"))):।
कौशल मोदी

@RPillon आपके लिए सलाह कार्यों के साथ अद्यतन देखें।
कौशल मोदी

अद्यतन के लिए धन्यवाद! सलाह का उपयोग करने वाला दृष्टिकोण वास्तव में आग नहीं लगता है। मुझे लगता है कि एक फ़ंक्शन का उपयोग करके एक सरल दृष्टिकोण मुझे सबसे अच्छा लग सकता है।
आरपी डिलन

3

ऐसा लगता ewwहै कि इस व्यवहार से बचने के लिए डिज़ाइन किया गया है। यह फ़ंक्शन, eww-newतब बुलाया जा सकता है जब एक नया eww बफर वांछित होता है:

(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

अपडेट करें

इस व्यवहार को बग # 34374 में चर्चा की गई और 2019-02-15 को विलय कर दिया गया ।

इसलिए Emacs 27 में, ewwएक उपसर्ग तर्क के साथ कॉल करना इसे डिफ़ॉल्ट *eww*बफर का पुन: उपयोग करने के बजाय एक नए बफर का उपयोग करने के लिए कहता है ।


मुझे आश्चर्य है कि यह कार्यक्षमता अभी बिल्ट-इन नहीं है। क्या मैं इसे याद कर रहा हूं?

हां और ना। इसी तरह की कार्यक्षमता Emacs 26 में कमांड के रूप में जोड़ी गई थी eww-open-in-new-buffer, जो M-RETडिफ़ॉल्ट रूप से 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.

एकमात्र समस्या यह है कि, लेखन के समय, यह कमांड केवल EWW बफ़र्स में काम करने तक सीमित है। विशेष रूप से, यह फेंकता है user-errorयदि उपयोगकर्ता विकल्प द्वारा निर्धारित बिंदु पर कोई सार्थक लिंक नहीं मिलता है, तो 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.

कमांड की एक और सीमा यह है कि यह उपयोगकर्ता को URL या खोज शब्दों के लिए संकेत नहीं देता है, जैसा कि कमांड ewwकरेगा।

यहाँ कैसे आप के बीच इन मतभेदों को पाटने सकता का एक सरल उदाहरण है ewwऔर 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)))

यह जो करता है, पहले उस interactiveयुक्ति को कहते हैं eww, जो URL या खोज शब्दों के लिए हमेशा की तरह संकेत देती है। यह तब eww-open-in-new-bufferपहले के इनपुट URL के साथ कॉल करता है या केवल सुझाए गए URI के रूप में खोज शब्द करता है, ताकि कमांड टैंट्रम न फेंके।

यह कमांड EWW बफ़र के भीतर और बिना दोनों काम करेगा, इसलिए यह डिफ़ॉल्ट के लिए ड्रॉप-इन प्रतिस्थापन के रूप में कार्य कर सकता है eww-open-in-new-buffer, यदि आप चाहें तो:

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

किसी भी तरह से, आप इसे कहीं से भी लागू कर सकते हैं M-xmy-eww-new-bufferRETया इसे विश्व स्तर पर एक अधिक सुविधाजनक कुंजी से बांध सकते हैं।


0

मैंने थोड़ा आरपी डिलन स्निपेट बढ़ाया । जो (defalias 'w #'af/eww)नीचे दिए गए फ़ंक्शन का उपयोग करके उर्फ की तरह और खुले eww बनाने के लिए अच्छा उम्मीदवार बनाते हैं। एकमात्र अंतर सशर्त जांच है यदि *eww*बफर पहले से मौजूद है, तो नया बनाया जाता है, यदि मूल नहीं ewwहै।

(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

मैं 25.1 Emacs का उपयोग करता हूं और eww-open-in-new-bufferफ़ंक्शन नहीं है। इसलिए मुझे उस ईएवी बफर का नाम बदलना है, जो आमतौर पर मैं जिस पेज में हूं, उसके बारे में कुछ आसान शीर्षक के साथ हूं, और ewwEmacs में खोले गए किसी भी अन्य बफर से फिर से कॉल कर रहा हूं (उदाहरण के लिए बफर-मोड बफर, या डैड बफ़र्स से, खरोंच से, एक और दस्तावेज़, कोई भी) मुझे दूसरे eww बफर में ले जाता है। अंत में मैं Sवहाँ से चयन करने के लिए eww बफ़र्स सूची के साथ जाता हूँ । अजीब लेकिन यह काम करता है, और कुछ चरणों के साथ। मुझे आश्चर्य है कि eww-newशुरू से बिल्ट-इन क्यों नहीं किया गया। बेशक यह ऊपर दिए गए कोड के साथ क्लीनर है, मैं कोशिश करूँगा कि। मुझे यह देखकर खुशी हुई कि समारोह 26 Emacs में जोड़ा गया था।


Emacs 27 में, ewwएक उपसर्ग तर्क के साथ कॉल करना अब एक नया EWW बफर बनाता है; मेरा जवाब ऊपर देखिए।
तुलसी

यदि आप एक नया बफर नाम का आविष्कार नहीं करना चाहते हैं, तो साथ जाएं M-x rename-uniquely
स्टीफन

धन्यवाद टिप के लिए स्टीफन। मेरे पास डेबियन 9 है और मैं अब तक Emacs 27 :(
techapu

वैसे भी मुझे अपने Emacs को अपडेट करना होगा, मैं हर समय अंतर्निहित ब्राउज़र का उपयोग करता हूं। और w3m टैब के साथ मेरे प्रवाह को तोड़ता है। ईएवी व्यावहारिक है और यह मुझे चाहिए। यह सुविधा वास्तव में महत्वपूर्ण है, अपडेट के लिए धन्यवाद तुलसी, आपके द्वारा साझा की जाने वाली कस्टम कमांड मानक व्यवहार के लिए एक चतुर विकल्प लगती है। मैं ओआरजी फाइलों, सूचना बफ़र्स, टर्मिनलों और ईएवी ब्राउज़र के बीच हर समय जाता हूं और पिछले पृष्ठ को दफन किए बिना ईएवी को हाथ में लेना अच्छा होगा।
techapu

@ मैं उस समाधान के साथ जो समस्या देख रहा हूं, वह यह है कि मुझे यह जानना होगा कि बफर में क्या है इसलिए मैं बाद में वहां लौट रहा हूं। नाम-विशिष्ट उत्पादन क्या होगा?
techapu
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.