我在工作中使用 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))