目前遇到的问题
手头上有多台各操作系统的机器(Linux,Mac),上面安装有多版本的 Eamcs(主要是26,27 两个版本),目前这多台机器使用同一个 .emacs 配置文件进行配置,导致有如下问题:
- Emacs 版本不同,有些包不支持低版本的 Emacs,如 tree-sitter。
- 有些机器性能很差,带不动比较大的包,如 eglot及相关的 LSP 后端
- 有些机器键盘不同,导致写在 .emacs 中的按键映射冲突,如 Mac 下不能使用部分快捷键
目前的处理策略
对于问题 1 和 2,在对应的机器上的 .emacs 配置中注释掉对应的包引入代码。对于问题 3,通过其他工具改键或者修改 .emacs 中的按键映射。这个办法会在导致下面几个比较麻烦的问题:
- 不同机器上 .emacs 配置差异越大越大
- 每次使用一台新机器,需要重复花时间解决配置问题
- 保存 .emacs 配置文件的仓库更新后,不能直接拉下来使用,需要处理冲突。
想解决的问题
在不将配置拆分为多个文件或者为不同系统分别写一套配置的情况下,想知道 Emacs 下有没有类似包或者语法可以实现按条件加载包, 可以实现 C 中的宏定义效果,类似于如下伪代码,通过不同的条件判断来判断是否加载包或者使用不同的按键映射。
#if 机器是 Linux 系统
(use-package eglot)
#endif
#if 机器内存大于 4 G
(use-package lsp-mode)
#endif
如果有好的方案,希望能分享一下。