(Emacs/config)~refactor better-mode-line settings

Use new namespace, move evil-state mode-line generation to personal
configuration and add (mode-line-selected-window-p) checks to hide the
left and right segment when they're not the focused window.
This commit is contained in:
2024-07-02 13:22:44 +01:00
parent 54a00ccd3d
commit 38b69af52b
2 changed files with 49 additions and 40 deletions

View File

@@ -285,8 +285,8 @@ above the minibuffer (where you do completions). It can store quite
literally anything, but generally stuff like the buffer name, file
type, column and line info, etc is put there.
The default mode-line is just... disgusting. It displays information
in an unintelligible format and seems to smash together a bunch of
The default mode-line is... disgusting. It displays information in an
unintelligible format and seems to smash together a bunch of
information without much care for ordering. Most heartbreaking is
that any mode can just insert new information onto the mode-line
without any purview, which can be really annoying. It's also very
@@ -301,37 +301,58 @@ the mode line to achieve this.
:load-path "elisp/"
:demand t
:init
(setq +better-mode-line/left-segment ;; LEFT SEGMENT
'("%l:%c" ;; Line and column count
" "
"%p" ;; Percentage into buffer
("[" ;; Evil state
(:eval
(+better-mode-line/evil-state))
"]"))
+better-mode-line/centre-segment ;; CENTRE SEGMENT
'("%+" ;; Buffer state (changed or not)
"%b" ;; Buffer name
("(" ;; Major mode
(defun +mode-line/evil-state ()
"Returns either the empty string if no evil-state is defined or
the first character of the evil state capitalised"
(with-eval-after-load "evil"
(if (bound-and-true-p evil-state)
(upcase
(substring
(format "%s"
evil-state)
0 1))
"")))
(setq better-mode-line/left-segment ;; LEFT SEGMENT
'(" "
(:eval
(when (mode-line-window-selected-p)
'("%l:%c" ;; Line and column count
" "
"%p" ;; Percentage into buffer
("[" ;; Evil state
(:eval
(+mode-line/evil-state))
"]")))))
better-mode-line/centre-segment ;; CENTRE SEGMENT
'("%+" ;; Buffer state (changed or not)
"%b" ;; Buffer name
("(" ;; Major mode
(:eval (format "%s" major-mode))
")")
" "
"%I" ;; Buffer size (in bytes)
"%I" ;; Buffer size (in bytes)
)
+better-mode-line/right-segment ;; RIGHT SEGMENT
'((:eval (if (project-current) ;; Name of current project (if any)
(concat (project-name
(project-current))
vc-mode) ;; ... with git branch
""))
(:eval ;; LSP information
(with-eval-after-load "eglot"
(if eglot--managed-mode
(concat " " (eglot--mode-line-format)))))
mode-line-misc-info ;; Any other information
))
better-mode-line/right-segment ;; RIGHT SEGMENT
'(:eval
(when (mode-line-window-selected-p)
'((:eval (if (project-current) ;; Name of current project (if any)
(concat (project-name
(project-current))
vc-mode) ;; ... with git branch
""))
(:eval ;; LSP information
(with-eval-after-load "eglot"
(if eglot--managed-mode
(concat
" "
(eglot--mode-line-format)))))
mode-line-misc-info ;; Any other information
" "
)))
)
:config
(+better-mode-line/setup-mode-line))
(better-mode-line/setup-mode-line))
#+end_src
** Fringes
Turning off borders in my window manager was a good idea, so turn off

View File

@@ -39,18 +39,6 @@
(defconst better-mode-line/--minimum-padding 4
"Minimum size of padding string.")
(defun +better-mode-line/evil-state ()
"Returns either the empty string if no evil-state is defined or
the first character of the evil state capitalised"
(with-eval-after-load "evil"
(if (bound-and-true-p evil-state)
(upcase
(substring
(format "%s"
evil-state)
0 1))
"")))
(defun better-mode-line/--get-padding-size (other-size)
"Compute length of padding to ensure string of size OTHER is on an
extreme end to CENTRE-SEGMENT."