Compare commits

..

No commits in common. "main" and "3.0.1" have entirely different histories.
main ... 3.0.1

14 changed files with 63 additions and 104 deletions

5
.gitattributes vendored Normal file
View File

@ -0,0 +1,5 @@
# Repository assets (screenshots, etc.)
.repo-assets/** filter=lfs diff=lfs merge=lfs -text
# Ignore plaintext assets
.repo-assets/**/*.md filter= diff= merge= text

View File

@ -7,14 +7,14 @@
(start-time (current-time)))
(cl-loop for i to num
do (format-mode-line mode-line-format))
(format-time-string "%s.%3N seconds" (time-since start-time))))
(format-time-string "%s.%3N" (time-since start-time))))
;; Default mode line:
(time-mode-line 10000) ;; "0.440 seconds"
(time-mode-line 10000 :and-mem) ;; "2.402 seconds"
(time-mode-line 10000) ;; "0.440"
(time-mode-line 10000 :and-mem) ;; "2.402"
;; mood-line (default settings):
(mood-line-mode t)
(time-mode-line 10000) ;; "0.309 seconds"
(time-mode-line 10000 :and-mem) ;; "1.286 seconds"
(time-mode-line 10000) ;; "0.309"
(time-mode-line 10000 :and-mem) ;; "1.286"
```

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

3
.repo-assets/preview.png Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3ac214b9c012211913dc903ced696036e85ca1d9c2af1d28b117e537da9ea108
size 231459

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

View File

@ -1,10 +1,12 @@
# <img src=".repo-assets/icon.png" width=50> mood-line
A lightweight, drop-in replacement for the default Emacs mode line configuration.
# mood-line
[![MELPA](https://melpa.org/packages/mood-line-badge.svg)](https://melpa.org/#/mood-line)
[![MELPA Stable](https://stable.melpa.org/packages/mood-line-badge.svg)](https://stable.melpa.org/#/mood-line)
## About
mood-line is a lightweight, drop-in replacement for the default Emacs mode line configuration.
## Features
* Clean, informative design
@ -19,7 +21,7 @@ A lightweight, drop-in replacement for the default Emacs mode line configuration
## Preview
![Preview Image](.repo-assets/preview.webp "Preview Image")
![Preview Image](.repo-assets/preview.png "Preview Image")
## Configuration
@ -69,8 +71,8 @@ mood-line uses a modular segment format, and it is easy to reconfigure:
((mood-line-segment-checker) . " "))))
```
More information on the format specification is available in the documentation:\
`M-x describe-variable mood-line-format`\
More information on the format specification is available in the documentation: \
`M-x describe-variable mood-line-format` \
`M-x describe-function mood-line-defformat`
### Glyphs

View File

@ -2,7 +2,7 @@
;;
;; Author: Jessie Hildebrandt <jessieh.net>
;; Homepage: https://gitlab.com/jessieh/mood-line
;;
;; This file is not part of GNU Emacs.
;;; Commentary:

View File

@ -3,7 +3,7 @@
;; Author: Alynx Zhou <alynx.zhou@gmail.com>
;; Jessie Hildebrandt <jessieh.net>
;; Homepage: https://gitlab.com/jessieh/mood-line
;;
;; This file is not part of GNU Emacs.
;;; Commentary:

View File

@ -3,7 +3,7 @@
;; Author: trevDev() <trev@trevdev.ca>
;; Jessie Hildebrandt <jessieh.net>
;; Homepage: https://gitlab.com/jessieh/mood-line
;;
;; This file is not part of GNU Emacs.
;;; Commentary:
@ -107,16 +107,6 @@ e.g., (:foreground \"red\")."
(concat (propertize (car mode-cons)
'face (cdr mode-cons))))))
;; ---------------------------------- ;;
;; Xah segment
;; ---------------------------------- ;;
(defun mood-line-segment-modal--xah-fn ()
"Display the current xah-fly-keys state."
(if (bound-and-true-p xah-fly-insert-state-p)
"<I>"
"<C>"))
;; ---------------------------------- ;;
;; God segment
;; ---------------------------------- ;;

View File

@ -2,7 +2,7 @@
;;
;; Author: Jessie Hildebrandt <jessieh.net>
;; Homepage: https://gitlab.com/jessieh/mood-line
;;
;; This file is not part of GNU Emacs.
;;; Commentary:
@ -49,11 +49,8 @@
(defun mood-line-segment-vc--rev (vc-mode-str backend)
"Return name of current file's revision for BACKEND according to `vc-mode'.
VC-MODE-STR is expected to be the value of `vc-mode' in the current buffer.
If `vc-display-status' is nil, return the name of BACKEND."
(or (unless vc-display-status
(symbol-name backend))
(pcase backend
VC-MODE-STR is expected to be the value of `vc-mode' in the current buffer."
(or (pcase backend
('Git (substring-no-properties vc-mode-str 5))
('Hg (substring-no-properties vc-mode-str 4)))
(ignore-errors

View File

@ -1,11 +1,11 @@
;;; mood-line.el --- A minimal mode line inspired by doom-modeline -*- lexical-binding: t; -*-
;;
;; Author: Jessie Hildebrandt <jessieh.net>
;; Homepage: https://gitlab.com/jessieh/mood-line
;; Keywords: mode-line faces
;; Version: 3.1.0
;; Version: 3.0.1
;; Package-Requires: ((emacs "26.1"))
;;
;; This file is not part of GNU Emacs.
;;; Commentary:
@ -82,8 +82,10 @@
;; -------------------------------------------------------------------------- ;;
(defmacro mood-line--deflazy (name)
"Define dummy function NAME to `require' its module and call actual function."
(let ((module (intern (car (split-string (symbol-name name) "--")))))
"Define dummy function NAME to `require' its module and call actual function.
If NAME is already bound, this does nothing."
(when-let ((not-bound (not (fboundp name)))
(module (intern (car (split-string (symbol-name name) "--")))))
`(defun ,name (&rest args)
"Not yet loaded."
(fmakunbound (quote ,name))
@ -144,8 +146,6 @@ An optional key :padding may be provided, the value of which will be used as
(:buffer-modified . ?*)
(:buffer-read-only . ?#)
(:frame-client . ?@)
(:count-separator . ?*))
"Set of ASCII glyphs for use with mood-line.")
@ -167,8 +167,6 @@ An optional key :padding may be provided, the value of which will be used as
(:buffer-modified . ?●)
(:buffer-read-only . ?■)
(:frame-client . ?)
(:count-separator . ?×))
"Set of Fira Code-compatible glyphs for use with mood-line.")
@ -190,20 +188,18 @@ An optional key :padding may be provided, the value of which will be used as
(:buffer-modified . ?●)
(:buffer-read-only . ?■)
(:frame-client . ?⇅)
(:count-separator . ?✕))
"Set of Unicode glyphs for use with mood-line.")
(defconst mood-line-format-default
(mood-line-defformat
:left
(((mood-line-segment-modal) . " ")
((or (mood-line-segment-buffer-status) " ") . " ")
((mood-line-segment-buffer-name) . " ")
((mood-line-segment-anzu) . " ")
((mood-line-segment-multiple-cursors) . " ")
((mood-line-segment-cursor-position) . " ")
(((mood-line-segment-modal) . " ")
((mood-line-segment-buffer-status) . " ")
((mood-line-segment-buffer-name) . " ")
((mood-line-segment-anzu) . " ")
((mood-line-segment-multiple-cursors) . " ")
((mood-line-segment-cursor-position) . " ")
(mood-line-segment-scroll))
:right
(((mood-line-segment-vc) . " ")
@ -217,10 +213,7 @@ An optional key :padding may be provided, the value of which will be used as
(mood-line-defformat
:left
(((mood-line-segment-modal) . " ")
((or (mood-line-segment-buffer-status)
(mood-line-segment-client)
" ") . " ")
((mood-line-segment-project) . "/")
((mood-line-segment-buffer-status) . " ")
((mood-line-segment-buffer-name) . " ")
((mood-line-segment-anzu) . " ")
((mood-line-segment-multiple-cursors) . " ")
@ -297,8 +290,6 @@ Keys are names for different mode line glyphs, values are characters for that
:buffer-modified | File-backed buffer is modified
:buffer-read-only | File-backed buffer is read-only
:frame-client | Frame is a client for an Emacs daemon
:count-separator | Separates some indicator names from numerical counts
`mood-line-glyphs-ascii' will be used as a fallback whenever a glyph is found
@ -355,10 +346,6 @@ See `mood-line-defformat' for a helpful formatting macro."
"Face used for the ':buffer-narrowed' buffer status indicator."
:group 'mood-line-faces)
(defface mood-line-frame-status-client
'((t (:inherit mood-line-unimportant)))
"Face used for the :frame-client frame status indicator.")
(defface mood-line-major-mode
'((t (:inherit bold)))
"Face used for the major mode indicator."
@ -399,6 +386,15 @@ See `mood-line-defformat' for a helpful formatting macro."
"Face used for less important mode line elements."
:group 'mood-line-faces)
;; ---------------------------------- ;;
;; Obsolete faces
;; ---------------------------------- ;;
(define-obsolete-face-alias
'mood-line-modified
'mood-line-buffer-status-modified
"2.1.0")
;; -------------------------------------------------------------------------- ;;
;;
;; Helper functions
@ -461,22 +457,17 @@ described in the documentation for `mood-line-format', which see."
(mood-line--deflazy mood-line-segment-modal--evil-fn)
(mood-line--deflazy mood-line-segment-modal--meow-fn)
(mood-line--deflazy mood-line-segment-modal--xah-fn)
(mood-line--deflazy mood-line-segment-modal--god-fn)
(defun mood-line-segment-modal ()
"Return the correct mode line segment for the first active modal mode found.
Modal editing modes checked, in order:
`evil-mode', `meow-mode', `xah-fly-keys', `god-mode'"
Modal modes checked, in order: `evil-mode', `meow-mode', `god-mode'."
(cond
((bound-and-true-p evil-mode)
(mood-line-segment-modal--evil-fn))
((bound-and-true-p meow-mode)
(mood-line-segment-modal--meow-fn))
((bound-and-true-p xah-fly-keys)
(mood-line-segment-modal--xah-fn))
((or (bound-and-true-p god-local-mode)
(bound-and-true-p god-global-mode))
((featurep 'god-mode)
(mood-line-segment-modal--god-fn))))
;; ---------------------------------- ;;
@ -515,33 +506,6 @@ Modal editing modes checked, in order:
((bound-and-true-p flymake-mode)
mood-line-segment-checker--flymake-text)))
;; -------------------------------------------------------------------------- ;;
;;
;; Client segment
;;
;; -------------------------------------------------------------------------- ;;
(defun mood-line-segment-client ()
"Return an indicator representing the client status of the current frame."
(when (frame-parameter nil 'client)
(propertize (mood-line--get-glyph :frame-client)
'face 'mood-line-frame-status-client)))
;; -------------------------------------------------------------------------- ;;
;;
;; Project segment
;;
;; -------------------------------------------------------------------------- ;;
(defun mood-line-segment-project ()
"Return project name from project.el or Projectile, if any."
(or
(and (fboundp 'project-name)
(project-current)
(project-name (project-current)))
(and (fboundp 'projectile-project-name)
(projectile-project-name))))
;; -------------------------------------------------------------------------- ;;
;;
;; anzu segment
@ -611,10 +575,12 @@ Modal editing modes checked, in order:
'face 'mood-line-buffer-status-modified))
(buffer-read-only
(propertize (mood-line--get-glyph :buffer-read-only)
'face 'mood-line-buffer-status-read-only)))
(when (buffer-narrowed-p)
(propertize (mood-line--get-glyph :buffer-narrowed)
'face 'mood-line-buffer-status-narrowed))))
'face 'mood-line-buffer-status-read-only))
(t " "))
(if (buffer-narrowed-p)
(propertize (mood-line--get-glyph :buffer-narrowed)
'face 'mood-line-buffer-status-narrowed)
" ")))
;; ---------------------------------- ;;
;; Buffer name segment
@ -726,6 +692,10 @@ Modal editing modes checked, in order:
;;
;; -------------------------------------------------------------------------- ;;
;; ---------------------------------- ;;
;; Configuration
;; ---------------------------------- ;;
(defconst mood-line--hooks-alist
'((mood-line-segment-checker--flycheck-update
. (flycheck-mode-hook

View File

@ -34,12 +34,4 @@
(should (string= (mood-line-segment-vc--rev "" 'SVN)
"???"))))
(ert-deftest --rev/vc-display-status-nil ()
"Name of the VCS backend should be reported when `vc-display-status' is nil."
(let ((vc-display-status nil))
(should (string= (mood-line-segment-vc--rev " Git:main" 'Git)
"Git"))
(should (string= (mood-line-segment-vc--rev " Hg:main" 'Hg)
"Hg"))))
;;; mood-line-segment-vc-test.el ends here

View File

@ -148,7 +148,7 @@
(should (string= segments-str "ABC123XYZ"))))
;; ---------------------------------- ;;
;; mood-line--process-format
;; mood-line---process-format
;; ---------------------------------- ;;
(ert-deftest --process-format/default ()