Gibt es eine Möglichkeit, die Warnung "Puffer ist schreibgeschützt" zu deaktivieren?

9

Ich finde diese Warnung nicht besonders hilfreich und ziemlich ablenkend, da sie den aktuellen Text für einen kurzen Moment im Echo-Bereich verbirgt. Ist auch unnötig, da ich sowieso feststellen werde, dass ich nicht in schreibgeschützten Bereichen schreiben kann. Gibt es eine Möglichkeit, es zu deaktivieren?

Lenar Hoyt
quelle

Antworten:

9

Ja, Sie können diese Meldungen deaktivieren, indem Sie command-error-functioneine Funktion einstellen , die buffer-read-onlySignale ignoriert .

(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)

(Getestet mit GNU Emacs 24.5.1.)

Konstantin
quelle
Wird das Überschreiben des command-error-functionWerts aus Neugier nicht alle Fehler betreffen und nicht nur die "Nur-Puffer-Puffer" -Fehler? Ich kann nicht genau herausfinden, welche Auswirkungen diese Änderung auf den Quellcode hat.
Kaushal Modi
1
Ja es würde. Genau deshalb habe ich das (when ...)Formular im Code-Snippet: Auf diese Weise werden Signale, die uns nicht interessieren, an den Standard-Handler übergeben und buffer-read-onlyignoriert.
Constantine
Ah OK, ich habe diesen Anruf total verpasst command-error-default-function.
Kaushal Modi
1
Süß, ich habe nach einer einfachen Möglichkeit gesucht, diesen "Text ist schreibgeschützt" -Müll nur im Minibuffer loszuwerden, und das macht den Trick.
Whacka
1
@mcb: Soweit ich weiß, ist es nicht möglich, den Echo-Bereich und den Mini-Puffer zu trennen. Ich glaube, dass die Antwort, mit philsder Sie verlinkt haben, richtig ist, dh wir würden dafür einen neuen C-Code benötigen.
Constantine
3

Quelle des Fehlers "Puffer schreibgeschützt"

Ich glaube, dass die Quelle dieses Fehlers Buffer is read-only: <#BUFFER-NAME>im C-Quellcode liegt.

Die Lösung hierfür wäre also, den Quellcode zu optimieren und Emacs lokal zu erstellen, indem diese bestimmte Zeile auskommentiert wird .

Als Referenz ist hier das Code-Snippet, das diesen Fehler auslöst:

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;

.. und das Auskommentieren dieser xsignalZeile sollte den Trick tun.


Vorgeschlagener Ansatz

Es gibt eine viel einfachere Möglichkeit, diesen Ärger für die Dauer, in der Sie in einem schreibgeschützten Puffer arbeiten, abzuwenden. Sie können ihn vorübergehend NICHT schreibgeschützt machen.

  • Durch Ausführen M-x read-only-mode(standardmäßig gebunden an C-x C-q) wird ein Puffer zwischen dem schreibgeschützten Modus und dem bearbeitbaren Modus umgeschaltet.

Wenn Sie also viele dieser Fehler erhalten, können Sie den Puffer einfach vorübergehend durch Bearbeiten bearbeiten C-x C-q.


Ein Hinweis zur Warnung: Das Durchführen des C-Quell-Hacks könnte in Zukunft zu großer Verwirrung führen. Also würde ich es nicht tun.

Kaushal Modi
quelle
1
Soweit ich das beurteilen kann, (defun barf-if-buffer-read-only () nil)hat dies den gleichen Effekt wie das Auskommentieren des xsignal1Anrufs und das Wiederherstellen von Emacs. :-)
Constantine
@Constantine TIL, dass wir C-Funktionen in elisp überschreiben können. Vielen Dank!
Kaushal Modi
In Bezug auf das Ändern von Dingen mit elisp: Dies erinnert mich an diese alte Frage über nil: emacs.stackexchange.com/questions/2935/how-can-i-bring-back-nil
Constantine