Я использую 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
Я не буду вдаваться в подробности, почему, но факт остается фактом: мне пришлось искать обходной путь. Вот что у меня получилось на данный момент:
- Написал полный
~myuser/.emacs
файл, который буду загружать независимо от пользователя. Определил псевдоним для
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))