Я хотел бы попробовать Spacemacs. Но я пока не хочу переключаться с моей обычной конфигурации emacs, поэтому я бы хотел, чтобы конфигурация, которая в данный момент находится в моем, .emacs.d
была в одном каталоге, а эквивалентная конфигурация для spacemacs - в другом каталоге. Я не против, какое имя у любого каталога.
Возможно ли это, если не считать chroots / LD_PRELOAD / другие подобные хитрости? Как я могу это сделать?
spacemacs
указывающую на исполняемый файл emacs, и использовать значение,(car command-line-args)
чтобы решить, какой файл инициализации запускать. Конечно, это предполагает, что вы работаете в Unix-системе, отличной от OS X. (То, как комплекты приложений работают в OS X, затрудняет выполнение этого трюка.)Ответы:
Один из вариантов - указать, какую конфигурацию вы хотите загрузить в
~/.emacs
файл. Когда Emacs запускается, он ищет такой файл, прежде чем заглядывать внутрь~/.emacs.d/
. Более подробную информацию вы можете прочитать о файле инициализации в руководстве по Emacs.Так, например, вы можете создать
~/.spacemacs.d
и сохранить существующее~/.emacs.d
как есть. Затем создайте~/.emacs
загрузку, которую вы хотите использовать:Если вы хотите, вы можете придумать способы переключения конфигураций без изменения файла .emacs. Например, пусть ваш .emacs проверит некоторую переменную среды, которую вы установили в своей оболочке или в скрипте, который вы используете для запуска spacemacs:
источник
fboundp
) функцию или команду, уникальную для spacemacs?(setq user-emacs-directory "~/.spacemacs.d/")
это работа (вprogn
вашей ветке spacemacs условно). Можете ли вы добавить это к своему ответу, чтобы я мог принять его снова?Так как в init есть нечто большее, чем просто загрузка файла и, с другой стороны, символическая ссылка
.emacs.d
или изменениеHOME
изменений в моей среде выполнения, я выбрал вариант, предложенный @glucas. Я использовал код изstartup.el
и добавил патч из # 15539, чтобы использовать переменную окружения для переключения между разными директивными каталогами . Если ничего не указано, используется значение по умолчанию.С spacemacs была одна проблема:
async
он не знает об измененном каталоге init и не может найти необходимые файлы. Но это было решено в spacemacs недавно: ошибка при использовании каталога конфигурации, отличного от .emacs.d · Issue # 3390Итак, вот мой
~/.emacs
код, который должен вести себя как исходный код инициализации, но с настраиваемым каталогом инициализации:Есть также приятное дополнение, которое делает его работающим как демон без лишних усилий: в качестве имени сервера будет задано имя каталога init. Так что теперь вы можете запустить второй демон emacs с ванильным spacemacs
и до сих пор использовать emacsclient
Мой сценарий использования очень прост, и я удивлен, что я единственный: у меня есть всегда работающий демон emacs и я использую его из графического интерфейса и из консоли (например, с ssh). В этом emacs я готовлю всю свою документацию и рабочий журнал, поэтому он должен быть там постоянно. Но затем я хочу попробовать spacemacs или один из других дистрибутивных пакетов и даже настроить его, пока не смогу отказаться от своей текущей конфигурации или использовать некоторые умные идеи. Как и другие, я хотел создать простую базовую конфигурацию для моих коллег - и задокументировать ее с помощью org-mode в моем работающем экземпляре.
Поскольку единственная проблема, о которой я знаю, это
async
то, что она не знает об измененном каталоге init, я думаю о лучшем способе добавить некоторую конфигурацию, вasync
которой есть переменные, которые должны быть введены по умолчанию, так что нет необходимости исправлять все вызовы такasync-start
же, как это сделали космические маки.источник
async
. :-( Так как прошло несколько месяцев с момента публикации, у вас есть обходной путь?async-start
запускает emacs без чего-либо, и если вы хотите использовать какую-то переменную, вы должны передать ее. Но, конечно, это будет будет удобно и удобно, если асинхронность может быть настроена со списком переменных, которые будут использоваться при каждом вызовеasync-start
.(setq custom-theme-directory user-emacs-directory)
сюда.Это объясняется здесь , и существует постоянный PR, чтобы добавить его в документацию:
источник
Он уже получен и принят, но если вам захочется попробовать новые способы сделать вещи обратимыми (помимо конфигураций в emacs), я бы порекомендовал вам потратить полчаса на ознакомление с GNU Stow. Это своего рода
ln -s
стероиды, и может быть несколько подходов к его использованию. Вы можете иметь всю установку в одном подкаталоге (включая конфиги offlineimap, конфиги emacs и т. Д.) - это будет подход, основанный на среде - или иметь отдельный подкаталог для каждого вашего приложения. Сладкая шизофрения.Например, список, связанный с emacs, из моего ~ / Stow:
Есть одна начальная конфигурация, которую мне удалось использовать, одна конфигурация «Я придерживаюсь настроек по умолчанию» и одна «Я собираюсь свернуть свою собственную». Я могу просто включить и выключить каждый из них и всегда иметь их в наличии. Каждый подкаталог может иметь целое дерево относительно моего ~ /, и его довольно удобно смешивать и сочетать.
источник
Я проверил патч, который использовал @Uwe Koloska. Он не был включен в основную ветку. Я несколько согласен, я думаю, что проблема должна быть решена вне emacs, используя оболочку, а emacs ничего не знает об этом.
Возможно, эта функция была бы более логичной с точки зрения пользователя, для некоторых пользователей использование флага было бы менее запутанным.
В моем случае я хочу сохранить установку Emacs и Spacemacs, чтобы мой вариант двух вышеупомянутых решений работал следующим образом.
сценарий оболочки
Прежде всего скрипт для запуска spacemacs:
Этот скрипт вызывается
spacemacs
и устанавливается в/usr/local/bin
папку.файл .emacs
Затем мне нужен
.emacs
файл в моей домашней папке, который будет правильно обрабатывать переменную окруженияEMACS_USER_DIR
.Я совсем не разбираюсь в elisp, поэтому я придумал это, более опытные люди могли бы придумать что-то лучшее Но эй, это работает.
Eye-конфета
Тогда почему бы не добавить значок:
источник
exec emacs "$@"
.Я считаю использование Chemacs действительно простым для переключения между различными конфигами emacs.
Я сделал ответ здесь: https://emacs.stackexchange.com/a/44678/11979 .
источник