2013-07-08 38 views
3

我通過ownCloud同步我的.emacs.d文件在幾臺計算機(Linux和Windows機器)上使用Emacs:.emacs(在〜或Appdata中)僅加載{ownCloud目錄} /。emacs.d/init.el。如何聲明Emacs init文件的位置作爲變量

我的問題是,我如何獲得作爲取決於操作系統/用戶名的變量init.el的路徑。

例如,在Zenburn theme的自述需要你的初始化包括

(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

+0

哦,你可能想澄清你的問題。你的頭銜與身體不同。 (此外,init文件的位置已經是一個變量) – Malabarba

+0

謝謝你們。對於第二個問題(body)的例子,事實證明我需要在單個系統的.emacs中定義user-emacs-directory,然後使用'(add-to-list'custom-theme- load-path(concat user-emacs-directory「themes /」))'在同步的init文件中,以允許主題文件夾。不完全優雅,但它的作品。哦,對於這個問題缺乏明確性,這是在凌晨。感謝@BruceConnor獲取關於如何去模塊化init文件的信息。 – Inops

回答

2

user-emacs-directory變量。

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) 
+0

如果你的用戶名是相同的,你也可以用'(getenv「變量名」)來查詢環境變量,這應該足以區分任何兩個系統。 – Malabarba