我将Emacs配置为在eww中打开新链接,如下所示:
(setq browse-url-browser-function 'eww-browse-url)
现在当我点击一个链接时,它会在同一个缓冲区中打开。
我希望它打开一个新窗口(即垂直分割,如 C - x 3 )并在右侧新创建的框架中打开页面。所以我仍然在左边有原始的组织模式笔记。
[编辑]
我砍了一些东西。但它只有在我激活热键时才有效,而不是在另一个函数打开链接时。
理想情况下,我需要类似下面的内容,但每当我打开链接时(例如在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)
))
它会杀死其他窗口,打开新窗口,切换到新窗口,然后按返回[配置为在我的配置中打开链接]。
然后在eww-mode a' Q' (大写)退出会话并杀死另一个窗口,以避免打开太多窗口。
这不是最优雅的解决方案。我对更好的想法持开放态度?
答案 0 :(得分:3)
我有类似的问题,希望打开多个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))
答案 1 :(得分:2)
虽然罗素的答案在过去可能是正确的,但eww-current-title
和eww-current-url
已被废弃,而支持名为eww-data
的缓冲区本地plist。
当前的eww-implementation还包括在呈现缓冲区后需要插入的钩子,从而避免了像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)
您也可以使用此挂钩添加所需的键绑定。