すべてのモード行ではなくアクティブモード行に何かを表示します


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 2016

1
redisplayエンジンは、特定の状況下で、各ウィンドウを確認することができる(例えば、モードラインが自然にリフレッシュされている場合、またはそれがリフレッシュするように強制されている場合)。にmode-line-format関数が含まれている場合、(selected-window)再表示がさまざまなウィンドウにアクセスすると、別のウィンドウが返されます。その値は事前に記録された値と比較できます。たとえば、をpost-command-hook使用して最後に認識された値を記録し、selected-windowその値を後で内の関数と比較できmode-line-formatます。したがって、PCHを使用してを記録/保存しselected-windowます。
法律家2016

@lawlist私はあなたのコードをチェックアウトしましたが、私のケースの一般的な使用法は見つかりませんでした。代わりに他のものに変更した場合org-timer。私は何をすべきか?より一般的な方法を願っています。それでも刺激を受けました。より正確なコード例を教えていただけますか?別に設定されているのを見つけたので'face、表示文字列を変更する必要があります。
stardiviner 2016

私はこれを試していませんが、この質問はこれに似ています:emacs.stackexchange.com/q/13842/115
Kaushal Modi

回答:


7

次の例では、アクティブなウィンドウのモードラインに「ACTIVE」という単語が表示され、他のすべてのウィンドウにはモードラインに「INACTIVE」という単語が表示されます。

必ずこの例を試して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")))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.