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

时间:2019-04-05 14:23:53

标签: emacs initialization synchronization environment-variables

我已经在两台不同的计算机上安装了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设置为{{1} },该定义将在计算机B上有效,但在计算机A上无效。

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

myLogonNameB

如何对家庭环境进行这样的条件定义?

预先感谢您的任何建议。

1 个答案:

答案 0 :(得分:2)

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

您可以在init文件中使用类似这样的代码来区分不同的用户名:

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