Как корректно завершить работу emacs демона? [закрытый]

Вся магия на iOS работает только с использованием source с файлом, куда вы экспортируете переменные окружения.

Например:

Вы можете создать такой файл:

export bim=fooo
export bom=bar

Сохранить этот файл как bimbom.env и сделать source ./bimbom.ev. Вуаля, у тебя есть переменные среды.

Проверьте их с помощью:

echo $bim
47
задан genehack 2 August 2009 в 23:08
поделиться

6 ответов

На этой странице linuxquestions.org есть скрипт Python, который можно запустить во время входа в систему, который прослушивает «сохранить себя» 'событие, которое Gnome генерирует при завершении работы. Вы можете изменить это так:

emacsclient -e '(save-buffers-kill-emacs)'

Официальные документы: https://www.emacswiki.org/emacs/EmacsAsDaemon#toc8

14
ответ дан 26 November 2019 в 19:48
поделиться

ShreevatsaR прав, ответ - kill-emacs или save-buffers-kill-emacs , оба из которых интерактивны, и поэтому их можно запускать из Emacs с помощью Mx save-buffers-kill-emacs . Вероятно, это лучший способ сделать это, поскольку вы сможете сохранять измененные файлы.

Другой альтернативой является создание файла оболочки, подобного этому:

#!/bin/bash
emacsclient -e "(kill-emacs)"

Который вы можете запускать откуда угодно (значок меню, панель, и т. д.).

32
ответ дан 26 November 2019 в 19:48
поделиться

вы можете поместить emacsclient -e "(kill-emacs)" в каталог PostSession GDM или непосредственно в сценарий по умолчанию:

/etc/gdm/PostSession/Default

см. Также Документация GDM .

1
ответ дан 26 November 2019 в 19:48
поделиться

Возможно, наиболее общим решением было бы поместить сценарий в системный каталог PostSession, который запускает каждый исполняемый сценарий в ~ / .logout-d или что-то подобное. Затем вы можете поместить любые скрипты в ~ / .logout-d, и они будут запускаться при выходе из системы.

Сценарий может быть таким же простым, как run-parts ~ / .logout.d .

Примечание: Непроверено, хотя я использую сценарий запуска, который выполняет run-parts ~ / .autostart.d , и он всегда работал нормально.

Изменить: Конечно, это было бы так же легко изменить приведенный выше сценарий python для выполнения той же команды, но мне лично не нравится идея загрузки сценария для всего сеанса только для выполнения команд при выходе из системы.

1
ответ дан 26 November 2019 в 19:48
поделиться

Я думаю, что использование сценария в /etc/init.d является более чистым решением. Проверьте здесь для получения более подробной информации http://www.emacswiki.org/emacs/EmacsAsDaemon

5
ответ дан 26 November 2019 в 19:48
поделиться

Еще одно дополнение к ShreevatsaR: скрипт python работает как шарм, но я бы предложил использовать

emacsclient -e '(let ((last-nonmenu-event nil))(save-buffers-kill-emacs))'
в качестве команды. Установка для last-nonmenu-event значения nil переводит emacs в режим мыши, поэтому вы получаете "красивые" диалоговые окна вместо подсказок в минибуфере.

Или даже более навороченный (где-то в вашей конфигурации emacs):

(defun shutdown-emacs-server () (interactive)
  (when (not (eq window-system 'x))
    (message "Initializing x windows system.")
    (x-initialize-window-system)
    (when (not x-display-name) (setq x-display-name (getenv "DISPLAY")))
    (select-frame (make-frame-on-display display '((window-system . x))))
  )
  (let ((last-nonmenu-event nil)(window-system "x"))(save-buffers-kill-emacs)))

, а затем:

emacsclient -e '(shutdown-emacs-server)'
9
ответ дан 26 November 2019 в 19:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: