Emacs: разные пользователи, разные темы, один и тот же файл инициализации

Emacs: разные пользователи, разные темы, один и тот же файл инициализации

Я использую emacs на работе, где обычно подключаюсь к системе под двумя разными пользователями:

  • myuser
  • commonuser

Первый — мой личный пользователь, тогда как второй используется всей командой для управления приложением. (Неуместная подсказка: это ужасная идея. Обычно существуют лучшие, хотя и немного менее очевидные, способы управления привилегиями. Поверьте мне по моему опыту).

Чтобы избежать досадных путаниц, я хочу определить отдельную тему для каждого пользователя и определить ее в соответствующих файлах инициализации.

Все остальное, определенное в файле init, должно быть общим для них обоих.

Простое решение

Я создаю отдельный файл 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 игнорировать commonuserфайл 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))

Связанный контент