给 perps-mode 适配 eww

  ;; Eww integration
  (persp-def-buffer-save/load
   :mode 'eww-mode :tag-symbol 'def-eww-status-buffer
   :save-vars '(major-mode eww-history eww-data eww-history-position)
   :after-load-function
   #'(lambda (b &rest _)
       (let ((cur-buf (current-buffer)))
         (with-current-buffer b
           (when-let ((url (plist-get eww-data :url)))
             (eww url nil)))
         ;; restore buffer
         (switch-to-buffer cur-buf))))

最近发现 eww 很好用,想尝试把它加到自己的工作流里,于是给 persp-mode 适配了 eww。把这段代码加到 persp-mode 的配置里就能用了。

注意,目前的 persp-mode 有一个 lexical binding 相关的 bug,所以上面这段函数会报“找不到 symbol”的错误。我已经提了一个 pr 修复,在合并之前想要用这段函数的话需要手动 patch 一下 persp-mode

1 个赞

楼主能大概介绍下你使用EWW的场景,以及persp-mode 会对其有什么帮助么?

结合 Emacs 的插件可以做一些看起来很炫酷的事情,比如

  • 让补全插件在笔记里直接补全网页上的内容
  • 高亮光标下的单词所有出现的地方(利用 symbol-overlay
  • 直接用翻译插件来翻译网页上的内容,并自动处理折行
  • 保存窗口布局下次自动加载(persp-mode 相当于模拟了一个工作区,保存了浏览器历史、浏览进度、打开的 buffer 和文件、窗口布局、所有的 tab 标签页等)
  • 使用 avy 在浏览器和笔记窗口间快速跳转
  • C-M-v 等快捷键在光标不离开笔记的情况下给浏览器翻页
  • 利用 eww-readable 简化网页显示

eww 浏览博客、教程、维基百科这种页面非常方便,而这些页面恰恰是需要长时间阅读的,在阅读的时候就可以利用 Emacs 的插件完成很多功能。eww 相当于把网页上的文字和图片自动拷贝到 Emacs 方便你处理。

2 个赞