Emacs Cx Cc переопределяет save-buffers-kill-Terminal, если он находится в последнем открытом фрейме - PullRequest
2 голосов
/ 11 сентября 2010

У меня есть настройка emacs -daemon для запуска при входе в Gnome и связанных emacsclient с файлами .cpp и .py, с которыми я работаю в Eclipse, чтобы emacs использовался какмой редактор по умолчанию для этих файлов при выборе в Eclipse.Таким образом, я могу получить хороший рабочий процесс, сочетающий возможности редактирования emacs и средства управления проектами / сборками и отладки Eclipse.

Anyhoo ... Я хочу, чтобы Cx Cc не закрывал кадр Emacs, в котором я сейчас редактирую, если это единственный кадр Emacs, оставшийся видимым в данный момент.

Есть ли способ запросить процесс Emacs-демона, чтобы узнать, сколько кадров открыто, и переопределить поведение Cx Cc по умолчанию, чтобы ничего не делать (если остался только 1 кадр), тем самым гарантируя, что естьвсегда ли открыта хотя бы одна видимая рамка?

Какой-нибудь elisp, который реализует это поведение и может быть добавлен в мой .emacs, был бы великолепен.

Бонусные баллы: ¬) У меня есть псевдонимы, которые отображают vi, emacs и т. Д. В "emacsclient -c", поэтому я получаю, что фреймы emacs появляются и уходят все время в общем.Еще одним улучшением для Eclipse будет отправка файлов, которые я хочу редактировать, непосредственно в специфический кадр , например, в 1-й кадр, открытый с помощью emacsclient -c.

Ответы [ 2 ]

1 голос
/ 14 сентября 2010

Сделайте Emacs бессмертным (каким бы вы ни были):

(defadvice kill-emacs (around emacs-immortal) nil)
(ad-activate 'kill-emacs)

Используйте ad-deactivate, чтобы отключить этот трюк.

0 голосов
/ 11 сентября 2010

В emacs-клиентах save-buffers-kill-terminal вызывает только server-save-buffers-kill-terminal, так что вы можете захотеть установить на него совет, чтобы он не влиял на не-клиентские фреймы.Функцию frame-list можно использовать для анализа существующих кадров.Очевидно, он всегда включает одну запись для самого процесса-демона, а затем одну запись для каждого открытого кадра.

(defadvice server-save-buffers-kill-terminal (around dont-kill-last-client-frame activate)
  (when (< 2 (length (frame-list)))
    ad-do-it))
...