Emacs 和 eww,在新 window 中打开链接?

Emacs and eww, open links in new window?

我将 Emacs 配置为在 eww 中打开新的 links,如下所示:

 (setq browse-url-browser-function 'eww-browse-url)

现在,当我单击 link 时,它会在同一个缓冲区中打开。

我希望它打开一个新的 window(即像 C - x 3 一样垂直拆分)并在右侧新创建的框架中打开页面.这样我左边还有原来的org-mode笔记。

[编辑]

我破解了一些东西。但它只在我激活热键时有效,而不是在另一个函数打开 link.

理想情况下,我想要像下面这样的东西,但是每当我打开 link(例如在 helm-google 中)。

(defun my/open-in-right-window ()
  "Open the selected link on the right window plane"
  (interactive)
  (delete-other-windows nil)
  (split-window-right nil)
  (other-window 1)
  (org-return nil)
)

(defun my/eww-quitAndSingleWin ()
  "Quit the current browser session and activate single window mode."
  (interactive)
  (quit-window nil)
  (delete-other-windows nil)
)

(defun my/eww-split-right ()
  "Splits the Window. Moves eww to the right and underlying content on the left."
  (interactive)
  (split-window-right nil)
  (quit-window nil)
  (other-window 1)
)

(global-set-key (kbd "H-r") 'my/open-in-right-window)    

(add-hook 'eww-mode-hook   ;no impact.
      (lambda ()
         (local-set-key (kbd "s") 'my/eww-split-right)
         (local-set-key (kbd "Q") 'my/eww-quitAndSingleWin)
   ))

它会杀死其他 windows,打开新的 window,切换到新的 window,然后按 return [配置为打开 links在我的配置中。
然后在 eww 模式下,一个 'Q'(大写)退出会话并杀死另一个 window,以避免打开太多 windows。

这不是最优雅的解决方案。我愿意接受更好的想法吗?

我有类似的问题想要打开多个 eww 缓冲区并通过建议 eww-render 做到了。您可能可以将代码放在那里以使其始终 运行.

(defadvice eww-render (after set-eww-buffer-name activate)
  (rename-buffer (concat "*eww-" (or eww-current-title
                                     (if (string-match "://" eww-current-url)
                                         (substring eww-current-url (match-beginning 0))
                                       eww-current-url)) "*") t))

虽然 russel 的回答在过去可能是正确的,但 eww-current-titleeww-current-url 已经过时,取而代之的是名为 eww-data.

的缓冲区本地 plist

当前的 eww 实现还包括我们需要在渲染缓冲区后插入的挂钩,从而避免需要执行 "messy" 之类的事情,例如 defadvice.

根据 2015 年 8 月和 this Git-commit,以下 elisp 适用于我:

(defun my-set-eww-buffer-title ()
  (let* ((title  (plist-get eww-data :title))
         (url    (plist-get eww-data :url))
         (result (concat "*eww-" (or title
                              (if (string-match "://" url)
                                  (substring url (match-beginning 0))
                                url)) "*")))
    (rename-buffer result t)))

(add-hook 'eww-after-render-hook 'my-set-eww-buffer-title)

您也可以使用此挂钩来添加所需的键绑定。