Обновить
Это поведение обсуждалось в ошибке # 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
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
с префиксным аргументом; см. мой ответ ниже.