emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Proposal for battery.el


From: Michaël Cadilhac
Subject: Re: Proposal for battery.el
Date: Sun, 05 Nov 2006 13:53:03 +0100
User-agent: Gnus/5.110006 (No Gnus v0.6) Emacs/22.0.90 (gnu/linux)

Romain Francoise <address@hidden> writes:

> address@hidden (Michaël Cadilhac) writes:
>
> + (defun battery-search-for-one-match-in-files (files regexp match-num)
> +   "Search REGEXP in content of the files listed in FILES.
> + If a match occured, return the parenthesized expression numbered by
> + MATCH-NUM in the match.  Otherwise, return nil."
> +   (with-temp-buffer
> +     (while (and files
> +             (not (or (ignore-errors
> +                        (insert-file-contents (car files))
> +                        (re-search-forward regexp))
> +                      (erase-buffer))))
> +       (setq files (cdr files)))
> +     (when files
> +       (match-string match-num))))
>
> Since battery.el requires cl at compilation time, you can safely use
> `dolist'...

You're right, it'd enhance the readability of the code.  Please
consider this (hopefully) final version.

Index: lisp/battery.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/battery.el,v
retrieving revision 1.36
diff -c -r1.36 battery.el
*** lisp/battery.el     9 May 2006 22:43:35 -0000       1.36
--- lisp/battery.el     5 Nov 2006 12:46:37 -0000
***************
*** 49,56 ****
              (file-directory-p "/proc/acpi/battery"))
         'battery-linux-proc-acpi)
        ((and (eq system-type 'darwin)
!             (condition-case nil  
!                 (with-temp-buffer 
                    (and (eq (call-process "pmset" nil t nil "-g" "ps") 0)
                         (> (buffer-size) 0)))
                (error nil)))
--- 49,56 ----
              (file-directory-p "/proc/acpi/battery"))
         'battery-linux-proc-acpi)
        ((and (eq system-type 'darwin)
!             (condition-case nil
!                 (with-temp-buffer
                    (and (eq (call-process "pmset" nil t nil "-g" "ps") 0)
                         (> (buffer-size) 0)))
                (error nil)))
***************
*** 355,399 ****
                                   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))))
                       "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))))
!                      (when (file-exists-p
!                             "/proc/acpi/thermal_zone/THR2/temperature")
!                        (with-temp-buffer
!                          (insert-file-contents
!                           "/proc/acpi/thermal_zone/THR2/temperature")
!                          (when (re-search-forward
!                                 "temperature: +\\([0-9]+\\) C$" nil t)
!                            (match-string 1))))
                       "N/A"))
          (cons ?r (or (and rate (concat (number-to-string rate) " "
                                         rate-type)) "N/A"))
--- 355,373 ----
                                   60)))
               hours (/ minutes 60)))
      (list (cons ?c (or (and capacity (number-to-string capacity)) "N/A"))
!         (cons ?L (or (battery-search-for-one-match-in-files
!                       (mapcar (lambda (e) (concat e "/state"))
!                               (directory-files "/proc/acpi/ac_adapter/"
!                                                t "\\`[^.]"))
!                       "state: +\\(.*\\)$" 1)
! 
                       "N/A"))
!         (cons ?d (or (battery-search-for-one-match-in-files
!                       (mapcar (lambda (e) (concat e "/temperature"))
!                               (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"))
***************
*** 478,483 ****
--- 452,468 ----
         (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 occured, 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)
  
Index: lisp/ChangeLog
===================================================================
RCS file: /sources/emacs/emacs/lisp/ChangeLog,v
retrieving revision 1.10237
diff -c -0 -r1.10237 ChangeLog
*** lisp/ChangeLog      31 Oct 2006 11:07:10 -0000      1.10237
--- lisp/ChangeLog      5 Nov 2006 12:46:41 -0000
***************
*** 0 ****
--- 1,8 ----
+ 2006-10-31  Michaël Cadilhac  <address@hidden>
+ 
+       * battery.el (battery-linux-proc-acpi): Search an ac_adapter in
+       `/proc/acpi/ac_adapter/*'.  Ditto for the thermometers in
+       `/proc/acpi/thermal_zone/*'.
+       (battery-search-for-one-match-in-files): New.  Search a regexp in
+       the content of some files.
+ 
-- 
/!\ My mail address changed, please update your files accordingly.
 |      Michaël `Micha' Cadilhac   |  In a World without Walls and Fences,  |
 |         Epita/LRDE Promo 2007   |     who needs Windows and Gates?       |
 |  http://michael.cadilhac.name   |          -- Dino Esposito              |
 `--  -   JID: address@hidden --'                                   -  --'

Attachment: pgpc7yswV1TWM.pgp
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]