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
注:
./install-eaf.py
有很多有用的参数,其中--install-all-apps
是安装 EAF 所有的应用,我倾向于这种方式是因为可以随时通过配置文件里 require 相应的模块来启用相关应用,而不用再次安装;- 你也可以不加
--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
你也可以在 这里 查看最新的配置文件。