J'ai mis en place un indicateur org-timer dans la ligne de mode avec cela.
(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")))
)))
Je veux que cet indicateur org-timer soit affiché dans la ligne de mode actif uniquement, au lieu de toutes les lignes de mode. Comment faire?
redisplay
moteur est capable de vérifier chaque fenêtre dans certaines circonstances (par exemple, lorsque la ligne de mode est rafraîchie naturellement ou lorsqu'elle est forcée de se rafraîchir). Lorsque lemode-line-format
contient la fonction(selected-window)
, une fenêtre différente sera renvoyée lorsque l'affichage réaffiche les différentes fenêtres. Cette valeur peut être comparée à une valeur préenregistrée - par exemple, lepost-command-hook
peut être utilisé pour enregistrer le dernier connuselected-window
et cette valeur peut ensuite être comparée avec une fonction à l'intérieur dumode-line-format
. Donc, j'utilise le PCH pour enregistrer / stocker leselected-window
.org-timer
. Que devrais-je faire? J'espère d'une manière plus générale. Même cela m'a inspiré. Pouvez-vous me donner plus exactement un exemple de code? Parce que je l'ai trouvé différent'face
, mais je dois changer la chaîne d'affichage.Réponses:
Dans l'exemple suivant, le mot "ACTIVE" apparaîtra dans la ligne de mode de la fenêtre active, et toutes les autres fenêtres afficheront le mot "INACTIVE" dans la ligne de mode.
Assurez-vous d'essayer cet exemple avec
emacs -Q
pour vérifier qu'il fonctionne comme annoncé. Par la suite, personnalisez-le selon vos besoins.Ajoutez des crochets supplémentaires au besoin pour appeler
ml-update-all
.la source