From e2f96a80b823fd4565939e104e6f014fea87f583 Mon Sep 17 00:00:00 2001 From: JSDurand Date: Sat, 29 Jul 2023 23:44:42 +0800 Subject: modeline: `mode-line-window-selected-p` * modeline.el: (modeline-get-active-window, modeline-active-window, modeline-active-window-p, modeline-set-active-window, modeline-unset-active-window, modeline-refresh-modeline, window-configuration-change-hook, buffer-list-update-hook, after-make-frame-functions, delete-frame-functions, handle-switch-frame): Emacs 29 adds a convenient function `mode-line-window-selected-p` that makes my old manual implementation here obsolete now. --- modeline.el | 99 ++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 52 insertions(+), 47 deletions(-) diff --git a/modeline.el b/modeline.el index a505733..52ae9af 100644 --- a/modeline.el +++ b/modeline.el @@ -169,53 +169,58 @@ MAP is the local keymap of the text." ;; NOTE: I tried to avoid this, but it turns out that this is the most ;; reliable way to do so. -;;;###autoload -(defun modeline-get-active-window (&optional frame) - "The active window excluding the child windows." - (cond - ((and (fboundp #'frame-parent) (frame-parent frame)) - (frame-selected-window (frame-parent frame))) - ((frame-selected-window frame)))) - -;;;###autoload -(defvar modeline-active-window (modeline-get-active-window) - "The active window excluding the child windows.") - -;;;###autoload -(defun modeline-active-window-p () - "Whether we are in the active window." - (and modeline-active-window - (eq modeline-active-window (selected-window)))) - -;;;###autoload -(defun modeline-set-active-window (&rest _) - "Update `modeline-active-window'." - (let ((active-wn (modeline-get-active-window))) - (cond - ((minibuffer-window-active-p active-wn)) - (t (setq modeline-active-window active-wn)))) - (force-mode-line-update t)) - -;;;###autoload -(defsubst modeline-unset-active-window (&rest _) - "Set `modeline-active-window' to `nil'." - (setq modeline-active-window nil)) - -;;;###autoload -(defun modeline-refresh-modeline () - "Refresh the focus state of the mode line." - (setq modeline-active-window nil) - (mapc (lambda (frame) - (cond ((eq (frame-focus-state frame) t) - (setq modeline-active-window (modeline-get-active-window frame))))) - (frame-list))) - -(add-hook 'window-configuration-change-hook #'modeline-set-active-window) -(add-hook 'buffer-list-update-hook #'modeline-set-active-window) -(add-hook 'after-make-frame-functions #'modeline-set-active-window) -(add-hook 'delete-frame-functions #'modeline-set-active-window) -(advice-add #'handle-switch-frame :after #'modeline-set-active-window) -(add-function :after after-focus-change-function #'modeline-refresh-modeline) +;; NOTE: Emacs-29 adds the function `mode-line-window-selected-p' +;; which does what I manually implemented here. + +;; ;;;###autoload +;; (defun modeline-get-active-window (&optional frame) +;; "The active window excluding the child windows." +;; (cond +;; ((and (fboundp #'frame-parent) (frame-parent frame)) +;; (frame-selected-window (frame-parent frame))) +;; ((frame-selected-window frame)))) + +;; ;;;###autoload +;; (defvar modeline-active-window (modeline-get-active-window) +;; "The active window excluding the child windows.") + +(defalias #'modeline-active-window-p #'mode-line-window-selected-p) + +;; ;;;###autoload +;; (defun modeline-active-window-p () +;; "Whether we are in the active window." +;; (and modeline-active-window +;; (eq modeline-active-window (selected-window)))) + +;; ;;;###autoload +;; (defun modeline-set-active-window (&rest _) +;; "Update `modeline-active-window'." +;; (let ((active-wn (modeline-get-active-window))) +;; (cond +;; ((minibuffer-window-active-p active-wn)) +;; (t (setq modeline-active-window active-wn)))) +;; (force-mode-line-update t)) + +;; ;;;###autoload +;; (defsubst modeline-unset-active-window (&rest _) +;; "Set `modeline-active-window' to `nil'." +;; (setq modeline-active-window nil)) + +;; ;;;###autoload +;; (defun modeline-refresh-modeline () +;; "Refresh the focus state of the mode line." +;; (setq modeline-active-window nil) +;; (mapc (lambda (frame) +;; (cond ((eq (frame-focus-state frame) t) +;; (setq modeline-active-window (modeline-get-active-window frame))))) +;; (frame-list))) + +;; (add-hook 'window-configuration-change-hook #'modeline-set-active-window) +;; (add-hook 'buffer-list-update-hook #'modeline-set-active-window) +;; (add-hook 'after-make-frame-functions #'modeline-set-active-window) +;; (add-hook 'delete-frame-functions #'modeline-set-active-window) +;; (advice-add #'handle-switch-frame :after #'modeline-set-active-window) +;; (add-function :after after-focus-change-function #'modeline-refresh-modeline) ;;; Faces -- cgit v1.2.3-18-g5258