|
|
|
|
@ -366,6 +366,31 @@ |
|
|
|
|
#+end_src |
|
|
|
|
|
|
|
|
|
** Mode-line |
|
|
|
|
This snippet is taken from [[https://occasionallycogent.com/custom_emacs_modeline/index.html][here (occasionallycogent)]]. It serves the |
|
|
|
|
purpose of keeping track of the currently selected window, so that |
|
|
|
|
we can correctly highlight it in the modeline |
|
|
|
|
#+begin_src emacs-lisp |
|
|
|
|
(defvar cogent-line-selected-window (frame-selected-window)) |
|
|
|
|
|
|
|
|
|
(defun cogent-line-set-selected-window (&rest _args) |
|
|
|
|
(when (not (minibuffer-window-active-p (frame-selected-window))) |
|
|
|
|
(setq cogent-line-selected-window (frame-selected-window)) |
|
|
|
|
(force-mode-line-update))) |
|
|
|
|
|
|
|
|
|
(defun cogent-line-unset-selected-window () |
|
|
|
|
(setq cogent-line-selected-window nil) |
|
|
|
|
(force-mode-line-update)) |
|
|
|
|
|
|
|
|
|
(add-hook 'window-configuration-change-hook #'cogent-line-set-selected-window) |
|
|
|
|
(add-hook 'focus-in-hook #'cogent-line-set-selected-window) |
|
|
|
|
(add-hook 'focus-out-hook #'cogent-line-unset-selected-window) |
|
|
|
|
(advice-add 'handle-switch-frame :after #'cogent-line-set-selected-window) |
|
|
|
|
(advice-add 'select-window :after #'cogent-line-set-selected-window) |
|
|
|
|
|
|
|
|
|
(defun cogent-line-selected-window-active-p () |
|
|
|
|
(eq cogent-line-selected-window (selected-window))) |
|
|
|
|
#+end_src |
|
|
|
|
Set a few parts of the mode-line |
|
|
|
|
#+begin_src emacs-lisp |
|
|
|
|
(setq-default mode-line-modified '(:eval (if (buffer-modified-p) "●" "·")) |
|
|
|
|
;Still needs some improvements, does not report Readonly state |
|
|
|
|
@ -383,18 +408,6 @@ |
|
|
|
|
"Inactive variant of indicator" |
|
|
|
|
:group 'mode-line-faces) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;; This has some issues when two buffers are shown in different windows |
|
|
|
|
;; There are some solutions but let us see if this works first |
|
|
|
|
(defun mode-line-update-face (window) |
|
|
|
|
"Update the `mode-line' face in WINDOW to indicate whether the window is selected." |
|
|
|
|
(with-current-buffer (window-buffer window) |
|
|
|
|
(if (eq (current-buffer) (window-buffer (selected-window))) |
|
|
|
|
(face-remap-reset-base 'mode-line-indicator) |
|
|
|
|
(face-remap-set-base 'mode-line-indicator (face-all-attributes 'mode-line-inactive-indicator))))) |
|
|
|
|
|
|
|
|
|
(add-hook 'buffer-list-update-hook (lambda () (walk-windows #'mode-line-update-face nil t))) |
|
|
|
|
|
|
|
|
|
(defvar wilder-buffer-vc-mode-line |
|
|
|
|
'("%b" (vc-mode (:propertize |
|
|
|
|
;; Strip the backend name from the VC status information |
|
|
|
|
@ -412,18 +425,14 @@ |
|
|
|
|
(put 'wilder-position 'risky-local-variable t) |
|
|
|
|
|
|
|
|
|
(defvar wilder/mode-line-modes |
|
|
|
|
(let ((recursive-edit-help-echo "Recursive edit, type C-M-c to get out")) |
|
|
|
|
(list (propertize "%[" 'help-echo recursive-edit-help-echo) |
|
|
|
|
(list "%[" |
|
|
|
|
'("" mode-name) |
|
|
|
|
'("" mode-line-process) |
|
|
|
|
" " |
|
|
|
|
'("" minor-mode-alist) |
|
|
|
|
(propertize "%n" 'help-echo "mouse-2: Remove narrowing from buffer" |
|
|
|
|
'mouse-face 'mode-line-highlight |
|
|
|
|
'local-map (make-mode-line-mouse-map |
|
|
|
|
'mouse-2 #'mode-line-widen)) |
|
|
|
|
(propertize "%]" 'help-echo recursive-edit-help-echo) |
|
|
|
|
" ")) |
|
|
|
|
"%n" |
|
|
|
|
"%]" |
|
|
|
|
" ") |
|
|
|
|
"Mode line construct for displaying major and minor modes.") |
|
|
|
|
|
|
|
|
|
(put 'wilder/mode-line-modes 'risky-local-variable t) |
|
|
|
|
@ -438,7 +447,7 @@ |
|
|
|
|
|
|
|
|
|
(setq mode-line-format-left |
|
|
|
|
'("%e" |
|
|
|
|
(:propertize "╺═╸" face mode-line-indicator) |
|
|
|
|
(:eval (propertize "╺═╸" 'face (if (cogent-line-selected-window-active-p) 'mode-line-indicator 'mode-line-inactive-indicator))) |
|
|
|
|
mode-line-front-space |
|
|
|
|
mode-line-modified |
|
|
|
|
mode-line-remote |
|
|
|
|
|