diff --git a/README.md b/README.md index cbc49b2..6cad734 100644 --- a/README.md +++ b/README.md @@ -35,10 +35,11 @@ The `doom-modeline` was designed for minimalism, and offers: - An indicator for current input method - An indicator for `LSP` state - An indicator for github notifications -- An indicator for unread emails with `mu4e-alert`. +- An indicator for unread emails with `mu4e-alert` - An indicator for buffer position which is compatible with `nyan-mode` - An indicator for party parrot - An indicator for PDF page number +- An indicator for battery status with `fancy-battery` - Truncated file name, file icon, buffer state and project name in buffer information segment, which is compatible with `projectile` and `project` diff --git a/doom-modeline-segments.el b/doom-modeline-segments.el index cac4b83..ef3b4d2 100644 --- a/doom-modeline-segments.el +++ b/doom-modeline-segments.el @@ -45,6 +45,7 @@ (defvar anzu--total-matched) (defvar anzu-cons-mode-line-p) (defvar aw-keys) +(defvar battery-echo-area-format) (defvar evil-ex-active-highlights-alist) (defvar evil-ex-argument) (defvar evil-ex-range) @@ -53,6 +54,8 @@ (defvar evil-visual-beginning) (defvar evil-visual-end) (defvar evil-visual-selection) +(defvar fancy-battery-last-status) +(defvar fancy-battery-show-percentage) (defvar flycheck-current-errors) (defvar flycheck-mode-menu-map) (defvar flymake--backend-state) @@ -80,6 +83,7 @@ (declare-function avy-tree 'avy) (declare-function aw-update 'ace-window) (declare-function aw-window-list 'ace-window) +(declare-function battery-format 'battery) (declare-function evil-delimited-arguments 'evil-common) (declare-function evil-emacs-state-p 'evil-states) (declare-function evil-force-normal-state 'evil-commands) @@ -1660,6 +1664,66 @@ we don't want to remove that so we just return the original." tracking-buffers))) " "))) + +;; +;; fancy battery +;; + +(doom-modeline-def-segment fancy-battery + (when (and (doom-modeline--active) + (bound-and-true-p fancy-battery-mode)) + ;; Remove the default mode-line + (setq global-mode-string (delq 'fancy-battery-mode-line global-mode-string)) + (let* ((time (cdr (assq ?t fancy-battery-last-status))) + (percentage (cdr (assq ?p fancy-battery-last-status))) + (face (pcase (cdr (assq ?b fancy-battery-last-status)) + ("!" 'fancy-battery-critical) + ("+" 'fancy-battery-charging) + ("-" 'fancy-battery-discharging) + (_ 'success))) + (icon (pcase (cdr (assq ?b fancy-battery-last-status)) + ("!" + (if doom-modeline-icon + (doom-modeline-icon-material "battery_alert" :height 1.1 :v-adjust -0.225 :face face) + (propertize "!" 'face face))) + ("+" + (if doom-modeline-icon + (doom-modeline-icon-material "battery_charging_full" :height 1.1 :v-adjust -0.225 :face face) + (propertize "+" 'face face))) + (_ + (if doom-modeline-icon + (doom-modeline-icon-material "battery_std" :height 1.1 :v-adjust -0.225 :face face) + (propertize "-" 'face face))))) + (status (if (or fancy-battery-show-percentage (string-equal time "N/A")) + (and percentage (concat percentage "%%%%")) + time)) + (help-echo (if battery-echo-area-format + (battery-format battery-echo-area-format + fancy-battery-last-status) + "Battery status not available"))) + (concat + " " + (if status + (concat + (propertize icon + 'face (if doom-modeline-icon + `( + :height ,(doom-modeline-icon-height 1.3) + :family ,(all-the-icons-icon-family icon) + :inherit ,face + ) + face) + 'help-echo help-echo) + (propertize doom-modeline-vspc 'help-echo help-echo) + (propertize status + 'face face + 'help-echo help-echo)) + ;; Battery status is not available + (if doom-modeline-icon + (doom-modeline-icon-material "battery_unknown" :height 1.1 :v-adjust -0.225 :face 'error) + (propertize "N/A" 'face 'error))) + " ")))) + (provide 'doom-modeline-segments) ;;; doom-modeline-segments.el ends here diff --git a/doom-modeline.el b/doom-modeline.el index 5383b39..d42ab17 100644 --- a/doom-modeline.el +++ b/doom-modeline.el @@ -54,10 +54,11 @@ ;; - An indicator for debug state ;; - An indicator for LSP state ;; - An indicator for github notifications -;; - An indicator for unread emails with mu4e-alert. +;; - An indicator for unread emails with mu4e-alert ;; - An indicator for buffer position which is compatible with nyan-mode ;; - An indicator for party parrot ;; - An indicator for PDF page number +;; - An indicator for battery status with fancy-battery ;; - Truncated file name, file icon, buffer state and project name in buffer ;; information segment, which is compatible with projectile and project ;; @@ -84,7 +85,7 @@ (doom-modeline-def-modeline 'main '(bar workspace-number window-number evil-state god-state ryo-modal xah-fly-keys matches buffer-info remote-host buffer-position parrot selection-info) - '(misc-info persp-name lsp irc mu4e github debug minor-modes input-method buffer-encoding major-mode process vcs checker)) + '(misc-info persp-name lsp irc mu4e github debug fancy-battery minor-modes input-method buffer-encoding major-mode process vcs checker)) (doom-modeline-def-modeline 'minimal '(bar matches " " buffer-info) @@ -92,11 +93,11 @@ (doom-modeline-def-modeline 'special '(bar window-number evil-state god-state ryo-modal xah-fly-keys matches buffer-info-simple buffer-position parrot selection-info) - '(misc-info lsp debug minor-modes input-method irc-buffers buffer-encoding major-mode process checker)) + '(misc-info lsp irc-buffers debug fancy-battery minor-modes input-method buffer-encoding major-mode process checker)) (doom-modeline-def-modeline 'project '(bar " " buffer-default-directory) - '(misc-info mu4e github debug " " major-mode " ")) + '(misc-info mu4e github debug fancy-battery " " major-mode " ")) (doom-modeline-def-modeline 'media '(bar window-number buffer-size buffer-info)