Emacs: как установить домашнюю среду в зависимости от имени пользователя - PullRequest
1 голос
/ 05 апреля 2019

Я установил emacs на два разных компьютера, на компьютер A дома и на компьютер B на моей работе. Чтобы синхронизировать настройки этих двух установок, я переместил свою папку .emacs.d в dropbox и на каждом компьютере поместил ссылку в эту папку в папку C:/Users/myLogonName/AppData/Roaming/ на каждом из двух компьютеров.

Однако myLogonName определяется по-разному на двух компьютерах, соответственно как myLogonNameA и myLogonNameB. Это дает мне практическую проблему, когда emacs читает файл init.el, который начинается с определения домашней среды с помощью следующей строки:

(setenv "HOME" "C:/Users/myLogonName/AppData/Roaming/")

Если myLogonName в этой строке установлено на myLogonNameA, определение будет работать на компьютере A, но не на компьютере B. И аналогично, если myLogonName установлено на myLogonNameB, определение будет работать на компьютере B, но не на компьютере A.

Мне нужно условное определение домашней среды, что-то вроде следующего псевдокода:

if computer == computerA
    (setenv "HOME" "C:/Users/myLogonNameA/AppData/Roaming/")
elseif computer == computerB
    (setenv "HOME" "C:/Users/myLogonNameB/AppData/Roaming/")
end 

Как мне сделать такое условное определение домашней обстановки?

Заранее спасибо за любые предложения.

1 Ответ

2 голосов
/ 05 апреля 2019

Переменная Emacs user-login-name содержит ваше имя для входа.

Вы можете использовать такой код в файле инициализации, чтобы различать разные имена пользователей:

(setenv "HOME" 
        (if (string-match-p user-login-name "myLogonName-A")
            "C:/Users/myLogonName-A/AppData/Roaming/"
          "C:/Users/myLogonName-B/AppData/Roaming/"))

или еслитак просто, вот так:

(setenv "HOME" (format "C:/Users/%s/AppData/Roaming/" user-login-name))
...