Настройте Emacs в Windows для запуска одного экземпляра и открытия файлов в существующем экземпляре

18

Я особенно заинтересован в полном опыте работы с Windows, включая:

  • Автоматический запуск сервера, если он еще не запущен
  • Как вызвать emacs так, чтобы он использовал сервер (например, из командной строки или сторонних инструментов)
  • Поддержка контекстного меню (например, щелкните правой кнопкой мыши файл и разрешите его отправку в emacs для просмотра и редактирования)

Есть ли такая поддержка где-нибудь из коробки?

cristobalito
источник

Ответы:

21

Автоматический запуск сервера, если он еще не запущен

Это должно быть одинаково для любой сборки Emacs. Добавьте этот фрагмент к вашему .emacsили .emacs.d/init.el.

(require 'server)
(unless (server-running-p)
  (server-start)) 

А затем просто запустите emacs, запустив runemacs.exeисполняемый файл, который поставляется вместе со сборкой.

Как вызвать emacs так, чтобы он использовал сервер (например, из командной строки или сторонних инструментов)

Сборка Emacs для Windows поставляется с emacsclientw.exeисполняемым файлом в bin/каталоге. Используйте полный путь к этому исполняемому файлу в качестве редактора для любых сторонних инструментов, которые вам нужно настроить.

Поддержка контекстного меню (например, щелкните правой кнопкой мыши файл и разрешите его отправку в emacs для просмотра и редактирования)

  1. Щелкните правой кнопкой мыши файл, выберите Open With -> Select Default Program.
  2. В появившемся окне перейдите к emacsclientw.exeуказанному выше исполняемому файлу и выберите его.
  3. Если вы не хотите, чтобы Emacs использовался по умолчанию, повторите шаги 1 и 2, выбрав другую программу по умолчанию.

emacsclientw.exe теперь всегда будет опция в контекстном меню.

Malabarba
источник
Спасибо - большое замечание о сервере, я не думал.
cristobalito
Что касается emacsclient.exe, разве это не emacsclientw.exe? Кроме того, я подумал, что вам нужно запустить это с флагом -a, чтобы указать альтернативный редактор, если сервер не запущен.
cristobalito
Чтобы сервер правильно работал с моей конфигурацией, мне также пришлось добавить переменную окружения, EMACS_SERVER_FILEкоторая указывала бы на мой .emacs.d\serverкаталог.
Райан
@ Райан Я смог заставить это работать без необходимости использования переменной среды - просто нужно было убедиться, что сервер работает.
cristobalito
Хм, для меня оценка (server-running-p)отдачи :otherот Windows (даже после попытки установить это EMACS_SERVER_FILEenv var.
Kaushal Modi
5

Автоматический запуск сервера, если он еще не запущен

Я настоятельно рекомендую установить переменные среды для ALTERNATE_EDITORк runemacs.exe. Таким образом, вы всегда можете вызвать emacsclient, даже если нет сервера. Просто добавьте (server-start) в ваш файл инициализации. Когда сервер не существует, emacsclient вызывает ALTERNATE_EDITORemacs в нашем случае. Поскольку emace запускает сервер в файле инициализации, любые новые вызовы emacsclient будут мгновенными.

Как вызвать emacs так, чтобы он использовал сервер (например, из командной строки или сторонних инструментов)

Используйте, emacsclientw.exe -c -n "your_file"чтобы открыть your_file. -cАргумент создает новый графический фрейм и -nпозволяет закрыть кадр без потери состояния сервера. Вы даже можете вызвать его без имени файла, чтобы открыть *Scratch*буфер. Работает и с ярлыка на рабочем столе. Использование emacsclient.exe(обратите внимание на отсутствие w) будет вызывать командную строку на несколько секунд каждый раз, когда вы вызываете ее.

Добавление в контекстное меню

Emacswiki имеет хорошую страницу о добавлении Emacs в контекстное меню здесь . Он включает в себя редактирование узла реестра, HKEY_CLASSES_ROOT\*чтобы добавить действие, открываемое с помощью emacs.

Vamsi
источник
5

Другие ответили на серверную часть. Вот что я делаю, чтобы получить UNIX / GNU / Linux-подобные утилиты, такие как grepи diff:

  1. Установите Cygwin (одноразовая операция).
  2. Загрузка cygwin-mount.el.
  3. Загрузка setup-cygwin.el.

Однако следует помнить, что существуют разные версии Cygwin. Я использую более старую версию (не знаю, какая из них - сложно сказать, AFAICT). Не знаю, будут ли у вас проблемы с последними версиями.

Смотрите также:

Нарисовалась
источник
Примечание. Не используйте Cygwin EMACS. Установите сборку GNU с ftp.gnu.org/gnu/emacs/windows
M Smith,
Я не рекомендую устанавливать Cygwin, так как могут быть нежелательные побочные эффекты (например, разрушение других портов Windows GNU, таких как Emacs, GCC, ...), просто наличие некоторых инструментов GNU. Вместо этого установите порты GnuWin32 . Вы можете установить весь пакет или выбранные инструменты по вашему выбору.
Секи
@ Секи - Да, Эли Зарецкий говорит то же самое, что и ты. Все, что я могу сказать, это то, что у меня не было проблем (и у меня есть серьезные сомнения относительно твоего утверждения о том, что это нарушило Emacs ). Но (а) я использую старую версию Cygwin и (б) я не использую большинство утилит UNIX / GNU Linux, предоставляемых Cygwin.
Дрю
@drew: возможно, чрезмерно говорить о «взломе» emacs, «вызывая странное поведение» было бы лучше. Например, Cygwin Make будет тормозить цепочку инструментов MinGW, если вы не будете тщательно проверять свой путь, чтобы инструменты Cygwin не учитывались или не использовались по умолчанию, если других не существует. Он не ограничивается Make, многие другие инструменты не могут быть смешаны, и иногда трудно уловить проблему. Короче говоря, либо у вас есть собственный порт Emacs, и лучше иметь собственные инструменты GNU, либо вы можете использовать весь дистрибутив Cygwin, включая его emacs.
Секи
@ Секи: Похоже, ваша главная мысль в том, что Cygwin и MingGW не очень хорошо играют вместе. Это не удивительно для меня. (FWIW, я ничего не имею против использования MingGW вместо Cygwin. Для меня было просто установить Cygwin, и я не использую его достаточно, чтобы столкнуться с проблемами.)
Drew