Оновлення
Таку поведінку обговорювали в помилці # 34374 та об’єднувались 02.02.2015 .
Так, у 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
SPEC з 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-buffer
RETабо глобально прив’язати його до більш зручного ключа.
eww
з аргументом префікса; дивіться мою відповідь нижче.