Previous: Excursions, Up: Positions [Contents][Index]
ナローイング(narrowing)とは、Emacs編集コマンドがアドレス指定可能なテキストを、あるバッファー内の制限された文字範囲に限定することを意味します。アドレス可能なテキストは、そのバッファーのアクセス可能範囲(accessible portion)と呼ばれます。
ナローイングは2つのバッファー位置により指定され、それがアクセス可能範囲の開始と終了になります。ほとんどの編集コマンドおよびプリミティブにたいし、これらの位置はそれぞれそのバッファーの先頭と終端に置き換えられます。ナローイングが効果をもつ間、アクセス可能範囲外のテキストは表示されず、その外部にポイントを移動することはできません。ナローイングは実際のバッファー位置(Pointを参照)を変更しないことに注意してください。ほとんどの関数は、アクセス可能範囲外のテキストにたいする操作を受け付けません。
バッファーを保存するコマンドは、ナローイングの影響を受けません。どんなナローイングであろうと、それらはバッファー全体を保存します。
単一バッファー内に、タイプが大きく異なるテキストを複数表示する必要がある場合は、Swapping Textで説明する代替機能の使用を考慮してみてください。
この関数は、アクセス可能範囲の開始と終了に、カレントバッファーのstartとendをセットする。どちらの引数も、文字位置で指定すること。
インタラクティブな呼び出しでは、startとendはカレントリージョン(ポイントとマークで、小さいほうが前者)にセットされる。
この関数は、カレントページだけを含むように、カレントバッファーのアクセス可能範囲をセットする。1つ目のオプション引数move-countが非nil
の場合は、move-countで前方または後方へ移動後に、1ページにナローすることを意味する。変数page-delimiter
は、ページの開始と終了の位置を指定する(Standard Regexpsを参照)。
インタラクティブな呼び出しでは、move-countには数プレフィクス引数がセットされる。
この関数は、カレントバッファーにたいするすべてのナローイングをキャンセルする。これはワイドニング(widening)と呼ばれる。これは、以下の式と等価である:
(narrow-to-region 1 (1+ (buffer-size)))
この関数は、そのバッファーがナローされていれば非nil
、それ以外はnil
をリターンする。
このスペシャルフォームは、アクセス可能範囲のカレントのバインドを保存してbodyを評価し、以前に有効だったナローイング(またはナローイングのない状態)と同じ状態になるよう最後に保存されたバインドをリストアする。ナローイングの状態は、throw
またはエラーを通じたアブノーマルexit(Nonlocal Exitsを参照)イベント内においても、リストアされる。したがって、この構成は一時的にバッファーをナローする明快な手段である。
save-restriction
がリターンする値は、body内の最後のフォームのリターン値、またはbodyフォームが与えられなければnil
である。
注意: save-restriction
使用時は間違いを起こしやすい。これを試みる前にここでの説明全体を通読すること。
bodyがカレントバッファーを変更する場合でも、save-restriction
は依然として元のバッファー(その制限が保存されたバッファー)上の制限をリストアするが、カレントバッファー自体はリストアしない。
save-restriction
は、ポイントとマークをリストアしない。これを行うにはsave-excursion
を使用する。save-restriction
とsave-excursion
の両方を共に使用するなら、始め(外側)にsave-excursion
を記述すること。それ以外では、一時的なナローイング影響下で古いポイント値がリストアされる。古いポイント値が一時的なナローイング境界外なら、それを実際にリストアするのは失敗するだろう。
以下は、save-restriction
の正しい使い方の簡単な例である:
---------- Buffer: foo ---------- This is the contents of foo This is the contents of foo This is the contents of foo∗ ---------- Buffer: foo ----------
(save-excursion (save-restriction (goto-char 1) (forward-line 2) (narrow-to-region 1 (point)) (goto-char (point-min)) (replace-string "foo" "bar"))) ---------- Buffer: foo ---------- This is the contents of bar This is the contents of bar This is the contents of foo∗ ---------- Buffer: foo ----------