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