(Emacs)~mode line is done by hand

The evaluation system was really just an excuse for me to try and
write some Lisp code when I was first learning it; the inclusion
of (vc-mode vc-mode) meant I couldn't utilise it the way I wanted.
This commit is contained in:
2023-07-13 16:07:29 +01:00
parent 9618468828
commit 22e8e9011f

View File

@@ -283,62 +283,26 @@ little. I customised the Emacs modeline to give me a bit of info,
Currently I use the default mode line with some customisation; Currently I use the default mode line with some customisation;
simplicity is above all. simplicity is above all.
*** Emacs Mode-line *** Emacs Mode-line
Firstly, declare a variable for the separator between each module
#+begin_src emacs-lisp
(defconst +modeline/separator " " "Separator between modules.")
#+end_src
Then declare a variable for the number of separators between each
module in the modeline.
#+begin_src emacs-lisp
(defconst +modeline/sep-count 4
"Number of +modline/separator instances separating modules.")
#+end_src
Then, declare a list of reserved characters for which the previously
declared seperator won't be applied when placed at the end of a module
string.
#+begin_src emacs-lisp
(defconst +modeline/reserved-chars (list "[" "(")
"Characters that, when at the end of a module string, won't
have the separator applied to them.")
#+end_src
Now declare a function that applies the separator with respect to the
reserved characters to any one string.
#+begin_src emacs-lisp
(defun +modeline/handle-string (STR)
(condition-case nil
(progn
(string-blank-p STR)
(if (cl-member (car (last (split-string STR "" t))) +modeline/reserved-chars :test #'string=)
STR
(concat STR (cl-reduce #'concat (cl-loop for i from 1 to +modeline/sep-count collect +modeline/separator)))))
(error STR)))
#+end_src
Finally, set the mode-line-format.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(setq-default (setq-default
mode-line-format mode-line-format
(mapcar #'+modeline/handle-string (list "%l:%c " ;; Line and column
(list "%l:%c" "%p[" ;; Where in file + Evil state
"%p[" '(:eval (upcase
'(:eval (upcase (substring
(substring (format "%s" (if (bound-and-true-p evil-state)
(format "%s" (if (bound-and-true-p evil-state) evil-state
evil-state ""))
"")) 0 1)))
0 1))) "] "
"]" "%+%b("
"%+%b(" '(:eval (format "%s" major-mode))
'(:eval (format "%s" major-mode)) ") "
")" "%I "
"%I" '(vc-mode vc-mode)
vc-mode " "
" " mode-line-misc-info
mode-line-misc-info mode-line-end-spaces))
mode-line-end-spaces)))
#+end_src #+end_src
*** WIP Telephone-line *** WIP Telephone-line
:PROPERTIES: :PROPERTIES: