Я работаю над нестандартной и небольшой конфигурацией Emacs, которой я хочу поделиться с друзьями в качестве git-репозитория, чтобы они могли использовать его в качестве основы для своих будущих конфигураций.
Для этого мне нужен какой-то способ проверить мою конфигурацию, и самое простое решение, которое я могу найти, это что-то вроде:
$ emacs --eval "(setq user-emacs-directory \"~/Code/my_custom_emacs.d/\")"
Но я не могу заставить его работать.
Любая помощь высоко ценится.
.emacs.d
каталогом, если вы не изменили HOME, что мне кажется проблематичным. Люди предоставили обходные пути ниже, но для меня это звучит как очень разумный запрос возможностей для самого Emacs.wontfix
и закрыт в системе отслеживания ошибок.Ответы:
Основной подход, который я использую для этого, состоит в том, чтобы изменить
$HOME
, запустив:Затем вы используете
/path/to/dir/.emacs.d
Вы также можете использовать символические ссылки любых важных файлов или каталогов в этом фальшивом домашнем каталоге на настоящие, чтобы Emacs мог их видеть.
источник
Способ, которым я использую для поддержки нескольких
.emacs.d
каталогов параллельно, заключается в следующем.Emacs запускается так:
Каждый
init.el
файл начинается так, чтобы правильно настроитьuser-init-file
иuser-emacs-directory
переменные:Я обнаружил, что это работает очень надежно в течение последних месяцев. Вот несколько замечаний:
он ломается
emacs-init-time
, который сообщает только время, необходимое для загрузки конфигурации системы по умолчанию, но не ваш собственный файл инициализации. Если вы заинтересованы в тестировании времени инициализации, вам придется сделать это по-другому (см., Например, Как измерить производительность кода elisp? ).это не эквивалентно обычному запуску, и вам нужно позаботиться о нескольких конкретных моментах. В частности:
after-init-hook
запускается до загрузки файла инициализации.*scratch*
Буфер создается , прежде чем будет загружен файл инициализации. Вам придется явно изменить его режим (вместо использованияinitial-major-mode
).package-initialize
; это не будет сделано автоматическипуть к
init.el
может быть выбран произвольно; в частности, каталог, в которомinit.el
находится, не должен быть назван.emacs.d
. Я использую это , чтобы иметь, например ,.emacs.d.23
наряду.emacs.d.24
с тем , чтобы иметь возможность переключаться между разными версиями Emacs (система , я использую на работе проходимо устарела, и я не могу установить Emacs 24 на все машины , которые я использую).этот рабочий процесс не требует изменения среды (и особенно
HOME
envvar), что может быть желательно, если вы запускаете программы из emacs, на которые может повлиять измененная среда).источник
--load
файл ed является файлом инициализации. Для начала, мне кажется, что нормальная (по умолчанию) инициализация пакета не произойдет, иafter-init-hook
будет выполняться до того, как (поддельный) файл инициализации будет оценен. Это вещи, которые вы можете обойти, конечно, но помните, что это не совсем то же самое, что Emacs, использующий указанный путь в качестве файла инициализации.after-init-hook
. Но я должен сказать, что, хотя я использую эту технику все время, я никогда не сталкивался с какой-либо проблемойafter-init-hook
(но я не использую ее явно, и, возможно, мне просто повезло, что используемые мной пакеты не полагаются на нее) , Что вы подразумеваете под "нормальной (по умолчанию) инициализацией пакета не произойдет"?command-line
не будет звонитьpackage-initialize
в этой ситуации. Вам нужно будет вызвать его вручную в поддельном файле инициализации.Вы можете символическую ссылку
~/.emacs.d
, это то, что я делаюСтарайтесь
~/.emacs.d
ориентировать мою конфигурацию emacs, т.е. все файлы конфигурации, связанные с emacs, должны находиться в этой папкеЗатем у меня есть
~/.emacs_configs
папка, в которой находятся все папки конфигурации (в основном это папка сinit.el
и остальной конфигурацией), так что моя личная папка конфигурации будет~/emacs_configs/iqbal
, прелюдия будет в~/emacs_configs/prelude
Очень рано в моей личной конфигурации Emacs я установил
user-emacs-directory
полный путь к моей конфигурации, используя следующуюЗатем, наконец, я символическую ссылку
~/.emacs.d
на конфигурацию, которую я действительно хочу использовать, например. использовать мою конфигурацию я сделаюln -s ~/emacs_configs/iqbal .emacs.d
. Если вы хотите попробовать какую-либо конфигурацию, просто скопируйте папку конфигурации~/emacs_configs/whatever_name
и измените символическую ссылкуПреимущество третьего шага состоит в том, что emacs, запущенный с моей личной конфигурацией, может работать без изменений, даже если я изменю
.emacs.d
символическую ссылку, пока emacs работает.Другое преимущество заключается в
HOME
том, что не изменяются внешние программы, с которыми может потребоваться взаимодействие emacs.источник
(setq user-emacs-directory (file-truename "~/.emacs.d/"))
чтобы они могли работать без изменений одновременно?~/.emacs.d
а не используютuser-emacs-directory
. Я встречал хотя бы одну такую библиотеку, но, к сожалению, не могу вспомнить название.Конфигурация, которая не изменяется
HOME
или работает с символическими ссылками, может быть найдена в моем ответе https://emacs.stackexchange.com/a/20508/934 . С помощью этой конфигурации вы можете изменитьuser-emacs-directory
, установив переменную окружения:и это даже работает с демоном.
источник
Я нашел это аккуратное решение от EmacsWiki :
(не совсем с использованием пользовательского каталога, но работает хорошо, потому что, скорее всего, у вас все равно будет один входной файл)
источник
Патч, который позволяет вам указать местоположение .emacs.d через переменную окружения `EMACS_USER_DIRECTORY ', доступен в https://debbugs.gnu.org/cgi/bugreport.cgi?bug=15539, но еще не объединен.
источник
Установите вашу переменную перед загрузкой вашего файла инициализации:
Затем в вашем init-файле (в данном случае
~/.emacs
):источник
Расширяя ответ от @phils, я сделал этот небольшой сценарий оболочки (называемый
testrun.sh
) для тестирования моей новой конфигурации emacs. Это может иметь смысл делать и в других случаях (например, при тестировании изменений в вашем init.el, которые могут нарушить работу emacs).источник
Вот небольшой скрипт, основанный на ответе и комментарии @ Phil'а об изменении
HOME
переменной окружения и его восстановлении в Emacs.источник
Если в этом случае используется один каталог конфигурации emacs «.emacs.d» для всех пользователей компьютера с Linux, то это решение https://emacs.stackexchange.com/a/4258/5488 будет работать в большинстве случаев, но в некоторых случаи emacs пытается записать временные файлы в каталог user-emacs (например, файл .ido.last). В таких случаях, если общий каталог конфигурации имеет разрешение на запись для всех пользователей, он будет работать, но может оказаться нежелательным решением, поскольку каждый системный пользователь может не захотеть использовать один и тот же каталог для хранения временных файлов. В таком случае следующее решение будет лучшим вариантом.
Общий общий конфигурационный файл .emacs.d / init.el должен начинаться с
Сделайте, чтобы общий конфиг .emacs.d имел права на чтение для всех пользователей (не нужно иметь права на запись)
У каждого пользователя будет свой собственный каталог «~ / .emacs.d /», но он используется только для сохранения временных файлов, но пакеты и другие конфигурации загружаются из общего каталога конфигурации.
источник