GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/eintr/save_002drestriction.html ・ emacs-doc.conao3.com

6.1 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...))