Function: battery-pmset
battery-pmset is a byte-compiled function defined in battery.el.gz.
Signature
(battery-pmset)
Documentation
Get battery status information using pmset.
The following %-sequences are provided:
%L Power source (verbose)
%B Battery status (verbose)
%b Battery status, empty means high, - means low,
! means critical, and + means charging
%p Battery load percentage
%m Remaining time (to charge or discharge) in minutes
%h Remaining time (to charge or discharge) in hours
%t Remaining time (to charge or discharge) in the form h:min
Source Code
;; Defined in /usr/src/emacs/lisp/battery.el.gz
;;; `pmset' interface for Darwin (macOS).
(defun battery-pmset ()
"Get battery status information using `pmset'.
The following %-sequences are provided:
%L Power source (verbose)
%B Battery status (verbose)
%b Battery status, empty means high, `-' means low,
`!' means critical, and `+' means charging
%p Battery load percentage
%m Remaining time (to charge or discharge) in minutes
%h Remaining time (to charge or discharge) in hours
%t Remaining time (to charge or discharge) in the form `h:min'"
(let ( power-source load-percentage battery-status battery-status-symbol
remaining-time hours minutes )
(with-temp-buffer
(ignore-errors (call-process "pmset" nil t nil "-g" "ps"))
(goto-char (point-min))
(when (re-search-forward ;; Handle old typo in output.
"\\(?:Currentl?y\\|Now\\) drawing from '\\(AC\\|Battery\\) Power'"
nil t)
(setq power-source (match-string 1))
(when (re-search-forward (rx bol " -InternalBattery-0" (+ space)
(* "(id=" (+ digit) ")" (+ space)))
nil t)
(when (looking-at "\\([0-9]\\{1,3\\}\\)%")
(setq load-percentage (match-string 1))
(goto-char (match-end 0))
(cond ((looking-at-p "; charging")
(setq battery-status "charging"
battery-status-symbol "+"))
((< (string-to-number load-percentage) battery-load-critical)
(setq battery-status "critical"
battery-status-symbol "!"))
((< (string-to-number load-percentage) battery-load-low)
(setq battery-status "low"
battery-status-symbol "-"))
(t
(setq battery-status "high"
battery-status-symbol "")))
(when (re-search-forward "\\(\\([0-9]+\\):\\([0-9]+\\)\\) remaining" nil t)
(setq remaining-time (match-string 1))
(let ((h (string-to-number (match-string 2)))
(m (string-to-number (match-string 3))))
(setq hours (number-to-string (+ h (if (< m 30) 0 1)))
minutes (number-to-string (+ (* h 60) m)))))))))
(list (cons ?L (or power-source "N/A"))
(cons ?p (or load-percentage "N/A"))
(cons ?B (or battery-status "N/A"))
(cons ?b (or battery-status-symbol ""))
(cons ?h (or hours "N/A"))
(cons ?m (or minutes "N/A"))
(cons ?t (or remaining-time "N/A")))))