一个 emacs.d/init.el 以适应非 x 会话和 x 会话

One emacs.d/init.el to suit non-x session and x-session

当我在没有 x-server 运行 的情况下启动 emacs 时,我 init.el 中的一些东西失败了,例如:

(require 'sr-speedbar)

没有图形服务器是不合适的,我宁愿从那里开始

(require 'speedbar)

在可以从非 x 模式调用 emacs 的情况下,emacs 专家建议什么作为适当的 init.el 配置?是否有一种既定的方法可以在制度或优雅的回退下提供一般的、平行的体验?

很大程度上取决于您通常 运行 所处的环境以及 控制你需要的。例如,如果您只是想区分 运行ning 在具有完整图形功能的环境下,您可以使用 display-graphic-p 例如

(when (display-graphic-p)
  ;; do stuff which needs a graphic display)

但是如果需要区分不同的平台,比如什么时候 运行在 OSX 下,你需要类似

的东西
(when (eq system-type 'darwin)
  ;; do stuff which should only run when on OSX'))

最后,对于只需要在 运行ning 时进行配置的情况 在特定的 window 系统下,您可以使用类似

(when (eq window-system 'x)
  ;; only under X window frame))

但是,需要注意一些细微之处。其中一些变量,例如 因为 window-system 是对当前帧的测试。所以,你需要考虑 执行代码时。例如,如果你 运行 emacs 作为守护进程, 是加载 init 时 window-system 的值吗?同样,如果你 使用emacs作为守护进程或者使用emacsclient打开一个新的'frame'它可能会被打开 a 图形或文本框。有时,您可能需要创建一个新的 命令环绕你想做的事情并在该点进行测试 您执行命令,以便它可以响应您所在的特定帧 当你执行命令时。