emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Mario Lang] battery.el ACPI update


From: Jérôme Marant
Subject: Re: [Mario Lang] battery.el ACPI update
Date: Thu, 27 May 2004 22:26:11 +0200
User-agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux)

Could someone please take care of this?

address@hidden (Jérôme Marant) writes:

> Hi,
>
> Mario Lang asked me to forward this message.
>
> Cheers,
>
> --==-=-=
> Content-Type: message/rfc822
> Content-Disposition: inline
> Content-Transfer-Encoding: 8bit
>
> To: address@hidden
> Subject: battery.el ACPI update
> From: Mario Lang <address@hidden>
> X-Draft-From: ("nnml:mail.emacs-devel" "")
> Date: Wed, 19 May 2004 17:44:16 +0200
> Message-ID: <address@hidden>
> User-Agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux)
> Xref: lexx.delysid.org archive:2333
> MIME-Version: 1.0
> Content-Type: multipart/signed; boundary="=-=-="
> Lines: 178
>
> --=-=-=
>
> Hi.
>
> The following patch makes `battery-linux-proc-acpi' works with more
> different systems and fixes an anoying division-by-zero bug
> in the remaining-time calculation.  Please install.
>
> 2004-05-19  Mario Lang  <address@hidden>
>
>       * battery.el (battery-linux-proc-acpi): mA was hardcored, but some
>       systems appear to use mW, make the code handle this.  Fix a
>       division-by-zero bug while at it, and handle kernels with
>       a slightly different layout in /proc/acpi.
>
> Index: lisp/battery.el
> ===================================================================
> RCS file: /cvsroot/emacs/emacs/lisp/battery.el,v
> retrieving revision 1.18
> diff -u -r1.18 battery.el
> --- lisp/battery.el   10 Sep 2003 19:51:01 -0000      1.18
> +++ lisp/battery.el   19 May 2004 15:36:34 -0000
> @@ -61,7 +61,7 @@
>    (cond ((eq battery-status-function 'battery-linux-proc-apm)
>        "Power %L, battery %B (%p%% load, remaining time %t)")
>       ((eq battery-status-function 'battery-linux-proc-acpi)
> -      "Power %L, battery %B at %r mA (%p%% load, remaining time %t)"))
> +      "Power %L, battery %B at %r (%p%% load, remaining time %t)"))
>    "*Control string formatting the string to display in the echo area.
>  Ordinary characters in the control string are printed as-is, while
>  conversion specifications introduced by a `%' character in the control
> @@ -243,50 +243,59 @@
>  %m Remaining time in minutes
>  %h Remaining time in hours
>  %t Remaining time in the form `h:min'"
> -  (let (capacity design-capacity rate charging-state warn low minutes hours)
> -    (when (file-directory-p "/proc/acpi/battery/")
> -      ;; ACPI provides information about each battery present in the system 
> in
> -      ;; a separate subdirectory.  We are going to merge the available
> -      ;; information together since displaying for a variable amount of
> -      ;; batteries seems overkill for format-strings.
> -      (mapc
> -       (lambda (dir)
> -      (with-temp-buffer
> -        (insert-file-contents (expand-file-name "state" dir))
> -        (when (re-search-forward "present: +yes$" nil t)
> -          (and (re-search-forward "charging state: +\\(.*\\)$" nil t)
> -               (or (null charging-state) (string= charging-state
> -                                                  "unknown"))
> -               ;; On most multi-battery systems, most of the time only one
> -               ;; battery is "charging"/"discharging", the others are
> -               ;; "unknown".
> -               (setq charging-state (match-string 1)))
> -          (when (re-search-forward "present rate: +\\([0-9]+\\) mA$" nil t)
> -            (setq rate (+ (or rate 0) (string-to-int (match-string 1)))))
> -          (when (re-search-forward "remaining capacity: +\\([0-9]+\\) mAh$"
> -                                   nil t)
> -            (setq capacity
> -                  (+ (or capacity 0) (string-to-int (match-string 1))))))
> -        (goto-char (point-max))
> -        (insert-file-contents (expand-file-name "info" dir))
> -        (when (re-search-forward "present: +yes$" nil t)
> -          (when (re-search-forward "design capacity: +\\([0-9]+\\) mAh$"
> -                                   nil t)
> -            (setq design-capacity (+ (or design-capacity 0)
> -                                     (string-to-int (match-string 1)))))
> -          (when (re-search-forward "design capacity warning: +\\([0-9]+\\) 
> mAh$"
> -                                   nil t)
> -            (setq warn (+ (or warn 0) (string-to-int (match-string 1)))))
> -          (when (re-search-forward "design capacity low: +\\([0-9]+\\) mAh$"
> -                                   nil t)
> -            (setq low (+ (or low 0)
> -                         (string-to-int (match-string 1))))))))
> -       (directory-files "/proc/acpi/battery/" t "BAT")))
> +  (let (capacity design-capacity rate rate-type charging-state warn low
> +              minutes hours)
> +    ;; ACPI provides information about each battery present in the system in
> +    ;; a separate subdirectory.  We are going to merge the available
> +    ;; information together since displaying for a variable amount of
> +    ;; batteries seems overkill for format-strings.
> +    (mapc
> +     (lambda (dir)
> +       (with-temp-buffer
> +      (insert-file-contents (expand-file-name "state" dir))
> +      (when (re-search-forward "present: +yes$" nil t)
> +        (and (re-search-forward "charging state: +\\(.*\\)$" nil t)
> +             (or (null charging-state) (string= charging-state
> +                                                "unknown"))
> +             ;; On most multi-battery systems, most of the time only one
> +             ;; battery is "charging"/"discharging", the others are
> +             ;; "unknown".
> +             (setq charging-state (match-string 1)))
> +        (when (re-search-forward "present rate: +\\([0-9]+\\) \\(m[AW]\\)$"
> +                                 nil t)
> +          (setq rate (+ (or rate 0) (string-to-int (match-string 1)))
> +                rate-type (or (and rate-type
> +                                   (if (string= rate-type (match-string 2))
> +                                       rate-type
> +                                     (error
> +                                      "Inconsistent rate types (%s vs. %s)"
> +                                      rate-type (match-string 2))))
> +                              (match-string 2))))
> +        (when (re-search-forward "remaining capacity: +\\([0-9]+\\) m[AW]h$"
> +                                 nil t)
> +          (setq capacity
> +                (+ (or capacity 0) (string-to-int (match-string 1))))))
> +      (goto-char (point-max))
> +      (insert-file-contents (expand-file-name "info" dir))
> +      (when (re-search-forward "present: +yes$" nil t)
> +        (when (re-search-forward "design capacity: +\\([0-9]+\\) m[AW]h$"
> +                                 nil t)
> +          (setq design-capacity (+ (or design-capacity 0)
> +                                   (string-to-int (match-string 1)))))
> +        (when (re-search-forward "design capacity warning: +\\([0-9]+\\) 
> m[AW]h$"
> +                                 nil t)
> +          (setq warn (+ (or warn 0) (string-to-int (match-string 1)))))
> +        (when (re-search-forward "design capacity low: +\\([0-9]+\\) m[AW]h$"
> +                                 nil t)
> +          (setq low (+ (or low 0)
> +                       (string-to-int (match-string 1))))))))
> +     (directory-files "/proc/acpi/battery/" t "BAT"))
>      (and capacity rate
> -      (setq minutes (floor (* (/ (float (if (string= charging-state
> -                                                     "charging")
> -                                            (- design-capacity capacity)
> -                                          capacity)) rate) 60))
> +      (setq minutes (if (zerop rate) 0
> +                      (floor (* (/ (float (if (string= charging-state
> +                                                       "charging")
> +                                              (- design-capacity capacity)
> +                                            capacity)) rate) 60)))
>              hours (/ minutes 60)))
>      (list (cons ?c (or (and capacity (number-to-string capacity)) "N/A"))
>         (cons ?L (or (when (file-exists-p "/proc/acpi/ac_adapter/AC/state")
> @@ -304,13 +313,22 @@
>                          (when (re-search-forward
>                                 "temperature: +\\([0-9]+\\) C$" nil t)
>                            (match-string 1))))
> +                    (when (file-exists-p
> +                           "/proc/acpi/thermal_zone/THM/temperature")
> +                      (with-temp-buffer
> +                        (insert-file-contents
> +                         "/proc/acpi/thermal_zone/THM/temperature")
> +                        (when (re-search-forward
> +                               "temperature: +\\([0-9]+\\) C$" nil t)
> +                          (match-string 1))))
>                      "N/A"))
> -       (cons ?r (or (and rate (number-to-string rate)) "N/A"))
> +       (cons ?r (or (and rate (concat (number-to-string rate) " "
> +                                      rate-type)) "N/A"))
>         (cons ?B (or charging-state "N/A"))
>         (cons ?b (or (and (string= charging-state "charging") "+")
>                      (and low (< capacity low) "!")
> -                    (and warn (< capacity warn) "-")
> -                    ""))
> +                    (and warn (< capacity warn) "-")
> +                    ""))
>         (cons ?h (or (and hours (number-to-string hours)) "N/A"))
>         (cons ?m (or (and minutes (number-to-string minutes)) "N/A"))
>         (cons ?t (or (and minutes
>
> -- 
> CYa,
>   Mario | Debian Developer <URL:http://debian.org/>
>         | Get my public key via finger address@hidden
>         | 1024D/7FC1A0854909BCCDBE6C102DDFFC022A6B113E44
>
> --==-=-=
>
> -- 
> Jérôme Marant
>
>
> _______________________________________________
> Emacs-devel mailing list
> address@hidden
> http://mail.gnu.org/mailman/listinfo/emacs-devel
>

-- 
Jérôme Marant




reply via email to

[Prev in Thread] Current Thread [Next in Thread]