changeset 57143:b628e08b0230

(battery-linux-proc-apm): Use string-to-number. (battery-linux-proc-acpi): Ignore all hidden files in the battery dir. Use dolist (and less indentation). Use erase-buffer. Pre-initialize `design-capacity', `warn', and `low'. (battery-format): Use replace-regexp-in-string.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Sat, 18 Sep 2004 21:33:44 +0000
parents 53277dccf469
children 1b899494bbe2
files lisp/ChangeLog lisp/battery.el
diffstat 2 files changed, 72 insertions(+), 88 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sat Sep 18 20:27:40 2004 +0000
+++ b/lisp/ChangeLog	Sat Sep 18 21:33:44 2004 +0000
@@ -1,3 +1,11 @@
+2004-09-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* battery.el (battery-linux-proc-apm): Use string-to-number.
+	(battery-linux-proc-acpi): Ignore all hidden files in the battery dir.
+	Use dolist (and less indentation).  Use erase-buffer.
+	Pre-initialize `design-capacity', `warn', and `low'.
+	(battery-format): Use replace-regexp-in-string.
+
 2004-09-18  Ralph Schleicher  <rs@nunatak.allgaeu.org>
 
 	* battery.el: Delete superfluous empty lines.
@@ -15,8 +23,8 @@
 
 2004-09-17  Romain Francoise  <romain@orebokech.com>
 
-	* ibuf-ext.el (define-ibuffer-filter filename): Expand
-	dired-directory since buffer-file-name is absolute.
+	* ibuf-ext.el (define-ibuffer-filter filename):
+	Expand dired-directory since buffer-file-name is absolute.
 
 2004-09-17  Dan Nicolaescu  <dann@ics.uci.edu>
 
@@ -32,16 +40,14 @@
 	Use min-colors.
 
 	* term.el (term-down): Perform vertical motion if DOWN is negative.
-	(term-exec-1): Set both TERMCAP and TERMINFO
-	unconditionally.
+	(term-exec-1): Set both TERMCAP and TERMINFO unconditionally.
 	(term-termcap-format): Synchronyze with the eterm terminfo entry
 	in etc/e/eterm.ti.
 	(term-handle-colors-array): If the current foreground or
 	background are zero (i.e. unspecified), use the foreground and
 	background of the default face for reverse video.
 	(term-ansi-at-eval-string, term-ansi-default-fg)
-	(term-ansi-default-bg, term-ansi-current-temp): Delete unused
-	variable.
+	(term-ansi-default-bg, term-ansi-current-temp): Delete unused variable.
 	(term-mem): Delete ununsed function.
 	(term-protocol-version): Increment.
 	(term-current-face): Set to default.
--- a/lisp/battery.el	Sat Sep 18 20:27:40 2004 +0000
+++ b/lisp/battery.el	Sat Sep 18 21:33:44 2004 +0000
@@ -1,6 +1,7 @@
 ;;; battery.el --- display battery status information
 
-;; Copyright (C) 1997, 1998, 2000, 2001, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1998, 2000, 2001, 2003, 2004
+;;           Free Software Foundation, Inc.
 
 ;; Author: Ralph Schleicher <rs@nunatak.allgaeu.org>
 ;; Keywords: hardware
@@ -31,6 +32,7 @@
 ;;; Code:
 
 (require 'timer)
+(eval-when-compile (require 'cl))
 
 
 (defgroup battery nil
@@ -181,20 +183,20 @@
 	  (re-search-forward battery-linux-proc-apm-regexp)
 	  (setq driver-version (match-string 1))
 	  (setq bios-version (match-string 2))
-	  (setq tem (string-to-int (match-string 3) 16))
+	  (setq tem (string-to-number (match-string 3) 16))
 	  (if (not (logand tem 2))
 	      (setq bios-interface "not supported")
 	    (setq bios-interface "enabled")
 	    (cond ((logand tem 16) (setq bios-interface "disabled"))
 		  ((logand tem 32) (setq bios-interface "disengaged")))
-	    (setq tem (string-to-int (match-string 4) 16))
+	    (setq tem (string-to-number (match-string 4) 16))
 	    (cond ((= tem 0) (setq line-status "off-line"))
 		  ((= tem 1) (setq line-status "on-line"))
 		  ((= tem 2) (setq line-status "on backup")))
-	    (setq tem (string-to-int (match-string 6) 16))
+	    (setq tem (string-to-number (match-string 6) 16))
 	    (if (= tem 255)
 		(setq battery-status "N/A")
-	      (setq tem (string-to-int (match-string 5) 16))
+	      (setq tem (string-to-number (match-string 5) 16))
 	      (cond ((= tem 0) (setq battery-status "high"
 				     battery-status-symbol ""))
 		    ((= tem 1) (setq battery-status "low"
@@ -242,64 +244,52 @@
 %m Remaining time in minutes
 %h Remaining time in hours
 %t Remaining time in the form `h:min'"
-  (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
+  (let ((design-capacity 0)
+	(warn 0)
+	(low 0)
+	capacity rate rate-type charging-state 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.
     (with-temp-buffer
-      (mapc (lambda (dir)
-	      (if (string-match "/\\.\\.?\\'" dir)
-		  nil
-		(delete-region (point-min) (point-max))
-		(condition-case nil
-		    (insert-file-contents (expand-file-name "state" dir))
-		  (error nil))
-		(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))
-		(condition-case nil
-		    (insert-file-contents (expand-file-name "info" dir))
-		  (error nil))
-		(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))))))))
-	    (condition-case nil
-		(directory-files "/proc/acpi/battery/" t)
-	      (error nil))))
+      (dolist (dir (ignore-errors (directory-files "/proc/acpi/battery/"
+						   t "\\`[^.]")))
+	(erase-buffer)
+	(ignore-errors (insert-file-contents (expand-file-name "state" dir)))
+	(when (re-search-forward "present: +yes$" nil t)
+	  (and (re-search-forward "charging state: +\\(.*\\)$" nil t)
+	       (member charging-state '("unknown" nil))
+	       ;; 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-number (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-number (match-string 1))))))
+	(goto-char (point-max))
+	(ignore-errors (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)
+	    (incf design-capacity (string-to-number (match-string 1))))
+	  (when (re-search-forward
+		 "design capacity warning: +\\([0-9]+\\) m[AW]h$" nil t)
+	    (incf warn (string-to-number (match-string 1))))
+	  (when (re-search-forward "design capacity low: +\\([0-9]+\\) m[AW]h$"
+				   nil t)
+	    (incf low (string-to-number (match-string 1)))))))
     (and capacity rate
 	 (setq minutes (if (zerop rate) 0
 			 (floor (* (/ (float (if (string= charging-state
@@ -336,8 +326,8 @@
 					 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 (< capacity low) "!")
+		       (and (< capacity warn) "-")
 		       ""))
 	  (cons ?h (or (and hours (number-to-string hours)) "N/A"))
 	  (cons ?m (or (and minutes (number-to-string minutes)) "N/A"))
@@ -355,28 +345,16 @@
 
 (defun battery-format (format alist)
   "Substitute %-sequences in FORMAT."
-  (let ((index 0)
-	(length (length format))
-	(result "")
-	char flag elem)
-    (while (< index length)
-      (setq char (aref format index))
-      (if (not flag)
-	  (if (char-equal char ?%)
-	      (setq flag t)
-	    (setq result (concat result (char-to-string char))))
-	(cond ((char-equal char ?%)
-	       (setq result (concat result "%")))
-	      ((setq elem (assoc char alist))
-	       (setq result (concat result (cdr elem)))))
-	(setq flag nil))
-      (setq index (1+ index)))
-    (or (null flag)
-	(setq result (concat result "%")))
-    result))
+  (replace-regexp-in-string
+   "%."
+   (lambda (str)
+     (let ((char (aref str 1)))
+       (if (eq char ?%) "%"
+	 (or (cdr (assoc char alist)) ""))))
+   format t t))
 
 
 (provide 'battery)
 
-;;; arch-tag: 65916f50-4754-4b6b-ac21-0b510f545a37
+;; arch-tag: 65916f50-4754-4b6b-ac21-0b510f545a37
 ;;; battery.el ends here