From 466a0292c900e318f336f0777734790fe668cd53 Mon Sep 17 00:00:00 2001 From: Alynx Zhou Date: Wed, 28 Dec 2022 17:02:43 +0800 Subject: [PATCH 1/5] Add indentation information segment --- mood-line.el | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 143 insertions(+), 1 deletion(-) diff --git a/mood-line.el b/mood-line.el index 9e87342..b30d062 100644 --- a/mood-line.el +++ b/mood-line.el @@ -169,6 +169,123 @@ ;; Variable definitions ;; ---------------------------------- ;; +(defcustom mood-line-show-indentation-information nil + "When non-nil, show the indentation information of the current buffer." + :group 'mood-line + :type 'boolean) + +;; Based on `editorconfig-indentation-alist' and `doom-modeline-indent-alist'. +;; See . +;; See . +(defcustom mood-line-indent-alist + '((apache-mode apache-indent-level) + (awk-mode c-basic-offset) + (bpftrace-mode c-basic-offset) + (c++-mode c-basic-offset) + (c-mode c-basic-offset) + (cmake-mode cmake-tab-width) + (coffee-mode coffee-tab-width) + (cperl-mode cperl-indent-level) + (crystal-mode crystal-indent-level) + (csharp-mode c-basic-offset) + (css-mode css-indent-offset) + (d-mode c-basic-offset) + (emacs-lisp-mode lisp-indent-offset) + (enh-ruby-mode enh-ruby-indent-level) + (erlang-mode erlang-indent-level) + (ess-mode ess-indent-offset) + (f90-mode f90-associate-indent + f90-continuation-indent + f90-critical-indent + f90-do-indent + f90-if-indent + f90-program-indent + f90-type-indent) + (feature-mode feature-indent-offset + feature-indent-level) + (fsharp-mode fsharp-continuation-offset + fsharp-indent-level + fsharp-indent-offset) + (groovy-mode groovy-indent-offset) + (haskell-mode haskell-indent-spaces + haskell-indent-offset + haskell-indentation-layout-offset + haskell-indentation-left-offset + haskell-indentation-starter-offset + haskell-indentation-where-post-offset + haskell-indentation-where-pre-offset + shm-indent-spaces) + (haxor-mode haxor-tab-width) + (idl-mode c-basic-offset) + (jade-mode jade-tab-width) + (java-mode c-basic-offset) + (js-mode js-indent-level) + (js-jsx-mode js-indent-level sgml-basic-offset) + (js2-mode js2-basic-offset) + (js2-jsx-mode js2-basic-offset sgml-basic-offset) + (js3-mode js3-indent-level) + (json-mode js-indent-level) + (json-ts-mode json-ts-mode-indent-offset) + (julia-mode julia-indent-offset) + (kotlin-mode kotlin-tab-width) + (latex-mode tex-indent-basic) + (lisp-mode lisp-indent-offset) + (livescript-mode livescript-tab-width) + (lua-mode lua-indent-level) + (matlab-mode matlab-indent-level) + (meson-mode meson-indent-basic) + (mips-mode mips-tab-width) + (mustache-mode mustache-basic-offset) + (nasm-mode nasm-basic-offset) + (nginx-mode nginx-indent-level) + (nxml-mode nxml-child-indent) + (objc-mode c-basic-offset) + (octave-mode octave-block-offset) + (perl-mode perl-indent-level) + (php-mode c-basic-offset) + (pike-mode c-basic-offset) + (ps-mode ps-mode-tab) + (pug-mode pug-tab-width) + (puppet-mode puppet-indent-level) + (python-mode python-indent-offset) + (rjsx-mode js-indent-level sgml-basic-offset) + (ruby-mode ruby-indent-level) + (rust-mode rust-indent-offset) + (rustic-mode rustic-indent-offset) + (scala-mode scala-indent:step) + (scss-mode css-indent-offset) + (sgml-mode sgml-basic-offset) + (sh-mode sh-basic-offset sh-indentation) + (slim-mode slim-indent-offset) + (sml-mode sml-indent-level) + (tcl-mode tcl-indent-level + tcl-continued-indent-level) + (terra-mode terra-indent-level) + (typescript-mode typescript-indent-level) + (typescript-ts-base-mode typescript-ts-mode-indent-offset) + (verilog-mode verilog-indent-level + verilog-indent-level-behavioral + verilog-indent-level-declaration + verilog-indent-level-module + verilog-cexp-indent + verilog-case-indent) + (web-mode web-mode-attr-indent-offset + web-mode-attr-value-indent-offset + web-mode-code-indent-offset + web-mode-css-indent-offset + web-mode-markup-indent-offset + web-mode-sql-indent-offset + web-mode-block-padding + web-mode-script-padding + web-mode-style-padding) + (yaml-mode yaml-indent-offset)) + "Indentation retrieving variables matched to major modes. +Which is used when `mood-line-show-indentation-information' is non-nil. +When multiple variables are specified for a mode, they will be tried resolved +in the given order." + :group 'mood-line + :type '(alist :key-type symbol :value-type sexp)) + (defcustom mood-line-show-eol-style nil "When non-nil, show the EOL style of the current buffer." :group 'mood-line @@ -736,6 +853,30 @@ Checkers checked, in order: `flycheck', `flymake'." (propertize " %p%% " 'face 'mood-line-unimportant))) +;; ---------------------------------- ;; +;; Indentation segment +;; ---------------------------------- ;; + +(defun mood-line-segment-indent () + "Display the indentation information of the current buffer." + (when mood-line-show-indentation-information + (format "%s %s %d " + (if indent-tabs-mode "TAB" "SPC") + (let ((lookup-var + (seq-find (lambda (var) (and var (boundp var))) + (cdr (assoc major-mode mood-line-indent-alist)) + nil))) + ;; If we don't know the indent offset variable of this major mode, + ;; display a "-". + (if lookup-var + ;; Some major modes, for example lisp-mode, works better when + ;; lisp-indent-offset is nil, we use "-" for nil, too. + (if (not (null (symbol-value lookup-var))) + (format "%d" (symbol-value lookup-var)) + "-") + "-")) + tab-width))) + ;; ---------------------------------- ;; ;; EOL segment ;; ---------------------------------- ;; @@ -858,7 +999,8 @@ Checkers checked, in order: `flycheck', `flymake'." ;; Right (format-mode-line - '((:eval (mood-line-segment-eol)) + '((:eval (mood-line-segment-indent)) + (:eval (mood-line-segment-eol)) (:eval (mood-line-segment-encoding)) (:eval (mood-line-segment-vc)) (:eval (mood-line-segment-major-mode)) From 5c573fea9f60ae890f1e85f006b74d8bf6265489 Mon Sep 17 00:00:00 2001 From: Jessie Hildebrandt Date: Thu, 29 Dec 2022 08:05:12 -0500 Subject: [PATCH 2/5] Move indentation segment to its own file --- mood-line-segment-indentation.el | 192 +++++++++++++++++++++++++++++++ mood-line.el | 160 ++++---------------------- 2 files changed, 213 insertions(+), 139 deletions(-) create mode 100644 mood-line-segment-indentation.el diff --git a/mood-line-segment-indentation.el b/mood-line-segment-indentation.el new file mode 100644 index 0000000..fbfd445 --- /dev/null +++ b/mood-line-segment-indentation.el @@ -0,0 +1,192 @@ +;;; mood-line-segment-indentation.el --- An indentation info segment for mood-line -*- lexical-binding: t; -*- +;; +;; Author: Alynx Zhou +;; Jessie Hildebrandt +;; Homepage: https://gitlab.com/jessieh/mood-line + +;; This file is not part of GNU Emacs. + +;;; Commentary: +;; + +;;; License: +;; +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2, or +;; (at your option) any later version. +;; +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with this program; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth +;; Floor, Boston, MA 02110-1301, USA. + +;;; Code: + +;; -------------------------------------------------------------------------- ;; +;; +;; Custom definitions +;; +;; -------------------------------------------------------------------------- ;; + +;; ---------------------------------- ;; +;; Variable definitions +;; ---------------------------------- ;; + +;; Assembled from `editorconfig-indentation-alist' and `doom-modeline-indent-alist': +;; https://github.com/editorconfig/editorconfig-emacs/blob/b8043702f3d977db0e030c6c64ee4a810cad5f45/editorconfig.el#L175 +;; https://github.com/seagle0128/doom-modeline/blob/fe9ee5a2a950f9ded10261a05a12adc577ae9e36/doom-modeline-core.el#L284 +(defcustom mood-line-segment-indentation-mode-offset-alist + '((apache-mode apache-indent-level) + (awk-mode c-basic-offset) + (bpftrace-mode c-basic-offset) + (c++-mode c-basic-offset) + (c-mode c-basic-offset) + (cmake-mode cmake-tab-width) + (coffee-mode coffee-tab-width) + (cperl-mode cperl-indent-level) + (crystal-mode crystal-indent-level) + (csharp-mode c-basic-offset) + (css-mode css-indent-offset) + (d-mode c-basic-offset) + (emacs-lisp-mode lisp-indent-offset) + (enh-ruby-mode enh-ruby-indent-level) + (erlang-mode erlang-indent-level) + (ess-mode ess-indent-offset) + (f90-mode f90-associate-indent + f90-continuation-indent + f90-critical-indent + f90-do-indent + f90-if-indent + f90-program-indent + f90-type-indent) + (feature-mode feature-indent-offset + feature-indent-level) + (fsharp-mode fsharp-continuation-offset + fsharp-indent-level + fsharp-indent-offset) + (groovy-mode groovy-indent-offset) + (haskell-mode haskell-indent-spaces + haskell-indent-offset + haskell-indentation-layout-offset + haskell-indentation-left-offset + haskell-indentation-starter-offset + haskell-indentation-where-post-offset + haskell-indentation-where-pre-offset + shm-indent-spaces) + (haxor-mode haxor-tab-width) + (idl-mode c-basic-offset) + (jade-mode jade-tab-width) + (java-mode c-basic-offset) + (js-mode js-indent-level) + (js-jsx-mode js-indent-level sgml-basic-offset) + (js2-mode js2-basic-offset) + (js2-jsx-mode js2-basic-offset sgml-basic-offset) + (js3-mode js3-indent-level) + (json-mode js-indent-level) + (json-ts-mode json-ts-mode-indent-offset) + (julia-mode julia-indent-offset) + (kotlin-mode kotlin-tab-width) + (latex-mode tex-indent-basic) + (lisp-mode lisp-indent-offset) + (livescript-mode livescript-tab-width) + (lua-mode lua-indent-level) + (matlab-mode matlab-indent-level) + (meson-mode meson-indent-basic) + (mips-mode mips-tab-width) + (mustache-mode mustache-basic-offset) + (nasm-mode nasm-basic-offset) + (nginx-mode nginx-indent-level) + (nxml-mode nxml-child-indent) + (objc-mode c-basic-offset) + (octave-mode octave-block-offset) + (perl-mode perl-indent-level) + (php-mode c-basic-offset) + (pike-mode c-basic-offset) + (ps-mode ps-mode-tab) + (pug-mode pug-tab-width) + (puppet-mode puppet-indent-level) + (python-mode python-indent-offset) + (rjsx-mode js-indent-level sgml-basic-offset) + (ruby-mode ruby-indent-level) + (rust-mode rust-indent-offset) + (rustic-mode rustic-indent-offset) + (scala-mode scala-indent:step) + (scss-mode css-indent-offset) + (sgml-mode sgml-basic-offset) + (sh-mode sh-basic-offset sh-indentation) + (slim-mode slim-indent-offset) + (sml-mode sml-indent-level) + (tcl-mode tcl-indent-level + tcl-continued-indent-level) + (terra-mode terra-indent-level) + (typescript-mode typescript-indent-level) + (typescript-ts-base-mode typescript-ts-mode-indent-offset) + (verilog-mode verilog-indent-level + verilog-indent-level-behavioral + verilog-indent-level-declaration + verilog-indent-level-module + verilog-cexp-indent + verilog-case-indent) + (web-mode web-mode-attr-indent-offset + web-mode-attr-value-indent-offset + web-mode-code-indent-offset + web-mode-css-indent-offset + web-mode-markup-indent-offset + web-mode-sql-indent-offset + web-mode-block-padding + web-mode-script-padding + web-mode-style-padding) + (yaml-mode yaml-indent-offset)) + "Alist mapping major mode names to their respective indent offset variables. + +When multiple variables are specified for a given mode, the offset value will +be retrieved from the first variable that resolves to a value (evaluated in the +order provided)." + :group 'mood-line + :type '(alist :key-type symbol :value-type sexp)) + +;; -------------------------------------------------------------------------- ;; +;; +;; Indentation style info segment +;; +;; -------------------------------------------------------------------------- ;; + +;; ---------------------------------- ;; +;; Segment function +;; ---------------------------------- ;; + +(defun mood-line-segment-indentation--segment () + "Display the indentation style of the current buffer." + (format "%s %s %d " + (if indent-tabs-mode "TAB" "SPC") + (let ((lookup-var + (seq-find (lambda (var) (and var (boundp var))) + (cdr (assoc major-mode + mood-line-segment-indentation-mode-offset-alist)) + nil))) + ;; If we don't know the indent offset variable of this major mode, + ;; display a "-". + (if lookup-var + ;; Some major modes, for example lisp-mode, works better when + ;; lisp-indent-offset is nil, we use "-" for nil, too. + (if (not (null (symbol-value lookup-var))) + (format "%d" (symbol-value lookup-var)) + "-") + "-")) + tab-width)) + +;; -------------------------------------------------------------------------- ;; +;; +;; Provide package +;; +;; -------------------------------------------------------------------------- ;; + +(provide 'mood-line-segment-indentation) + +;;; mood-line-segment-indentation.el ends here diff --git a/mood-line.el b/mood-line.el index b30d062..f2db691 100644 --- a/mood-line.el +++ b/mood-line.el @@ -71,6 +71,8 @@ (declare-function flymake-running-backends "flymake" ()) (declare-function flymake-reporting-backends "flymake" ()) +(declare-function mood-line-segment-indentation--segment "mood-line-segment-indentation" ()) + (declare-function mc/num-cursors "multiple-cursors" ()) (declare-function string-blank-p "subr-x" (string)) @@ -169,123 +171,11 @@ ;; Variable definitions ;; ---------------------------------- ;; -(defcustom mood-line-show-indentation-information nil - "When non-nil, show the indentation information of the current buffer." +(defcustom mood-line-show-indentation-style nil + "When non-nil, show the indentation style of the current buffer." :group 'mood-line :type 'boolean) -;; Based on `editorconfig-indentation-alist' and `doom-modeline-indent-alist'. -;; See . -;; See . -(defcustom mood-line-indent-alist - '((apache-mode apache-indent-level) - (awk-mode c-basic-offset) - (bpftrace-mode c-basic-offset) - (c++-mode c-basic-offset) - (c-mode c-basic-offset) - (cmake-mode cmake-tab-width) - (coffee-mode coffee-tab-width) - (cperl-mode cperl-indent-level) - (crystal-mode crystal-indent-level) - (csharp-mode c-basic-offset) - (css-mode css-indent-offset) - (d-mode c-basic-offset) - (emacs-lisp-mode lisp-indent-offset) - (enh-ruby-mode enh-ruby-indent-level) - (erlang-mode erlang-indent-level) - (ess-mode ess-indent-offset) - (f90-mode f90-associate-indent - f90-continuation-indent - f90-critical-indent - f90-do-indent - f90-if-indent - f90-program-indent - f90-type-indent) - (feature-mode feature-indent-offset - feature-indent-level) - (fsharp-mode fsharp-continuation-offset - fsharp-indent-level - fsharp-indent-offset) - (groovy-mode groovy-indent-offset) - (haskell-mode haskell-indent-spaces - haskell-indent-offset - haskell-indentation-layout-offset - haskell-indentation-left-offset - haskell-indentation-starter-offset - haskell-indentation-where-post-offset - haskell-indentation-where-pre-offset - shm-indent-spaces) - (haxor-mode haxor-tab-width) - (idl-mode c-basic-offset) - (jade-mode jade-tab-width) - (java-mode c-basic-offset) - (js-mode js-indent-level) - (js-jsx-mode js-indent-level sgml-basic-offset) - (js2-mode js2-basic-offset) - (js2-jsx-mode js2-basic-offset sgml-basic-offset) - (js3-mode js3-indent-level) - (json-mode js-indent-level) - (json-ts-mode json-ts-mode-indent-offset) - (julia-mode julia-indent-offset) - (kotlin-mode kotlin-tab-width) - (latex-mode tex-indent-basic) - (lisp-mode lisp-indent-offset) - (livescript-mode livescript-tab-width) - (lua-mode lua-indent-level) - (matlab-mode matlab-indent-level) - (meson-mode meson-indent-basic) - (mips-mode mips-tab-width) - (mustache-mode mustache-basic-offset) - (nasm-mode nasm-basic-offset) - (nginx-mode nginx-indent-level) - (nxml-mode nxml-child-indent) - (objc-mode c-basic-offset) - (octave-mode octave-block-offset) - (perl-mode perl-indent-level) - (php-mode c-basic-offset) - (pike-mode c-basic-offset) - (ps-mode ps-mode-tab) - (pug-mode pug-tab-width) - (puppet-mode puppet-indent-level) - (python-mode python-indent-offset) - (rjsx-mode js-indent-level sgml-basic-offset) - (ruby-mode ruby-indent-level) - (rust-mode rust-indent-offset) - (rustic-mode rustic-indent-offset) - (scala-mode scala-indent:step) - (scss-mode css-indent-offset) - (sgml-mode sgml-basic-offset) - (sh-mode sh-basic-offset sh-indentation) - (slim-mode slim-indent-offset) - (sml-mode sml-indent-level) - (tcl-mode tcl-indent-level - tcl-continued-indent-level) - (terra-mode terra-indent-level) - (typescript-mode typescript-indent-level) - (typescript-ts-base-mode typescript-ts-mode-indent-offset) - (verilog-mode verilog-indent-level - verilog-indent-level-behavioral - verilog-indent-level-declaration - verilog-indent-level-module - verilog-cexp-indent - verilog-case-indent) - (web-mode web-mode-attr-indent-offset - web-mode-attr-value-indent-offset - web-mode-code-indent-offset - web-mode-css-indent-offset - web-mode-markup-indent-offset - web-mode-sql-indent-offset - web-mode-block-padding - web-mode-script-padding - web-mode-style-padding) - (yaml-mode yaml-indent-offset)) - "Indentation retrieving variables matched to major modes. -Which is used when `mood-line-show-indentation-information' is non-nil. -When multiple variables are specified for a mode, they will be tried resolved -in the given order." - :group 'mood-line - :type '(alist :key-type symbol :value-type sexp)) - (defcustom mood-line-show-eol-style nil "When non-nil, show the EOL style of the current buffer." :group 'mood-line @@ -528,6 +418,22 @@ Modal modes checked, in order: `evil-mode', `meow-mode', `god-mode'." ((featurep 'god-mode) (mood-line-segment-modal-god)))) +;; -------------------------------------------------------------------------- ;; +;; +;; Optional segments +;; +;; -------------------------------------------------------------------------- ;; + +;; ---------------------------------- ;; +;; Indentation style +;; ---------------------------------- ;; + +(defun mood-line-segment-indentation () + "Display the indentation style of the current buffer (if enabled)." + (when mood-line-show-indentation-style + (require 'mood-line-segment-indentation) + (mood-line-segment-indentation--segment))) + ;; -------------------------------------------------------------------------- ;; ;; ;; Anzu segment @@ -853,30 +759,6 @@ Checkers checked, in order: `flycheck', `flymake'." (propertize " %p%% " 'face 'mood-line-unimportant))) -;; ---------------------------------- ;; -;; Indentation segment -;; ---------------------------------- ;; - -(defun mood-line-segment-indent () - "Display the indentation information of the current buffer." - (when mood-line-show-indentation-information - (format "%s %s %d " - (if indent-tabs-mode "TAB" "SPC") - (let ((lookup-var - (seq-find (lambda (var) (and var (boundp var))) - (cdr (assoc major-mode mood-line-indent-alist)) - nil))) - ;; If we don't know the indent offset variable of this major mode, - ;; display a "-". - (if lookup-var - ;; Some major modes, for example lisp-mode, works better when - ;; lisp-indent-offset is nil, we use "-" for nil, too. - (if (not (null (symbol-value lookup-var))) - (format "%d" (symbol-value lookup-var)) - "-") - "-")) - tab-width))) - ;; ---------------------------------- ;; ;; EOL segment ;; ---------------------------------- ;; @@ -999,7 +881,7 @@ Checkers checked, in order: `flycheck', `flymake'." ;; Right (format-mode-line - '((:eval (mood-line-segment-indent)) + '((:eval (mood-line-segment-indentation)) (:eval (mood-line-segment-eol)) (:eval (mood-line-segment-encoding)) (:eval (mood-line-segment-vc)) From cff8cc6032d5f927d850822ce70dee9068c99555 Mon Sep 17 00:00:00 2001 From: Jessie Hildebrandt Date: Thu, 29 Dec 2022 08:07:01 -0500 Subject: [PATCH 3/5] Add commentary to mood-line-segment-indentation --- mood-line-segment-indentation.el | 1 + 1 file changed, 1 insertion(+) diff --git a/mood-line-segment-indentation.el b/mood-line-segment-indentation.el index fbfd445..dda97f0 100644 --- a/mood-line-segment-indentation.el +++ b/mood-line-segment-indentation.el @@ -8,6 +8,7 @@ ;;; Commentary: ;; +;; This segment displays indentation style information for the current buffer. ;;; License: ;; From 9233fdce744abda14aa14ae86bc3541afa04a164 Mon Sep 17 00:00:00 2001 From: Jessie Hildebrandt Date: Thu, 29 Dec 2022 09:00:52 -0500 Subject: [PATCH 4/5] Tweak formatting of indentation segment --- mood-line-segment-indentation.el | 58 ++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 17 deletions(-) diff --git a/mood-line-segment-indentation.el b/mood-line-segment-indentation.el index dda97f0..b2e8bff 100644 --- a/mood-line-segment-indentation.el +++ b/mood-line-segment-indentation.el @@ -29,6 +29,18 @@ ;;; Code: +;; -------------------------------------------------------------------------- ;; +;; +;; Byte-compiler declarations +;; +;; -------------------------------------------------------------------------- ;; + +;; ---------------------------------- ;; +;; External function decls +;; ---------------------------------- ;; + +(declare-function mood-line--get-glyph "mood-line" (glyph)) + ;; -------------------------------------------------------------------------- ;; ;; ;; Custom definitions @@ -39,6 +51,20 @@ ;; Variable definitions ;; ---------------------------------- ;; +(defcustom mood-line-segment-indentation-always-show-offset nil + "When non-nil, always show the indentation offset of the current mode. + +Default behavior of the indentation segment is to display the indentation offset +of the current mode when `indent-tabs-mode' is non-nil and an offset value can +be found for the current mode. Otherwise, `tab-wdith' will be shown. + +When `mood-line-segment-indentation-always-show-offset' is set to non-nil, the +indentation offset will always be shown alongside `tab-width'. If an offset +value cannot be found for the current mode, a \"?\" character will be displayed +alongside `tab-width'." + :group 'mood-line + :type 'boolean) + ;; Assembled from `editorconfig-indentation-alist' and `doom-modeline-indent-alist': ;; https://github.com/editorconfig/editorconfig-emacs/blob/b8043702f3d977db0e030c6c64ee4a810cad5f45/editorconfig.el#L175 ;; https://github.com/seagle0128/doom-modeline/blob/fe9ee5a2a950f9ded10261a05a12adc577ae9e36/doom-modeline-core.el#L284 @@ -164,23 +190,21 @@ order provided)." (defun mood-line-segment-indentation--segment () "Display the indentation style of the current buffer." - (format "%s %s %d " - (if indent-tabs-mode "TAB" "SPC") - (let ((lookup-var - (seq-find (lambda (var) (and var (boundp var))) - (cdr (assoc major-mode - mood-line-segment-indentation-mode-offset-alist)) - nil))) - ;; If we don't know the indent offset variable of this major mode, - ;; display a "-". - (if lookup-var - ;; Some major modes, for example lisp-mode, works better when - ;; lisp-indent-offset is nil, we use "-" for nil, too. - (if (not (null (symbol-value lookup-var))) - (format "%d" (symbol-value lookup-var)) - "-") - "-")) - tab-width)) + (let* ((mode-offset (symbol-value + (seq-some #'identity + (cdr (assoc major-mode + mood-line-segment-indentation-mode-offset-alist)))))) + (propertize (concat (if indent-tabs-mode "TAB" "SPC") + (mood-line--get-glyph :count-separator) + (if mood-line-segment-indentation-always-show-offset + (format "%s:%d" + (or mode-offset "?") + tab-width) + (number-to-string (if indent-tabs-mode + tab-width + (or mode-offset tab-width)))) + " ") + 'face 'mood-line-unimportant))) ;; -------------------------------------------------------------------------- ;; ;; From acb57343a0c55e75638fb02bf5c1aa607205953b Mon Sep 17 00:00:00 2001 From: Jessie Hildebrandt Date: Thu, 29 Dec 2022 09:08:28 -0500 Subject: [PATCH 5/5] Add encoding face for indentation segment This face will also be used to decorate other encoding-related segments in the future. --- mood-line-segment-indentation.el | 2 +- mood-line.el | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/mood-line-segment-indentation.el b/mood-line-segment-indentation.el index b2e8bff..3ec1eee 100644 --- a/mood-line-segment-indentation.el +++ b/mood-line-segment-indentation.el @@ -204,7 +204,7 @@ order provided)." tab-width (or mode-offset tab-width)))) " ") - 'face 'mood-line-unimportant))) + 'face 'mood-line-encoding))) ;; -------------------------------------------------------------------------- ;; ;; diff --git a/mood-line.el b/mood-line.el index f2db691..12e13a6 100644 --- a/mood-line.el +++ b/mood-line.el @@ -305,6 +305,11 @@ The `Face' may be either a face symbol or a property list of key-value pairs "Face for error status indicators." :group 'mood-line-faces) +(defface mood-line-encoding + '((t (:inherit (shadow) :weight normal))) + "Face used for buffer/file encoding information." + :group 'mood-line-faces) + (defface mood-line-unimportant '((t (:inherit (shadow) :weight normal))) "Face used for less important mode line elements."