From 58e85c815092ac93d02dab584fe537fd1be3828a Mon Sep 17 00:00:00 2001 From: Jessie Hildebrandt Date: Thu, 26 Jan 2023 04:17:55 -0500 Subject: [PATCH] Move modal editing segment to its own file --- mood-line-segment-modal.el | 125 +++++++++++++++++++++++++++++++++++++ mood-line.el | 92 ++++----------------------- 2 files changed, 137 insertions(+), 80 deletions(-) create mode 100644 mood-line-segment-modal.el diff --git a/mood-line-segment-modal.el b/mood-line-segment-modal.el new file mode 100644 index 0000000..163ad5b --- /dev/null +++ b/mood-line-segment-modal.el @@ -0,0 +1,125 @@ +;;; mood-line-segment-modal.el --- A modal editing segment for mood-line -*- lexical-binding: t; -*- +;; +;; Author: trevDev() +;; Jessie Hildebrandt +;; Homepage: https://gitlab.com/jessieh/mood-line + +;; This file is not part of GNU Emacs. + +;;; Commentary: +;; +;; This segment displays modal editing information for the current buffer. + +;;; 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 +;; ---------------------------------- ;; + +(defcustom mood-line-evil-state-alist + '((normal . ("" . font-lock-variable-name-face)) + (insert . ("" . font-lock-string-face)) + (visual . ("" . font-lock-keyword-face)) + (replace . ("" . font-lock-type-face)) + (motion . ("" . font-lock-constant-face)) + (operator . ("" . font-lock-function-name-face)) + (emacs . ("" . font-lock-builtin-face))) + "Set the string and corresponding face for any `evil-mode' state. +The `Face' may be either a face symbol or a property list of key-value pairs + e.g. (:foreground \"red\")." + :group 'mood-line + :type '(alist + :key-type symbol + :value-type + (cons (string :tag "Display Text") (choice :tag "Face" face plist)))) + +(defcustom mood-line-meow-state-alist + '((normal . ("" . font-lock-variable-name-face)) + (insert . ("" . font-lock-string-face)) + (keypad . ("" . font-lock-keyword-face)) + (beacon . ("" . font-lock-type-face)) + (motion . ("" . font-lock-constant-face))) + "Set the string and corresponding face for any `meow-mode' state. +The `Face' may be either a face symbol or a property list of key-value pairs + e.g. (:foreground \"red\")." + :group 'mood-line + :type '(alist + :key-type symbol + :value-type + (cons (string :tag "Display Text") (choice :tag "Face" face plist)))) + +;; -------------------------------------------------------------------------- ;; +;; +;; Modal editing segment +;; +;; -------------------------------------------------------------------------- ;; + +;; ---------------------------------- ;; +;; Evil segment function +;; ---------------------------------- ;; + +(defun mood-line-segment-modal--evil () + "Display the current evil-mode state." + (when (boundp 'evil-state) + (let ((mode-cons (alist-get evil-state mood-line-evil-state-alist))) + (concat (propertize (car mode-cons) + 'face (cdr mode-cons)) + " ")))) + +;; ---------------------------------- ;; +;; Meow segment function +;; ---------------------------------- ;; + +(defun mood-line-segment-modal--meow () + "Display the current meow-mode state." + (when (boundp 'meow--current-state) + (let ((mode-cons (alist-get + meow--current-state + mood-line-meow-state-alist))) + (concat (propertize (car mode-cons) + 'face (cdr mode-cons)) + " ")))) + +;; ---------------------------------- ;; +;; God segment function +;; ---------------------------------- ;; + +(defun mood-line-segment-modal--god () + "Indicate whether or not god-mode is active." + (if (bound-and-true-p god-local-mode) + '(:propertize " " + face (:inherit mood-line-status-warning)) + "--- ")) + +;; -------------------------------------------------------------------------- ;; +;; +;; Provide package +;; +;; -------------------------------------------------------------------------- ;; + +(provide 'mood-line-segment-modal) + +;;; mood-line-segment-modal.el ends here diff --git a/mood-line.el b/mood-line.el index 84b712e..cc19d64 100644 --- a/mood-line.el +++ b/mood-line.el @@ -80,6 +80,10 @@ (declare-function mood-line-segment-indentation--segment "mood-line-segment-indentation" ()) +(declare-function mood-line-segment-modal--evil "mood-line-segment-modal" ()) +(declare-function mood-line-segment-modal--meow "mood-line-segment-modal" ()) +(declare-function mood-line-segment-modal--god "mood-line-segment-modal" ()) + (declare-function mc/num-cursors "multiple-cursors" ()) (declare-function string-blank-p "subr-x" (string)) @@ -246,38 +250,6 @@ found to be missing in `mood-line-glyph-alist'." :key-type (symbol :tag "Glyph name") :value-type (character :tag "Character to use"))) -(defcustom mood-line-evil-state-alist - '((normal . ("" . font-lock-variable-name-face)) - (insert . ("" . font-lock-string-face)) - (visual . ("" . font-lock-keyword-face)) - (replace . ("" . font-lock-type-face)) - (motion . ("" . font-lock-constant-face)) - (operator . ("" . font-lock-function-name-face)) - (emacs . ("" . font-lock-builtin-face))) - "Set the string and corresponding face for any `evil-mode' state. -The `Face' may be either a face symbol or a property list of key-value pairs - e.g. (:foreground \"red\")." - :group 'mood-line - :type '(alist - :key-type symbol - :value-type - (cons (string :tag "Display Text") (choice :tag "Face" face plist)))) - -(defcustom mood-line-meow-state-alist - '((normal . ("" . font-lock-variable-name-face)) - (insert . ("" . font-lock-string-face)) - (keypad . ("" . font-lock-keyword-face)) - (beacon . ("" . font-lock-type-face)) - (motion . ("" . font-lock-constant-face))) - "Set the string and corresponding face for any `meow-mode' state. -The `Face' may be either a face symbol or a property list of key-value pairs - e.g. (:foreground \"red\")." - :group 'mood-line - :type '(alist - :key-type symbol - :value-type - (cons (string :tag "Display Text") (choice :tag "Face" face plist)))) - ;; ---------------------------------- ;; ;; Face definitions ;; ---------------------------------- ;; @@ -378,7 +350,7 @@ The mode line should fit the `window-width' with space between the lists." ;; -------------------------------------------------------------------------- ;; ;; -;; Optional segments +;; Optional/lazy loaded segments ;; ;; -------------------------------------------------------------------------- ;; @@ -392,51 +364,8 @@ The mode line should fit the `window-width' with space between the lists." (require 'mood-line-segment-indentation) (mood-line-segment-indentation--segment))) -;; -------------------------------------------------------------------------- ;; -;; -;; Modal editing segment -;; -;; -------------------------------------------------------------------------- ;; - ;; ---------------------------------- ;; -;; Evil segment function -;; ---------------------------------- ;; - -(defun mood-line-segment-modal-evil () - "Display the current evil-mode state." - (when (boundp 'evil-state) - (let ((mode-cons (alist-get evil-state mood-line-evil-state-alist))) - (concat (propertize (car mode-cons) - 'face (cdr mode-cons)) - " ")))) - -;; ---------------------------------- ;; -;; Meow segment function -;; ---------------------------------- ;; - -(defun mood-line-segment-modal-meow () - "Display the current meow-mode state." - (when (boundp 'meow--current-state) - (let ((mode-cons (alist-get - meow--current-state - mood-line-meow-state-alist))) - (concat (propertize (car mode-cons) - 'face (cdr mode-cons)) - " ")))) - -;; ---------------------------------- ;; -;; God segment function -;; ---------------------------------- ;; - -(defun mood-line-segment-modal-god () - "Indicate whether or not god-mode is active." - (if (bound-and-true-p god-local-mode) - '(:propertize " " - face (:inherit mood-line-status-warning)) - "--- ")) - -;; ---------------------------------- ;; -;; Modal segment function +;; Modal editing ;; ---------------------------------- ;; (defun mood-line-segment-modal () @@ -445,11 +374,14 @@ The mode line should fit the `window-width' with space between the lists." Modal modes checked, in order: `evil-mode', `meow-mode', `god-mode'." (cond ((bound-and-true-p evil-mode) - (mood-line-segment-modal-evil)) + (require 'mood-line-segment-modal) + (mood-line-segment-modal--evil)) ((bound-and-true-p meow-mode) - (mood-line-segment-modal-meow)) + (require 'mood-line-segment-modal) + (mood-line-segment-modal--meow)) ((featurep 'god-mode) - (mood-line-segment-modal-god)))) + (require 'mood-line-segment-modal) + (mood-line-segment-modal--god)))) ;; -------------------------------------------------------------------------- ;; ;;