From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Ralph Schleicher Newsgroups: gmane.emacs.bugs Subject: Re: battery.el patch Date: 15 Sep 2004 23:59:27 +0200 Organization: Development Proletcult Cadre #23 Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Message-ID: <87isaf6vnk.fsf@bravo.nunatak.allgaeu.org> References: <87wtywioai.fsf@bravo.nunatak.allgaeu.org> NNTP-Posting-Host: deer.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: sea.gmane.org 1095286565 19819 80.91.229.6 (15 Sep 2004 22:16:05 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Wed, 15 Sep 2004 22:16:05 +0000 (UTC) Cc: bug-gnu-emacs@gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Sep 16 00:15:54 2004 Return-path: Original-Received: from lists.gnu.org ([199.232.76.165]) by deer.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 1C7i49-0002Kk-00 for ; Thu, 16 Sep 2004 00:15:53 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1C7i9n-0006rt-Ea for geb-bug-gnu-emacs@m.gmane.org; Wed, 15 Sep 2004 18:21:43 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.33) id 1C7i9l-0006qO-LZ for bug-gnu-emacs@gnu.org; Wed, 15 Sep 2004 18:21:41 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.33) id 1C7i9j-0006oR-GM for bug-gnu-emacs@gnu.org; Wed, 15 Sep 2004 18:21:40 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1C7i9j-0006oO-AA for bug-gnu-emacs@gnu.org; Wed, 15 Sep 2004 18:21:39 -0400 Original-Received: from [213.182.8.6] (helo=mail.allgaeu.org) by monty-python.gnu.org with esmtp (TLSv1:DES-CBC3-SHA:168) (Exim 4.34) id 1C7i3g-0002Eu-WD for bug-gnu-emacs@gnu.org; Wed, 15 Sep 2004 18:15:25 -0400 Original-Received: from kim.allgaeu.org (localhost [127.0.0.1]) by mail.allgaeu.org with ESMTP id i8FMFMsA027596 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 16 Sep 2004 00:15:22 +0200 Original-X-Complaints-To: abuse@allgaeu.org Original-Received: (from uucp@localhost) by kim.allgaeu.org with UUCP id i8FMFLBE027595 for bug-gnu-emacs@gnu.org; Thu, 16 Sep 2004 00:15:21 +0200 Original-To: rms@gnu.org In-Reply-To: Original-Lines: 201 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3 X-RCPT-Domain: gnu.org X-Virus-Check: Yes X-BeenThere: bug-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: main.gmane.org gmane.emacs.bugs:9017 X-Report-Spam: http://spam.gmane.org/gmane.emacs.bugs:9017 Richard Stallman wrote: > Change single back-quotes into single quotes in all comments. [...] > Could you send a diff with all the changes except those? Here is the revised patch and ChangeLog entry. 2004-09-13 Ralph Schleicher * battery.el: Delete superfluous empty lines. (battery-linux-proc-acpi): Attempt to gather information from all battery subdirectories regardless of their file name. (battery-linux-proc-apm): Replace all occurrences of battery-hex-to-int-2 with string-to-int (base 16). (battery-hex-to-int-2): Delete function. (battery-hex-to-int): Delete function. (battery-hex-map): Delete variable. --- battery.el~ 2004-08-09 21:49:21.000000000 +0200 +++ battery.el 2004-09-15 23:42:44.000000000 +0200 @@ -33,7 +33,6 @@ (require 'timer) - (defgroup battery nil "Display battery status information." :prefix "battery-" @@ -182,20 +181,20 @@ (re-search-forward battery-linux-proc-apm-regexp) (setq driver-version (match-string 1)) (setq bios-version (match-string 2)) - (setq tem (battery-hex-to-int-2 (match-string 3))) + (setq tem (string-to-int (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 (battery-hex-to-int-2 (match-string 4))) + (setq tem (string-to-int (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 (battery-hex-to-int-2 (match-string 6))) + (setq tem (string-to-int (match-string 6) 16)) (if (= tem 255) (setq battery-status "N/A") - (setq tem (battery-hex-to-int-2 (match-string 5))) + (setq tem (string-to-int (match-string 5) 16)) (cond ((= tem 0) (setq battery-status "high" battery-status-symbol "")) ((= tem 1) (setq battery-status "low" @@ -245,52 +244,62 @@ %t Remaining time in the form `h:min'" (let (capacity design-capacity rate rate-type 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]+\\) \\(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\\|CMB\\)"))) + ;; 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)))) (and capacity rate (setq minutes (if (zerop rate) 0 (floor (* (/ (float (if (string= charging-state @@ -366,32 +375,6 @@ (setq result (concat result "%"))) result)) -(defconst battery-hex-map '((?0 . 0) (?1 . 1) (?2 . 2) (?3 . 3) - (?4 . 4) (?5 . 5) (?6 . 6) (?7 . 7) - (?8 . 8) (?9 . 9) (?a . 10) (?b . 11) - (?c . 12) (?d . 13) (?e . 14) (?f . 15))) - -(defun battery-hex-to-int (string) - "Convert a hexadecimal number (a string) into a number." - (save-match-data - (and (string-match "^[ \t]+" string) - (setq string (substring string (match-end 0)))) - (and (string-match "^0[xX]" string) - (setq string (substring string (match-end 0))))) - (battery-hex-to-int-2 string)) - -(defun battery-hex-to-int-2 (string) - (let ((index 0) - (length (length string)) - (value 0) - (elem nil)) - (while (and (< index length) - (setq elem (assoc (downcase (aref string index)) - battery-hex-map))) - (setq value (+ (* 16 value) (cdr elem)) - index (1+ index))) - value)) - (provide 'battery) -- Ralph