バッファが読み取り専用の場合、その内容を変更することはできませんが、スクロールや範囲の絞り込みによって内容の表示方法を変えることは可能です。
読み取り専用バッファは、2種類の場面で使用されます。
ここでは、バッファをファイルに保存する目的で編集しても、無意味であったり望ましくなかったりする場合があることをユーザーに知らせることが目的です。それにもかかわらずバッファの内容を変更したいユーザーは、C-x C-q で読み取り専用フラグをクリアした後に変更を行うことができます。
これらのモードの特殊コマンドは、自身がテキストを変更する箇所の周辺で、buffer-read-onlyをnil(letと共に)にバインドしたり、inhibit-read-onlyをtにバインドしたりします。
このバッファローカル変数は、バッファが読み取り専用であるかどうかを指定します。この変数が nil
以外の場合、バッファは読み取り専用となります。ただし、inhibit-read-only
テキストプロパティを持つ文字は引き続き変更可能です。inhibit-read-only を参照してください。
この変数が nil
以外の場合、読み取り専用バッファにおいて、実際の値に応じて、一部またはすべての読み取り専用文字が変更されることがあります。バッファ内の読み取り専用文字とは、nil 以外の read-only
テキストプロパティを持つ文字のことです。テキストプロパティの詳細については、特殊な意味を持つプロパティを参照してください。
inhibit-read-only が t
の場合、すべての read-only 文字プロパティは効果を持ちません。inhibit-read-only がリストである場合、read-only 文字プロパティがそのリストの要素であれば効果を持ちません(比較は eq と行われます)。
これは、バッファローカルなマイナーモードである「読み取り専用」マイナーモードのモードコマンドです。このモードが有効な場合、バッファ内では buffer-read-only は nil
ではなく、無効な場合は buffer-read-only がバッファ内で nil となります。呼び出し規約は、他のマイナーモードコマンドと同様です(マイナーモード記述の規約を参照してください)。
このマイナーモードは主に buffer-read-only
のラッパーとして機能します。ほとんどのマイナーモードとは異なり、独立した read-only-mode 変数は存在しません。Read Only モードが無効な場合でも、nil read-only
以外のテキストプロパティを持つ文字は読み取り専用のままとなります。すべての読み取り専用状態を一時的に無視するには、前述の通り inhibit-read-only をバインドしてください。
読み取り専用モードを有効にする際、オプション view-read-only が nil 以外であれば、このモードコマンドは表示モードも有効にします。The
GNU Emacs Manual の Miscellaneous
Buffer Operations
を参照してください。読み取り専用モードを無効にする際、表示モードが有効になっていた場合は、表示モードも無効になります。
この関数は、現在のバッファが読み取り専用である場合に buffer-read-only
エラーを発生させます。position(デフォルトは point)にあるテキストに inhibit-read-only テキストプロパティが設定されている場合は、エラーは発生しません。
現在のバッファが読み取り専用の場合にエラーを通知する別の方法については、interactive
の使用を参照してください。