Emacs відкриває файли в новому кадрі, коли відкривається з "open -a"


20

Я хочу мати змогу викликати Emacs з командного рядка та запустити графічний Emacs, якщо він не запущений, або відвідати файл у вже запущеному Emacs. Я спробував це зробити, за допомогою emacsclientякого я знаю, що це "правильний" спосіб це зробити, але у мене було багато проблем з ОС X 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, щоб робити те, що я хочу ...

Спасибі!


Я нічого не знаю про OSX, тому не можу надати нічого конкретного. Якби я налагоджував це, я б вкинув синтаксичну помилку, find-fileа потім встановив debug-on-errorби t і перевірив слід стека на предмет підказки щодо виклику Emacs. Додавання помилки find-fileможе бути таким же простим, як копіювання визначення функції в буфер скретч-скриптів та додавання в нього виклику error(наприклад, (error "cause stack trace")НІКОЛИ НЕ find-fileЗМІНУВАЛИ ФАЙЛ ДЖЕРЕЛА - завжди робіть це за допомогою шуфляра!
Джо Касадонте

@Joe Дякую! Це досить гарна ідея, я буду пам'ятати про це на майбутнє. Я фактично закінчився спробою використовувати emacsclientзнову, і починати це з (server-start)мого, init.elздається, працює краще, ніж emacs --daemonпри завантаженні, що я намагався вперше спробував emacsclient.
michiakig

Відповіді:


26

Відповідь тут: змінна emacs на "відкрити" в оригінальному кадрі

Це зміна налаштувань за замовчуванням у новіших версіях emacs. Додати:

(setq ns-pop-up-frames nil)

у файл .emacs.

Дуже радий, що знайшов це.


Це було дуже корисно! Разом із псевдонімом open -a /Applications/Emacs.app $1, здається, все добре працює! Зауважте, що я запускаю сервер у своєму init, щоб мати доступні emacs для git, наприклад.
Dror
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.