如何声明Emacs的位置';s init文件作为变量

如何声明Emacs的位置';s init文件作为变量,emacs,cross-platform,Emacs,Cross Platform,我在一些计算机(Linux和Windows设备)上使用Emacs,并通过ownCloud同步.Emacs.d:.Emacs(在~或Appdata中)只加载{ownCloud directory}/.Emacs.d/init.el 我的问题是,如何将init.el的路径作为依赖于OS/用户名的变量获取 例如,上的自述文件要求您的init包含 (add-to-list 'custom-theme-load-path "~/.emacs.d/themes/") 但是,由于来自我的主目录和.emacs

我在一些计算机(Linux和Windows设备)上使用Emacs,并通过ownCloud同步.Emacs.d:.Emacs(在~或Appdata中)只加载{ownCloud directory}/.Emacs.d/init.el

我的问题是,如何将init.el的路径作为依赖于OS/用户名的变量获取

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

变量

系统类型决定Linux和Windows机器之间的关系。变量
用户登录名
是自解释的。我使用这些来加载不同的文件,这取决于我在哪台机器上

(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)

用户emacs目录
变量。

如果您的用户名相同,您也可以使用
(getenv“variable name”)
查询环境变量,这应该足以区分任何两个系统。哦,您可能想澄清您的问题。你的标题与正文不同。(此外,init文件的位置已经是一个变量)谢谢大家。对于第二个问题(正文)的示例,我需要在单独的systems.emacs中定义用户emacs目录,然后使用
(添加到synced init文件中的列表“custom theme load path(concat user emacs directory“themes/”))
,以允许使用themes文件夹。不是很优雅,但很管用。哦,很抱歉问题不够清晰,是在凌晨。感谢@BruceConnor提供了关于如何对init文件进行模块化的信息。