20

Я хочу иметь возможность вызывать Emacs из командной строки и запускать графический Emacs, если он не запущен, или посещать файл в уже запущенном Emacs. Я пытался сделать это с помощью emacsclient который, как я знаю, является "правильным" способом сделать это, но у меня было много проблем с ним на OS X, он случайно зависал , или процесс emacs --daemon во время выключения или перезагрузка машины, и вообще вялость. Хотя я бы хотел, чтобы это работало, на данный момент open -a самом деле работает намного лучше, за исключением одной проблемы, которую я опишу ниже:

Используя open -a вот так:

$ open -a Emacs file.txt

запустит Emacs, если он не запущен, и откроет файл. Но если я делаю это, когда текущий буфер не « *scratch* файл открывается в новом кадре (то есть в новом системном окне).

Вот пример сеанса:

$ open -a Emacs file.txt

Это запускает Emacs и открывает файл file.txt, так что в нем есть один кадр с этим буфером. Если я переключусь на буфер *scratch* и сделаю это:

$ open -a Emacs file1.txt

Он открывает этот файл в том же кадре. Теперь есть один кадр с этим открытым файлом, и если я сделаю это:

$ open -a Emacs file2.txt 

Открывается новый кадр, в результате чего открываются два кадра одновременно.

Я попытался поиграться с аргументами командной строки в Emacs, используя ключ --args чтобы open , но, похоже, это не работает для последующих вызовов, например:

$ open -a Emacs --args --eval='(print "foo")'
$ open -a Emacs --args --eval='(print "bar")'

Это только печатает "foo" в буфере сообщений ... во второй раз, когда Emacs просто выводится на передний план, но сообщение не печатается.

Я не уверен, как open общается с уже запущенными приложениями, кто-нибудь знает, как я мог узнать? Или есть какой-нибудь способ получить гораздо более подробный журнал того, что происходит, чем буфер Messages ? Ничего интересного не выводится в этот буфер во время сеанса выше, так что я не знаю, как я мог взломать какой-нибудь Emacs Lisp, чтобы сделать то, что я хочу ...

Спасибо!

1 ответ1

25

Ответ здесь:переменная emacs для "открытия с" в исходном фрейме

Это изменение настроек по умолчанию в новых версиях emacs. Добавлять:

(setq ns-pop-up-frames nil)

в файл .emacs.

Очень рад, что нашел это.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .