Leere alle Ausgaben im Shell-Puffer (und * Nachrichten * auch)

8

Gibt es eine einfache Möglichkeit, alle Ausgaben im shellPuffer zu leeren? Seit kurzem (ich glaube, Emacs 24.4 hat dies bereits) können *shell*Puffer nicht bearbeitet werden. Sie verhalten sich ähnlich wie das typische Terminal, dh Sie können nur Text am Ende anhängen oder die letzte Ausgabe leeren, aber Sie können nicht Fügen Sie an einer beliebigen Stelle Text hinzu oder entfernen Sie einen Teil davon willkürlich. Es scheint, als würde mir etwas Wichtiges an dieser Verbesserung fehlen (?). Es macht es tatsächlich ärgerlicher. Ich suchte in den Dokumenten nach den *shell*und *Messages*Puffern, konnte aber keine Erwähnung der Frage finden.

Neben der ursprünglichen Frage: Was bringt diese Änderung? Für mich ist dies überhaupt keine Verbesserung. Wenn es also keinen "Haken" gibt, möchte ich ihn standardmäßig auf "Lesen / Schreiben" setzen.

Ich spreche natürlich von Emacs 24.4 , 25.0.50.1.

wvxvw
quelle
2
Sie scheinen über eine "Verbesserung" verärgert zu sein, aber Sie haben nicht erwähnt, was es ist. Aus Ihrem Tag schließe ich, dass Sie sich darauf beziehen, Messagesjetzt schreibgeschützt zu sein, aber ich sehe nicht, wie sich das auf Shell-Puffer bezieht.
Malabarba
1
@ Malabarba- shellPuffer war früher auch vollständig bearbeitbar. Das heißt, Sie können Text an jeder beliebigen Stelle löschen oder hinzufügen, während Sie jetzt nur noch Text am Ende anhängen und ihn auch nirgendwo anders entfernen können. *Messages*verhält sich genauso.
wvxvw

Antworten:

5

(erase-buffer) Funktioniert nicht mit Comint- und Shell-Puffern, wenn diese schreibgeschützt sind.

Hier ist der Defun, den ich ziemlich oft zum Löschen von Schalenpuffern verwende:

(defun clear-comint-buffer ()
  (interactive)
  (let ((old-max comint-buffer-maximum-size))
    (setq comint-buffer-maximum-size 0)
    (comint-truncate-buffer)
    (setq comint-buffer-maximum-size old-max)
    (goto-char (point-max))))

Sie können dies möglicherweise s-kin Ihren relevanten Modi binden , um das Löschverhalten von OSXs Terminal.app nachzuahmen.

Update 11/2016

Irgendwo in der Emacs 25-Entwicklung (und auch in meinem neuesten Build, der "26.0.50.1" ist) (comint-clear-buffer)wurde hinzugefügt comint-mode, was eine prägnantere Version meines benutzerdefinierten Defuns ist. Hier ist die Quelle als Referenz:

(defun comint-clear-buffer ()
  "Clear the comint buffer."
  (interactive)
  (let ((comint-buffer-maximum-size 0))
    (comint-truncate-buffer)))

Diese integrierte Lösung funktioniert auch, wenn Sie haben (setq comint-prompt-read-only t).

Waymondo
quelle
Bah, das ist also beabsichtigt ... nun, dann beantwortet dies die Frage. Scheint, als M-x shell
müsste
@wvxvw M-x erase-bufferfunktioniert perfekt in einem Shell-Modus-Puffer in Emacs Trunk, und ich sehe keinen Grund, warum es auch in 24.4 nicht funktionieren sollte.
@wvxvw Ich bin verwirrt. Mein Shell-Puffer ist nicht schreibgeschützt und der Löschpuffer funktioniert einwandfrei. Vielleicht wurde es in Emacs-25 geändert, ich werde versuchen, es später zu überprüfen.
Malabarba
@ Malabarba Ich habe es versucht, und es funktioniert perfekt.
2
@Malabarba / @lunaryorn - Ich habe den Grund gefunden, warum (erase-buffer)ich persönlich nicht arbeite. Ich habe (setq comint-prompt-read-only t)in meiner Konfiguration, was ich nützlich finde, um die Eingabeaufforderung nicht zu überfrachten und (erase-buffer)mich damit anzuschimpfen.
Waymondo
13

*Messages*Mit dem kill-bufferBefehl können Sie den Puffer auf die gleiche Weise wie immer bereinigen . Wenn das nächste Mal eine Nachricht signalisiert wird, wird der Puffer neu erstellt.

Der Grund, warum dieser Puffer jetzt schreibgeschützt ist, besteht darin, dass ihm ein eigener Hauptmodus gewährt wurde , der von erbt special-mode, der schreibgeschützt ist. Die Vorteile dahinter sind mehrere. special-modeist zum Lesen konzipiert und verfügt daher über mehrere Tastenkombinationen, die für Puffer, die nicht zum Bearbeiten bestimmt sind, sehr praktisch sind.


Ich bin mir nicht sicher, was *shell*mit irgendetwas zu tun hat. Aber wenn Sie es löschen möchten, M-x erase-buffer sollten Sie tun.

Malabarba
quelle