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-title
和 eww-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)
您也可以使用此挂钩来添加所需的键绑定。
我将 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-title
和 eww-current-url
已经过时,取而代之的是名为 eww-data
.
当前的 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)
您也可以使用此挂钩来添加所需的键绑定。