Der Echo-Bereich ist die meiste Zeit leer, was mich glauben lässt, dass ich damit einige Informationen anzeigen könnte. org-clock
Zeigt beispielsweise die aktuelle Aufgabe, die verbleibende Zeit und die insgesamt verstrichene Zeit in der Modellreihe an. Diese Informationen sind dort nicht wirklich lesbar (die Modeline kann ziemlich kurz sein), werden bei jeder Modeline wiederholt (da sie für die gesamte Emacs-Sitzung gilt) und sind nicht so nützlich, dass ich bereit bin, wertvollen Modeline-Platz dafür zu opfern . Andererseits kann es im Echo-Bereich erscheinen, wenn hier nichts anderes angezeigt werden kann.
Gibt es einen kanonischen Weg, um dies zu erreichen? Ich habe darüber nachgedacht, eine Einfügefunktion in zu hacken minibuffer-inactive-mode-hook
(aber es funktioniert nicht zuverlässig, zum Beispiel verschwindet die Nachricht, sobald der Echo-Bereich wieder verwendet wird) oder nicht protokollierte Nachrichten zu spammen (aber dies wird mit anderen Verwendungszwecken von verwirren der Echo-Bereich und der Minibuffer).
Eine Poor-Man-Version davon würde Leerlauf-Timer verwenden, aber der Echo-Bereich kann leer sein, ohne dass Emacs im Leerlauf sind (zum Beispiel bei der Eingabe von Text).
quelle
Antworten:
In einem Kommentar zu dieser Frage wird erwähnt, dass ein Paket mit dem Namen symon eine solche Funktion verwendet.
Dies wird erreicht, indem nicht protokollierte Nachrichten als Spam gesendet werden, wenn der Minibuffer inaktiv ist, und indem die erneute Anzeige jedes Mal gestoppt wird, wenn ein Befehl ausgegeben wird. Das Boilerplate dafür ist ziemlich kurz, und nach ein paar Minuten konnte ich keine Probleme damit feststellen: Nachrichten und Minibuffer-Nutzung haben immer noch Vorrang vor den Nachrichten.
Die Schlüsselkomponenten sind:
message-log-max
gesetzt auf aufnil
, damit die angezeigte Zeichenfolge nicht in den*Messages*
Puffer gelangt )pre-command-hook
Das einzige Problem ist, dass die Anzeige angehalten wird, wenn ein Befehl ausgeführt wird, einschließlich beim Eingeben.
Für Interessenten habe ich den entsprechenden Code in ein auf github verfügbares Boilerplate-Paket extrahiert .
quelle
Die Antwort, IMO, ist nein . Der Echo-Bereich ist für kurzlebige Nachrichten . Und viele Dinge löschen explizit alles, was dort wiedergegeben worden sein könnte. Es ist also problematisch zu realisieren, was Sie auf vernünftige Weise anfordern, IMO.
Verwenden Sie in der Summe eine Alternative. Hier sind einige:
Verwenden Sie einen anderen Puffer (z. B. einen kleinen Rahmen oder ein Fenster, das Sie zu diesem Zweck offen halten). Einfach zu tun, können Sie es verschieben, bearbeiten, löschen oder damit machen, was Sie möchten.
Verwenden Sie einen Teil oder die gesamte Moduszeile (die Sie anscheinend bereits berücksichtigt haben).
Verwenden Sie eine Kopfzeile.
Verwenden Sie einen Rahmentitel.
Wenn ich es wäre, würde ich mich wahrscheinlich für # 1 entscheiden. (Aber ich möchte / brauche nicht wirklich eine solche Vollzeitanzeige von Statusinformationen. Ich würde eher einen Befehl definieren, der mir die Informationen (sogar einen Verlauf / ein Protokoll) auf Anfrage anzeigt.)
Nach Ihren Kommentaren aktualisiert:
Sie haben in Ihrer Frage bereits gesagt: " Die Nachricht verschwindet, sobald der Echo-Bereich wieder verwendet wird. " Es klang also so, als würde man einen so kurzlebigen Raum verwenden, dass der Echo-Bereich nicht Ihren Anforderungen entspricht. Ihre Kommentarantworten scheinen dem zu widersprechen.
Wenn Sie den Echobereich wirklich verwenden möchten, verwenden
minibuffer-inactive-mode-hook
Sie, wie bereits erwähnt, oder verwenden Sie einen Timer, ummessage
die Zeitnachricht auf andere Weise in den Echobereich aufzurufen oder einzufügen. Sie haben jedoch bereits die Probleme damit festgestellt. Diese Probleme (Überschreiben, Löschen) ergeben sich aus der ( beabsichtigten ) kurzlebigen Natur des Echobereichs .Zusammenfassend möchten Sie einen Bereich verwenden, der für kurzlebige Nachrichten vorgesehen ist, aber Sie möchten nicht, dass Ihre Nachrichten verschwinden, sobald dieser Bereich erneut verwendet wird.
(Übrigens - wenn Sie erwähnen, dass die Moduszeileninformationen in jeder Moduszeile wiederholt werden: Dies muss nicht der Fall sein. Sie können die Moduszeile für einen bestimmten Puffer usw. spezifisch machen. IOW, Sie können immer eine Moduszeile auswählen (oder regelmäßig) zeigen Sie Ihre Uhr oder was auch immer.)
quelle
org-clock
Beispiel aus der Frage: Ich möchte den Timer tickt , um mich daran zu erinnern , was ich tun sollte, und das soll ich das zu tun , gerade jetzt , da oft wie möglich.minibuffer-inactive-mode-hook
die Meldung angezeigt wird, wenn ich den Minibuffer verwende und beende. Wenn dann ein anderer Befehl etwas in den Echo-Bereich druckt, wird diese neue Nachricht hinzugefügt und die kurzlebige Nachricht wird nicht zurückgegeben (da der Minibuffer diesmal nicht beteiligt war).message
oderpost-command-hook
, wenn Sie möchten . Das wesentliche Problem des Verschwindens / Überschreibens wird jedoch manchmal den Kopf aufrichten, da Sie versuchen, einen temporären Anzeigebereich für etwas zu verwenden, das Sie nicht temporär sein möchten.