Od czasu do czasu zdarza mi się po M-! some_command
prostu stwierdzić, że polecenie działa dłużej niż się spodziewałem i utrzymuje moje emacsy zamrożone przez długie sekundy. Więc glazuruję na moich zamrożonych emacach i kopię się za to, że nie używam, M-& some_command
i obiecuję, że użyję M-&
następnym razem. Ale M-!
jest w mojej pamięci mięśni przez dziesięciolecia… Oczywiście, że tak Ctrl-G
, ale zdarzają się przypadki, w których złamanie polecenia i ponowne uruchomienie nie jest preferowane (być może może to zepsuć coś, być może ponowne uruchomienie byłoby kosztowne…).
Podobny błąd w konsoli konsoli jest prosty do naprawienia Ctrl-Z
, bg
a zadanie działa w tle.
Czy istnieje jakaś podobna sztuczka w emacsie - sposób na przekształcenie aktualnie uruchomionej komendy pierwszego planu (synchronicznej) w tło (asynchroniczną)?
Uwaga: w przypadku, gdy nie jest to możliwe domyślnie M-!
, jestem otwarty na sugestie, jak ponownie powiązać M-!
w coś innego (co byłoby funkcjonalnie równoważne oprócz tej sztuczki).
&
na końcu funkcji regularshell-command
(M-!
) spowoduje, że stanie się ona asynchroniczna. Oczywiście musisz to zrobić przed uruchomieniem polecenia, ale przynajmniej możesz użyć tego samego skrótu klawiszowego.M-!
doasync-shell-command
. :-) Wydaje się, że jedyną rzeczą, którą tracisz, jest uzyskanie sygnału wyjściowego w obszarze echa, gdy jest wystarczająco krótki.async-shell-command
. Dodaje&
na końcuCOMMAND
łańcucha i wykonujeshell-command
.Odpowiedzi:
Podejrzewam, że taka sztuczka nie istnieje. Problem polega na tym, że polecenie synchronicznej powłoki (która tak naprawdę jest
call-process-region
) blokuje pętlę zdarzeń emacs. Jedynym sposobem na złamanie tego jest zabicie procesu sygnałem USR1 lub USR2 lub zrobienie tego C-g. (Mogą być inne sposoby, ale to właśnie robię).Oznacza to, że nic nie możesz zrobić, ponieważ nie masz sposobu na wywołanie lewy, ponieważ Emacs nie przetwarza danych wejściowych, gdy pętla zdarzeń jest zablokowana.
Jedną rzeczą, którą możesz zrobić, to po prostu zamienić klucze:
źródło