Increment c-version to 5.32.2.
[bpt/emacs.git] / lisp / battery.el
index 9afe9de..3b245ed 100644 (file)
@@ -102,6 +102,11 @@ string are substituted as defined by the current value of the variable
   "String to display in the mode line.")
 ;;;###autoload (put 'battery-mode-line-string 'risky-local-variable t)
 
+(defcustom battery-mode-line-limit 100
+  "Percentage of full battery load below which display battery status"
+  :type 'integer
+  :group 'battery)
+
 (defcustom battery-mode-line-format
   (cond ((eq battery-status-function 'battery-linux-proc-acpi)
         "[%b%p%%,%d°C]")
@@ -159,22 +164,29 @@ The text being displayed in the echo area is controlled by the variables
 
 ;;;###autoload
 (define-minor-mode display-battery-mode
-  "Display battery status information in the mode line.
-The text being displayed in the mode line is controlled by the variables
+  "Toggle battery status display in mode line (Display Battery mode).
+With a prefix argument ARG, enable Display Battery mode if ARG is
+positive, and disable it otherwise.  If called from Lisp, enable
+the mode if ARG is omitted or nil.
+
+The text displayed in the mode line is controlled by
 `battery-mode-line-format' and `battery-status-function'.
-The mode line will be updated automatically every `battery-update-interval'
+The mode line is be updated every `battery-update-interval'
 seconds."
   :global t :group 'battery
   (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")
+    (setq display-battery-mode nil)))
 
 (defun battery-update-handler ()
   (battery-update)
@@ -182,16 +194,21 @@ seconds."
 
 (defun battery-update ()
   "Update battery status information in the mode line."
-  (setq battery-mode-line-string
-       (propertize (if (and battery-mode-line-format
-                            battery-status-function)
-                       (battery-format
-                        battery-mode-line-format
-                        (funcall battery-status-function))
-                     "")
-                   'help-echo "Battery status information"))
+  (let ((data (and battery-status-function (funcall battery-status-function))))
+    (setq battery-mode-line-string
+         (propertize (if (and battery-mode-line-format
+                              (<= (car (read-from-string (cdr (assq ?p data))))
+                                  battery-mode-line-limit))
+                         (battery-format
+                          battery-mode-line-format
+                          data)
+                       "")
+                     'face
+                     (and (<= (car (read-from-string (cdr (assq ?p data))))
+                                  battery-load-critical)
+                          'error)
+                     'help-echo "Battery status information")))
   (force-mode-line-update))
-
 \f
 ;;; `/proc/apm' interface for Linux.