Stack Overflow やr/emacsを何度探しても見つけられなかったので、質問させていただきます。
Emacsのモードラインをいじっています。
Emacsのモードラインはアクティブなウィンドウを切り替えるとそれに応じて色が変わります。
アクティブなモードラインには mode-line
フェイス、そうでない方はmode-line-inactive
フェイスが使われるようですが、これらは単純にpropertizeで色を付けた文字列には適用されず、アクティブかどうかに関わらずpropertizeした色で表示されます。
これをpropertizeした文字列でもモードラインが非アクティブになると暗い色に切り替えたいと思っています。
例えば、現状のflycheckのインジケータは下のようになっています。
ウィンドウの状態 | モードライン表示 |
---|---|
アクティブ | |
非アクティブ |
右側の web-modeのインジケータはpropertize
してないので非アクティブ時に色が暗くなりますが、左側のflycheckの方はpropertize
しているので非アクティブになっても赤黄緑のままです。
この赤黄緑が非アクティブになったときに暗い色にしたいというのが、今回の質問の内容となります。
以下は現状の init.el の抜粋です。
lisp
1(defun my-flycheck-mode-line () 2 (let-alist (flycheck-count-errors flycheck-current-errors) 3 (let* ((status flycheck-last-status-change) 4 (info (or .info 0)) 5 (warnings (or .warning 0)) 6 (errors (or .error 0))) 7 (when status 8 (concat 9 (propertize (int-to-string errors) 'face 'flycheck-error-list-error) " " 10 (propertize (int-to-string warnings) 'face 'flycheck-error-list-warning) " " 11 (propertize (int-to-string info) 'face 'flycheck-error-list-info)))))) 12 13(defun my-mode-line--form () 14 (let* ((left-part (concat 15 evil-mode-line-tag 16 ;;;;; snip ;;;;;;;;;;;;; 17 " ")) 18 (right-part (concat 19 (my-coding-system-name-mnemonic) 20 ;;;;; snip ;;;;;;;;;;;;; 21 (flycheck-mode (my-flycheck-mode-line)) ;; <--!!! 22 " " 23 mode-name 24 )) 25 ;;;;; snip ;;;;;;;;;;;;; 26 (margin 27 (propertize " " 28 'display `(space :align-to (- (+ scroll-bar scroll-bar) ,(string-width right-part) ,margin-env))))) 29 (concat left-part margin right-part))) 30 31(setq-default mode-line-format '(:eval (my-mode-line--form)))
もう長いことこのまま使っており、暇を見てはwindow-state-change-hook
等に何か仕込んでみたりするのですが自力では解決まで至っておりません。
細かなことで恐縮なのですが、最近特に目が悪くなってきたのか、他のバッファに一生懸命タイピングしていることが多くなり、ちょっとしんどくなってきました。
もしご存じの方がおられましたら、ヒントだけでも頂けますと助かります。
よろしくお願いします。
環境
- Emacs: 27.2 (Emacs Mac Port)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/11 13:20