Il m'arrive de temps en temps M-! some_command
de constater que la commande s'exécute plus longtemps que prévu et garde mes emacs figés pendant de longues secondes. Je glaçe donc mes emacs congelés et me donne un coup de pied pour ne pas utiliser M-& some_command
et me promets d'utiliser la M-&
prochaine fois. Mais M-!
est dans ma mémoire musculaire depuis des décennies… Et bien sûr qu'il y en a Ctrl-G
, mais il y a des cas où rompre la commande et le relancer n'est pas préférable (peut-être qu'il peut casser qch, peut être coûteux à réexécuter…).
Une erreur similaire dans shell konsole est triviale à corriger Ctrl-Z
, bg
et le travail s'exécute en arrière-plan.
Existe-t-il une astuce similaire dans emacs - un moyen de transformer la commande de premier plan (synchrone) en cours d'exécution en une commande en arrière-plan (asynchrone)?
Remarque: dans le cas où il est impossible par défaut M-!
, je suis ouvert à des suggestions sur la façon de se lier M-!
à autre chose (ce qui serait fonctionnellement équivalent en dehors de cette astuce).
&
à la fin d'un regularshell-command
(M-!
) le rendra asynchrone. Bien sûr, vous devez le faire avant d'exécuter une commande, mais au moins vous pouvez utiliser le même raccourci clavier.M-!
àasync-shell-command
. :-) On dirait que la seule chose que vous perdez est d'obtenir la sortie dans la zone d'écho lorsqu'elle est suffisamment courte.async-shell-command
. Il ajoute un&
à la fin de laCOMMAND
chaîne et s'exécuteshell-command
.Réponses:
Je soupçonne qu'aucun tel truc n'existe. Le problème est que la commande shell synchrone (qui est vraiment
call-process-region
) bloque la boucle d'événements emacs. La seule façon de le casser est de tuer le processus avec un signal USR1 ou USR2 ou de le faire C-g. (Il peut y avoir d'autres moyens, mais c'est ce que je fais).Cela signifie que vous ne pouvez rien faire car vous n'avez aucun moyen d'invoquer l'astuce, car Emacs ne traite pas les entrées pendant que la boucle d'événements est bloquée.
Une chose que vous pouvez faire est simplement d'échanger les clés:
la source