Erstellen Sie einen neuen Frame mit nur der Moduszeile

13

Ich möchte einen neuen Frame erstellen, der nur die Moduszeile enthält. Vor allem kein Dateipuffer.

Warum brauche ich das? Ich benutze die Uhr von org-mode, um meine Arbeit zeitlich abzustimmen. Im Org-Modus wird der Timer für die aktuelle Aufgabe angezeigt, an der ich in der Mode-Zeile arbeite, und der Timer wird in Echtzeit aktualisiert. Ich verwende andere Apps als Emacs. Wenn ich also zu ihnen wechsle (z. B. wenn ich den Browser oder das Terminal verwende), möchte ich immer noch in der Lage sein, auf den laufenden Timer zu schauen. Ich dachte, ich könnte einen neuen Frame erstellen, aber wenn ich jetzt auf den Timer in der Mode-Zeile klicke, wird die .org-Datei in dem neuen Frame geöffnet (dessen Größe bereits so geändert wurde, dass nur die Mode-Zeile angezeigt wird), anstatt zurückzuspringen es im ersten Bild.

So sieht meine Mode-Linie aus (der blaue Balken) - das ist alles, was ich für den neuen Frame will:

Bildbeschreibung hier eingeben

(Irgendwann muss ich herausfinden, wie der neue Frame immer im Vordergrund angezeigt wird, aber das liegt außerhalb des Rahmens dieser Frage.)

Ich benutze OS X, wenn das relevant ist.

Srid sagt Reinstate Monica
quelle
1
Nur eine kurze Vorschau, ich arbeite an einem Elisp und einem makruby-Skript, das die Zeileninformationen des Organisationsmodus in der OSX-Menüleiste anzeigt. Es funktioniert für mich, aber ich werde versuchen, es schön einzuwickeln.
Jordon Biondo
@JordonBiondo - ausgezeichnet! Ihre Lösung könnte sich als noch besser herausstellen als das, was ich hier tue. sich auf etwas freuen. Bitte halten Sie mich auf dem Laufenden.
Srid sagt Reinstate Monica
Sie sollten Ihre Frage umbenennen und neu formulieren, wenn Sie wirklich das Gefühl haben, dass die Antworten, die Sie sagen, " Ausgezeichnet! ", Um darauf zu antworten. Denn soweit ich das beurteilen kann, beantworten sie Ihre Anfrage nach einem Frame überhaupt nicht mit " nichts als einer Moduszeile " (und ich bezweifle, dass dies bei jeder Antwort der Fall sein wird). IOW, wenn Sie Ihr Ziel seit der ursprünglichen Formulierung Ihrer Anfrage gelockert haben, sollten Sie die Frage entsprechend aktualisieren.
Drew
Ich stimme zu, nach dem Lesen schien OP wirklich ein spezifisches Problem zu haben, fragte aber nur nach einer Lösung, nicht nach der besten.
Jordon Biondo
@Drew - Schlagen Sie bestimmte Änderungen vor? Die ursprüngliche Lösung von PythonNut beantwortet meine ursprüngliche Anfrage. Beachten Sie, dass ich "Besonders kein Dateipuffer." Sagte und seine Lösung - obwohl sie einen leeren Puffer erstellt - nicht dazu führt, dass Dateipuffer im neuen Frame angezeigt werden.
Srid sagt Reinstate Monica

Antworten:

7

Erweitern von Jorgen Schäfer Antwort mit Matthew Piziak der Vorschlag erzeugt den folgenden Ausschnitt:

(with-current-buffer (generate-new-buffer "*empty*")
  (make-frame '((minibuffer . nil)
                 (unsplittable . t)
                 (buffer-predicate . (lambda (x) nil))
                 (height . 2)
                 (left-fringe . 0)
                 (right-fringe . 0)
                 (tool-bar-lines . 0)
                 (menu-bar-lines . 0)))
  (set-window-dedicated-p
    (get-buffer-window (current-buffer) t) t))

Soweit ich das beurteilen kann, sperrt dies das Fenster korrekt auf einen leeren Puffer. Wenn Sie versuchen, zu einem anderen Puffer zu wechseln, wird der Puffer in einem vorhandenen Fenster im übergeordneten Frame geöffnet.

PythonNut
quelle
Hervorragend, ich habe überprüft, dass dies funktioniert. Wie kann der neue Frame die Schriftgröße (und den Schriftnamen) des Hauptrahmens übernehmen? Können auch die redundanten pufferspezifischen Teile der Modusleitung - *empty* All L1 (Fundamental)- entfernt werden? So sieht meins aus: i.imgur.com/iOLw57c.png
Srid sagt Reinstate Monica
@SridharRatnakumar Glücklicherweise ist das Entfernen der zusätzlichen Mode-Line-Informationen trivial. Ich habe meine Antwort dahingehend geändert, dass sie dies einschließt. Ich bin mir nicht ganz sicher, was Sie unter Erhalt der Schrift verstehen. Ist der Puffer nicht leer?
PythonNut
Ich bezog mich auf die font-Eigenschaft des Texts in der mode-Zeile (nicht auf den leeren Puffer).
Srid sagt Reinstate Monica
ah, dein späterer code löschte auch die mode-zeile des mainframes! Wenn dies nicht möglich ist, machen wir diese Änderung rückgängig und ich akzeptiere Ihre Antwort (sie erfüllt die Frage).
Srid sagt Reinstate Monica
Das ist mir auch gerade aufgefallen. Ich habe es behoben. Die Mode-Line-Schriftart ändert sich dabei nicht, ich bin mir also nicht sicher, was los ist.
PythonNut
5

Dies ist das Beste, was ich mir einfallen lassen konnte:

(with-current-buffer (generate-new-buffer "*empty*")
  (make-frame '((minibuffer . nil)
                (unsplittable . t)
                (buffer-predicate . (lambda (x) nil))
                (height . 2)
                (left-fringe . 0)
                (right-fringe . 0)
                (tool-bar-lines . 0)
                (menu-bar-lines . 0))))

Ich sehe keine Möglichkeit, mindestens ein Fenster mit einem Puffer dort zu deaktivieren, aber das mit diesem Snippet angezeigte Fenster ist keiner Datei zugeordnet. Das buffer-predicateverhindert, dass der Frame ausgewählt wird, um (andere) Puffer anzuzeigen. Wenn Sie also mit einer zusätzlichen leeren Zeile umgehen können, sollte dies der Fall sein.

Jorgen Schäfer
quelle
Es funktioniert nicht wie erwartet. Im neuen Frame werden noch Puffer aktiviert. Hier ist ein animiertes GIF zur Veranschaulichung: i.imgur.com/07Q3tcW.gifv
Srid sagt Reinstate Monica
2
Verwenden display-buffer-alistkönnte die Lösung dafür sein.
Kaushal Modi
Ich weiß nicht, warum die Verwendung von org hier nicht der Norm entspricht buffer-predicate. Die Verwendung display-buffer-alistmag in der Tat eine Idee sein, aber ich weiß nicht, wie ich sie verwenden soll, um die Verwendung eines bestimmten Frames zu verhindern.
Jorgen Schäfer
2
Könnte dies behoben werden mit set-window-dedicated-p?
Matthew Piziak
1
Das buffer-predicatewird laut Info nur von der other-bufferFunktion verwendet, dh es hindert andere Funktionen nicht daran, einen Puffer im Frame anzuzeigen.
Politza
3

Noch eine andere Lösung für org-clock in osx

Ein kleines Kästchen in der Statusleiste. Es wird rot, wenn Sie nicht eingecheckt haben.

Abbildung für rotes Kästchen, siehe Github-Seite

https://github.com/koddo/org-clock-statusbar-app

koddo
quelle
1
Ich bin etwas spät dran und beantworte die genaue Frage nicht, biete aber eine Alternative an, die für jemanden funktionieren würde.
Koddo
3

Lösung für die Anzeige der Org-Clock-Informationen in der OSX-Menüleiste

Hier ist eine alternative Lösung für das von Ihnen angegebene Problem:

Ich verwende andere Apps als Emacs. Wenn ich also zu ihnen wechsle (z. B. wenn ich den Browser oder das Terminal verwende), möchte ich immer noch in der Lage sein, auf den laufenden Timer zu schauen.

Sie können dies verwenden, um die Informationen von org-clock in der osx-Menüleiste anzuzeigen, die Sie fast immer sehen sollten.

https://github.com/jordonbiondo/osx-org-clock-menubar Verfügbar bei MELPA

Beachten Sie, dass hierfür Makroby erforderlich ist.

Wie es aussieht, wenn man eingetaktet ist.

Bildbeschreibung hier eingeben

Jordon Biondo
quelle
1
Eine einfache Implementierung, die nicht auf Macruby basiert, kann mit emacsclient -e "(org-clock-get-clocked-time)"und bitbar durchgeführt werden: getbitbar.com
mankoff
Das ist großartig, Sie sollten eine Lösung aufschreiben!
Jordon Biondo