之前一直是使用 theme-changer
来根据日出日落时间自动切换 emacs 的主题的。但是有一个问题,因为 macOS 并不是完全按照计算出的日出日落时间去切换 light/dark 模式的,因此 emacs 的主题切换时间与 macOS 系统不同步。
我自己试了增加一个延时参数去尽量与系统切换时间保持接近,但几个月下来发现完全找不到一个相对合适的延迟时间, macOS 并不是固定给日出日落时间加一个延时,具体是什么逻辑到现在还没摸索出来。
如果能够读取 macOS 当前的 light/dark 模式就好了,这样就可以读取到的这个值自动切换主题了。
去 github 搜索了一下,竟然真的有人写了一个包,就是这个 https://github.com/LionyxML/auto-dark-emacs 。试用了一下,发现切换起来有问题,不能做到完全切换,还会遗留一些地方没切换成。于是我 fork 了一份,并进行了如下修改:
- 修复了切换过程中的 bug ;
- 增加了可以设置为从主题列表中随机切换的功能,跟我以前的习惯一致;
- 优化了执行逻辑,大量减少循环次数,提升性能。
我 fork 的仓库地址在 https://github.com/cnsunyour/auto-dark-emacs , use-package
调用方法如下:
1
2
3
4
5
6
7
8
9
10
11
| (use-package auto-dark-emacs
:straight (auto-dark-emacs
:type git
:host github
:repo "cnsunyour/auto-dark-emacs")
:when (eq system-type 'darwin)
:custom
(auto-dark-emacs/light-theme +list-light-themes)
(auto-dark-emacs/dark-theme +list-dark-themes)
:config
'auto-dark-emacs/check-and-set-dark-mode)
|
我用的是 doom-emacs
,调用方法如下:
1
2
3
4
5
6
| ;; packages.el
(when IS-MAC
(package! auto-dark-emacs
:recipe (:host github
:repo "LionyxML/auto-dark-emacs"
:fork "cnsunyour/auto-dark-emacs")))
|
1
2
3
4
5
6
7
8
9
10
11
12
13
| ;; config.el
(use-package! auto-dark-emacs
:when IS-MAC
:custom
(auto-dark-emacs/light-theme +list-light-themes)
(auto-dark-emacs/dark-theme +list-dark-themes)
:config
(add-hook! doom-load-theme :append
(when (and (featurep 'solaire-mode)
(not (string-prefix-p "doom-" (symbol-name doom-theme))))
(set-face-background 'solaire-hl-line-face nil)
(set-face-background 'solaire-default-face nil)))
(add-hook! after-init #'auto-dark-emacs/check-and-set-dark-mode))
|