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.