Mostra qualcosa nella riga della modalità attiva anziché in tutte le righe della modalità


10

Ho impostato un indicatore org-timer nella riga della modalità con questo.

(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")))

   )))

Voglio che questo indicatore org-timer sia mostrato solo nella riga della modalità attiva , anziché in tutte le righe della modalità. Come farlo?



@lawlist Non riesco a capire il tuo codice. Non so come fare domanda per il mio caso.
Stardiviner,

1
Il redisplaymotore è in grado di controllare ciascuna finestra in determinate circostanze (ad esempio, quando la linea di modalità viene aggiornata in modo naturale o quando è costretta ad aggiornare). Quando mode-line-formatcontiene la funzione (selected-window), verrà restituita una finestra diversa mentre il display visualizza le varie finestre. Tale valore può essere confrontato con un valore preregistrato - ad esempio, post-command-hookpuò essere utilizzato per registrare l'ultimo noto selected-windowe quel valore può essere successivamente confrontato con una funzione all'interno di mode-line-format. Quindi, utilizzo PCH per registrare / archiviare selected-window.
elenco delle leggi

@lawlist Ho verificato il tuo codice, ma non ho trovato un utilizzo generale per il mio caso. Se cambio ad altra cosa invece di org-timer. Cosa dovrei fare? Spero in un modo più generale. Persino mi ha ispirato. Puoi darmi l'esempio di codice più esattamente? Perché l'ho trovato impostato diversamente 'face, ma ho bisogno di cambiare la stringa di visualizzazione.
Stardiviner,

Non ho provato questo, ma questa domanda è simile a questa: emacs.stackexchange.com/q/13842/115
Kaushal Modi

Risposte:


7

Nel seguente esempio, la parola “ATTIVO” apparirà nella riga della modalità della finestra attiva e tutte le altre finestre visualizzeranno la parola “INATTIVO” nella riga della modalità.

Assicurati di provare questo esempio con emacs -Qper verificare che funzioni come pubblicizzato. Successivamente, personalizzalo secondo necessità.

Aggiungi ulteriori hook come necessario per chiamare ml-update-all.

(defvar ml-selected-window nil)

(defun ml-record-selected-window ()
  (setq ml-selected-window (selected-window)))

(defun ml-update-all ()
  (force-mode-line-update t))

(add-hook 'post-command-hook 'ml-record-selected-window)

(add-hook 'buffer-list-update-hook 'ml-update-all)

(setq-default mode-line-format
  '(:eval
      (if (eq ml-selected-window (selected-window))
        "ACTIVE"
        "INACTIVE")))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.