Wie füge ich eine Zeichenfolge hinzu, die an die Moduszeile aktualisiert wird?

9

Ich möchte einige Informationen (die Änderungen im Laufe der Zeit) in den Modus Linie anhängen Format und dann im Titel verwenden.

Mein Gedanke ist, dass ich einmal pro Minute das Frame-Titel-Format auf das Modus-Zeilen-Format + Pomodoro-Anzahl einstellen würde.

Etwas in der Art von:

(defun runOnceAMinute ()
   (setq frame-title-format (concat mode-line-format my/PomodoroCount))
)

Aber ich kann nicht genau herausfinden, wie.

BEARBEITEN
Ich müsste die Zeichenfolge aktualisieren, die ich anhänge. ZB würde sich die Pomodoro-Zahl nach jedem Pomodoro erhöhen.

EDIT 2
Ich habe es zum Laufen gebracht, indem ich die mode-line-formatVariable bearbeitet und das eval-Konstrukt verwendet habe:

("%e" ......... "[Pomodorors: " (:eval (number-to-string my/pomCount)) "]") 

Dies ist nicht Drews ursprüngliche Antwort, aber Drew erwähnte sie in seinem Kommentar.

Leo Ufimtsev
quelle
1
mode-line-formatwurde in den letzten Jahren vereinfacht, um (mehr oder weniger) nur eine kleine Liste anderer Variablen zu erstellen; Daher ändern Sie normalerweise eine dieser untergeordneten Variablen (oder einen weiteren Nachkommen) und nicht sich mode-line-formatselbst. Siehe C-h v mode-line-formatund dann auf ähnliche Weise C-h valle Komponentenvariablen, die Sie kennenlernen möchten.
Phils
Das kommt dem, was ich will, ziemlich nahe. Ich habe die Moduszeile bearbeitet: (..... "HI" )und dies wird angezeigt. Aber wenn ich eine Ganzzahl drucken möchte, wird sie nicht angezeigt? (.... (number-to-string my/count)) irgendwelche Ideen warum?
Leo Ufimtsev
1
Lesen Sie C-h v mode-line-formatsorgfältig: Es beschreibt das Verhalten der verschiedenen Konstrukte, die Sie verwenden können, und es ist etwas kompliziert. Weitere Einzelheiten finden Sie im Handbuch:C-h i g (elisp) Mode Line Format
Phils
Ich habe das Dokument gelesen, kann aber keinen Sinn ergeben, wie eine Ganzzahl an die Liste angehängt werden soll.
Leo Ufimtsev
Ich benutze Doom-Modeline, füge Pomodoro-Segment wie folgt hinzu:(defun my-eval-string (string) "Evaluate elisp code stored in a string." (eval (car (read-from-string string)))) ;; pomodoro (doom-modeline-def-segment pomodoro "pomodoro segment" (my-eval-string "pomodoro-mode-line-string"))
HelloNewWorld

Antworten:

6

Hänge es an global-mode-string. Wenn Ihre Zeichenfolge im Moduszeilenformat zum Anhängen lautet my-string:

(setq global-mode-string
      (cond ((consp global-mode-string)
             (add-to-list 'global-mode-string my-string 'APPEND))
            ((not global-mode-string)
             (list my-string))
            ((stringp global-mode-string)
             (list global-mode-string my-string))))

[Wenn Sie es stattdessen vorab anhängen global-mode-stringmöchten, entfernen Sie das 'APPENDoptionale Argument und kehren die Reihenfolge der letzten Liste um : (list my-string global-mode-string).]

Drew
quelle
FWIW, heutzutage gibt es auch mode-line-misc-info(die global-mode-stringstandardmäßig als Mitglied hat).
Phils
1
@phils: Ja, das gibt es. Ändert meine Antwort nicht, aber es gibt Platz für viele andere Antworten. ;-) Es gibt mehrere Möglichkeiten, diese Katze zu häuten.
Drew
Hallo, das kommt dem sehr nahe, was ich will :-). Ich glaube, ich habe die Frage nicht richtig gestellt. Wie aktualisiere ich diese Nummer, nachdem ich die Pomodoro-Anzahl hinzugefügt habe? Jedes Mal, wenn ich diese Funktion aufrufe, werden der Moduszeile weitere Elemente hinzugefügt.
Leo Ufimtsev
global-mode-stringVerwenden Sie dann anstelle einer konstanten Zeichenfolge (:eval.... Das ist wirklich eine andere Frage.
Drew
@Drew, ich habe versucht, (..... (:eval (number-to-string my/pc))) wobei mein / pc eine Ganzzahl ist, die ich vorher festgelegt habe. Aber die Nummer wird nicht in der Moduszeile angezeigt?
Leo Ufimtsev
2
(setq-default mode-line-misc-info "My Text Goes Here")

Sollte die obigen Daten an Ihre Moduszeile anhängen.

Bret Weinraub
quelle