Mercurial > emacs
annotate lisp/battery.el @ 88212:d78deb813644
Updated copyright year.
author | Alex Schroeder <alex@gnu.org> |
---|---|
date | Wed, 18 Jan 2006 22:15:21 +0000 |
parents | d7ddb3e565de |
children |
rev | line source |
---|---|
38436
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
38292
diff
changeset
|
1 ;;; battery.el --- display battery status information |
18388 | 2 |
88155 | 3 ;; Copyright (C) 1997, 1998, 2000, 2001, 2002, 2003, 2004, |
4 ;; 2005 Free Software Foundation, Inc. | |
18388 | 5 |
30110
23cb074f9d88
Change author's mail address.
Gerd Moellmann <gerd@gnu.org>
parents:
26828
diff
changeset
|
6 ;; Author: Ralph Schleicher <rs@nunatak.allgaeu.org> |
20972
9dff083ee7a9
(battery-linux-proc-apm-regexp): Load percentage
Karl Heuer <kwzh@gnu.org>
parents:
18685
diff
changeset
|
7 ;; Keywords: hardware |
18388 | 8 |
18685
4f3350c88e6c
Fix copyright and copying permissions.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
9 ;; This file is part of GNU Emacs. |
18388 | 10 |
18685
4f3350c88e6c
Fix copyright and copying permissions.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
11 ;; GNU Emacs is free software; you can redistribute it and/or modify |
18388 | 12 ;; it under the terms of the GNU General Public License as published by |
13 ;; the Free Software Foundation; either version 2, or (at your option) | |
14 ;; any later version. | |
15 | |
18685
4f3350c88e6c
Fix copyright and copying permissions.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
16 ;; GNU Emacs is distributed in the hope that it will be useful, |
18388 | 17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
20 | |
21 ;; You should have received a copy of the GNU General Public License | |
18685
4f3350c88e6c
Fix copyright and copying permissions.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
88155 | 23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
24 ;; Boston, MA 02110-1301, USA. | |
18388 | 25 |
26 ;;; Commentary: | |
27 | |
88155 | 28 ;; There is at present support for GNU/Linux and OS X. This library |
29 ;; supports both the `/proc/apm' file format of Linux version 1.3.58 | |
30 ;; or newer and the `/proc/acpi/' directory structure of Linux 2.4.20 | |
31 ;; and 2.6. Darwin (OS X) is supported by using the `pmset' program. | |
18388 | 32 |
33 ;;; Code: | |
34 | |
35 (require 'timer) | |
88155 | 36 (eval-when-compile (require 'cl)) |
18388 | 37 |
38 | |
21088 | 39 (defgroup battery nil |
40 "Display battery status information." | |
41 :prefix "battery-" | |
42 :group 'hardware) | |
43 | |
44 (defcustom battery-status-function | |
18388 | 45 (cond ((and (eq system-type 'gnu/linux) |
46 (file-readable-p "/proc/apm")) | |
88155 | 47 'battery-linux-proc-apm) |
48 ((and (eq system-type 'gnu/linux) | |
49 (file-directory-p "/proc/acpi/battery")) | |
50 'battery-linux-proc-acpi) | |
51 ((and (eq system-type 'darwin) | |
52 (condition-case nil | |
53 (with-temp-buffer | |
54 (and (eq (call-process "pmset" nil t nil "-g" "ps") 0) | |
55 (> (buffer-size) 0))) | |
56 (error nil))) | |
57 'battery-pmset)) | |
18388 | 58 "*Function for getting battery status information. |
36090
9ed7c3f74e35
(battery-status-function): Fix doc, :type.
Dave Love <fx@gnu.org>
parents:
32356
diff
changeset
|
59 The function has to return an alist of conversion definitions. |
9ed7c3f74e35
(battery-status-function): Fix doc, :type.
Dave Love <fx@gnu.org>
parents:
32356
diff
changeset
|
60 Its cons cells are of the form |
18388 | 61 |
62 (CONVERSION . REPLACEMENT-TEXT) | |
63 | |
64 CONVERSION is the character code of a \"conversion specification\" | |
21088 | 65 introduced by a `%' character in a control string." |
36090
9ed7c3f74e35
(battery-status-function): Fix doc, :type.
Dave Love <fx@gnu.org>
parents:
32356
diff
changeset
|
66 :type '(choice (const nil) function) |
21088 | 67 :group 'battery) |
18388 | 68 |
21088 | 69 (defcustom battery-echo-area-format |
18388 | 70 (cond ((eq battery-status-function 'battery-linux-proc-apm) |
88155 | 71 "Power %L, battery %B (%p%% load, remaining time %t)") |
72 ((eq battery-status-function 'battery-linux-proc-acpi) | |
73 "Power %L, battery %B at %r (%p%% load, remaining time %t)") | |
74 ((eq battery-status-function 'battery-pmset) | |
75 "%L power, battery %B (%p%% load, remaining time %t)")) | |
18388 | 76 "*Control string formatting the string to display in the echo area. |
77 Ordinary characters in the control string are printed as-is, while | |
78 conversion specifications introduced by a `%' character in the control | |
79 string are substituted as defined by the current value of the variable | |
21088 | 80 `battery-status-function'." |
81 :type '(choice string (const nil)) | |
82 :group 'battery) | |
18388 | 83 |
84 (defvar battery-mode-line-string nil | |
85 "String to display in the mode line.") | |
88155 | 86 ;;;###autoload (put 'battery-mode-line-string 'risky-local-variable t) |
18388 | 87 |
21088 | 88 (defcustom battery-mode-line-format |
18388 | 89 (cond ((eq battery-status-function 'battery-linux-proc-apm) |
88155 | 90 "[%b%p%%]") |
91 ((eq battery-status-function 'battery-linux-proc-acpi) | |
92 "[%b%p%%,%d°C]") | |
93 ((eq battery-status-function 'battery-pmset) | |
94 "[%b%p%%]")) | |
18388 | 95 "*Control string formatting the string to display in the mode line. |
96 Ordinary characters in the control string are printed as-is, while | |
97 conversion specifications introduced by a `%' character in the control | |
98 string are substituted as defined by the current value of the variable | |
21088 | 99 `battery-status-function'." |
100 :type '(choice string (const nil)) | |
101 :group 'battery) | |
18388 | 102 |
21088 | 103 (defcustom battery-update-interval 60 |
104 "*Seconds after which the battery status will be updated." | |
105 :type 'integer | |
106 :group 'battery) | |
18388 | 107 |
88155 | 108 (defcustom battery-load-low 25 |
109 "*Upper bound of low battery load percentage. | |
110 A battery load percentage below this number is considered low." | |
111 :type 'integer | |
112 :group 'battery) | |
113 | |
114 (defcustom battery-load-critical 10 | |
115 "*Upper bound of critical battery load percentage. | |
116 A battery load percentage below this number is considered critical." | |
117 :type 'integer | |
118 :group 'battery) | |
119 | |
18388 | 120 (defvar battery-update-timer nil |
121 "Interval timer object.") | |
122 | |
21076
dc82196eac58
Fixed spelling of `autoload' magic cookies.
Richard M. Stallman <rms@gnu.org>
parents:
20972
diff
changeset
|
123 ;;;###autoload |
18388 | 124 (defun battery () |
125 "Display battery status information in the echo area. | |
26828 | 126 The text being displayed in the echo area is controlled by the variables |
18388 | 127 `battery-echo-area-format' and `battery-status-function'." |
128 (interactive) | |
129 (message "%s" (if (and battery-echo-area-format battery-status-function) | |
130 (battery-format battery-echo-area-format | |
131 (funcall battery-status-function)) | |
132 "Battery status not available"))) | |
133 | |
21076
dc82196eac58
Fixed spelling of `autoload' magic cookies.
Richard M. Stallman <rms@gnu.org>
parents:
20972
diff
changeset
|
134 ;;;###autoload |
88155 | 135 (define-minor-mode display-battery-mode |
18388 | 136 "Display battery status information in the mode line. |
32346
fa3f5e8f6201
(display-battery): Doc spelling fix.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
30110
diff
changeset
|
137 The text being displayed in the mode line is controlled by the variables |
18388 | 138 `battery-mode-line-format' and `battery-status-function'. |
139 The mode line will be updated automatically every `battery-update-interval' | |
140 seconds." | |
88155 | 141 :global t :group 'battery |
18388 | 142 (setq battery-mode-line-string "") |
143 (or global-mode-string (setq global-mode-string '(""))) | |
144 (and battery-update-timer (cancel-timer battery-update-timer)) | |
88155 | 145 (if (not display-battery-mode) |
146 (setq global-mode-string | |
147 (delq 'battery-mode-line-string global-mode-string)) | |
148 (add-to-list 'global-mode-string 'battery-mode-line-string t) | |
149 (setq battery-update-timer (run-at-time nil battery-update-interval | |
150 'battery-update-handler)) | |
151 (battery-update))) | |
18388 | 152 |
153 (defun battery-update-handler () | |
154 (battery-update) | |
155 (sit-for 0)) | |
156 | |
157 (defun battery-update () | |
158 "Update battery status information in the mode line." | |
88155 | 159 (setq battery-mode-line-string |
160 (propertize (if (and battery-mode-line-format | |
161 battery-status-function) | |
162 (battery-format | |
163 battery-mode-line-format | |
164 (funcall battery-status-function)) | |
165 "") | |
166 'help-echo "Battery status information")) | |
18388 | 167 (force-mode-line-update)) |
168 | |
169 | |
170 ;;; `/proc/apm' interface for Linux. | |
171 | |
172 (defconst battery-linux-proc-apm-regexp | |
173 (concat "^\\([^ ]+\\)" ; Driver version. | |
174 " \\([^ ]+\\)" ; APM BIOS version. | |
175 " 0x\\([0-9a-f]+\\)" ; APM BIOS flags. | |
176 " 0x\\([0-9a-f]+\\)" ; AC line status. | |
177 " 0x\\([0-9a-f]+\\)" ; Battery status. | |
178 " 0x\\([0-9a-f]+\\)" ; Battery flags. | |
20972
9dff083ee7a9
(battery-linux-proc-apm-regexp): Load percentage
Karl Heuer <kwzh@gnu.org>
parents:
18685
diff
changeset
|
179 " \\(-?[0-9]+\\)%" ; Load percentage. |
9dff083ee7a9
(battery-linux-proc-apm-regexp): Load percentage
Karl Heuer <kwzh@gnu.org>
parents:
18685
diff
changeset
|
180 " \\(-?[0-9]+\\)" ; Remaining time. |
18388 | 181 " \\(.*\\)" ; Time unit. |
182 "$") | |
183 "Regular expression matching contents of `/proc/apm'.") | |
184 | |
185 (defun battery-linux-proc-apm () | |
186 "Get APM status information from Linux kernel. | |
187 This function works only with the new `/proc/apm' format introduced | |
188 in Linux version 1.3.58. | |
189 | |
190 The following %-sequences are provided: | |
191 %v Linux driver version | |
192 %V APM BIOS version | |
193 %I APM BIOS status (verbose) | |
194 %L AC line status (verbose) | |
195 %B Battery status (verbose) | |
196 %b Battery status, empty means high, `-' means low, | |
197 `!' means critical, and `+' means charging | |
88155 | 198 %p Battery load percentage |
18388 | 199 %s Remaining time in seconds |
200 %m Remaining time in minutes | |
201 %h Remaining time in hours | |
202 %t Remaining time in the form `h:min'" | |
203 (let (driver-version bios-version bios-interface line-status | |
204 battery-status battery-status-symbol load-percentage | |
88155 | 205 seconds minutes hours remaining-time tem) |
206 (with-temp-buffer | |
207 (ignore-errors (insert-file-contents "/proc/apm")) | |
208 (when (re-search-forward battery-linux-proc-apm-regexp) | |
209 (setq driver-version (match-string 1)) | |
210 (setq bios-version (match-string 2)) | |
211 (setq tem (string-to-number (match-string 3) 16)) | |
212 (if (not (logand tem 2)) | |
213 (setq bios-interface "not supported") | |
214 (setq bios-interface "enabled") | |
215 (cond ((logand tem 16) (setq bios-interface "disabled")) | |
216 ((logand tem 32) (setq bios-interface "disengaged"))) | |
217 (setq tem (string-to-number (match-string 4) 16)) | |
218 (cond ((= tem 0) (setq line-status "off-line")) | |
219 ((= tem 1) (setq line-status "on-line")) | |
220 ((= tem 2) (setq line-status "on backup"))) | |
221 (setq tem (string-to-number (match-string 6) 16)) | |
222 (if (= tem 255) | |
223 (setq battery-status "N/A") | |
224 (setq tem (string-to-number (match-string 5) 16)) | |
225 (cond ((= tem 0) (setq battery-status "high" | |
226 battery-status-symbol "")) | |
227 ((= tem 1) (setq battery-status "low" | |
228 battery-status-symbol "-")) | |
229 ((= tem 2) (setq battery-status "critical" | |
230 battery-status-symbol "!")) | |
231 ((= tem 3) (setq battery-status "charging" | |
232 battery-status-symbol "+"))) | |
233 (setq load-percentage (match-string 7)) | |
234 (setq seconds (string-to-number (match-string 8))) | |
235 (and (string-equal (match-string 9) "min") | |
236 (setq seconds (* 60 seconds))) | |
237 (setq minutes (/ seconds 60) | |
238 hours (/ seconds 3600)) | |
239 (setq remaining-time | |
240 (format "%d:%02d" hours (- minutes (* 60 hours)))))))) | |
20972
9dff083ee7a9
(battery-linux-proc-apm-regexp): Load percentage
Karl Heuer <kwzh@gnu.org>
parents:
18685
diff
changeset
|
241 (list (cons ?v (or driver-version "N/A")) |
9dff083ee7a9
(battery-linux-proc-apm-regexp): Load percentage
Karl Heuer <kwzh@gnu.org>
parents:
18685
diff
changeset
|
242 (cons ?V (or bios-version "N/A")) |
9dff083ee7a9
(battery-linux-proc-apm-regexp): Load percentage
Karl Heuer <kwzh@gnu.org>
parents:
18685
diff
changeset
|
243 (cons ?I (or bios-interface "N/A")) |
9dff083ee7a9
(battery-linux-proc-apm-regexp): Load percentage
Karl Heuer <kwzh@gnu.org>
parents:
18685
diff
changeset
|
244 (cons ?L (or line-status "N/A")) |
9dff083ee7a9
(battery-linux-proc-apm-regexp): Load percentage
Karl Heuer <kwzh@gnu.org>
parents:
18685
diff
changeset
|
245 (cons ?B (or battery-status "N/A")) |
9dff083ee7a9
(battery-linux-proc-apm-regexp): Load percentage
Karl Heuer <kwzh@gnu.org>
parents:
18685
diff
changeset
|
246 (cons ?b (or battery-status-symbol "")) |
9dff083ee7a9
(battery-linux-proc-apm-regexp): Load percentage
Karl Heuer <kwzh@gnu.org>
parents:
18685
diff
changeset
|
247 (cons ?p (or load-percentage "N/A")) |
9dff083ee7a9
(battery-linux-proc-apm-regexp): Load percentage
Karl Heuer <kwzh@gnu.org>
parents:
18685
diff
changeset
|
248 (cons ?s (or (and seconds (number-to-string seconds)) "N/A")) |
9dff083ee7a9
(battery-linux-proc-apm-regexp): Load percentage
Karl Heuer <kwzh@gnu.org>
parents:
18685
diff
changeset
|
249 (cons ?m (or (and minutes (number-to-string minutes)) "N/A")) |
9dff083ee7a9
(battery-linux-proc-apm-regexp): Load percentage
Karl Heuer <kwzh@gnu.org>
parents:
18685
diff
changeset
|
250 (cons ?h (or (and hours (number-to-string hours)) "N/A")) |
9dff083ee7a9
(battery-linux-proc-apm-regexp): Load percentage
Karl Heuer <kwzh@gnu.org>
parents:
18685
diff
changeset
|
251 (cons ?t (or remaining-time "N/A"))))) |
18388 | 252 |
253 | |
88155 | 254 ;;; `/proc/acpi/' interface for Linux. |
255 | |
256 (defun battery-linux-proc-acpi () | |
257 "Get ACPI status information from Linux kernel. | |
258 This function works only with the new `/proc/acpi/' format introduced | |
259 in Linux version 2.4.20 and 2.6.0. | |
260 | |
261 The following %-sequences are provided: | |
262 %c Current capacity (mAh) | |
263 %r Current rate | |
264 %B Battery status (verbose) | |
265 %b Battery status, empty means high, `-' means low, | |
266 `!' means critical, and `+' means charging | |
267 %d Temperature (in degrees Celsius) | |
268 %L AC line status (verbose) | |
269 %p Battery load percentage | |
270 %m Remaining time in minutes | |
271 %h Remaining time in hours | |
272 %t Remaining time in the form `h:min'" | |
273 (let ((design-capacity 0) | |
274 (warn 0) | |
275 (low 0) | |
276 capacity rate rate-type charging-state minutes hours) | |
277 ;; ACPI provides information about each battery present in the system in | |
278 ;; a separate subdirectory. We are going to merge the available | |
279 ;; information together since displaying for a variable amount of | |
280 ;; batteries seems overkill for format-strings. | |
281 (with-temp-buffer | |
282 (dolist (dir (ignore-errors (directory-files "/proc/acpi/battery/" | |
283 t "\\`[^.]"))) | |
284 (erase-buffer) | |
285 (ignore-errors (insert-file-contents (expand-file-name "state" dir))) | |
286 (when (re-search-forward "present: +yes$" nil t) | |
287 (and (re-search-forward "charging state: +\\(.*\\)$" nil t) | |
288 (member charging-state '("unknown" nil)) | |
289 ;; On most multi-battery systems, most of the time only one | |
290 ;; battery is "charging"/"discharging", the others are | |
291 ;; "unknown". | |
292 (setq charging-state (match-string 1))) | |
293 (when (re-search-forward "present rate: +\\([0-9]+\\) \\(m[AW]\\)$" | |
294 nil t) | |
295 (setq rate (+ (or rate 0) (string-to-number (match-string 1))) | |
296 rate-type (or (and rate-type | |
297 (if (string= rate-type (match-string 2)) | |
298 rate-type | |
299 (error | |
300 "Inconsistent rate types (%s vs. %s)" | |
301 rate-type (match-string 2)))) | |
302 (match-string 2)))) | |
303 (when (re-search-forward "remaining capacity: +\\([0-9]+\\) m[AW]h$" | |
304 nil t) | |
305 (setq capacity | |
306 (+ (or capacity 0) (string-to-number (match-string 1)))))) | |
307 (goto-char (point-max)) | |
308 (ignore-errors (insert-file-contents (expand-file-name "info" dir))) | |
309 (when (re-search-forward "present: +yes$" nil t) | |
310 (when (re-search-forward "design capacity: +\\([0-9]+\\) m[AW]h$" | |
311 nil t) | |
312 (incf design-capacity (string-to-number (match-string 1)))) | |
313 (when (re-search-forward | |
314 "design capacity warning: +\\([0-9]+\\) m[AW]h$" nil t) | |
315 (incf warn (string-to-number (match-string 1)))) | |
316 (when (re-search-forward "design capacity low: +\\([0-9]+\\) m[AW]h$" | |
317 nil t) | |
318 (incf low (string-to-number (match-string 1))))))) | |
319 (and capacity rate | |
320 (setq minutes (if (zerop rate) 0 | |
321 (floor (* (/ (float (if (string= charging-state | |
322 "charging") | |
323 (- design-capacity capacity) | |
324 capacity)) rate) 60))) | |
325 hours (/ minutes 60))) | |
326 (list (cons ?c (or (and capacity (number-to-string capacity)) "N/A")) | |
327 (cons ?L (or (when (file-exists-p "/proc/acpi/ac_adapter/AC/state") | |
328 (with-temp-buffer | |
329 (insert-file-contents | |
330 "/proc/acpi/ac_adapter/AC/state") | |
331 (when (re-search-forward "state: +\\(.*\\)$" nil t) | |
332 (match-string 1)))) | |
333 "N/A")) | |
334 (cons ?d (or (when (file-exists-p | |
335 "/proc/acpi/thermal_zone/THRM/temperature") | |
336 (with-temp-buffer | |
337 (insert-file-contents | |
338 "/proc/acpi/thermal_zone/THRM/temperature") | |
339 (when (re-search-forward | |
340 "temperature: +\\([0-9]+\\) C$" nil t) | |
341 (match-string 1)))) | |
342 (when (file-exists-p | |
343 "/proc/acpi/thermal_zone/THM/temperature") | |
344 (with-temp-buffer | |
345 (insert-file-contents | |
346 "/proc/acpi/thermal_zone/THM/temperature") | |
347 (when (re-search-forward | |
348 "temperature: +\\([0-9]+\\) C$" nil t) | |
349 (match-string 1)))) | |
350 (when (file-exists-p | |
351 "/proc/acpi/thermal_zone/THM0/temperature") | |
352 (with-temp-buffer | |
353 (insert-file-contents | |
354 "/proc/acpi/thermal_zone/THM0/temperature") | |
355 (when (re-search-forward | |
356 "temperature: +\\([0-9]+\\) C$" nil t) | |
357 (match-string 1)))) | |
358 "N/A")) | |
359 (cons ?r (or (and rate (concat (number-to-string rate) " " | |
360 rate-type)) "N/A")) | |
361 (cons ?B (or charging-state "N/A")) | |
362 (cons ?b (or (and (string= charging-state "charging") "+") | |
363 (and (< capacity low) "!") | |
364 (and (< capacity warn) "-") | |
365 "")) | |
366 (cons ?h (or (and hours (number-to-string hours)) "N/A")) | |
367 (cons ?m (or (and minutes (number-to-string minutes)) "N/A")) | |
368 (cons ?t (or (and minutes | |
369 (format "%d:%02d" hours (- minutes (* 60 hours)))) | |
370 "N/A")) | |
371 (cons ?p (or (and design-capacity capacity | |
372 (number-to-string | |
373 (floor (/ capacity | |
374 (/ (float design-capacity) 100))))) | |
375 "N/A"))))) | |
376 | |
377 | |
378 ;;; `pmset' interface for Darwin (OS X). | |
379 | |
380 (defun battery-pmset () | |
381 "Get battery status information using `pmset'. | |
382 | |
383 The following %-sequences are provided: | |
384 %L Power source (verbose) | |
385 %B Battery status (verbose) | |
386 %b Battery status, empty means high, `-' means low, | |
387 `!' means critical, and `+' means charging | |
388 %p Battery load percentage | |
389 %h Remaining time in hours | |
390 %m Remaining time in minutes | |
391 %t Remaining time in the form `h:min'" | |
392 (let (power-source load-percentage battery-status battery-status-symbol | |
393 remaining-time hours minutes) | |
394 (with-temp-buffer | |
395 (ignore-errors (call-process "pmset" nil t nil "-g" "ps")) | |
396 (goto-char (point-min)) | |
397 (when (re-search-forward "Currentl?y drawing from '\\(AC\\|Battery\\) Power'" nil t) | |
398 (setq power-source (match-string 1)) | |
399 (when (re-search-forward "^ -InternalBattery-0[ \t]+" nil t) | |
400 (when (looking-at "\\([0-9]\\{1,3\\}\\)%") | |
401 (setq load-percentage (match-string 1)) | |
402 (goto-char (match-end 0)) | |
403 (cond ((looking-at "; charging") | |
404 (setq battery-status "charging" | |
405 battery-status-symbol "+")) | |
406 ((< (string-to-number load-percentage) battery-load-low) | |
407 (setq battery-status "low" | |
408 battery-status-symbol "-")) | |
409 ((< (string-to-number load-percentage) battery-load-critical) | |
410 (setq battery-status "critical" | |
411 battery-status-symbol "!")) | |
412 (t | |
413 (setq battery-status "high" | |
414 battery-status-symbol ""))) | |
415 (when (re-search-forward "\\(\\([0-9]+\\):\\([0-9]+\\)\\) remaining" nil t) | |
416 (setq remaining-time (match-string 1)) | |
417 (let ((h (string-to-number (match-string 2))) | |
418 (m (string-to-number (match-string 3)))) | |
419 (setq hours (number-to-string (+ h (if (< m 30) 0 1))) | |
420 minutes (number-to-string (+ (* h 60) m))))))))) | |
421 (list (cons ?L (or power-source "N/A")) | |
422 (cons ?p (or load-percentage "N/A")) | |
423 (cons ?B (or battery-status "N/A")) | |
424 (cons ?b (or battery-status-symbol "")) | |
425 (cons ?h (or hours "N/A")) | |
426 (cons ?m (or minutes "N/A")) | |
427 (cons ?t (or remaining-time "N/A"))))) | |
428 | |
429 | |
18388 | 430 ;;; Private functions. |
431 | |
432 (defun battery-format (format alist) | |
433 "Substitute %-sequences in FORMAT." | |
88155 | 434 (replace-regexp-in-string |
435 "%." | |
436 (lambda (str) | |
437 (let ((char (aref str 1))) | |
438 (if (eq char ?%) "%" | |
439 (or (cdr (assoc char alist)) "")))) | |
440 format t t)) | |
18388 | 441 |
442 | |
443 (provide 'battery) | |
444 | |
88155 | 445 ;; arch-tag: 65916f50-4754-4b6b-ac21-0b510f545a37 |
18388 | 446 ;;; battery.el ends here |