Я перезагружаю свои emacs много. Все, что я хочу сделать, - это создать функцию, которая убивает текущий emacs, только чтобы породить новый вместо него. В идеале это также будет работать в TTY.
terminal-emacs
PythonNut
источник
источник
.emacs.d
, что означает, что я перезагружаю emacs, чтобы удалить весь мусор, который я врезался в мою среду Есть несколько других вариантов использования, где я делаю это, но это самый большой.bash
чтобы перезагрузить после завершения? Илиvi
? Или любой другой процесс, как правило? Нет, потому что это выходит за рамки их интересов и должным образом обрабатывается извне. В любом случае, то, что вам действительно нужно, - это способ реинициализации emacs путем очистки его виртуальной машины и повторного запуска кода инициализации ( без прерывания его процесса). Это было бы полезно и правильно для Emacs. Я не знаю, существует ли он, хотя :)bash
начать сexec bash
. Я понятия не имею о vim.emacs -q
Конечно, я могу запустить и исправить проблему, но я предпочитаю постоянно поддерживать «хороший» экземпляр при взломе моей конфигурации, просто чтобы быть в безопасности.Ответы:
Примечание: я завернул следующее в пакет,
restart-emacs
доступный здесь .Вот альтернативный способ достичь того, что вы хотите, используя чистый elisp (не совсем, так как вы полагаетесь на оболочку). Хитрость заключается в том, чтобы порождать другой процесс emacs непосредственно перед тем, как текущий emacs будет убит.
Код для запуска версии emacs с графическим интерфейсом прост. Код для запуска emacs в терминале немного сложен. Он использует тот факт, что вы можете передать строку,
suspend-emacs
которая будет передана в качестве терминального ввода в родительский процесс (оболочку). Из документацииТаким образом, мы в основном приостанавливаем emacs как раз перед тем, как он будет убит, сообщаем родительской оболочке возобновить приостановленный в данный момент emacs (который скоро выйдет) и затем запускаем другой процесс emacs. Обратите внимание, что это не работает на платформах, на которых терминал emacs может / не приостанавливает работу, но запускает подоболочку, например, в Windows.
источник
sh -c "emacs &"
из оболочки, он останавливается с "emacs: standard input is not a tty
". (КогдаM-x restart-emacs
я не вижу этого сообщения об ошибке, Emacs просто завершает работу.)Насколько я знаю, вы не можете сказать Emacs перезапустить после завершения, но вы можете установить код выхода так, чтобы процесс, который первым запустил Emacs, мог определить, что вы хотите перезапустить.
Например, этот сценарий оболочки перезапускает Emacs, если он вышел с кодом 123.
Далее мы определим,
kill-emacs-and-restart
что заставляет Emacs завершать работу с кодом выхода, равным магическому числу, распознаваемому сценарием:Теперь, если вы запустите Emacs через этот скрипт, вы можете перезапустить его
M-x kill-emacs-and-restart
(или связать его с последовательностью клавиш).источник
you cannot tell Emacs to re-start after terminating
. Это техническое ограничение?exec...
семейства (в любом случае, в системах POSIX). Функции управления процессом Emacs Lisp не предоставляют такие низкоуровневые вызовы. Хотя я не эксперт, поэтому, надеюсь, кто-то более знающий примет участие.Откровенно похищен с https://unix.stackexchange.com/questions/114238/is-it-possibe-to-change-parent-shells-working-directory-programmatics
Предполагая, что у меня есть правильный синтаксис для встраивания "в строку, это должно сделать это.
источник