Cập nhật
Hành vi này đã được thảo luận trong lỗi # 34374 và được hợp nhất vào năm 2019-02-15 .
Vì vậy, trong Emacs 27, việc gọi eww
với một đối số tiền tố cho nó sử dụng bộ đệm mới thay vì sử dụng lại *eww*
bộ đệm mặc định .
Tôi ngạc nhiên khi chức năng này không chỉ tích hợp sẵn. Có phải tôi chỉ thiếu nó?
Có và không. Chức năng tương tự đã được thêm vào trong Emacs 26 dưới dạng lệnh eww-open-in-new-buffer
, được liên kết với M-RETbộ đệm EWW theo mặc định:
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.
Vấn đề duy nhất là, tại thời điểm viết, lệnh này bị giới hạn chỉ hoạt động trong bộ đệm EWW. Cụ thể, nó sẽ ném user-error
nếu không tìm thấy liên kết có ý nghĩa tại điểm, như được xác định bởi tùy chọn người dùng 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.
Một hạn chế nữa của lệnh là nó không nhắc người dùng về URL hoặc cụm từ tìm kiếm, như lệnh eww
sẽ làm.
Đây là một ví dụ đơn giản về cách bạn có thể khắc phục những khác biệt giữa eww
và 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)))
Điều này không là lần đầu tiên kêu gọi các interactive
đặc tả của eww
, mà nhắc nhở cho các URL hoặc các điều khoản như thường lệ tìm kiếm. Sau đó, nó gọi eww-open-in-new-buffer
với các URL đầu vào trước đó hoặc cụm từ tìm kiếm dưới dạng URI được đề xuất duy nhất, để lệnh không nổi giận.
Lệnh này sẽ hoạt động cả bên trong và không có bộ đệm EWW, vì vậy nó có thể hoạt động như một sự thay thế thả xuống cho mặc định eww-open-in-new-buffer
, nếu bạn thích:
(with-eval-after-load 'eww
(define-key eww-mode-map [remap eww-open-in-new-buffer] #'my-eww-new-buffer))
Dù bằng cách nào, bạn có thể gọi nó từ bất cứ đâu như M-xmy-eww-new-buffer
REThoặc liên kết nó trên toàn cầu với một khóa thuận tiện hơn.
eww
bằng đối số tiền tố; xem câu trả lời của tôi dưới đây