Как я могу emacsclient -a '' -n
создать новый кадр, только если его еще нет?
Проблема с -c
флагом заключается в том, что он каждый раз создает новый кадр. Проблема без него состоит в том, что если нет открытого кадра, он откроется в командной строке.
Если я могу проверить, есть ли открытый фрейм Emacs из оболочки, я могу вызвать с или без, в -c
зависимости от этого, чтобы получить поведение, которое я хочу. Я попытался:
$ emacsclient -a '' --eval '(frames-on-display-list)'
(#<frame F1 0xba2740>)
Я всегда получаю один и тот же результат.
Я мог бы использовать временные файлы или pgrep, но эти подходы очень подвержены ошибкам.
Это похоже на этот вопрос , но оно не является дубликатом, так как OP был удовлетворен необходимостью открыть кадр перед вызовом emacsclient
.
frames
emacsclient
x11
spelufo
источник
источник
elisp
,bash
иsh
ответы.Ответы:
Я закончил делать этот сценарий на основе этого
Если нет дисплея, он открывается с помощью
-nw
. Если$DISPLAY
установлено, он ищет кадры на этом дисплее, чтобы увидеть, нужно ли создавать новый.Изменить: я изменил его, так что вы можете вручную указать
-nw
, хотите ли вы открыть в терминале, даже если есть дисплей.источник
$@
следует процитировать .Ты можешь использовать:
проверить,
"server_name"
запущен ли сервер Emacs . Если команда возвращает код выхода 0, она выполняется. Если это так, просто используйтеemacsclient
команду:Если он не запущен, вы можете открыть новый сервер Emacs, например:
источник
emacsclient -a ''
начинаетсяemacs --daemon
при необходимости, которая сохраняется даже при закрытии оболочки.&
на в конце команды; это означает, что сервер запускается как фоновый процесс ..C-d
).server-start
сервер запускается как процесс-демон. Что вы получите, если вы запустите emacs таким образом, а затем закроете все emacs и терминалы, затем откроете новый терминал и запуститеpgrep emacs
?C-d
. Я попробовал это сейчас, используяgnome-terminal
в Ubuntu 14.10. Я думаю, что вы ссылаетесь на работающий экземпляр после закрытия всех фреймов Emacs? Тогда, это потребовало бы процесса демона, да ..