save-restriction 特殊形式
¶Emacs Lispでは、save-restriction
特殊フォームを使用して、適用されているナローイング(もしあれば)を追跡できます。Lispインタプリタが save-restriction に到達すると、save-restriction
式のボディ内のコードを実行し、その後、そのコードによって生じたナローイングへの変更を元に戻します。例えば、バッファがナローイングされており、save-restriction に続くコードがそのナローイングを解除した場合、save-restriction はその後バッファをナローイングされた領域に戻します。what-line コマンドにおいて、バッファに適用されている可能性のあるナローイングは、save-restriction コマンドの直後に続く widen コマンドによって解除されます。元のナローイングは、関数の終了直前に復元されます。
save-restriction 式のテンプレートはシンプルです:
(save-restriction body... )
save-restriction
の本体は、Lispインタプリタによって順次評価される1つ以上の式です。
最後に注意点です。save-excursion と save-restriction を連続して使用する場合は、最も外側に save-excursion を配置してください。逆の順序で記述すると、save-excursion を呼び出した後に Emacs
が切り替わるバッファにおいて、狭窄を記録し損ねる可能性があります。したがって、併せて記述する場合、save-excursion と save-restriction は次のように記述すべきです:
(save-excursion
(save-restriction
body...))
その他の場合で、併せて記述されないときは、save-excursion および save-restriction の特殊形式を、機能に応じた順序で記述しなければならない。
例えば、
(save-restriction
(widen)
(save-excursion
body...))