我发现此警告不是特别有用,并且不会分散注意力,因为它会在回声区域中暂时隐藏当前文本。似乎也没有必要,因为无论如何我都会注意到我无法在只读区域中写入。有没有办法禁用它?
我发现此警告不是特别有用,并且不会分散注意力,因为它会在回声区域中暂时隐藏当前文本。似乎也没有必要,因为无论如何我都会注意到我无法在只读区域中写入。有没有办法禁用它?
Answers:
是的,您可以通过设置command-error-function
为忽略buffer-read-only
信号的功能来禁用这些消息。
(defun my-command-error-function (data context caller)
"Ignore the buffer-read-only signal; pass the rest to the default handler."
(when (not (eq (car data) 'buffer-read-only))
(command-error-default-function data context caller)))
(setq command-error-function #'my-command-error-function)
(使用GNU Emacs 24.5.1测试。)
(when ...)
在代码段中包含表单的原因:通过这种方式,我们不在乎的信号将传递到默认处理程序并被buffer-read-only
忽略。
command-error-default-function
。
我相信该错误的来源:Buffer is read-only: <#BUFFER-NAME>
在C源代码中。
因此,解决方案是调整源代码,并通过注释掉此特定行在本地构建emacs 。
作为参考,以下是引发该错误的代码段:
if (!NILP (BVAR (current_buffer, read_only))
&& NILP (Vinhibit_read_only)
&& NILP (Fget_text_property (pos, Qinhibit_read_only, Qnil)))
xsignal1 (Qbuffer_read_only, Fcurrent_buffer ());
return Qnil;
..并注释掉该xsignal
行应该可以解决问题。
在只读缓冲区中工作的时候,有一种更简便的方法来避免这种烦恼。您可以暂时不将其设置为只读。
M-x read-only-mode
(默认情况下绑定为C-x C-q
)可在只读模式和可编辑模式之间切换任何缓冲区。因此,如果遇到很多这些错误,只需点击即可使缓冲区暂时可编辑C-x C-q
。
警告说明:将来,使用C源代码破解可能是造成混乱的主要原因。所以我不会做。
(defun barf-if-buffer-read-only () nil)
,其效果与注释xsignal1
通话和重新构建Emacs相同。:-)
nil
:emacs.stackexchange.com/questions/2935/how-can-i-bring-back-nil
command-error-function
值会影响所有错误,而不仅仅是“缓冲区只读”错误?我无法确切地知道所有这些更改将对源代码产生什么影响。