Время от времени я M-! some_commandпросто обнаруживаю, что команда выполняется дольше, чем я ожидал, и сохраняет мои emacs замороженными на долгие секунды. Поэтому я смотрю на свои замороженные emacs и бью себя за то, что я не использую, M-& some_commandи обещаю использовать в M-&следующий раз. Но M-!в моей мышечной памяти на протяжении десятилетий ... И, конечно, есть Ctrl-G, но есть случаи, когда нарушение команды и повторный запуск не являются предпочтительными (может быть, это может нарушить, может быть, может потребоваться повторный запуск ...).
Подобная ошибка в оболочке konsole тривиальна для исправления Ctrl-Z, bgи задание выполняется в фоновом режиме.
Существует ли в emacs похожая хитрость - способ превратить текущую запущенную команду переднего плана (синхронную) в фоновую (асинхронную)?
Примечание: в случае, если это невозможно по умолчанию M-! , я открыт для предложений о том, как сделать привязку M-!к чему-то другому (что было бы функционально эквивалентным, кроме этого трюка).
M-!к async-shell-command. :-) Похоже, единственное, что вы теряете, это получение результата в эхо-области, когда он достаточно короткий.
async-shell-commandделает. Он добавляет &в конец COMMANDстроки и выполняет shell-command.
&в конец функции normalshell-command(M-!) сделает его асинхронным. Конечно, вы должны сделать это перед выполнением команды, но по крайней мере вы можете использовать ту же привязку клавиш.