Покажіть щось у активній лінії режиму замість усіх ліній режиму


10

Я встановив індикатор орга-таймера в рядку режимів із цим.

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

   )))

Я хочу, щоб цей індикатор орга-таймера відображався лише в активному рядку режиму , а не в усіх режимах. Як це зробити?



@lawlist Неможливо зрозуміти ваш код. Не знаю, як звернутися до моєї справи.
stardiviner

1
redisplayДвигун здатний перевіряти кожне вікно при певних обставинах (наприклад, коли режим лінія оновлюється природним чином , або коли він змушений оновити). Коли mode-line-formatфункція містить функцію (selected-window), інше вікно буде повернуто, коли повторне відображення відвідує різні вікна. Це значення можна порівняти із заздалегідь записаним значенням - наприклад, post-command-hookможна використовувати для запису останнього відомого, selected-windowі це значення можна згодом порівняти з функцією всередині mode-line-format. Отже, я використовую PCH для запису / зберігання selected-window.
законник

@lawlist Я перевірив ваш код, але не знайшов загального використання для мого випадку. Якщо я замінююсь на іншу річ замість org-timer. Що я повинен зробити? Я сподіваюся на більш загальний шлях. Навіть це мене надихнуло. Чи можете ви надати мені точніший приклад коду? Оскільки я виявив, що він встановлений різним 'face, але мені потрібно змінити рядок відображення.
stardiviner

Я не пробував цього, але це питання схоже на це: emacs.stackexchange.com/q/13842/115
Kaushal Modi

Відповіді:


7

У наступному прикладі в рядку режимів активного вікна з’явиться слово «АКТИВНІ», а в усіх інших вікнах у рядку режимів відображатиметься слово «НЕАКТИВНЕ».

Обов’язково спробуйте цей приклад, emacs -Qщоб переконатися, що він працює як рекламоване. Після цього налаштуйте її за потребою.

Додайте додаткові гачки, якщо потрібно зателефонувати 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")))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.