* bug#643: Battery update
[not found] <87bq04dbqc.fsf@stupidchicken.com>
@ 2008-08-07 18:09 ` Sven Joachim
2008-08-07 18:18 ` Lennart Borgman (gmail)
` (4 subsequent siblings)
5 siblings, 0 replies; 21+ messages in thread
From: Sven Joachim @ 2008-08-07 18:09 UTC (permalink / raw)
To: Chong Yidong; +Cc: 643, Emre Sahin, emacs-devel
On 2008-08-07 18:35 +0200, Chong Yidong wrote:
> The Linux kernel developers have deprecated the longstanding /proc/acpi
> interface, which breaks battery.el on recent kernels (bug#643 and
> bug#660). Now, the battery information is supposed to come through
> sysfs.
>
> Even though it's the feature freeze, I think it's necessary to ensure
> that battery.el works at least at a basic level. So, here's a patch
> that adds primitive sysfs support for battery.el. It doesn't do as much
> as before, because AFAICT the new sysfs interface provides less
> information than the old acpi interface (go figure).
>
> It's lightly tested. Could someone try this out and see if it does the
> right thing?
The results are funny on my laptop (battery full, online):
Power N/A, battery Full at (-34.7% load, remaining time)
Sven
^ permalink raw reply [flat|nested] 21+ messages in thread
* bug#643: Battery update
[not found] <87bq04dbqc.fsf@stupidchicken.com>
2008-08-07 18:09 ` bug#643: Battery update Sven Joachim
@ 2008-08-07 18:18 ` Lennart Borgman (gmail)
[not found] ` <87ej50g0ib.fsf@gmx.de>
` (3 subsequent siblings)
5 siblings, 0 replies; 21+ messages in thread
From: Lennart Borgman (gmail) @ 2008-08-07 18:18 UTC (permalink / raw)
To: Chong Yidong, 643; +Cc: Emre Sahin, emacs-devel
Chong Yidong wrote:
> Even though it's the feature freeze, I think it's necessary to ensure
> that battery.el works at least at a basic level.
Just out of curiosity: Why is it necessary that battery.el works? Is not
this information something that the OS normally gives the user without
Emacs?
^ permalink raw reply [flat|nested] 21+ messages in thread
[parent not found: <87ej50g0ib.fsf@gmx.de>]
* bug#643: Battery update
[not found] ` <87ej50g0ib.fsf@gmx.de>
@ 2008-08-07 18:19 ` Chong Yidong
[not found] ` <87bq048z7t.fsf@stupidchicken.com>
1 sibling, 0 replies; 21+ messages in thread
From: Chong Yidong @ 2008-08-07 18:19 UTC (permalink / raw)
To: Sven Joachim; +Cc: 643, Emre Sahin, emacs-devel
Sven Joachim <svenjoac@gmx.de> writes:
> The results are funny on my laptop (battery full, online):
>
> Power N/A, battery Full at (-34.7% load, remaining time)
What does
M-: (battery-linux-sysfs)
return?
^ permalink raw reply [flat|nested] 21+ messages in thread
[parent not found: <87bq048z7t.fsf@stupidchicken.com>]
* bug#643: Battery update
[not found] ` <87bq048z7t.fsf@stupidchicken.com>
@ 2008-08-07 19:11 ` Sven Joachim
[not found] ` <878wv8fxmr.fsf@gmx.de>
1 sibling, 0 replies; 21+ messages in thread
From: Sven Joachim @ 2008-08-07 19:11 UTC (permalink / raw)
To: Chong Yidong; +Cc: 643, Emre Sahin, emacs-devel
On 2008-08-07 20:19 +0200, Chong Yidong wrote:
> Sven Joachim <svenjoac@gmx.de> writes:
>
>> The results are funny on my laptop (battery full, online):
>>
>> Power N/A, battery Full at (-34.7% load, remaining time)
>
> What does
>
> M-: (battery-linux-sysfs)
>
> return?
((99 . "3985000") (66 . "Full") (112 . "-34.7") (76 . "N/A"))
Sven
^ permalink raw reply [flat|nested] 21+ messages in thread
[parent not found: <878wv8fxmr.fsf@gmx.de>]
* bug#643: Battery update
[not found] ` <878wv8fxmr.fsf@gmx.de>
@ 2008-08-07 19:28 ` Chong Yidong
[not found] ` <87abfo4obc.fsf@stupidchicken.com>
1 sibling, 0 replies; 21+ messages in thread
From: Chong Yidong @ 2008-08-07 19:28 UTC (permalink / raw)
To: Sven Joachim; +Cc: 643, Emre Sahin, emacs-devel
Sven Joachim <svenjoac@gmx.de> writes:
> On 2008-08-07 20:19 +0200, Chong Yidong wrote:
>
>> Sven Joachim <svenjoac@gmx.de> writes:
>>
>>> The results are funny on my laptop (battery full, online):
>>>
>>> Power N/A, battery Full at (-34.7% load, remaining time)
>>
>> What does
>>
>> M-: (battery-linux-sysfs)
>>
>> return?
>
> ((99 . "3985000") (66 . "Full") (112 . "-34.7") (76 . "N/A"))
What about (from the shell)
cat /sys/class/power_supply/BAT0/uevent
?
^ permalink raw reply [flat|nested] 21+ messages in thread
[parent not found: <87abfo4obc.fsf@stupidchicken.com>]
* bug#643: Battery update
[not found] ` <87abfo4obc.fsf@stupidchicken.com>
@ 2008-08-07 19:45 ` Sven Joachim
[not found] ` <873algfw2d.fsf@gmx.de>
1 sibling, 0 replies; 21+ messages in thread
From: Sven Joachim @ 2008-08-07 19:45 UTC (permalink / raw)
To: Chong Yidong; +Cc: 643, Emre Sahin, emacs-devel
On 2008-08-07 21:28 +0200, Chong Yidong wrote:
> What about (from the shell)
>
> cat /sys/class/power_supply/BAT0/uevent
>
> ?
No such file or directory, but here's /sys/class/power_supply/BAT1/uevent:
PHYSDEVPATH=/devices/LNXSYSTM:00/device:00/PNP0A08:00/device:2c/PNP0C0A:00
PHYSDEVBUS=acpi
PHYSDEVDRIVER=battery
POWER_SUPPLY_NAME=BAT1
POWER_SUPPLY_TYPE=Battery
POWER_SUPPLY_STATUS=Full
POWER_SUPPLY_PRESENT=1
POWER_SUPPLY_TECHNOLOGY=Li-ion
POWER_SUPPLY_VOLTAGE_MIN_DESIGN=10800000
POWER_SUPPLY_VOLTAGE_NOW=12444000
POWER_SUPPLY_CURRENT_NOW=0
POWER_SUPPLY_CHARGE_FULL_DESIGN=4000000
POWER_SUPPLY_CHARGE_FULL=3985000
POWER_SUPPLY_CHARGE_NOW=3985000
POWER_SUPPLY_MODEL_NAME=GC86503SY90
POWER_SUPPLY_MANUFACTURER=SONY
POWER_SUPPLY_SERIAL_NUMBER=
Sven
^ permalink raw reply [flat|nested] 21+ messages in thread
[parent not found: <873algfw2d.fsf@gmx.de>]
* bug#643: Battery update
[not found] ` <873algfw2d.fsf@gmx.de>
@ 2008-08-07 20:32 ` Chong Yidong
[not found] ` <87bq04r2f8.fsf@stupidchicken.com>
1 sibling, 0 replies; 21+ messages in thread
From: Chong Yidong @ 2008-08-07 20:32 UTC (permalink / raw)
To: Sven Joachim; +Cc: 643, Emre Sahin, emacs-devel
Sven Joachim <svenjoac@gmx.de> writes:
>> What about (from the shell)
>>
>> cat /sys/class/power_supply/BAT0/uevent
>
> POWER_SUPPLY_VOLTAGE_NOW=12444000
> POWER_SUPPLY_CURRENT_NOW=0
> POWER_SUPPLY_CHARGE_FULL_DESIGN=4000000
> POWER_SUPPLY_CHARGE_FULL=3985000
> POWER_SUPPLY_CHARGE_NOW=3985000
> POWER_SUPPLY_MODEL_NAME=GC86503SY90
> POWER_SUPPLY_MANUFACTURER=SONY
> POWER_SUPPLY_SERIAL_NUMBER=
Maybe it's a Lisp integer overflow (I'm guessing you're on a 32-bit
machine). Does the following patch give better results?
*** trunk/lisp/battery.el.~1.46.~ 2008-05-06 03:57:26.000000000 -0400
--- trunk/lisp/battery.el 2008-08-07 16:31:34.000000000 -0400
***************
*** 47,52 ****
--- 47,56 ----
((and (eq system-type 'gnu/linux)
(file-directory-p "/proc/acpi/battery"))
'battery-linux-proc-acpi)
+ ((and (eq system-type 'gnu/linux)
+ (file-directory-p "/sys/class/power_supply/")
+ (directory-files "/sys/class/power_supply/" nil "BAT[0-9]$"))
+ 'battery-linux-sysfs)
((and (eq system-type 'darwin)
(condition-case nil
(with-temp-buffer
***************
*** 70,75 ****
--- 74,81 ----
(defcustom battery-echo-area-format
(cond ((eq battery-status-function 'battery-linux-proc-acpi)
"Power %L, battery %B at %r (%p%% load, remaining time %t)")
+ ((eq battery-status-function 'battery-linux-sysfs)
+ "Power %L, battery %B (%p%% load)")
((eq battery-status-function 'battery-pmset)
"%L power, battery %B (%p%% load, remaining time %t)")
(battery-status-function
***************
*** 276,282 ****
(defun battery-linux-proc-acpi ()
"Get ACPI status information from Linux kernel.
! This function works only with the new `/proc/acpi/' format introduced
in Linux version 2.4.20 and 2.6.0.
The following %-sequences are provided:
--- 282,288 ----
(defun battery-linux-proc-acpi ()
"Get ACPI status information from Linux kernel.
! This function works only with the `/proc/acpi/' format introduced
in Linux version 2.4.20 and 2.6.0.
The following %-sequences are provided:
***************
*** 390,395 ****
--- 396,480 ----
"N/A")))))
\f
+ ;;; `/sys/class/power_supply/BATN' interface for Linux.
+
+ (defun battery-linux-sysfs ()
+ "Get ACPI status information from Linux kernel.
+ This function works only with the new `/sys/class/power_supply/BAT'
+ format introduced in Linux version 2.4.25.
+
+ The following %-sequences are provided:
+ %c Current capacity (mAh or mWh)
+ %B Battery status (verbose)
+ %p Battery load percentage
+ %L AC line status (verbose)"
+ (let (charging-state
+ (charge-full 0.0)
+ (charge-now 0.0)
+ (energy-full 0.0)
+ (energy-now 0.0))
+ ;; SysFS provides information about each battery present in the
+ ;; system in a separate subdirectory. We are going to merge the
+ ;; available information together.
+ (with-temp-buffer
+ (dolist (dir (ignore-errors
+ (directory-files
+ "/sys/class/power_supply/" t "BAT[0-9]$")))
+ (erase-buffer)
+ (ignore-errors (insert-file-contents
+ (expand-file-name "uevent" dir)))
+ (when (re-search-forward "POWER_SUPPLY_PRESENT=1$" nil t)
+ (goto-char (point-min))
+ (and (re-search-forward "POWER_SUPPLY_STATUS=\\(.*\\)$" nil t)
+ ;; On most multi-battery systems, most of the time only
+ ;; one battery is "charging"/"discharging", the others
+ ;; are "unknown".
+ (member charging-state '("Unknown" "Full" nil))
+ (setq charging-state (match-string 1)))
+ (let (full-string now-string)
+ ;; Sysfs may list either charge (mAh) or energy (mWh)
+ (cond ((and (re-search-forward
+ "POWER_SUPPLY_CHARGE_FULL=\\([0-9]*\\)$" nil t)
+ (setq full-string (match-string 1))
+ (re-search-forward
+ "POWER_SUPPLY_CHARGE_NOW=\\([0-9]*\\)$" nil t)
+ (setq now-string (match-string 1)))
+ (setq charge-full (+ charge-full
+ (string-to-number full-string))
+ charge-now (+ charge-now
+ (string-to-number now-string))))
+ ((and (re-search-forward
+ "POWER_SUPPLY_ENERGY_FULL=\\([0-9]*\\)$" nil t)
+ (setq full-string (match-string 1))
+ (re-search-forward
+ "POWER_SUPPLY_ENERGY_NOW=\\([0-9]*\\)$" nil t)
+ (setq now-string (match-string 1)))
+ (setq energy-full (+ energy-full
+ (string-to-number full-string))
+ energy-now (+ energy-now
+ (string-to-number now-string)))))))))
+ (list (cons ?c (cond ((or (> charge-full 0) (> charge-now 0))
+ (number-to-string charge-now))
+ ((or (> energy-full 0) (> energy-now 0))
+ (number-to-string energy-now))
+ (t "N/A")))
+ (cons ?B (or charging-state "N/A"))
+ (cons ?p (cond ((> charge-full 0)
+ (format "%.1f"
+ (/ (* 100 charge-now) charge-full)))
+ ((> energy-full 0)
+ (format "%.1f"
+ (/ (* 100 energy-now) energy-full)))
+ (t "N/A")))
+ (cons ?L (if (file-readable-p "/sys/class/power_supply/AC/online")
+ (if (battery-search-for-one-match-in-files
+ "/sys/class/power_supply/AC/online" "1" 0)
+ "AC"
+ "BAT")
+ "N/A")))))
+
+
+ \f
;;; `pmset' interface for Darwin (OS X).
(defun battery-pmset ()
^ permalink raw reply [flat|nested] 21+ messages in thread
[parent not found: <87bq04r2f8.fsf@stupidchicken.com>]
* bug#643: Battery update
[not found] ` <87bq04r2f8.fsf@stupidchicken.com>
@ 2008-08-07 22:24 ` Emre Sahin
[not found] ` <87d4kko450.fsf@leonardo.iesahin.net>
2008-08-08 5:50 ` Sven Joachim
2 siblings, 0 replies; 21+ messages in thread
From: Emre Sahin @ 2008-08-07 22:24 UTC (permalink / raw)
To: Chong Yidong; +Cc: 643, Emre Sahin, Sven Joachim, emacs-devel
Chong Yidong <cyd@stupidchicken.com> writes:
> Sven Joachim <svenjoac@gmx.de> writes:
>
>>> What about (from the shell)
>>>
>>> cat /sys/class/power_supply/BAT0/uevent
>>
>> POWER_SUPPLY_VOLTAGE_NOW=12444000
>> POWER_SUPPLY_CURRENT_NOW=0
>> POWER_SUPPLY_CHARGE_FULL_DESIGN=4000000
>> POWER_SUPPLY_CHARGE_FULL=3985000
>> POWER_SUPPLY_CHARGE_NOW=3985000
>> POWER_SUPPLY_MODEL_NAME=GC86503SY90
>> POWER_SUPPLY_MANUFACTURER=SONY
>> POWER_SUPPLY_SERIAL_NUMBER=
>
> Maybe it's a Lisp integer overflow (I'm guessing you're on a 32-bit
> machine). Does the following patch give better results?
Maybe I did something wrong with diff & patch; this is my first
adventure with them in practice. (Yes, really!)
Message is something like:
Loading /home/iesahin/site-lisp/battery.el (source)...done
setq: Wrong type argument: listp, "/sys/class/power_supply/AC/online"
Emre
--
I. Emre Sahin @ Ankara, Turkey
Software Developer & Consultant @ http://ydyazilim.com
Ph.D. Candidate @ http://cs.bilkent.edu.tr
Blogger, Writer, Poet @ http://emresahin.net
Maybe hears the phone @ +90 532 261 8985
Maybe gtalk (or jabber) @ i.emre.sahin@gmail.com
^ permalink raw reply [flat|nested] 21+ messages in thread
[parent not found: <87d4kko450.fsf@leonardo.iesahin.net>]
* bug#643: Battery update
[not found] ` <87d4kko450.fsf@leonardo.iesahin.net>
@ 2008-08-08 0:10 ` Chong Yidong
[not found] ` <87tzdwmknn.fsf@stupidchicken.com>
1 sibling, 0 replies; 21+ messages in thread
From: Chong Yidong @ 2008-08-08 0:10 UTC (permalink / raw)
To: Emre Sahin; +Cc: 643, Sven Joachim, emacs-devel
Emre Sahin <mail@emresahin.net> writes:
> Maybe I did something wrong with diff & patch; this is my first
> adventure with them in practice. (Yes, really!)
>
> Message is something like:
>
> Loading /home/iesahin/site-lisp/battery.el (source)...done
> setq: Wrong type argument: listp, "/sys/class/power_supply/AC/online"
No, it was a typo in the patch. Could you replace the line
(if (battery-search-for-one-match-in-files
"/sys/class/power_supply/AC/online" "1" 0)
"AC"
on line 471 of the battery.el, with
(if (battery-search-for-one-match-in-files
(list "/sys/class/power_supply/AC/online") "1" 0)
"AC"
and try again?
^ permalink raw reply [flat|nested] 21+ messages in thread
[parent not found: <87tzdwmknn.fsf@stupidchicken.com>]
* bug#643: Battery update
[not found] ` <87tzdwmknn.fsf@stupidchicken.com>
@ 2008-08-08 5:56 ` Sven Joachim
2008-08-08 13:26 ` Emre Sahin
[not found] ` <8763qbocx2.fsf@leonardo.iesahin.net>
2 siblings, 0 replies; 21+ messages in thread
From: Sven Joachim @ 2008-08-08 5:56 UTC (permalink / raw)
To: Chong Yidong; +Cc: 643, Emre Sahin, emacs-devel
On 2008-08-08 02:10 +0200, Chong Yidong wrote:
> (if (battery-search-for-one-match-in-files
> (list "/sys/class/power_supply/AC/online") "1" 0)
> "AC"
FWIW, I don't have a /sys/class/power_supply/AC directory, but there is
/sys/class/power_supply/ACAD. Seems the directory has moved somewhere
between kernel 2.6.22 and 2.6.25, see
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=478937.
Sven
^ permalink raw reply [flat|nested] 21+ messages in thread
* bug#643: Battery update
[not found] ` <87tzdwmknn.fsf@stupidchicken.com>
2008-08-08 5:56 ` Sven Joachim
@ 2008-08-08 13:26 ` Emre Sahin
[not found] ` <8763qbocx2.fsf@leonardo.iesahin.net>
2 siblings, 0 replies; 21+ messages in thread
From: Emre Sahin @ 2008-08-08 13:26 UTC (permalink / raw)
To: Chong Yidong; +Cc: 643, Emre Sahin, Sven Joachim, emacs-devel
Chong Yidong <cyd@stupidchicken.com> writes:
> Emre Sahin <mail@emresahin.net> writes:
>
>> Maybe I did something wrong with diff & patch; this is my first
>> adventure with them in practice. (Yes, really!)
>>
>> Message is something like:
>>
>> Loading /home/iesahin/site-lisp/battery.el (source)...done
>> setq: Wrong type argument: listp, "/sys/class/power_supply/AC/online"
>
> No, it was a typo in the patch. Could you replace the line
>
> (if (battery-search-for-one-match-in-files
> "/sys/class/power_supply/AC/online" "1" 0)
> "AC"
>
> on line 471 of the battery.el, with
>
> (if (battery-search-for-one-match-in-files
> (list "/sys/class/power_supply/AC/online") "1" 0)
> "AC"
>
> and try again?
This looks OK. It fills %p in battery-mode-line-format and gives
an equal value with "acpi -b".
Thank you. I may try to retrieve other (available) information from sysfs
interface by looking your code. I don't know if Sven has anything to
add about interface though.
I think the interface change is thought for multi-battery systems. If battery.el
should support them, battery.el interface should also change I think,
which is, IMHO, not necessary at the moment.
Regards,
Emre
--
I. Emre Sahin @ Ankara, Turkey
Software Developer & Consultant @ http://ydyazilim.com
Ph.D. Candidate @ http://cs.bilkent.edu.tr
Blogger, Writer, Poet @ http://emresahin.net
Maybe hears the phone @ +90 532 261 8985
Maybe gtalk (or jabber) @ i.emre.sahin@gmail.com
^ permalink raw reply [flat|nested] 21+ messages in thread
[parent not found: <8763qbocx2.fsf@leonardo.iesahin.net>]
* bug#643: Battery update
[not found] ` <8763qbocx2.fsf@leonardo.iesahin.net>
@ 2008-08-09 1:02 ` OFFICE ZERO
2008-08-09 1:07 ` OFFICE ZERO
1 sibling, 0 replies; 21+ messages in thread
From: OFFICE ZERO @ 2008-08-09 1:02 UTC (permalink / raw)
To: Emre Sahin, 643
配信不要
----- Original Message -----
From: "Emre Sahin" <i.emre.sahin@gmail.com>
To: "Chong Yidong" <cyd@stupidchicken.com>
Cc: <643@emacsbugs.donarmstrong.com>; "Emre Sahin" <mail@emresahin.net>;
"Sven Joachim" <svenjoac@gmx.de>; <emacs-devel@gnu.org>
Sent: Friday, August 08, 2008 10:26 PM
Subject: bug#643: Battery update
> Chong Yidong <cyd@stupidchicken.com> writes:
>
>> Emre Sahin <mail@emresahin.net> writes:
>>
>>> Maybe I did something wrong with diff & patch; this is my first
>>> adventure with them in practice. (Yes, really!)
>>>
>>> Message is something like:
>>>
>>> Loading /home/iesahin/site-lisp/battery.el (source)...done
>>> setq: Wrong type argument: listp, "/sys/class/power_supply/AC/online"
>>
>> No, it was a typo in the patch. Could you replace the line
>>
>> (if (battery-search-for-one-match-in-files
>> "/sys/class/power_supply/AC/online" "1" 0)
>> "AC"
>>
>> on line 471 of the battery.el, with
>>
>> (if (battery-search-for-one-match-in-files
>> (list "/sys/class/power_supply/AC/online") "1" 0)
>> "AC"
>>
>> and try again?
>
> This looks OK. It fills %p in battery-mode-line-format and gives
> an equal value with "acpi -b".
>
> Thank you. I may try to retrieve other (available) information from sysfs
> interface by looking your code. I don't know if Sven has anything to
> add about interface though.
>
> I think the interface change is thought for multi-battery systems. If
> battery.el
> should support them, battery.el interface should also change I think,
> which is, IMHO, not necessary at the moment.
>
> Regards,
>
> Emre
>
> --
> I. Emre Sahin @ Ankara, Turkey
> Software Developer & Consultant @ http://ydyazilim.com
> Ph.D. Candidate @ http://cs.bilkent.edu.tr
> Blogger, Writer, Poet @ http://emresahin.net
> Maybe hears the phone @ +90 532 261 8985
> Maybe gtalk (or jabber) @ i.emre.sahin@gmail.com
>
>
>
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* bug#643: Battery update
[not found] ` <8763qbocx2.fsf@leonardo.iesahin.net>
2008-08-09 1:02 ` OFFICE ZERO
@ 2008-08-09 1:07 ` OFFICE ZERO
1 sibling, 0 replies; 21+ messages in thread
From: OFFICE ZERO @ 2008-08-09 1:07 UTC (permalink / raw)
To: Emre Sahin, 643
配信不要
----- Original Message -----
From: "Emre Sahin" <i.emre.sahin@gmail.com>
To: "Chong Yidong" <cyd@stupidchicken.com>
Cc: <643@emacsbugs.donarmstrong.com>; "Emre Sahin" <mail@emresahin.net>;
"Sven Joachim" <svenjoac@gmx.de>; <emacs-devel@gnu.org>
Sent: Friday, August 08, 2008 10:26 PM
Subject: bug#643: Battery update
> Chong Yidong <cyd@stupidchicken.com> writes:
>
>> Emre Sahin <mail@emresahin.net> writes:
>>
>>> Maybe I did something wrong with diff & patch; this is my first
>>> adventure with them in practice. (Yes, really!)
>>>
>>> Message is something like:
>>>
>>> Loading /home/iesahin/site-lisp/battery.el (source)...done
>>> setq: Wrong type argument: listp, "/sys/class/power_supply/AC/online"
>>
>> No, it was a typo in the patch. Could you replace the line
>>
>> (if (battery-search-for-one-match-in-files
>> "/sys/class/power_supply/AC/online" "1" 0)
>> "AC"
>>
>> on line 471 of the battery.el, with
>>
>> (if (battery-search-for-one-match-in-files
>> (list "/sys/class/power_supply/AC/online") "1" 0)
>> "AC"
>>
>> and try again?
>
> This looks OK. It fills %p in battery-mode-line-format and gives
> an equal value with "acpi -b".
>
> Thank you. I may try to retrieve other (available) information from sysfs
> interface by looking your code. I don't know if Sven has anything to
> add about interface though.
>
> I think the interface change is thought for multi-battery systems. If
> battery.el
> should support them, battery.el interface should also change I think,
> which is, IMHO, not necessary at the moment.
>
> Regards,
>
> Emre
>
> --
> I. Emre Sahin @ Ankara, Turkey
> Software Developer & Consultant @ http://ydyazilim.com
> Ph.D. Candidate @ http://cs.bilkent.edu.tr
> Blogger, Writer, Poet @ http://emresahin.net
> Maybe hears the phone @ +90 532 261 8985
> Maybe gtalk (or jabber) @ i.emre.sahin@gmail.com
>
>
>
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* bug#643: Battery update
[not found] ` <87bq04r2f8.fsf@stupidchicken.com>
2008-08-07 22:24 ` Emre Sahin
[not found] ` <87d4kko450.fsf@leonardo.iesahin.net>
@ 2008-08-08 5:50 ` Sven Joachim
2 siblings, 0 replies; 21+ messages in thread
From: Sven Joachim @ 2008-08-08 5:50 UTC (permalink / raw)
To: Chong Yidong; +Cc: 643, Emre Sahin, emacs-devel
On 2008-08-07 22:32 +0200, Chong Yidong wrote:
> Maybe it's a Lisp integer overflow (I'm guessing you're on a 32-bit
> machine). Does the following patch give better results?
Yes, that looks better.
Sven
^ permalink raw reply [flat|nested] 21+ messages in thread
[parent not found: <489B3C91.7010605@gmail.com>]
* bug#643: Battery update
[not found] ` <489B3C91.7010605@gmail.com>
@ 2008-08-07 18:54 ` David De La Harpe Golden
[not found] ` <489B44D6.4020706@harpegolden.net>
2008-08-11 0:10 ` T. V. Raman
2 siblings, 0 replies; 21+ messages in thread
From: David De La Harpe Golden @ 2008-08-07 18:54 UTC (permalink / raw)
To: Lennart Borgman (gmail); +Cc: 643, Chong Yidong, Emre Sahin, emacs-devel
Lennart Borgman (gmail) wrote:
> Chong Yidong wrote:
>> Even though it's the feature freeze, I think it's necessary to ensure
>> that battery.el works at least at a basic level.
>
> Just out of curiosity: Why is it necessary that battery.el works? Is not
> this information something that the OS normally gives the user without
> Emacs?
>
not if you're running emacs fullscreen I guess, can't see a tray icon
then...
^ permalink raw reply [flat|nested] 21+ messages in thread
[parent not found: <489B44D6.4020706@harpegolden.net>]
* bug#643: Battery update
[not found] ` <489B44D6.4020706@harpegolden.net>
@ 2008-08-07 21:54 ` Emre Sahin
0 siblings, 0 replies; 21+ messages in thread
From: Emre Sahin @ 2008-08-07 21:54 UTC (permalink / raw)
To: David De La Harpe Golden; +Cc: 643, Chong Yidong, emacs-devel
David De La Harpe Golden <david@harpegolden.net> writes:
> Lennart Borgman (gmail) wrote:
>> Chong Yidong wrote:
>>> Even though it's the feature freeze, I think it's necessary to ensure
>>> that battery.el works at least at a basic level.
>>
>> Just out of curiosity: Why is it necessary that battery.el works? Is not
>> this information something that the OS normally gives the user without
>> Emacs?
>>
>
> not if you're running emacs fullscreen I guess, can't see a tray icon
> then...
>
I'm using ratpoison WM and using Emacs in full screen. (I suggest you
to try ratpoison, stumpwm or xmonad like "tiling wm"s and find "taste
of emacs" in their screen estate management. By the way, stumpwm has
its configuration in Common Lisp, and xmonad in Haskell, if that makes
a difference for you.)
There are no icons or bars or anything around. There is nothing except
Emacs' mode line to show battery information, hence battery.el. :)
Best Regards,
Emre
--
I. Emre Sahin @ Ankara, Turkey
Software Developer & Consultant @ http://ydyazilim.com
Ph.D. Candidate @ http://cs.bilkent.edu.tr
Blogger, Writer, Poet @ http://emresahin.net
Maybe hears the phone @ +90 532 261 8985
Maybe gtalk (or jabber) @ i.emre.sahin@gmail.com
^ permalink raw reply [flat|nested] 21+ messages in thread
* bug#643: Battery update
[not found] ` <489B3C91.7010605@gmail.com>
2008-08-07 18:54 ` David De La Harpe Golden
[not found] ` <489B44D6.4020706@harpegolden.net>
@ 2008-08-11 0:10 ` T. V. Raman
2 siblings, 0 replies; 21+ messages in thread
From: T. V. Raman @ 2008-08-11 0:10 UTC (permalink / raw)
To: lennart.borgman; +Cc: 643, cyd, mail, emacs-devel
Define "OS". The OS is gnu/linux, not gnome or KDE -- those are
user environments. Emacs is also a user environment.
>>>>> "Lennart" == Lennart Borgman (gmail) <lennart.borgman@gmail.com> writes:
Lennart> Chong Yidong wrote:
>> Even though it's the feature freeze, I think it's
>> necessary to ensure that battery.el works at least at a
>> basic level.
Lennart>
Lennart> Just out of curiosity: Why is it necessary that
Lennart> battery.el works? Is not this information something
Lennart> that the OS normally gives the user without Emacs?
Lennart>
Lennart>
--
Best Regards,
--raman
Email: raman@users.sf.net
WWW: http://emacspeak.sf.net/raman/
AIM: emacspeak GTalk: tv.raman.tv@gmail.com
PGP: http://emacspeak.sf.net/raman/raman-almaden.asc
Google: tv+raman
IRC: irc://irc.freenode.net/#emacs
^ permalink raw reply [flat|nested] 21+ messages in thread
* bug#643: Battery update
[not found] <87bq04dbqc.fsf@stupidchicken.com>
` (3 preceding siblings ...)
[not found] ` <489B3C91.7010605@gmail.com>
@ 2008-08-08 17:56 ` Stefan Monnier
[not found] ` <jwv3alfe6jc.fsf-monnier+emacsbugreports@gnu.org>
5 siblings, 0 replies; 21+ messages in thread
From: Stefan Monnier @ 2008-08-08 17:56 UTC (permalink / raw)
To: Chong Yidong; +Cc: 643, Emre Sahin, emacs-devel
> Even though it's the feature freeze, I think it's necessary to ensure
> that battery.el works at least at a basic level. So, here's a patch
Agreed.
> ! This function works only with the new `/proc/acpi/' format introduced
> ! This function works only with the `/proc/acpi/' format introduced
[...]
> + This function works only with the new `/sys/class/power_supply/BAT'
Given the fix to the docstring for proc-acpi, I think we should try and
avoid making the same mistake. I.e. drop the "new".
Stefan
^ permalink raw reply [flat|nested] 21+ messages in thread
[parent not found: <jwv3alfe6jc.fsf-monnier+emacsbugreports@gnu.org>]
* bug#643: Battery update
[not found] ` <jwv3alfe6jc.fsf-monnier+emacsbugreports@gnu.org>
@ 2008-08-09 1:00 ` OFFICE ZERO
2008-08-09 14:13 ` OFFICE ZERO
1 sibling, 0 replies; 21+ messages in thread
From: OFFICE ZERO @ 2008-08-09 1:00 UTC (permalink / raw)
To: Stefan Monnier, 643
配信不要
----- Original Message -----
From: "Stefan Monnier" <monnier@IRO.UMontreal.CA>
To: "Chong Yidong" <cyd@stupidchicken.com>
Cc: <643@emacsbugs.donarmstrong.com>; "Emre Sahin" <mail@emresahin.net>;
<emacs-devel@gnu.org>
Sent: Saturday, August 09, 2008 2:56 AM
Subject: bug#643: Battery update
>> Even though it's the feature freeze, I think it's necessary to ensure
>> that battery.el works at least at a basic level. So, here's a patch
>
> Agreed.
>
>> ! This function works only with the new `/proc/acpi/' format introduced
>> ! This function works only with the `/proc/acpi/' format introduced
> [...]
>> + This function works only with the new `/sys/class/power_supply/BAT'
>
> Given the fix to the docstring for proc-acpi, I think we should try and
> avoid making the same mistake. I.e. drop the "new".
>
>
> Stefan
>
>
>
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* bug#643: Battery update
[not found] ` <jwv3alfe6jc.fsf-monnier+emacsbugreports@gnu.org>
2008-08-09 1:00 ` OFFICE ZERO
@ 2008-08-09 14:13 ` OFFICE ZERO
1 sibling, 0 replies; 21+ messages in thread
From: OFFICE ZERO @ 2008-08-09 14:13 UTC (permalink / raw)
To: Stefan Monnier, 643
Do'nt send me mail !!!
no tkank you!!
----- Original Message -----
From: "Stefan Monnier" <monnier@IRO.UMontreal.CA>
To: "Chong Yidong" <cyd@stupidchicken.com>
Cc: <643@emacsbugs.donarmstrong.com>; "Emre Sahin" <mail@emresahin.net>;
<emacs-devel@gnu.org>
Sent: Saturday, August 09, 2008 2:56 AM
Subject: bug#643: Battery update
>> Even though it's the feature freeze, I think it's necessary to ensure
>> that battery.el works at least at a basic level. So, here's a patch
>
> Agreed.
>
>> ! This function works only with the new `/proc/acpi/' format introduced
>> ! This function works only with the `/proc/acpi/' format introduced
> [...]
>> + This function works only with the new `/sys/class/power_supply/BAT'
>
> Given the fix to the docstring for proc-acpi, I think we should try and
> avoid making the same mistake. I.e. drop the "new".
>
>
> Stefan
>
>
>
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* bug#643: Battery update
@ 2008-08-07 16:35 Chong Yidong
0 siblings, 0 replies; 21+ messages in thread
From: Chong Yidong @ 2008-08-07 16:35 UTC (permalink / raw)
To: emacs-devel; +Cc: 643, Emre Sahin
The Linux kernel developers have deprecated the longstanding /proc/acpi
interface, which breaks battery.el on recent kernels (bug#643 and
bug#660). Now, the battery information is supposed to come through
sysfs.
Even though it's the feature freeze, I think it's necessary to ensure
that battery.el works at least at a basic level. So, here's a patch
that adds primitive sysfs support for battery.el. It doesn't do as much
as before, because AFAICT the new sysfs interface provides less
information than the old acpi interface (go figure).
It's lightly tested. Could someone try this out and see if it does the
right thing?
*** trunk/lisp/battery.el.~1.46.~ 2008-05-06 03:57:26.000000000 -0400
--- trunk/lisp/battery.el 2008-08-07 12:34:45.000000000 -0400
***************
*** 47,52 ****
--- 47,56 ----
((and (eq system-type 'gnu/linux)
(file-directory-p "/proc/acpi/battery"))
'battery-linux-proc-acpi)
+ ((and (eq system-type 'gnu/linux)
+ (file-directory-p "/sys/class/power_supply/")
+ (directory-files "/sys/class/power_supply/" nil "BAT[0-9]$"))
+ 'battery-linux-sysfs)
((and (eq system-type 'darwin)
(condition-case nil
(with-temp-buffer
***************
*** 70,75 ****
--- 74,81 ----
(defcustom battery-echo-area-format
(cond ((eq battery-status-function 'battery-linux-proc-acpi)
"Power %L, battery %B at %r (%p%% load, remaining time %t)")
+ ((eq battery-status-function 'battery-linux-sysfs)
+ "Power %L, battery %B (%p%% load)")
((eq battery-status-function 'battery-pmset)
"%L power, battery %B (%p%% load, remaining time %t)")
(battery-status-function
***************
*** 276,282 ****
(defun battery-linux-proc-acpi ()
"Get ACPI status information from Linux kernel.
! This function works only with the new `/proc/acpi/' format introduced
in Linux version 2.4.20 and 2.6.0.
The following %-sequences are provided:
--- 282,288 ----
(defun battery-linux-proc-acpi ()
"Get ACPI status information from Linux kernel.
! This function works only with the `/proc/acpi/' format introduced
in Linux version 2.4.20 and 2.6.0.
The following %-sequences are provided:
***************
*** 390,395 ****
--- 396,480 ----
"N/A")))))
\f
+ ;;; `/sys/class/power_supply/BATN' interface for Linux.
+
+ (defun battery-linux-sysfs ()
+ "Get ACPI status information from Linux kernel.
+ This function works only with the new `/sys/class/power_supply/BAT'
+ format introduced in Linux version 2.4.25.
+
+ The following %-sequences are provided:
+ %c Current capacity (mAh or mWh)
+ %B Battery status (verbose)
+ %p Battery load percentage
+ %L AC line status (verbose)"
+ (let (charging-state
+ (charge-full 0)
+ (charge-now 0)
+ (energy-full 0)
+ (energy-now 0))
+ ;; SysFS provides information about each battery present in the
+ ;; system in a separate subdirectory. We are going to merge the
+ ;; available information together.
+ (with-temp-buffer
+ (dolist (dir (ignore-errors
+ (directory-files
+ "/sys/class/power_supply/" t "BAT[0-9]$")))
+ (erase-buffer)
+ (ignore-errors (insert-file-contents
+ (expand-file-name "uevent" dir)))
+ (when (re-search-forward "POWER_SUPPLY_PRESENT=1$" nil t)
+ (goto-char (point-min))
+ (and (re-search-forward "POWER_SUPPLY_STATUS=\\(.*\\)$" nil t)
+ ;; On most multi-battery systems, most of the time only
+ ;; one battery is "charging"/"discharging", the others
+ ;; are "unknown".
+ (member charging-state '("Unknown" "Full" nil))
+ (setq charging-state (match-string 1)))
+ (let (full-string now-string)
+ ;; Energy or charge
+ (cond ((and (re-search-forward
+ "POWER_SUPPLY_CHARGE_FULL=\\([0-9]*\\)$" nil t)
+ (setq full-string (match-string 1))
+ (re-search-forward
+ "POWER_SUPPLY_CHARGE_NOW=\\([0-9]*\\)$" nil t)
+ (setq now-string (match-string 1)))
+ (setq charge-full (+ charge-full
+ (string-to-number full-string))
+ charge-now (+ charge-now
+ (string-to-number now-string))))
+ ((and (re-search-forward
+ "POWER_SUPPLY_ENERGY_FULL=\\([0-9]*\\)$" nil t)
+ (setq full-string (match-string 1))
+ (re-search-forward
+ "POWER_SUPPLY_ENERGY_NOW=\\([0-9]*\\)$" nil t)
+ (setq now-string (match-string 1)))
+ (setq energy-full (+ energy-full
+ (string-to-number full-string))
+ energy-now (+ energy-now
+ (string-to-number now-string)))))))))
+ (list (cons ?c (cond ((or (> charge-full 0) (> charge-now 0))
+ (number-to-string charge-now))
+ ((or (> energy-full 0) (> energy-now 0))
+ (number-to-string energy-now))
+ (t "N/A")))
+ (cons ?B (or charging-state "N/A"))
+ (cons ?p (cond ((> charge-full 0)
+ (format "%.1f"
+ (/ (* 100 charge-now) (float charge-full))))
+ ((> energy-full 0)
+ (format "%.1f"
+ (/ (* 100 energy-now) (float energy-full))))
+ (t "N/A")))
+ (cons ?L (if (file-readable-p "/sys/class/power_supply/AC/online")
+ (if (battery-search-for-one-match-in-files
+ "/sys/class/power_supply/AC/online" "1" 0)
+ "AC"
+ "BAT")
+ "N/A")))))
+
+
+ \f
;;; `pmset' interface for Darwin (OS X).
(defun battery-pmset ()
^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2008-08-11 0:10 UTC | newest]
Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <87bq04dbqc.fsf@stupidchicken.com>
2008-08-07 18:09 ` bug#643: Battery update Sven Joachim
2008-08-07 18:18 ` Lennart Borgman (gmail)
[not found] ` <87ej50g0ib.fsf@gmx.de>
2008-08-07 18:19 ` Chong Yidong
[not found] ` <87bq048z7t.fsf@stupidchicken.com>
2008-08-07 19:11 ` Sven Joachim
[not found] ` <878wv8fxmr.fsf@gmx.de>
2008-08-07 19:28 ` Chong Yidong
[not found] ` <87abfo4obc.fsf@stupidchicken.com>
2008-08-07 19:45 ` Sven Joachim
[not found] ` <873algfw2d.fsf@gmx.de>
2008-08-07 20:32 ` Chong Yidong
[not found] ` <87bq04r2f8.fsf@stupidchicken.com>
2008-08-07 22:24 ` Emre Sahin
[not found] ` <87d4kko450.fsf@leonardo.iesahin.net>
2008-08-08 0:10 ` Chong Yidong
[not found] ` <87tzdwmknn.fsf@stupidchicken.com>
2008-08-08 5:56 ` Sven Joachim
2008-08-08 13:26 ` Emre Sahin
[not found] ` <8763qbocx2.fsf@leonardo.iesahin.net>
2008-08-09 1:02 ` OFFICE ZERO
2008-08-09 1:07 ` OFFICE ZERO
2008-08-08 5:50 ` Sven Joachim
[not found] ` <489B3C91.7010605@gmail.com>
2008-08-07 18:54 ` David De La Harpe Golden
[not found] ` <489B44D6.4020706@harpegolden.net>
2008-08-07 21:54 ` Emre Sahin
2008-08-11 0:10 ` T. V. Raman
2008-08-08 17:56 ` Stefan Monnier
[not found] ` <jwv3alfe6jc.fsf-monnier+emacsbugreports@gnu.org>
2008-08-09 1:00 ` OFFICE ZERO
2008-08-09 14:13 ` OFFICE ZERO
2008-08-07 16:35 Chong Yidong
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).