我在工作中使用 emacs,通常使用兩個不同的使用者連接到系統:
myuser
commonuser
前者是我自己的個人用戶,而後者則由整個團隊共享來管理應用程式。(不相關的提示:這是一個糟糕的主意。通常有更好的方法來管理權限,儘管不太明顯。根據我的經驗)。
為了避免不幸的混淆,我想為每個使用者定義一個單獨的主題,並在各自的初始化檔案中定義它。
init 檔案中定義的其他所有內容都必須由兩者共用。
簡單的解決方案
我創建了一個單獨的初始化文件,並在每個用戶的主目錄中/path/to/init/file/.emacs
創建了以下文件:.emacs
(load-file "/path/to/init/file/.emacs")
(load-theme my-favorite-theme)
這就像一個魅力。但當然,那太容易了!
需要新的解決方案
我被要求不要修改.emacs
.commonuser
我不會詳細說明原因,但事實是我必須找到解決方法。這是我到目前為止得到的:
- 編寫了一個完整的
~myuser/.emacs
文件,無論用戶如何,我都會加載該文件。 定義了一個別名,
commonuser
如下所示:alias emacs='emacs -Q --load ~myuser/.emacs'
這將使 emacs 忽略 的commonuser
init 檔案並載入myuser
。
現在我的(簡單的)問題是:
如何讓 emacs 根據啟動它的使用者而有不同的行為?
我想做類似的事情:
if [[ $(whoami) == "myuser" ]]; then
(load-theme 'theme1)
if [[ $(whoami) == "commonuser" ]]; then
(load-theme 'theme2)
答案1
Emacs 有描述目前主機名稱和使用者名稱的變數。就像你會做的那樣為了根據主機名稱有條件地執行某些操作,您有變數user-login-name
(來自文件:「用戶名,如果可能,從環境變數中取得。」)。
所以,我想這樣的事情會適用:
(when (string-equal user-login-name "myuser")
(load-theme 'theme1))
(when (string-equal user-login-name "commonuser")
(load-theme 'theme2))