summaryrefslogtreecommitdiff
path: root/config/emacs/modeline/simple-modeline-core.el
diff options
context:
space:
mode:
authorRaghuram Subramani <raghus2247@gmail.com>2024-06-21 21:50:19 +0530
committerRaghuram Subramani <raghus2247@gmail.com>2024-06-21 21:50:19 +0530
commit00561c0116e00781f3b1fbc5507a922a9b31a539 (patch)
tree99eb765d974ae1831d724768dbbfe1821b85e838 /config/emacs/modeline/simple-modeline-core.el
parentfae3bcc8c9a51e5315d01139b3ae39c0178fee6c (diff)
Add emacs
Diffstat (limited to 'config/emacs/modeline/simple-modeline-core.el')
-rw-r--r--config/emacs/modeline/simple-modeline-core.el102
1 files changed, 102 insertions, 0 deletions
diff --git a/config/emacs/modeline/simple-modeline-core.el b/config/emacs/modeline/simple-modeline-core.el
new file mode 100644
index 0000000..03df894
--- /dev/null
+++ b/config/emacs/modeline/simple-modeline-core.el
@@ -0,0 +1,102 @@
+;;; simple-modeline-core.el --- The core libraries for simple-modeline -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2019-2021 Eder Elorriaga
+
+;; 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 3 of the License, 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. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; The core libraries for simple-modeline.
+
+;;; Code:
+
+(defgroup simple-modeline nil
+ "A simple mode line."
+ :prefix "simple-modeline-"
+ :group 'mode-line)
+
+(defvar simple-modeline--default-mode-line mode-line-format
+ "The former value of `mode-line-format'.")
+
+;;
+;; Options
+;;
+
+(defcustom simple-modeline-segments
+ '((simple-modeline-segment-modified
+ simple-modeline-segment-buffer-name)
+ (simple-modeline-segment-vc
+ simple-modeline-segment-major-mode))
+ "Simple modeline segments."
+ :type '(list (repeat :tag "Left aligned" function)
+ (repeat :tag "Right aligned" function))
+ :package-version '(simple-modeline . "1.2"))
+
+;;
+;; Faces
+;;
+
+(defface simple-modeline-space
+ '((t))
+ "Face for space used to alight the right segments in the mode-line.")
+
+(defface simple-modeline-unimportant
+ '((t (:inherit (shadow))))
+ "Face for less important mode-line elements.")
+
+(defface simple-modeline-status-modified
+ '((t (:inherit (font-lock-variable-name-face))))
+ "Face for the 'modified' indicator symbol in the mode-line.")
+
+(defface simple-modeline-status-info
+ '((t (:inherit (font-lock-string-face))))
+ "Face for generic status indicators in the mode-line.")
+
+(defface simple-modeline-status-success
+ '((t (:inherit (success))))
+ "Face used for success status indicators in the mode-line.")
+
+(defface simple-modeline-status-warning
+ '((t (:inherit (warning))))
+ "Face for warning status indicators in the mode-line.")
+
+(defface simple-modeline-status-error
+ '((t (:inherit (error))))
+ "Face for error status indicators in the mode-line.")
+
+;;
+;; Helpers
+;;
+
+(defun simple-modeline--format (left-segments right-segments)
+ "Return a string of `window-width' length containing LEFT-SEGMENTS and RIGHT-SEGMENTS, aligned respectively."
+ (let* ((left (simple-modeline--format-segments left-segments))
+ (right (simple-modeline--format-segments right-segments))
+ (reserve (length right)))
+ (concat
+ left
+ (propertize " "
+ 'display `((space :align-to (- right ,reserve)))
+ 'face '(:inherit simple-modeline-space))
+ right)))
+
+(defun simple-modeline--format-segments (segments)
+ "Return a string from a list of SEGMENTS."
+ (format-mode-line (mapcar
+ (lambda (segment)
+ `(:eval (,segment)))
+ segments)))
+
+(provide 'simple-modeline-core)
+;;; simple-modeline-core.el ends here