Emacs: 異なるユーザー、異なるテーマ、同じ init ファイル

Emacs: 異なるユーザー、異なるテーマ、同じ init ファイル

私は職場で emacs を使用しており、通常は 2 人の異なるユーザーでシステムに接続します。

  • myuser
  • commonuser

前者は私自身の個人ユーザーですが、後者はアプリケーションを管理するためにチーム全体で共有されます。(無関係なヒント: これはひどいアイデアです。権限を管理するには、少しわかりにくいものの、一般的にはもっと良い方法があります。私の経験から考えてください)。

不幸な混乱を避けるために、ユーザーごとに個別のテーマを定義し、それぞれの init ファイルで定義したいと思います。

init ファイルで定義されているその他すべては、2 つで共有する必要があります。

シンプルな解決策

個別の 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'
    

これにより、emacscommonuserは の 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))

関連情報