如何将Emacs的init文件的位置声明为变量

时间:2013-07-08 22:36:18

标签: emacs cross-platform

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

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

例如,Zenburn theme上的自述文件需要您的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

2 个答案:

答案 0 :(得分: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台不同的机器上做了几年了,而且一切顺利。)


最后,回答你的上一个问题。 init文件已经是一个变量,其名称为user-init-file。要提取它所在的目录

 (file-name-directory user-init-file)

答案 1 :(得分:2)

user-emacs-directory变量。