Previous: , Up: Positions   [Contents][Index]


29.4 Narrowing

ナローイング(narrowing)とは、Emacs編集コマンドがアドレス指定可能なテキストを、あるバッファー内の制限された文字範囲に限定することを意味します。アドレス可能なテキストは、そのバッファーのアクセス可能範囲(accessible portion)と呼ばれます。

ナローイングは2つのバッファー位置により指定され、それがアクセス可能範囲の開始と終了になります。ほとんどの編集コマンドおよびプリミティブにたいし、これらの位置はそれぞれそのバッファーの先頭と終端に置き換えられます。ナローイングが効果をもつ間、アクセス可能範囲外のテキストは表示されず、その外部にポイントを移動することはできません。ナローイングは実際のバッファー位置(Pointを参照)を変更しないことに注意してください。ほとんどの関数は、アクセス可能範囲外のテキストにたいする操作を受け付けません。

バッファーを保存するコマンドは、ナローイングの影響を受けません。どんなナローイングであろうと、それらはバッファー全体を保存します。

単一バッファー内に、タイプが大きく異なるテキストを複数表示する必要がある場合は、Swapping Textで説明する代替機能の使用を考慮してみてください。

Command: narrow-to-region start end

この関数は、アクセス可能範囲の開始と終了に、カレントバッファーのstartendをセットする。どちらの引数も、文字位置で指定すること。

インタラクティブな呼び出しでは、startendはカレントリージョン(ポイントとマークで、小さいほうが前者)にセットされる。

Command: narrow-to-page &optional move-count

この関数は、カレントページだけを含むように、カレントバッファーのアクセス可能範囲をセットする。1つ目のオプション引数move-countが非nilの場合は、move-countで前方または後方へ移動後に、1ページにナローすることを意味する。変数page-delimiterは、ページの開始と終了の位置を指定する(Standard Regexpsを参照)。

インタラクティブな呼び出しでは、move-countには数プレフィクス引数がセットされる。

Command: widen

この関数は、カレントバッファーにたいするすべてのナローイングをキャンセルする。これはワイドニング(widening)と呼ばれる。これは、以下の式と等価である:

(narrow-to-region 1 (1+ (buffer-size)))
Function: buffer-narrowed-p

この関数は、そのバッファーがナローされていれば非nil、それ以外はnilをリターンする。

Special Form: save-restriction body…

このスペシャルフォームは、アクセス可能範囲のカレントのバインドを保存してbodyを評価し、以前に有効だったナローイング(またはナローイングのない状態)と同じ状態になるよう最後に保存されたバインドをリストアする。ナローイングの状態は、throwまたはエラーを通じたアブノーマルexit(Nonlocal Exitsを参照)イベント内においても、リストアされる。したがって、この構成は一時的にバッファーをナローする明快な手段である。

save-restrictionがリターンする値は、body内の最後のフォームのリターン値、またはbodyフォームが与えられなければnilである。

注意: save-restriction使用時は間違いを起こしやすい。これを試みる前にここでの説明全体を通読すること。

bodyがカレントバッファーを変更する場合でも、save-restrictionは依然として元のバッファー(その制限が保存されたバッファー)上の制限をリストアするが、カレントバッファー自体はリストアしない。

save-restrictionは、ポイントとマークをリストアしない。これを行うにはsave-excursionを使用する。save-restrictionsave-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 ----------