Emacs:如何根据用户名设置家庭环境

Emacs: how to set home environment dependent on username

我在两台不同的计算机上安装了 emacs,分别是家里的计算机 A 和工作单位的计算机 B。为了同步这两个安装的设置,我已将我的 .emacs.d 文件夹移动到保管箱,并在每台计算机上将此文件夹符号链接到两台计算机上的文件夹 C:/Users/myLogonName/AppData/Roaming/

但是myLogonName在两台电脑上的定义不同,分别是myLogonNameAmyLogonNameB。当 emacs 读取以定义家庭环境开始的 init.el 文件时,这给了我一个实际问题:

(setenv "HOME" "C:/Users/myLogonName/AppData/Roaming/")

如果此行中的 myLogonName 设置为 myLogonNameA,定义将在计算机 A 上运行,但在计算机 B 上不起作用。同样,如果 myLogonName 设置为 myLogonNameB,该定义将在计算机 B 上运行,但在计算机 A 上不起作用。

我需要一个家庭环境的条件定义,类似于下面的伪代码:

if computer == computerA
    (setenv "HOME" "C:/Users/myLogonNameA/AppData/Roaming/")
elseif computer == computerB
    (setenv "HOME" "C:/Users/myLogonNameB/AppData/Roaming/")
end 

如何对家居环境做出这样的条件定义?

提前感谢您的任何建议。

Emacs 变量 user-login-name 保存您的登录名。

您可以在初始化文件中使用这样的代码来区分不同的用户名:

(setenv "HOME" 
        (if (string-match-p user-login-name "myLogonName-A")
            "C:/Users/myLogonName-A/AppData/Roaming/"
          "C:/Users/myLogonName-B/AppData/Roaming/"))

或者如果就这么简单,那么就是这样:

(setenv "HOME" (format "C:/Users/%s/AppData/Roaming/" user-login-name))