【问题标题】:One emacs config for different systems针对不同系统的一个 emacs 配置
【发布时间】:2021-01-19 11:21:32
【问题描述】:

我正在尝试找出一种将一个 emacs 配置用于不同系统的好方法。 我在 WSL 内的 windows 上使用 emacs 来工作,但也在我家里的 linux 机器上。

不同的系统有不同的要求,例如在家里,我使用exwm 包作为我的窗口管理器。然而,当通过 WSL 使用 emacs 时,我不需要那个包,还有其他情况,这只是一个例子。

我不想将我的配置拆分为两个单独的存储库(一个用于 linux,一个用于 wsl),因为有相当多的代码会被重复,因此如果发生变化则需要更新两次。

到目前为止,我想出了这样的东西:

; Determine which OS we are on.
(if (string-match "Microsoft" (car (split-string (shell-command-to-string "uname -r"))))
    (setq ENV "wsl")
  (setq ENV "linux"))

然后我可以这样做:

(if (equal ENV "linux")
    (setq doom-font (font-spec :family "Cozette" :size 12))
  (setq doom-font (font-spec :family "Inconsolata" :size 18)))

但是,我不知道这是否是一个好方法。如有任何关于该主题的意见,我将不胜感激。

【问题讨论】:

  • This question over on Emacs Stack Exchange 有一些建议。似乎检查变量operating-system-release 可能是最简单的方法。

标签: linux emacs config windows-subsystem-for-linux


【解决方案1】:

有许多不同的方法可以实现你所追求的,“正确的方法”主要是一个偏好问题。

例如,您可以将配置拆分为三个文件:

  1. 共享(独立于平台)配置选项的文件
  2. 用于 WSL 特定配置的文件
  3. Linux 特定配置文件

文件 #1 将是您的标准 init file,您可以在其末尾插入一些代码来加载文件 #2 或 #3,具体取决于您所在的平台:

(if (string-match-p "microsoft" operating-system-release)
    (load-file path-to-wsl-config-file)
  (load-file path-to-linux-config-file)

【讨论】:

  • 感谢@Thomas 的回答。我认为你检查架构的方式比我的要好。但是我想我不会像你建议的那样拆分我的配置。我宁愿根据主题(窗口管理器,开发环境,...)而不是体系结构来构建我的配置。所以我想我会在需要的地方内联检查。但是关于没有正确的方法,你是对的。当然取决于你想如何构建你的配置。感谢您的意见。
  • 很高兴我能帮上忙。这还真的取决于你最终在不同架构之间会有多少差异。如果只是一对,使用两个不同的文件可能会有点过分。另一方面,我可能不希望看到大量 if 开关接管我的配置文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 2016-01-13
  • 1970-01-01
相关资源
最近更新 更多