Ich möchte 3 Wortlisten in separaten Zeilen horizontal am unteren Rand (obwohl oben auch funktionieren würde) jedes geöffneten Emacs-Frames anzeigen. Ich habe über 6 Möglichkeiten nachgedacht, und alle haben Probleme:
Mein erster Gedanke war, meiner Mode-Zeile eine Zeile hinzuzufügen, aber AFAICT Sie können das Newline-Zeichen nicht in einer Mode-Zeile verwenden, es wird nur in "^ J" konvertiert.
Mein zweiter Gedanke war, die Zeile über den oberen Bildschirmrand zu ziehen und die Kopfzeile zu verwenden, aber das Zeilenumbruch-Zeichen wird auch nicht unterstützt.
Ich könnte ein Overlay über den letzten drei Zeilen des Fensters anzeigen, aber es scheint schwierig, dieses robust zu machen. Das Scrollen müsste ausgelöst werden, wenn der Punkt das Overlay erreicht und nicht das eigentliche Ende des Fensters, und ich müsste es ständig neu positionieren Die Überlagerung, da Überlagerungen im Textbereich und nicht im Fensterbereich liegen.
Ich könnte versuchen, spezielle Fenster am unteren Rand des Rahmens zu erstellen. Ich habe versucht, dies zu codieren, aber es ist auch nicht sehr robust. Es scheint nicht richtig zu funktionieren, wenn ein Frame bereits geteilte Fenster enthält und ich Cx, 1 erneut an eine benutzerdefinierte Version von delete-other-windows binden musste, die ignoriert Meine Spezialfenster und ich bin mir sicher, dass es noch andere Eckverkleidungen gibt. Auch wenn ein Hilfefenster jetzt geöffnet wird, wird es vertikal geöffnet, weil es denkt, dass es bereits eine horizontale Aufteilung gibt (was technisch gesehen der Fall ist, aber es wird nur ein einzeiliges Fenster angezeigt).
Ich könnte einen dedizierten Frame dafür haben, aber dann funktioniert meine Konfiguration im Terminalmodus nicht und ich müsste meinen Fenstermanager per Skript so einstellen, dass er am unteren Bildschirmrand bleibt und nicht ausgewählt werden kann, ohne das Layout zu beeinträchtigen. usw. usw.
Ich könnte den Text für die 3 Zeilen direkt in den Minipuffer einfügen. Ich habe dies teilweise funktioniert, ich kann den Minipuffer vergrößern, um die 3 Zeilen aufzunehmen, und ich kann sie anzeigen. Jedes Mal, wenn eine Nachricht zurückgesendet wird, verschwinden die Zeilen, bis ich einen anderen Befehl erteile und sie wieder angezeigt werden. Idealerweise überlappen sich die drei Linien und der Echobereich nicht, sodass ich beide sehen kann. Dies wäre weniger ärgerlich, wenn ich zuverlässig filtern könnte, welche Nachrichten in den Echobereich gelangen. Ich habe eine Lösung in EmacsWiki gefunden, aber es scheint nicht für Nachrichten zu funktionieren, die aus der Emacs-C-Quelle stammen (speziell, die ich erhalten möchte) die dateispeichermeldungen loswerden, da ich oft auf einen timer autospeichere).
Für den Kontext ist es mein Ziel, ständig eine Anzeige der am häufigsten verwendeten Wörter im aktuellen Puffer, der Wörter am nächsten Punkt im aktuellen Puffer und der zuletzt im aktuellen Puffer verwendeten Wörter zu haben. Ich beabsichtige, sie über Sprachbefehle in den Puffer einfügen zu können. Also könnte ich "nächste 2" sagen und den zweiten Punkt aus der Liste der Wörter, die dem nächsten Punkt am nächsten sind, auswählen und einfügen. Mir ist nur wichtig, dass die Wortlisten für den Puffer angezeigt werden, den ich gerade bearbeite. Ich möchte nicht die Popup-Fenster verwenden, die von den verschiedenen Codevervollständigungsmodi verwendet werden, da die Listen immer sichtbar sein müssen.
Antworten:
Mit viel hackigem Experimentieren konnte ich # 6 (unter Verwendung von Minibuffer-Text) auf einen 'gut genug' Arbeitszustand bringen. Hier ist ein Screenshot:
Es gibt mehrere Schlüsselteile, um diese Arbeit zu machen:
Hier ist ein Link zu meiner Implementierung mit einem Beispielgürtel, der den Killring anzeigt. Letztendlich wird dies Teil eines richtigen Projekts sein: https://gist.github.com/jgarvin/ce37d08654978fd7e4c9
Dies ist mein erstes Mal, dass ich eine signifikante Menge an Elisp schreibe, so dass die Qualität wahrscheinlich unterdurchschnittlich ist, aber es funktioniert.
quelle
Weder die Mode-Zeile noch die Header-Zeile dürfen leider mehrzeilig sein. Ich habe schon früher danach gefragt und es gibt (zumindest nicht) eine versteckte Option, um dies zum Laufen zu bringen. Also 1 und 2 sind raus. Ich denke auch, dass 3 und 6 Hacks sind, die dich auf lange Sicht nicht glücklich machen werden. 3 und 4 scheinen gute Ansätze zu sein, aber sie zuverlässig zum Laufen zu bringen, ist eine ziemliche Investition.
Daher würde ich empfehlen, dass Sie dies zuerst auf emacs-devel bringen . Nach meiner Erfahrung werden Dinge irgendwann umgesetzt, wenn Sie sich die Mühe machen, genau zu erklären, was Sie wollen und warum dies eine gute Sache ist. Es kann einige Zeit dauern, zumindest bis zur nächsten Veröffentlichung, aber wenn Sie ein wenig warten oder die Entwicklungsversion verwenden, können Sie möglicherweise mit viel weniger Aufwand genau das bekommen, was Sie wollen.
quelle