回答:
はい、シグナル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
でした。
phils
あなたにリンクされているが、我々はこのために、新たなCコードが必要になり、つまり、正しいです。
そのエラーの原因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
値を上書きすると、「バッファ読み取り専用」エラーだけでなく、すべてのエラーに影響しませんか?このすべての変更がソースコードにどのような影響を与えるのか、正確にはわかりません。