Subject: display-battery-mode
From: Juri Linkov <[email-masked]>
To: [email-masked]
Date: Wed, 24 Aug 2011 21:12:08 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

When ACPI is turned off with `acpi=off' after booting the Linux kernel
`M-x display-battery-mode RET' fails with:

Debugger entered--Lisp error: (wrong-type-argument stringp nil)
  read-from-string(nil)
  battery-update()
  display-battery-mode(toggle)
  call-interactively(display-battery-mode t nil)
  execute-extended-command(nil)
  call-interactively(execute-extended-command nil nil)

whereas `M-x battery RET' displays a polite message "Battery status not available".

This patch fixes `display-battery-mode' to display the same message when
`battery-status-function' is nil.

I don't know if it's desirable to force turning off this mode and to
reset the value of `display-battery-mode' to nil in this case.
But at least, the message is informative with this patch:

=== modified file 'lisp/battery.el'
--- lisp/battery.el	2011-06-27 08:04:55 +0000
+++ lisp/battery.el	2011-08-24 18:11:15 +0000
@@ -173,13 +173,15 @@ (define-minor-mode display-battery-mode
   (setq battery-mode-line-string "")
   (or global-mode-string (setq global-mode-string '("")))
   (and battery-update-timer (cancel-timer battery-update-timer))
-  (if (not display-battery-mode)
-      (setq global-mode-string
-	    (delq 'battery-mode-line-string global-mode-string))
-    (add-to-list 'global-mode-string 'battery-mode-line-string t)
-    (setq battery-update-timer (run-at-time nil battery-update-interval
-					    'battery-update-handler))
-    (battery-update)))
+  (if (and battery-status-function battery-mode-line-format)
+      (if (not display-battery-mode)
+	  (setq global-mode-string
+		(delq 'battery-mode-line-string global-mode-string))
+	(add-to-list 'global-mode-string 'battery-mode-line-string t)
+	(setq battery-update-timer (run-at-time nil battery-update-interval
+						'battery-update-handler))
+	(battery-update))
+    (message "Battery status not available")))
 
 (defun battery-update-handler ()
   (battery-update)