アクティブなM-を回す!into M-&(a'ka emacsはbash Ctrl-Zに相当)


14

ときどきM-! some_command、コマンドが予想よりも長く実行され、emacsが長時間フリーズされたままになることがあります。だから、凍結したemacsをglみ、使用しないことで自分を蹴り、次回M-& some_command使用することを約束しますM-&。しかしM-!、何十年も私の筋肉の記憶にあります...そしてもちろんありますがCtrl-G、コマンドを中断して再実行することが好ましくない場合があります(おそらく、それはsthを中断する可能性があり、おそらくは再実行に費用がかかります...)。

シェルkonsoleでの同様の間違いは修正するのは簡単Ctrl-Zbg、ジョブはバックグラウンドで実行されています。

emacsに同様のトリックがありますか?現在実行中のフォアグラウンド(同期)コマンドをバックグラウンド化(非同期)コマンドに変える方法はありますか?

注:default が不可能な場合M-!、私はM-!他の何かに再バインドする方法の提案を受け入れます(このトリック以外は機能的に同等です)。


2
&通常のshell-commandM-!)の末尾にを追加するだけで非同期になることを知りたい場合があります。もちろん、コマンドを実行する前にこれを行う必要がありますが、少なくとも同じキーバインディングを使用できます。
ナニー

4
あなたはいつもちょうど再マッピングすることができM-!async-shell-command。:-)あなたが失うのは、エコー領域に十分に短いときに出力を取得することだけだと思われます。
グルーカス

1
実際、@ nanny async-shell-commandはそれだけです。文字列&の末尾にを追加してCOMMAND実行しshell-commandます。
マシューピジアック

回答:


2

emacsに同様のトリックがありますか?現在実行中のフォアグラウンド(同期)コマンドをバックグラウンド化(非同期)コマンドに変える方法はありますか?

そのようなトリックは存在しないと思います。問題は、同期シェルコマンド(実際にはcall-process-region)がemacsイベントループをブロックすることです。それを破る唯一の方法は、USR1またはUSR2シグナルでプロセスを強制終了するか、実行することですC-g。(他の方法もあるかもしれませんが、それは私がしていることです)。

これは、イベントループが停止している間はEmacsが入力を処理しないため、このトリックを呼び出す方法がないため、何もできないことを意味します。


できることの 1つは、単にキーを交換することです。

(global-set-key (kbd "M-!") #'async-shell-command)
(global-set-key (kbd "M-&") #'shell-command)

M-!の再バインド async-shell-commandには部分的に意味がありますが、(1)M-1 M-についてはわかりません!動作(バッファへのコマンド出力)–単純な高速のケースは動作しますが、コマンドが遅く、sthと入力するとどうなりますか?私のような多くの場合、(2)コマンドが終了するまで凍結挙動は、それがよりよい(3)葉非同期たものだろう「背景に置く」クリア仕上げ表示(一部のコマンドは...何も出力を持っていない)、そのための明示的なキーストローク与えるので、非同期どの必見バッファを刈り取られる
メック

私はasync-shell-commandの周りのラッパーが書くことができるかどうかを考えています実行されているが、もう待機しておらず、出力が空または短い場合は、非同期バッファを取得します)。待っている部分をどうやってやるかわからない…
メック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.