;;; 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
;; 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,
(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)))
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"))
(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)))))
(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)