Emacs:不同的用户,不同的主题,相同的初始化文件

Emacs:不同的用户,不同的主题,相同的初始化文件

我在工作中使用 emacs,通常使用两个不同的用户连接到系统:

  • myuser
  • commonuser

前者是我自己的个人用户,而后者则由整个团队共享来管理应用程序。(不相关的提示:这是一个糟糕的主意。通常有更好的方法来管理权限,尽管不太明显。根据我的经验)。

为了避免不幸的混淆,我想为每个用户定义一个单独的主题,并在各自的初始化文件中定义它。

init 文件中定义的其他所有内容都必须由两者共享。

简单的解决方案

我创建了一个单独的初始化文件,并在每个用户的主目录中/path/to/init/file/.emacs创建了以下文件:.emacs

(load-file "/path/to/init/file/.emacs")
(load-theme my-favorite-theme)

这就像一个魅力。但当然,那太容易了!

需要新的解决方案

我被要求不要修改.emacs.commonuser我不会详细说明原因,但事实是我必须找到解决方法。这是我到目前为止得到的:

  1. 编写了一个完整的~myuser/.emacs文件,无论用户如何,我都会加载该文件。
  2. 定义了一个别名,commonuser如下所示:

    alias emacs='emacs -Q --load ~myuser/.emacs'
    

这将使 emacs 忽略 的commonuserinit 文件并加载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))

相关内容