バッファ内のシェルプロセスを再起動します

バッファ内のシェルプロセスを再起動します

emacsでは、複数のシェルバッファを開いて、それらを管理するためにrename-bufferを使用することがよくあります。時々、^Dを何度も押してシェルをうっかり閉じてしまったり、非アクティブなシェルを自動的にタイムアウトさせるシステムを使っていたりします。同じバッファで新しいシェルを開始する方法はありますか?バッファの名前をシェルMx shellと入力すると新しいシェルが起動しますシェル現在のバッファではなく、バッファ。

答え1

Mx シェルの代わりに、M- を使用して次の emacs lisp コードを実行します。

(shell (current-buffer))

答え2

これは完璧ではありませんが、望みのほとんどを実現できます。次のコードを.emacsスタートアップ ファイルに記述します。

(defun my-shell-mode-hook ()
  "Added to shell-mode-hook.  This function runs every time function shell
starts a shell."
  (rename-buffer "My Shell" 'unique))

(add-hook 'shell-mode-hook 'my-shell-mode-hook)

文字列を"My Shell"他の名前に変更してもかまいません。バッファM-x shell RET内でこれを行うMy Shellと、新しいシェルは同じバッファで開始されます。残念ながら、別のバッファでこれを行うと、 という名前の新しいバッファが作成されますがMy Shell<2>、これはあまり見栄えがよくありません。後者の影響は次のようにして排除できると思います。アドバイス関数 は、実際の関数を実行する前にshellバッファに切り替わるようにします。My Shellshell

関連情報