]> code.delx.au - gnu-emacs/blobdiff - lisp/battery.el
(delphi-search-directory, delphi-find-unit-file, delphi-debug-mode-map,
[gnu-emacs] / lisp / battery.el
index 34f74aa9932d44a0901a31bb7b56410645f5ad1f..e1dbc1835575b5510d29ec2252680be6ef482dc6 100644 (file)
@@ -1,7 +1,7 @@
 ;;; battery.el --- display battery status information
 
 ;; Copyright (C) 1997, 1998, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Ralph Schleicher <rs@nunatak.allgaeu.org>
 ;; Keywords: hardware
@@ -10,7 +10,7 @@
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
+;; the Free Software Foundation; either version 3, or (at your option)
 ;; any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
@@ -49,8 +49,8 @@
              (file-directory-p "/proc/acpi/battery"))
         'battery-linux-proc-acpi)
        ((and (eq system-type 'darwin)
-             (condition-case nil  
-                 (with-temp-buffer 
+             (condition-case nil
+                 (with-temp-buffer
                    (and (eq (call-process "pmset" nil t nil "-g" "ps") 0)
                         (> (buffer-size) 0)))
                (error nil)))
@@ -355,37 +355,21 @@ The following %-sequences are provided:
                                   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")
-                        (with-temp-buffer
-                          (insert-file-contents
-                           "/proc/acpi/ac_adapter/AC/state")
-                          (when (re-search-forward "state: +\\(.*\\)$" nil t)
-                            (match-string 1))))
+         (cons ?L (or (battery-search-for-one-match-in-files
+                       (mapcar (lambda (e) (concat e "/state"))
+                               (ignore-errors
+                                 (directory-files "/proc/acpi/ac_adapter/"
+                                                  t "\\`[^.]")))
+                       "state: +\\(.*\\)$" 1)
+
                       "N/A"))
-         (cons ?d (or (when (file-exists-p
-                             "/proc/acpi/thermal_zone/THRM/temperature")
-                        (with-temp-buffer
-                          (insert-file-contents
-                           "/proc/acpi/thermal_zone/THRM/temperature")
-                          (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))))
-                      (when (file-exists-p
-                             "/proc/acpi/thermal_zone/THM0/temperature")
-                        (with-temp-buffer
-                          (insert-file-contents
-                           "/proc/acpi/thermal_zone/THM0/temperature")
-                          (when (re-search-forward
-                                 "temperature: +\\([0-9]+\\) C$" nil t)
-                            (match-string 1))))
+         (cons ?d (or (battery-search-for-one-match-in-files
+                       (mapcar (lambda (e) (concat e "/temperature"))
+                               (ignore-errors
+                                 (directory-files "/proc/acpi/thermal_zone/"
+                                                  t "\\`[^.]")))
+                       "temperature: +\\([0-9]+\\) C$" 1)
+
                       "N/A"))
          (cons ?r (or (and rate (concat (number-to-string rate) " "
                                         rate-type)) "N/A"))
@@ -400,6 +384,7 @@ The following %-sequences are provided:
                            (format "%d:%02d" hours (- minutes (* 60 hours))))
                       "N/A"))
          (cons ?p (or (and full-capacity capacity
+                           (> full-capacity 0)
                            (number-to-string
                             (floor (/ capacity
                                       (/ (float full-capacity) 100)))))
@@ -470,6 +455,17 @@ The following %-sequences are provided:
         (or (cdr (assoc char alist)) ""))))
    format t t))
 
+(defun battery-search-for-one-match-in-files (files regexp match-num)
+  "Search REGEXP in the content of the files listed in FILES.
+If a match occurred, return the parenthesized expression numbered by
+MATCH-NUM in the match.  Otherwise, return nil."
+  (with-temp-buffer
+    (catch 'found
+      (dolist (file files)
+       (and (ignore-errors (insert-file-contents file nil nil nil 'replace))
+            (re-search-forward regexp nil t)
+            (throw 'found (match-string match-num)))))))
+
 \f
 (provide 'battery)