私は職場で 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
。理由の詳細については説明しませんが、回避策を見つける必要があったのは事実です。これまでに得たものは次のとおりです。
~myuser/.emacs
ユーザーに関係なくロードする完全なファイルを作成しました。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))