「バッファは読み取り専用です」という警告を無効にする方法はありますか?


9

この警告は、エコー領域の現在のテキストを一瞬隠してしまうので、特に役立つものであり、かなり気を散らすものではありません。とにかく私は読み取り専用領域に書き込むことができないことに気付くので、それは不必要に思えます。それを無効にする方法はありますか?

回答:


9

はい、シグナル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を使用してテスト済み。)


好奇心から、command-error-function値を上書きすると、「バッファ読み取り専用」エラーだけでなく、すべてのエラーに影響しませんか?このすべての変更がソースコードにどのような影響を与えるのか、正確にはわかりません。
Kaushal Modi

1
はい、そうです。それがまさに私が(when ...)コードスニペットにフォームを持っている理由です。このようにして、気にしないシグナルはデフォルトのハンドラーに渡され、buffer-read-only無視されます。
コンスタンティン

ああ、そうですね、への電話はまったくありませんcommand-error-default-functionでした。
Kaushal Modi

1
甘い、私はミニバッファーでのみ「テキストは読み取り専用」のゴミを取り除く簡単な方法を探していましたが、これでうまくいきます。
whacka

1
@mcb:私の知る限り、エコー領域とミニバッファーを分離することはできません。私はと信じていることで答えphilsあなたにリンクされているが、我々はこのために、新たなCコードが必要になり、つまり、正しいです。
コンスタンティン

3

「バッファ読み取り専用」エラーの原因

そのエラーの原因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ソースのハックを行うことは、将来、混乱の主な原因になる可能性があります。だから私はそれをしません。


1
私の知る限り(defun barf-if-buffer-read-only () nil)xsignal1コールをコメント化してEmacsを再構築するのと同じ効果があります。:-)
コンスタンティン

elispでC関数をオーバーライドできる@Constantine TIL。ありがとう!
Kaushal Modi

elispを使用して物事を変更することについて:これは私にこの古い質問を思い出させますnilemacs.stackexchange.com/questions/2935/how-can-i-bring-back-nil
Constantine
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.