Aktualizacja
To zachowanie zostało omówione w błędzie # 34374 i połączone 15.02.2019 .
Tak więc w Emacs 27 wywołanie eww
z argumentem przedrostka mówi mu, aby używał nowego bufora zamiast ponownego użycia *eww*
bufora domyślnego .
Dziwi mnie, że ta funkcja nie jest tylko wbudowana. Po prostu mi tego brakuje?
Tak i nie. Podobna funkcjonalność została dodana w Emacsie 26 jako polecenie eww-open-in-new-buffer
, które M-RETdomyślnie jest powiązane z buforami 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.
Jedyny problem polega na tym, że w momencie pisania ta komenda jest ograniczona do działania tylko w buforach EWW. W szczególności zgłasza, user-error
jeśli nie zostanie znaleziony znaczący link w punkcie, zgodnie z opcją użytkownikaeww-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.
Kolejnym ograniczeniem polecenia jest to, że nie monituje on użytkownika o podanie adresu URL ani wyszukiwanych terminów jako polecenia eww
zrobiłoby .
Oto prosty przykład, jak można zlikwidować te różnice eww
i 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)))
Co to robi to najpierw zadzwoń interactive
Spec odeww
, co skłania do adresów URL lub poszukać terminy jak zwykle. Następnie wywołuje eww-open-in-new-buffer
z poprzednio wprowadzonymi adresami URL lub wyszukiwanymi terminami jako jedynym sugerowanym identyfikatorem URI, dzięki czemu polecenie nie wywołuje furii.
To polecenie będzie działać zarówno w buforach EWW, jak i bez nich, więc może działać jako zamiennik domyślny eww-open-in-new-buffer
, jeśli wolisz:
(with-eval-after-load 'eww
(define-key eww-mode-map [remap eww-open-in-new-buffer] #'my-eww-new-buffer))
Tak czy inaczej, możesz wywołać go z dowolnego miejsca M-xmy-eww-new-buffer
RETlub powiązać globalnie z wygodniejszym kluczem.
eww
z argumentem przedrostka; patrz moja odpowiedź poniżej.