Atualizar
Esse comportamento foi discutido no bug # 34374 e mesclado em 15/02/2019 .
Assim, no Emacs 27, chamar eww
com um argumento prefix diz para usar um novo buffer em vez de reutilizar o *eww*
buffer padrão .
Estou surpreso que essa funcionalidade não seja apenas incorporada. Eu só estou sentindo falta disso?
Sim e não. Funcionalidade semelhante foi adicionada no Emacs 26 como o comando eww-open-in-new-buffer
, que está vinculado aos M-RETbuffers do EWW por padrão:
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.
O único problema é que, no momento da escrita, esse comando se limita a trabalhar apenas em buffers EWW. Em particular, ele lança um user-error
se nenhum link significativo for encontrado no momento, conforme determinado pela opção do usuário 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.
Uma limitação adicional do comando é que ele não solicita ao usuário um URL ou termos de pesquisa, como eww
seria o comando .
Aqui está um exemplo simples de como você pode superar essas diferenças entre eww
e 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)))
O que isto significa é primeira chamada a interactive
especificação de eww
que prompts para URLs ou pesquisar termos como de costume. Em seguida, chama eww-open-in-new-buffer
com os URLs inseridos anteriormente ou termos de pesquisa como o único URI sugerido, para que o comando não faça birra.
Este comando funcionará dentro e sem os buffers EWW, portanto, ele pode atuar como um substituto para o padrão eww-open-in-new-buffer
, se você preferir:
(with-eval-after-load 'eww
(define-key eww-mode-map [remap eww-open-in-new-buffer] #'my-eww-new-buffer))
De qualquer forma, você pode invocá-lo de qualquer lugar M-xmy-eww-new-buffer
RETou vinculá-lo globalmente a uma chave mais conveniente.
eww
com um argumento de prefixo; veja minha resposta abaixo.