3

我在几台计算机(Linux 和 Windows 机器)上使用 Emacs,我的 .emacs.d 通过 ownCloud 同步:.emacs(在 ~ 或 Appdata 中)只加载 {ownCloud 目录}/.emacs.d/init.el。

我的问题是,如何将 init.el 的路径作为依赖于操作系统/用户名的变量。

例如,Zenburn 主题的 README要求您的 init 包含

(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/")

但是由于我的主目录和 .emacs.d 的路径因机器而异,所以这不起作用。我正在考虑这样的事情来解决它:

(add-to-list 'custom-theme-load-path "{THE DIRECTORY THAT CONTAINS THIS INIT FILE}/themes/")

这可以做到吗?我只用了两周的时间使用 Emacs,所以不要太用力:P

4

2 回答 2

3

该变量system-type决定了 Linux 和 Windows 机器之间的关系。该变量user-login-name是不言自明的。我使用这些来加载不同的文件,具体取决于我所在的机器。

(if (eq system-type 'gnu/linux)
   (when (string= user-login-name "home user name")
     (load-file "/path/to/file"))
   (when (string= user-login-name "work user name")
     (load-file "/path/to/other-file")))

不过老实说,这更适合各种配置。我不建议使用它来更改您的 emacs 目录位置。

相反,在每台机器上创建符号链接,以假装您的 emacs 目录位于标准位置。(几年来,我一直在 4 台不同的机器上执行此操作,并且进展顺利)。


最后,回答你的最后一个问题。初始化文件已经是一个变量,它的名字是user-init-file. 要提取它所在的目录,只需执行

 (file-name-directory user-init-file)
于 2013-07-08T23:05:27.747 回答
2

user-emacs-directory变数。

于 2013-07-09T02:01:22.273 回答