シェルバッファではシェル(shell)モードが使われ、 プレフィックスキーC-cを持つ特別なキーをいくつか定義しています。 これらは、まずC-cを打つことを除けば、 Emacsの外でシェルを使うときの通常のコマンド行編集や ジョブ制御のキーに似せて定義してあります。 以下は、シェル(shell)モードでの特別なバインディングの一覧です。
comint-send-input
)。
行をコピーするとき、行の先頭部分の文字列で
変数shell-prompt-pattern
に一致する部分はコピーしない。
この変数の値は、ユーザーのシェルがプロンプトとして用いる
文字列に一致する正規表現であること。
comint-dynamic-complete
)。
<TAB>は、履歴参照(see History References)や
環境変数名も補完できる。
変数shell-completion-fignore
には、
シェル(shell)モードでの補完において
無視したいファイル名の拡張子のリストを指定する。
デフォルトの設定では、名前が、‘~’、‘#’、‘%’で
終るファイルを無視する。
関連する他のcomintモードではかわりに
変数comint-completion-fignore
を使う。
comint-dynamic-list-filename-completions
)。
comint-delchar-or-maybe-eof
)。
シェルバッファの末尾でC-dを打つとサブシェルにeofを送る。
バッファのそれ以外の位置では、C-dを打つと通常どおり1文字削除する。
comint-bol
)。
同じ行でこのコマンドを2回繰り返すと、2回目ではプロセスマークへ戻る。
プロセスマークとは、サブシェルへまだ送っていない入力の開始位置のこと。
(通常、これは同じ場所であり、
プロセスマークはその行のプロンプトの終りにある。
ただし、C-c <SPC>のあとでは、
プロセスマークはまえの行にあるかもしれない。)
comint-kill-input
)。
backward-kill-word
)。
comint-interrupt-subjob
)。
また、このコマンドは
シェルバッファ内のまだシェルに送っていないテキストもキルする。
comint-stop-subjob
)。
また、このコマンドは
シェルバッファ内のまだシェルに送っていないテキストもキルする。
comint-quit-subjob
)。
また、このコマンドは
シェルバッファ内のまだシェルに送っていないテキストもキルする。
comint-kill-output
)。
シェルコマンドが大量の出力を出してしまったときなどに有効。
comint-show-output
)。
comint-show-maximum-output
)。
shell-forward-command
)。
変数shell-command-regexp
には、
シェルコマンドの終りの探し方(正規表現)を指定する。
shell-backward-command
)。
comint-dynamic-list-input-ring
)。
かわりに、つぎのようにして、 Emacsにパスワードプロンプトを認識させてエコーバックを抑制する方法もある。
(add-hook 'comint-output-filter-functions 'comint-watch-for-password-prompt)
(add-hook 'comint-output-filter-functions 'comint-strip-ctrl-m)
comint-buffer-maximum-size
で指定した大きさに
シェルバッファの行数を切り詰める。
サブシェルから出力を受け取るたびに
これを自動的に行うにはつぎのようにする。
(add-hook 'comint-output-filter-functions 'comint-truncate-buffer)
シェル(shell)モードでは段落コマンドにも修正を加えてあり、 シェルプロンプトでのみ新しい段落が始まるようになっています。 つまり、シェルバッファでは、 1つの段落はシェルコマンドとその出力から成るのです。
シェル(shell)モードは、対話的なサブプロセスと通信するための汎用モードである comintモードからの派生です。 ここまでにあげてきたコマンドの名前からもわかるように、 シェル(shell)モードの数多くの機能は、実は、comintモードからきています。 シェル(shell)モードに固有な特別な機能は、正規表現に基づくプロンプトの認識、 カレントディレクトリの追跡、および、少数のユーザーコマンドに限られます。
comintモードから派生したEmacsのほかの機能としては、 GUD(see Debuggers)と M-x run-lisp(see External Lisp)があります。
M-x comint-runを使うと、 シェル(shell)モード固有の機能を持たないcomintモードで、 任意のプログラムをサブプロセスとして実行できます。
[1] シェルプロセスを休止すべきではない。 シェルのサブジョブを休止するのとはまったく別のことであり、 こちらは普通に行ってよい。 ただし、休止したサブジョブはシェルで再開させる必要がある。 このコマンドでは再開できない。