Я запускаю сервер Emacs, используя
emacs --daemon
затем откройте файлы, используя
emacsclient filename.ext
но первый файл должен быть открыт с помощью
emacsclient -c filename.ext
для того, чтобы создать новый кадр, который может быть использован последующими файлами без использования -c
флаг командной строки для emacsclient.
Я хочу автоматизировать это. msgstr "если фрейма emacs нет, emacsclient должен создать фрейм, иначе он должен использовать текущий фрейм" Как это можно сделать?
emacs
emacsclient
Idlecool
источник
источник
man emacsclient
это не говорит мне о-c
вариант. Знаете ли вы, какие версии демонстрируют такое поведение?emacsclient -c
является новым для значительно улучшенного Emacsclient в Emacs 23Ответы:
Вы можете сначала создать фрейм, если его еще нет, а затем открыть файл в уже существующем фрейме. Вот фрагмент кода, который создает рамку на начальном экране, если на оконном дисплее не было открыто ни одной рамки. Вы можете настроить это несколькими способами, например, проверить, есть ли уже рамка на дисплее с помощью
x-display-list
, Тебе нужно(require 'cl)
в вашем `.emacs. Это может потребовать некоторой адаптации для работы на Windows или Aqua.источник
Symbol’s function definition is void: find-if
, Есть идеи почему? (Запуск GNU Emacs 25.2.2.)(require 'cl)
в вашем файле инициализации? Если не добавить это.Вот скрипт emacs-client.sh, который я использую под Linux, чтобы сделать именно то, что вы просите
источник
Это похоже на решение Дмитрия, но он обрабатывает случай, когда emacs был запущен как
emacs --daemon
,emacs --daemon
делает скрытое окно, которое вызываетxprop
дать ложный положительный результат при проверке существующего окна.источник
Я думаю, что добавление функции Жиля к
server-switch-hook
может делать то, что вы хотите. К сожалению, я не могу получитьemacs --daemon
работает, чтобы проверить это.источник
Мое решение состоит в том, чтобы форсировать создание фрейма после запуска демона:
и тогда мне никогда не придется использовать --create-frame.
источник
В OSX я просто определяю эту функцию (аналогично подходу Джима Ханзикера)
источник
Ответ Джима Ханзикера мне не совсем подходит (в некоторых ситуациях frame-list возвращает два элемента, даже если X-кадра нет). Предполагая, что вы используете только один DISPLAY, работает следующее:
источник
Еще одна версия, которая также работает в режиме tty / console:
(На основании ответа Джима Хунзикерса)
источник