プロンプトとは、新しいユーザー入力を受け取る準備ができたことを表す、プログラムによるテキスト出力のことです。Comintモード(したがってShellモードも)は通常、サブプロセスからの出力にもとづいて、バッファーの一部をプロンプトとして自動的に判断します(具体的には、改行で終端されていない任意の出力行を受け取ったときは、プロンプトとみなします)。
Comintモードは、バッファーを2つのタイプのフィールド(fields)に分けます。1つは入力フィールド(ユーザーの入力がタイプされるところ)で、もう1つは出力フィールド(入力フィールド以外)です。プロンプトは出力フィールドの一部です。ほとんどのEmacs移動コマンドは、そのコマンドが複数行を移動しない限り、フィールド境界を超えることはありません。たとえば、ポイントがシェルコマンドの入力フィールドにある場合、C-aはポイントを入力フィールドの先頭、プロンプトの後に配します。内部的には、フィールドはテキストプロパティfield
を使って実装されています(Text
Properties in the Emacs Lisp Reference Manualを参照してください)。
変数comint-use-prompt-regexp
を非nil
値に変更した場合、Comintモードは正規表現を使ってプロンプトを認識します(正規表現の構文を参照してください)。Shellモードでは、その正規表現は変数shell-prompt-pattern
により指定されます。comint-use-prompt-regexp
のデフォルト値はnil
です。なぜならプロンプト認識のためのこの方法は信頼性が低いためです。しかし特殊な状況では、これを非nil
値にセットしたいと思うこともあるでしょう。そのような場合、EmacsはComintバッファーをフィールドに分割しないので、一般的な移動コマンドは、テキストプロパティを使用せず、それらのコマンドがバッファーで通常行なうように振る舞います。しかし、バッファーを便利に操作するために、パラグラフ移動コマンドを使うことができます(パラグラフを参照してください)。Shellモードでは、Emacsはパラグラフ境界にshell-prompt-pattern
を使用します。