diff options
| author | Evgeny Zajcev | 2016-12-02 12:17:38 +0200 |
|---|---|---|
| committer | Eli Zaretskii | 2016-12-02 12:17:38 +0200 |
| commit | 05a969265cabdf361492ed471f1a8dc369840401 (patch) | |
| tree | 31a8d7f61f102368900ef04817cde31ce7e44ede | |
| parent | 0b3f8ca863e7df08e79a935946f7190e595cae2b (diff) | |
| download | emacs-05a969265cabdf361492ed471f1a8dc369840401.tar.gz emacs-05a969265cabdf361492ed471f1a8dc369840401.zip | |
* lisp/battery.el: Add 'battery-upower' -- very fast battery status.
| -rw-r--r-- | lisp/battery.el | 69 |
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. | ||
| 556 | This function works only in systems with `upowerd' daemon | ||
| 557 | running. | ||
| 558 | |||
| 559 | The 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. |