Reinicio mucho mis emacs. Todo lo que quiero hacer es crear una función que mate a los emacs actuales, solo para generar uno nuevo en su lugar. Idealmente, esto también funcionaría en un TTY.
terminal-emacs
PythonNut
fuente
fuente
.emacs.d
, lo que significa que reinicio emacs para eliminar cualquier basura que haya lanzado a mi entorno. Hay algunos otros casos de uso donde hago esto, pero ese es el más grande.bash
que reinicies después de terminar? Ovi
? ¿O cualquier otro proceso, como regla? No, porque eso está fuera de su alcance de preocupaciones y se maneja adecuadamente externamente. En cualquier caso, lo que realmente desea es una forma de reinicializar emacs, limpiando su VM y volviendo a ejecutar su código de inicio ( sin matar su proceso). Eso sería útil y apropiado para emacs. Sin embargo, no sé si existe :)bash
reiniciar conexec bash
. No tengo idea sobre vim.emacs -q
y solucionar el problema, por supuesto, pero prefiero mantener una "buena" instancia ejecutándose en todo momento al piratear mi configuración, solo para estar seguro.Respuestas:
Nota: He incluido lo siguiente en un paquete
restart-emacs
disponible aquí .Aquí hay una forma alternativa de lograr lo que desea usando elisp puro (no realmente porque confía en un shell). El truco es generar otro proceso de emacs justo antes de que se elimine el emacs actual.
El código para iniciar una versión GUI de emacs es sencillo. El código para iniciar emacs en una terminal es un poco complicado. Utiliza el hecho de que puede pasar una cadena a la
suspend-emacs
que se pasaría como entrada de terminal al proceso primario (el shell). De la documentaciónAsí que básicamente suspendemos emacs justo antes de que se elimine, dígale al shell principal que reanude los emacs actualmente suspendidos (que saldrá pronto) y luego inicie otro proceso de emacs. Tenga en cuenta que esto no funciona en plataformas en las que el terminal emacs puede / no suspende realmente, sino que inicia una subshell, por ejemplo, en Windows.
fuente
sh -c "emacs &"
desde el shell, se detiene con "emacs: standard input is not a tty
". (Cuando lo hagoM-x restart-emacs
, ni siquiera veo ese mensaje de error, Emacs simplemente termina.)Hasta donde sé, no puede decirle a Emacs que se reinicie después de finalizar, pero puede configurar el código de salida para que el proceso que inició Emacs en primer lugar pueda detectar que desea reiniciar.
Por ejemplo, este script de shell reinicia Emacs si salió con el código 123.
A continuación, definimos
kill-emacs-and-restart
que hace que Emacs termine con el código de salida igual al número mágico reconocido por el script:Ahora, si ejecuta Emacs a través de este script, puede reiniciar
M-x kill-emacs-and-restart
(o vincularlo a una secuencia de teclas).fuente
you cannot tell Emacs to re-start after terminating
. ¿Es esto una limitación técnica?exec...
familia (de todos modos, en los sistemas POSIX). Las funciones de control de procesos de Emacs Lisp no exponen tales llamadas de bajo nivel. Sin embargo, no soy un experto, así que espero que alguien más informado intervenga.Robado descaradamente de https://unix.stackexchange.com/questions/114238/is-it-possibe-to-change-parent-shells-working-directory-programmatic
Suponiendo que tengo la sintaxis correcta para incrustar "en una cadena, esto debería hacerlo.
fuente