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

rah*_*hmu 3 emacs

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

  • myuser
  • commonuser

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

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

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

简单的解决方案

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

(load-file "/path/to/init/file/.emacs")
(load-theme my-favorite-theme)
Run Code Online (Sandbox Code Playgroud)

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

需要新的解决方案

有人问我,不修改.emacs的文件commonuser。我不会详细说明原因,但事实仍然是我必须找到解决方法。这是我到目前为止所得到的:

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

    alias emacs='emacs -Q --load ~myuser/.emacs'
    
    Run Code Online (Sandbox Code Playgroud)

这将使 emacs 忽略commonuserinit 文件和 load myuser

现在我的(简单)问题是:

如何根据启动它的用户使 emacs 表现不同?

我正在做类似的事情:

if [[ $(whoami) == "myuser" ]]; then 
      (load-theme 'theme1)
if [[ $(whoami) == "commonuser" ]]; then 
      (load-theme 'theme2)
Run Code Online (Sandbox Code Playgroud)

njs*_*jsg 5

Emacs 有描述当前主机名和用户名的变量。就像您为了有条件地根据 hostname 做某事而做的事情一样,您拥有变量user-login-name(来自文档:“用户名,如果可能,取自环境变量。”)。

所以,我想这样的事情会适用:

(when (string-equal user-login-name "myuser")
    (load-theme 'theme1))

(when (string-equal user-login-name "commonuser")
    (load-theme 'theme2))
Run Code Online (Sandbox Code Playgroud)