Emacs:他のユーザー、異なるテーマ、同じ初期化ファイル

Emacs:他のユーザー、異なるテーマ、同じ初期化ファイル

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

  • myuser
  • commonuser

前者は私の個人的なユーザーであり、後者はチーム全体がアプリケーションを管理するために共有します。(無関係な注意:これは悪い考えです。一般的に権限を管理するより良い方法がありますが、それほど明確ではありませんが、私の経験では)。

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

initファイルで定義されている他のすべての内容は、両方とも共有する必要があります。

簡単な解決策

別々の初期化ファイルを作成し、/path/to/init/file/.emacs各ユーザーのホームディレクトリに次のファイルを作成しました。.emacs

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

これは魅力のように動作します。しかし、もちろんそれはとても簡単です!

新しいソリューションが必要です

を修正しないように求められましたが.emacscommonuserその理由について詳しく説明しませんが、実際には解決策を見つける必要がありました。これが私が今まで得たものです:

  1. ~myuser/.emacsユーザーに関係なく、私がロードする完全なファイルが作成されます。
  2. エイリアスはcommonuser次のように定義されます。

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

commonuserこれにより、emacsはinitファイルを無視してロードしますmyuser

今私の(簡単な)質問は次のとおりです。

Emacsを起動したユーザーによって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))

関連情報