Pokaż coś w linii trybu aktywnego zamiast wszystkich linii trybu

10

Ustawiłem przy tym wskaźnik org-timer.

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

   )))

Chcę, aby ten wskaźnik org-timer był wyświetlany tylko w linii trybu aktywnego , zamiast wszystkich linii trybu. Jak to zrobić?

stardiviner
źródło
@lawlist Nie rozumiem twojego kodu. Nie wiem, jak złożyć wniosek w mojej sprawie.
stardiviner
1
redisplaySilnik jest w stanie sprawdzić każdego okna w pewnych okolicznościach (np gdy tryb wiersza jest odświeżany naturalnie, lub gdy jest on zmuszony do odświeżenia). Gdy mode-line-formatzawiera funkcję (selected-window), zostanie zwrócone inne okno, gdy ponowne wyświetlanie wyświetli się w różnych oknach. Wartość tę można porównać z wcześniej zarejestrowaną wartością - np. post-command-hookMożna ją wykorzystać do zarejestrowania ostatniej znanej, selected-windowa tę wartość można później porównać z funkcją wewnątrz mode-line-format. Tak więc używam PCH do nagrywania / przechowywania selected-window.
prawnik
@lawlist Sprawdziłem Twój kod, ale nie znalazłem ogólnego zastosowania w mojej sprawie. Jeśli zmienię na inną zamiast org-timer. Co powinienem zrobić? Mam nadzieję, że w bardziej ogólny sposób. Nawet to mnie zainspirowało. Czy możesz podać mi dokładniejszy przykład kodu? Ponieważ znalazłem inny zestaw 'face, ale muszę zmienić wyświetlany ciąg.
stardiviner
Nie próbowałem tego, ale to pytanie wygląda podobnie do tego: emacs.stackexchange.com/q/13842/115
Kaushal Modi

Odpowiedzi:

7

W poniższym przykładzie słowo „AKTYWNE” pojawi się w wierszu trybu aktywnego okna, a wszystkie inne okna będą wyświetlać słowo „NIEAKTYWNE” w wierszu trybu.

Wypróbuj ten przykład z, emacs -Qaby sprawdzić, czy działa zgodnie z reklamą. Następnie dostosuj go w razie potrzeby.

Dodaj dodatkowe zaczepy w razie potrzeby, aby zadzwonić 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")))
lista prawnicza
źródło