57 lines
1.6 KiB
Scheme
57 lines
1.6 KiB
Scheme
|
(define-module (importers battery)
|
||
|
#:use-module (ice-9 popen)
|
||
|
#:use-module (ice-9 rdelim)
|
||
|
#:use-module (ice-9 textual-ports)
|
||
|
;; #:use-module (ice-9 format)
|
||
|
#:use-module (srfi srfi-19) ; string/date
|
||
|
#:use-module (org format)
|
||
|
#:use-module (srfi srfi-1)
|
||
|
#:export (*battery-path*
|
||
|
get-battery
|
||
|
battery->org))
|
||
|
;; Depends on ubattery
|
||
|
;; use "ubattery --enumerate" to list batteries
|
||
|
|
||
|
(define *battery-path* "")
|
||
|
|
||
|
(define (get-battery battery-path)
|
||
|
(let* ((port
|
||
|
(open-input-pipe
|
||
|
(string-join `("upower" "--dump" ,battery-path) " ")))
|
||
|
(str (get-string-all port)))
|
||
|
(close-pipe port)
|
||
|
str))
|
||
|
|
||
|
(define (battery-props battery-path)
|
||
|
(filter!
|
||
|
(lambda (x) (not (unspecified? x)))
|
||
|
(map
|
||
|
(lambda (x) (when (= 2 (length x))
|
||
|
`(,(string-trim-both (car x)) .
|
||
|
,(string-trim-both (cadr x)))))
|
||
|
(map
|
||
|
(lambda (x) (string-split x #\:))
|
||
|
(string-split (get-battery battery-path) #\nl)))))
|
||
|
|
||
|
(define (get-battery-prop battery-path prop)
|
||
|
(cdr (assoc prop (battery-props battery-path))))
|
||
|
|
||
|
(define (battery->org-props btr)
|
||
|
(org-properties
|
||
|
`(("STATUS" ,(get-battery-prop btr "state"))
|
||
|
("CAPACITY" ,(get-battery-prop btr "capacity"))
|
||
|
("PERCENTAGE" ,(get-battery-prop btr "percentage"))
|
||
|
("LID-CLOSED" ,(get-battery-prop btr "lid-is-closed"))
|
||
|
("CONSUMPTION" ,(get-battery-prop btr "energy-rate"))
|
||
|
)))
|
||
|
|
||
|
(define (battery->org battery)
|
||
|
(string-concatenate
|
||
|
`("* "
|
||
|
,(date->org (current-date) #t #t) " "
|
||
|
"Battery "
|
||
|
,(get-battery-prop *battery-path* "native-path")
|
||
|
"\n"
|
||
|
,(battery->org-props battery)
|
||
|
"\n")))
|