Ist es möglich, die Ausgabe eines Prozessfilters an den *Messages*
Puffer zu senden und zu unterdrücken, dass diese Nachrichtenausgabe im minibuffer-prompt
Echobereich angezeigt wird , sodass ich gleichzeitig interaktive Befehle verwenden kann, ohne dass diese durch die laufende Ausgabe des Subpress-Filters gelöscht werden?
(defun rsync-process-filter (proc string)
(when (not (or
(string-match "files...\r" string)
(string-match "files to consider\n" string)))
(message "%s" string)))
BEARBEITEN (3. Januar 2015): Das Folgende ist ein Link zu einer ähnlichen Frage, aber ich konnte es noch nicht mit einer Prozesszeichenfolge arbeiten lassen, bei der die genaue Zeichenfolge unbekannt ist - der Titel des Threads lautet: Emacs - Deaktivieren Sie einige Minibuffer-Nachrichten :
minibuffer
process
echo-area
Gesetzesliste
quelle
quelle
*Messages*
Puffer senden möchte - Synchronisationsprojekte sind eine davon. Es gibt noch einige Dinge, die ich nicht ausprobiert habe ( weil ich dachte, dass es möglicherweise eine integrierte Lösung gibt ), z. B. den*Messages*
Puffer vorübergehend beschreibbar zu macheninhibit-read-only
undinsert
at zu verwendenpoint-max
- ich weiß nicht, ob dies in angezeigt wird auch der Echo-Bereich. Ich werde heute Abend wieder daran arbeiten. . .M-x report-emacs-bug
dies als Feature anfordern?(let ((inhibit-read-only t)) (with-current-buffer (get-buffer-create "*Messages*") (goto-char (point-max)) (insert string)))
ich einen Antwortentwurf veröffentlichte, der nach Ablauf der obligatorischen Wartezeit für die eigene Frage eines Benutzers zur Annahme berechtigt ist. Ich habe eine Feature-Anfrage eingereicht beireport-emacs-bug
: debbugs.gnu.org/cgi/bugreport.cgi?bug=19495(messages-buffer)
, um den Puffer zu erhalten , wenn Sie sich an diese Methode halten und beachten, dass dies(point-max)
nicht immer der Anfang einer neuen Zeile ist (zC-g
. B. Verwendung ).Antworten:
Sie können die Anzeige im Minibuffer unterdrücken, indem Sie
minibuffer-message-timeout
auf 0 setzen.Zum Beispiel verwende ich so etwas an einigen Stellen, an denen ich in einer Minibuffer-Eingabeaufforderung (wie der IDO-Find-Datei) einen Nebenmodus umschalten möchte, ohne durch eine Meldung "Modus aktiviert" unterbrochen zu werden:
quelle
(let ((minibuffer-message-timeout 0)) (message "%s" string))
Standbildern wird im Echo-Bereich / Minibuffer angezeigt, wenn interaktive Funktionen wieexecute-extended-command
oderswitch-to-buffer-other-window
- dh die Eingabeaufforderung und die vorgeschlagenen Abschlüsse werden durch die Prozessausgabemeldungen gelöscht.Erster grober Entwurf (3. Januar 2015): Überarbeiteter erster Entwurf basierend auf dem hilfreichen Kommentar von @phils bezüglich der Verwendung der Funktion
messages-buffer
zum Suchen oder Erstellen des entsprechenden Puffers (und Einfügen in diesenmessages-buffer-mode
); und fügte hinzu, obpoint-max
am Anfang der Zeile steht (falls nicht, fügen Sie eine neue Zeile ein, bevor Sie die Nachrichtenzeichenfolge einfügen).BEARBEITEN (4. Januar 2015): Es gibt Situationen, in denen die eingefügte Zeichenfolge möglicherweise nicht unbedingt in einer neuen Zeile
message
endet und die Funktion nicht überprüft wird, ob sie am Anfang einer neuen Zeile steht. Deshalb kümmern wir uns darum in dieser Funktion. Somitmessage
beginnt die Zeile zu jedem Zeitpunkt, an dem eine neue Zeile eingefügt wird, links vom Puffer.quelle
Wenn Sie die Dokumentzeichenfolge durchgehen
message
, sollte es möglich sein, das zu erreichen, was Sie möchten, indem Sie die Nachrichtnil
unmittelbar nach dem Aufrufmessage
mit dem gewünschten Inhalt mit einem Argument aufrufen . Aus der Dokumentation vonmessage
Es sollte also funktionieren, wenn Sie Ihre Funktion wie folgt ändern
Ich habe es wie folgt getestet
Und es scheint zu funktionieren
quelle
*Messages*
Puffer und anschließendem Aufrufen des interaktiven Befehlsexecute-extended-command
Folgendes: die interaktive Eingabeaufforderung (dhM-x
alle Teilabschlüsse) und die Ausgabe des Prozesses - dh die beiden wechseln zurück und mit Lichtgeschwindigkeit her, aber ein Flackern zwischen den beiden ist erkennbar. Dies scheint der Fall zu sein, da der betreffende Prozess ständig neue Nachrichten ausspuckt und diese neue Nachricht für den Bruchteil einer Sekunde im Echobereich angezeigt wird.