aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Zajcev2016-12-02 12:17:38 +0200
committerEli Zaretskii2016-12-02 12:17:38 +0200
commit05a969265cabdf361492ed471f1a8dc369840401 (patch)
tree31a8d7f61f102368900ef04817cde31ce7e44ede
parent0b3f8ca863e7df08e79a935946f7190e595cae2b (diff)
downloademacs-05a969265cabdf361492ed471f1a8dc369840401.tar.gz
emacs-05a969265cabdf361492ed471f1a8dc369840401.zip
* lisp/battery.el: Add 'battery-upower' -- very fast battery status.
-rw-r--r--lisp/battery.el69
1 files changed, 69 insertions, 0 deletions
diff --git a/lisp/battery.el b/lisp/battery.el
index 24eb8a58f63..773ab0d1d67 100644
--- a/lisp/battery.el
+++ b/lisp/battery.el
@@ -45,6 +45,12 @@
45 :type 'regexp 45 :type 'regexp
46 :group 'battery) 46 :group 'battery)
47 47
48(defcustom battery-upower-device "battery_BAT1"
49 "*Upower battery device name."
50 :version "26.1"
51 :type 'string
52 :group 'battery)
53
48(defcustom battery-status-function 54(defcustom battery-status-function
49 (cond ((and (eq system-type 'gnu/linux) 55 (cond ((and (eq system-type 'gnu/linux)
50 (file-readable-p "/proc/apm")) 56 (file-readable-p "/proc/apm"))
@@ -536,6 +542,69 @@ The following %-sequences are provided:
536 (t "N/A")))))) 542 (t "N/A"))))))
537 543
538 544
545;;; `upowerd' interface.
546(defsubst battery-upower-prop (pname &optional device)
547 (dbus-get-property
548 :system
549 "org.freedesktop.UPower"
550 (concat "/org/freedesktop/UPower/devices/" (or device battery-upower-device))
551 "org.freedesktop.UPower"
552 pname))
553
554(defun battery-upower ()
555 "Get battery status from dbus Upower interface.
556This function works only in systems with `upowerd' daemon
557running.
558
559The following %-sequences are provided:
560%c Current capacity (mWh)
561%p Battery load percentage
562%r Current rate
563%B Battery status (verbose)
564%L AC line status (verbose)
565%s Remaining time (to charge or discharge) in seconds
566%m Remaining time (to charge or discharge) in minutes
567%h Remaining time (to charge or discharge) in hours
568%t Remaining time (to charge or discharge) in the form `h:min'"
569 (let ((percents (battery-upower-prop "Percentage"))
570 (time-to-empty (battery-upower-prop "TimeToEmpty"))
571 (time-to-full (battery-upower-prop "TimeToFull"))
572 (state (battery-upower-prop "State"))
573 (online (battery-upower-prop "Online" "line_power_ACAD"))
574 (energy (battery-upower-prop "Energy"))
575 (energy-rate (battery-upower-prop "EnergyRate"))
576 (battery-states '((0 . "unknown") (1 . "charging")
577 (2 . "discharging") (3 . "empty")
578 (4 . "fully-charged") (5 . "pending-charge")
579 (6 . "pending-discharge")))
580 seconds minutes hours remaining-time)
581 (cond ((and online time-to-full)
582 (setq seconds time-to-full))
583 ((and (not online) time-to-empty)
584 (setq seconds time-to-empty)))
585 (when seconds
586 (setq minutes (/ seconds 60)
587 hours (/ minutes 60)
588 remaining-time
589 (format "%d:%02d" (truncate hours)
590 (- (truncate minutes) (* 60 (truncate hours))))))
591 (list (cons ?c (or (and energy
592 (number-to-string (round (* 1000 energy))))
593 "N/A"))
594 (cons ?p (or (and percents (number-to-string (round percents)))
595 "N/A"))
596 (cons ?r (or (and energy-rate
597 (concat (number-to-string energy-rate) " W"))
598 "N/A"))
599 (cons ?B (or (and state (cdr (assoc state battery-states)))
600 "unknown"))
601 (cons ?L (or (and online "on-line") "off-line"))
602 (cons ?s (or (and seconds (number-to-string seconds)) "N/A"))
603 (cons ?m (or (and minutes (number-to-string minutes)) "N/A"))
604 (cons ?h (or (and hours (number-to-string hours)) "N/A"))
605 (cons ?t (or remaining-time "N/A")))))
606
607
539;;; `apm' interface for BSD. 608;;; `apm' interface for BSD.
540(defun battery-bsd-apm () 609(defun battery-bsd-apm ()
541 "Get APM status information from BSD apm binary. 610 "Get APM status information from BSD apm binary.