Damit habe ich in der Moduszeile eine Org-Timer-Anzeige eingerichtet.
(setq-default
mode-line-format
(quote
(
;; org-timer
(:eval
(unless (not org-timer-countdown-timer)
(propertize (let* ((rtime (decode-time
(time-subtract
(timer--time org-timer-countdown-timer)
(current-time))))
(rmins (nth 1 rtime))
(rsecs (nth 0 rtime)))
(format "🕔 %d:%d" rmins rsecs))
'face '(:foreground "cyan" :weight bold)
'help-echo "org-timer")))
)))
Ich möchte, dass diese Org-Timer-Anzeige nur in der aktiven Moduszeile anstelle aller Moduszeilen angezeigt wird. Wie es geht?
redisplay
Engine kann unter bestimmten Umständen jedes Fenster überprüfen (z. B. wenn die Moduszeile auf natürliche Weise aktualisiert wird oder wenn sie zum Aktualisieren gezwungen wird). Wenn dasmode-line-format
die Funktion enthält(selected-window)
, wird ein anderes Fenster zurückgegeben, wenn Redisplay die verschiedenen Fenster besucht. Dieser Wert kann mit einem zuvor aufgezeichneten Wert verglichen werden - z. B. kann der Wertpost-command-hook
verwendet werden, um den zuletzt bekanntenselected-window
Wert aufzuzeichnen, und dieser Wert kann später mit einer Funktion innerhalb des verglichen werdenmode-line-format
. Also benutze ich den PCH, um das aufzuzeichnen / zu speichernselected-window
.org-timer
. Was sollte ich tun? Ich hoffe einen allgemeineren Weg. Sogar es hat mich inspiriert. Können Sie mir ein genaueres Codebeispiel geben? Weil ich es anders eingestellt fand'face
, aber ich muss die Anzeigezeichenfolge ändern.Antworten:
Im folgenden Beispiel wird das Wort "ACTIVE" in der Moduszeile des aktiven Fensters angezeigt, und in allen anderen Fenstern wird das Wort "INACTIVE" in der Moduszeile angezeigt.
Versuchen Sie dieses Beispiel
emacs -Q
unbedingt mit , um sicherzustellen, dass es wie angekündigt funktioniert. Passen Sie es anschließend nach Bedarf an.Fügen Sie nach Bedarf zusätzliche Hooks hinzu, um aufzurufen
ml-update-all
.quelle