diff options
| author | cashmere <cashmere@autistici.org> | 2026-08-23 19:19:17 +0200 |
|---|---|---|
| committer | cashmere <cashmere@autistici.org> | 2026-08-23 19:19:17 +0200 |
| commit | 15def4cc1edbd5a80973fa9c5bba35d5eb32c340 (patch) | |
| tree | a9172e36e74a6691738b7d5012289cec1767241d /lisp/my-mode-line.el | |
| parent | e8b0abed0711cefcd0c06b8e12e3a7a9224fb329 (diff) | |
| download | emacs-15def4cc1edbd5a80973fa9c5bba35d5eb32c340.tar.gz | |
feat: refresh Emacs UI and lock Elpaca packages
Diffstat (limited to 'lisp/my-mode-line.el')
| -rw-r--r-- | lisp/my-mode-line.el | 99 |
1 files changed, 80 insertions, 19 deletions
diff --git a/lisp/my-mode-line.el b/lisp/my-mode-line.el index f7cc66a..ac14cb1 100644 --- a/lisp/my-mode-line.el +++ b/lisp/my-mode-line.el @@ -63,6 +63,12 @@ (defconst my/mode-line--missing (make-symbol "missing") "Sentinel used when checking membership in package hash tables.") +(defvar my/mode-line--format nil + "The installed global header-line mode-line format.") + +(defvar-local my/mode-line--saved-mode-line-format nil + "Clatter's mode-line format saved while the global mode line is hidden.") + (defun my/mode-line--update-title-cache () "Update the cached #+title for the current buffer." (setq-local my/mode-line--buffer-title @@ -228,6 +234,58 @@ Optional THEME is ignored so this function also fits :inverse-video nil :strike-through nil)) +(defun my/mode-line--hide-clatter-buffers (&rest _) + "Hide Clatter's local mode lines while the global mode line is disabled." + (unless my/global-mode-line-mode + (dolist (buffer (buffer-list)) + (with-current-buffer buffer + (when (derived-mode-p 'clatter-mode) + (unless (local-variable-p 'my/mode-line--saved-mode-line-format) + (setq-local my/mode-line--saved-mode-line-format mode-line-format)) + (setq-local mode-line-format nil)))))) + +(defun my/mode-line--restore-package-mode-lines () + "Restore package-local mode lines hidden by the global toggle." + (dolist (buffer (buffer-list)) + (with-current-buffer buffer + (when (local-variable-p 'my/mode-line--saved-mode-line-format) + (setq-local mode-line-format my/mode-line--saved-mode-line-format) + (kill-local-variable 'my/mode-line--saved-mode-line-format))))) + +(define-minor-mode my/global-mode-line-mode + "Show the custom global mode line. + +When disabled, the header-based global mode line and Clatter's package-local +bottom mode lines are hidden. Local informational headers, such as Elfeed's +column headings, remain visible." + :global t + :init-value t + :group 'mode-line + (if my/global-mode-line-mode + (progn + (setq-default header-line-format my/mode-line--format) + (my/mode-line--restore-package-mode-lines)) + (setq-default header-line-format nil) + (my/mode-line--hide-clatter-buffers)) + (force-mode-line-update t)) + +(defun my/toggle-mode-line () + "Toggle the custom mode line globally." + (interactive) + (my/global-mode-line-mode (if my/global-mode-line-mode -1 1))) + +(with-eval-after-load 'clatter-ui + (unless (advice-member-p #'my/mode-line--hide-clatter-buffers + 'clatter-ui-setup-buffer) + (advice-add 'clatter-ui-setup-buffer :after + #'my/mode-line--hide-clatter-buffers))) + +(with-eval-after-load 'clatter-track + (unless (advice-member-p #'my/mode-line--hide-clatter-buffers + 'clatter-track--refresh-mode-lines) + (advice-add 'clatter-track--refresh-mode-lines :after + #'my/mode-line--hide-clatter-buffers))) + (defun my/mode-line-install () "Install the custom mode-line built with mode-line-maker. The mode-line lives at the top of the window via `header-line-format'; @@ -236,25 +294,28 @@ the bottom mode-line is hidden." (my/mode-line-sync-theme) (add-hook 'enable-theme-functions #'my/mode-line-sync-theme) (setq-default mode-line-format nil) - (setq-default header-line-format - (mode-line-maker - '((:eval (my/mode-line-evil-state)) " " - (:eval (my/mode-line-buffer-state)) - (:eval (my/mode-line-remote)) " " - (:eval (my/mode-line-buffer-icon)) " " - (:eval (propertize (my/mode-line-buffer-name) - 'face 'mode-line-buffer-id - 'mouse-face 'mode-line-highlight - 'help-echo (concat (or buffer-file-truename (buffer-name)) - "\nmouse-1: Previous buffer\nmouse-3: Next buffer") - 'local-map mode-line-buffer-identification-keymap)) " " - mode-line-position) - '("" (:eval (my/mode-line-irc)) " " - (:eval (my/mode-line-clatter)) " " - (:eval (my/mode-line-mu4e)) " " - mode-line-process " " - (:eval (my/mode-line-time)) " " - mode-name " "))) + (setq my/mode-line--format + (mode-line-maker + '((:eval (my/mode-line-evil-state)) " " + (:eval (my/mode-line-buffer-state)) + (:eval (my/mode-line-remote)) " " + (:eval (my/mode-line-buffer-icon)) " " + (:eval (propertize (my/mode-line-buffer-name) + 'face 'mode-line-buffer-id + 'mouse-face 'mode-line-highlight + 'help-echo (concat (or buffer-file-truename (buffer-name)) + "\nmouse-1: Previous buffer\nmouse-3: Next buffer") + 'local-map mode-line-buffer-identification-keymap)) " " + mode-line-position) + '("" (:eval (my/mode-line-irc)) " " + (:eval (my/mode-line-clatter)) " " + (:eval (my/mode-line-mu4e)) " " + mode-line-process " " + (:eval (my/mode-line-time)) " " + mode-name " "))) + ;; The mode line is visible on every startup, regardless of its previous + ;; interactive state in a long-running session. + (my/global-mode-line-mode 1) (add-hook 'before-save-hook #'my/mode-line--invalidate-title-cache)) (provide 'my-mode-line) |
