X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/a6b6d0863c1b96e14ba3a2d1b9c941fbbcc8adf2..febd1e86fc3e3d1cd0c6b9701b52b93637319a48:/lisp/battery.el diff --git a/lisp/battery.el b/lisp/battery.el index 34f74aa993..e1dbc18355 100644 --- a/lisp/battery.el +++ b/lisp/battery.el @@ -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 ;; 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))))))) + (provide 'battery)