De vez en cuando me doy M-! some_command
cuenta de que el comando se ejecuta más de lo esperado y mantiene mis emacs congelados durante largos segundos. Así que miro mis emacs congelados y me pateo por no usar M-& some_command
y me prometo usar la M-&
próxima vez. Pero M-!
está en mi memoria muscular durante décadas ... Y, por supuesto, lo hay Ctrl-G
, pero hay casos en los que romper el comando y volver a ejecutarlo no es preferible (tal vez pueda romper algo, tal vez sea costoso volver a ejecutar ...).
Un error similar en shell konsole es trivial para corregir Ctrl-Z
, bg
y el trabajo se ejecuta en segundo plano.
¿Existe algún truco similar en emacs, una forma de convertir el comando actual en primer plano (síncrono) en uno en segundo plano (asíncrono)?
Nota: en caso de que sea imposible por defecto M-!
, estoy abierto a sugerencias sobre cómo volver a vincular M-!
a otra cosa (lo que sería funcionalmente equivalente aparte de este truco).
&
al final de un regularshell-command
(M-!
) lo hará asíncrono. Por supuesto, debe hacer esto antes de ejecutar un comando, pero al menos puede usar la misma combinación de teclas.M-!
aasync-shell-command
. :-) Parece que lo único que pierde es obtener la salida en el área de eco cuando es lo suficientemente corta.async-shell-command
. Agrega un&
al final de laCOMMAND
cadena y se ejecutashell-command
.Respuestas:
Sospecho que no existe tal truco. El problema es que el comando de shell sincrónico (que es realmente
call-process-region
) bloquea el bucle de eventos emacs. La única forma de romperlo es matar el proceso con una señal USR1 o USR2 o hacer C-g. (Puede haber otras formas, pero eso es lo que hago).Esto significa que no hay nada que pueda hacer porque no tiene una forma de invocar el truco, ya que Emacs no procesa la entrada mientras el bucle de eventos está estancado.
Una cosa que puede hacer es simplemente cambiar las teclas:
fuente