如果一个缓冲区是只读(read-onl)的,那么你无法修改其内容, 尽管你可以通过滚动和缩进来改变查看内容的视角。
只读缓冲区主要用于两类场景:
这里的目的是告知用户:若编辑缓冲区并试图保存到文件, 操作可能无效或不符合预期。即便如此,仍希望修改缓冲区文本的用户, 可以先用 C-x C-q 清除只读标记后再进行编辑。
这些模式的专用命令会在自身修改文本的位置附近,通过 let 将 buffer-read-only 绑定为
nil,或将 inhibit-read-only 绑定为 t。
该缓冲区局部变量用于指定缓冲区是否为只读。
若此变量非 nil,则缓冲区为只读。但是,
带有 inhibit-read-only 文本属性的字符仍然可以被修改。See inhibit-read-only.
若此变量非 nil,则只读缓冲区以及(根据实际取值)
部分或全部只读字符可以被修改。缓冲区中的只读字符是指
带有非 nil 的 read-only 文本属性的字符。有关文本属性的更多信息,
参见 See 具有特殊含义的文本属性。
若 inhibit-read-only 为 t,则所有 read-only 字符属性均失效。
若 inhibit-read-only 为一个列表,则属于该列表成员的 read-only 字符属性失效
(比较使用 eq)。
这是只读次要模式的模式命令,属于缓冲区局部次要模式。
启用该模式时,缓冲区中 buffer-read-only 为非 nil;
禁用时,缓冲区中 buffer-read-only 为 nil。
调用规则与其他次要模式命令一致(see 编写次要模式的规范)。
该次要模式主要作为 buffer-read-only 的包装;
与大多数次要模式不同,它没有独立的 read-only-mode 变量。
即使只读模式已禁用,带有非 nil 的 read-only 文本属性的字符仍保持只读。
如需临时忽略所有只读状态,请按上文所述绑定 inhibit-read-only。
启用只读模式时,如果选项 view-read-only 非 nil,
该模式命令还会同时启用查看模式。See Miscellaneous Buffer Operations in The GNU Emacs Manual.
禁用只读模式时,如果查看模式处于启用状态,则会一并关闭。
如果当前缓冲区为只读,此函数会抛出 buffer-read-only 错误。
若 position 位置(默认为光标位置)的文本设置了 inhibit-read-only 文本属性,
则不会触发该错误。
如需在当前缓冲区只读时报错的另一种方式,参见 See 使用 interactive。