Как открыть файл в существующем процессе emacs из командной строки?

14

У меня есть несколько сценариев, которые будут запускать все приложения и файлы, связанные с конкретным проектом. Но он запускает несколько экземпляров Emacs, а не просто заставляет текущие Emacs открывать запрошенные файлы. Я бы предпочел, чтобы текущие emacs просто открывали текстовые файлы проекта в новом буфере.

Есть идеи, как я могу это сделать?

Гай
источник
Взгляните на мой ответ stackoverflow.com/a/38655619/2450748 Хотя через 5 лет :)
nexayq

Ответы:

21

M-x server-startвнутри сеанса Emacs, затем используйте emacsclient -n file1 file2 ...для добавления файлов в существующий Emacs. Есть дополнительные опции, которые вы можете использовать, например, -cчтобы открыть файлы в новом окне (фрейме).

geekosaur
источник
спасибо, дуд. Это то, что мне нужно знать. Я пока не проверяю «правильный ответ», потому что я слышал, что вы должны всегда держать его открытым, чтобы дать другим возможность внести свой вклад. Но я уже вложил ваш ответ в некоторые сценарии.
Г
Обычно вы хотите поместить (server-start)в файл .emacs, а не запускать сервер вручную. Я использую, (and window-system (server-start))чтобы избежать запуска сервера, если я запускаю emacs в терминале.
CJM
В современных Emacs это так же полезно в терминале; увидеть -tвариант.
geekosaur
@cjm - на самом деле я запускаю сервер в моем файле .emacs. Я просто не использовал это :-)
БЕВ
5

Положите (server-start)в свой .emacsфайл.

Добавьте это к ~/.bashrc

alias myedit='emacsclient --alternate-editor="" --no-wait $*' #quotes intentionaly left blank

затем используйте в myeditкачестве редактора. Вам нужно будет использовать -cопцию, чтобы открыть окно.

Так что вы можете сделать это:

myedit -c a-file
run-script #that uses myedit

или

run-script #that uses myedit
myedit -c
Ctrl-Alt-Делор
источник
Ричард, спасибо за вклад. Я все еще ломаю голову над твоим сценарием. Во-первых, поскольку у emacsclient нет опции -c, я предполагаю, что это bash, но не знаю. Во-вторых, почему бы не использовать emacs в качестве альтернативного редактора? Спасибо
Bev
# $ emacsclient --help .... Принимаются следующие ОПЦИИ: ... -c, --create-frame Создать новый кадр вместо попытки использовать текущий кадр Emacs ... -a РЕДАКТОР, --alternate -editor = EDITOR Редактор для восстановления в случае, если сервер не работает Если EDITOR - пустая строка, запустите Emacs в режиме демона и попробуйте подключиться снова
ctrl-alt-delor
Вам не нужно (и, по сути, вероятно, не хотите) использовать позиционные параметры в определении псевдонима. Посмотрите, как alias foo='echo bar $*'расширяется в set quux; foo baz. Если вы хотите использовать позиционные параметры, попробуйте это как функцию оболочки:myedit() { emacsclient … "$@"; }
Chris Johnsen