面向产品经理的Emacs教程:30. 在Emacs里使用浏览器

· 1863字 · 4分钟

1 课程回顾 🔗

上节课,我们学习了如何在 Emacs 里通过 calibredb.el 插件看书,通过 Emacs 强大的书签和文本搜索能力、强大的编辑能力,使我们看书做笔记的效率大大提升。

今天我们学习如何在 Emacs 里使用浏览器。

2 概述 🔗

我一直秉承一个观点,Emacs 是一个非常棒的软件,如果能在 Emacs 里实现、并且实现的还不错的任务,如记笔记、写博客、写文档、编程等嗯,尽可能的考虑 All-in-one,但是并非所有的场景都适合用 Emacs 来解决,比如浏览器,尽管 Emacs 里有强大的 EAF,有传统的 EWW,有 xwidget,但独立的浏览器的体验还是更好一些,你可以安装各式各样的扩展,可以安装各种油猴脚本,可以实现各种各样的需求。

那 Emacs 里的浏览器就没有作用了吗?当然不是,至少 EWW 就可以做为一个非常好的看纯文本网站内容的好工具(至少去广告这一点做的太好了)。

当然也一定有不同观点的人,他们希望尽可能的 All-in-one,因此,今天会简单说一说在 Emacs 里使用浏览器。

3 EWW 🔗

EWW (GNU Emacs Web Wowser) 是 Emacs 自带的浏览器,虽然有些年头了,但界面清爽简洁,特别适合终端或者希望专注在文字上的场景(例如看技术文档,看小说😄等),在 Emacs 里打开 EWW 非常简单,直接执行 M-x eww ,然后他会让你输入网址,例如 www.baidu.com ,结果如下:

我们可以找一个文字比较多的网站,例如 EWW 的官方文档,可以看到,整个界面非常简洁:

下面,我们介绍如何对 EWW 进行改造,使它更加符合我们的使用场景和习惯。

3.1 关于图片显示 🔗

就我个人而言,我更倾向于使用 EWW 浏览文字型的网站,因此,我并不希望它显示图片,此时我们可以通过下面的配置来完成:

(use-package shr
  :ensure nil
  :defer t
  :custom
  (shr-inhibit-images t)                ; 不显示图片
  (shr-image-animate nil)               ; 不显示 gif
  )

这样,我们就将所有图片禁止显示,所有图片的位置会以一个 * 来替换:

3.2 关于快捷键 🔗

EWW 界面按下 ? 后,可以看到所有的快捷键:

我们可以通过下面的方式来将快捷键定制成自己喜欢的,例如改成我个人习惯使用 Surfingkeys 插件的快捷键:

(use-package eww
  :ensure nil
  :commands eww eww-follow-link
  :hook (eww-mode . visual-line-mode)
  :bind (("\e\e w" . eww)
         :map eww-mode-map
         ("o" . eww-browse-with-external-browser)
         ("D" . eww-forward-url)
         ("S" . eww-back-url)
         ("f" . link-hint-open-link)
         ("TAB" . shr-next-link)
         ("<backtab>" . shr-previous-link)
         ("j" . scroll-up-line)
         ("k" . scroll-down-line)
         )
  :config
  (setq eww-download-directory (expand-file-name "~/Downloads"))
  (setq eww-form-checkbox-symbol "☐")
  (setq eww-form-checkbox-selected-symbol "☑")
  )

这里我们着重说下 link-hint-open-link ,我们按下 f 后,所有链接前面会出现一些候选快捷键,我们按下对应的快捷键就相当于点击了这个链接:

3.3 书签 🔗

书签有两种方式,一种是使用 EWW 的书签,另一种是使用 Emacs 的统一书签,我个人倾向于后者。

3.3.1 EWW 的书签 🔗

EWW 的书签比较简单,直接按下 b (eww-add-bookmark) 添加书签,按下 B (eww-list-bookmarks) 来显示书签列表,在书签列表里,按下 C-k 即可删除书签。

3.3.2 Emacs 自带的书签 🔗

我们按下 C-x r m 来将当前页面添加到书签,然后按下 C-x r l 来展示所有的书签,使用 Emacs 的书签好处在于,它可以对任何 BUFFER 进行书签,比如某个 Org 文件。

需要删除书签,只需要将光标移动到对应的行,然后按下 d 标记删除,再按下 x 确认并执行即可。

4 EAF 🔗

上面介绍的 EWW 主要用在某些特定场景,例如看一些文字型的网站,下面将介绍一个 Emacs 里的大杀器 —— EAF (Emacs Application Framework)

它可以让我们在 Emacs 里运行高级的桌面程序,如浏览器、PDF阅读器、音乐播放器等,下面是一张使用 EAF 运行浏览器的截图:

这俨然就是一个现代浏览器啊!下面主要介绍一下如何在 MacOS 里安装配置 EAF。

4.1 安装 EAF 🔗

4.1.1 安装依赖 🔗

安装下面的 Python 依赖包(不管是否使用 Python 的 venv 虚拟环境,都可以,这一步建议手动做,并且版本最好都按照下面的指定好,否则安装完后启动 EAF 后容易报错):

pip3 install -U epc sexpdata tld lxml mac-app-frontmost PyQt6==6.3.1 PyQt6-Qt6==6.3.1 PyQt6-sip PyQt6-WebEngine==6.3.1 PyQt6-WebEngine-Qt6==6.3.1

4.1.2 克隆 EAF 仓库 🔗

我们假定把 EAF 的所有内容都放到 ~/emacs-application-framework 这个文件夹:

git clone --depth=1 -b master https://github.com/emacs-eaf/emacs-application-framework.git ~/emacs-application-framework/

4.1.3 安装 EAF 🔗

cd ~/emacs-application-framework/ && ./install-eaf.py --install-all-apps

注:

  1. ./install-eaf.py 有很多有用的参数,其中 --install-all-apps 是安装 EAF 所有的应用,我倾向于这种方式是因为可以随时通过配置文件里 require 相应的模块来启用相关应用,而不用再次安装;
  2. 你也可以不加 --install-all-apps 参数,这样在安装的时候,它会提示你每一个应用你是否需要安装,如下图:

4.2 配置 EAF 🔗

我们按照自己的要求启用相应的应用即可:

(use-package eaf
  :load-path "~/emacs-application-framework"
  :config
  (require 'eaf-browser)                ; 启用浏览器
  ;; (require 'eaf-pdf-viewer)          ; 启用PDF阅读器
  )

4.3 使用 EAF 🔗

安装完后,我们执行 M-x eaf-open-browser ,它会提醒输入链接,我们输入URL,然后就可以愉快的使用啦:

值得一提的是,EAF 的浏览器也支持按下 f 键快速选择链接,这一点非常方便:

5 xwidget 🔗

我们在安装 emacs-plus 时,如果加上了 --with-xwidget 选项,那么 Emacs 就可以支持 xwidget 浏览器。我们使用 M-x xwidget-webkit-browse-url 来启动:

6 结语 🔗

通过今天的学习,我们了解了如何在 Emacs 里使用浏览器,在不同的场景需求下,我们可以选择不同的方案。当然,从我个人的角度来讲,我还是倾向于使用单独的浏览器😄

这节课的配置文件的快照见:emacs-config-l30.org

你也可以在 这里 查看最新的配置文件。