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ć?



@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")))
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.