Add battery and memory units for the status bar

This commit is contained in:
Sameer Rahmani 2021-12-12 22:18:02 +00:00
parent d5059ac258
commit f063883f6c
2 changed files with 37 additions and 9 deletions

View File

@ -25,10 +25,33 @@
(require 'fg42/statusbar) (require 'fg42/statusbar)
(defbar-unit battery 30 "B-" (defmacro fg42/percentage-face (value err warn)
(format "B%s" (with-temp-buffer "Return the correct face with repect to VALUE and the given
(insert-file-contents "/sys/class/power_supply/BAT0/capacity") thresholds ERR adn WARN"
(buffer-string)))) `(cond ((> ,value ,err) 'error) ((> ,value ,warn) 'warning) (t 'success)))
(defbar-unit fg42/statusbar-battery 30 "B--"
(format "B%s"
(string-trim
(with-temp-buffer
(insert-file-contents "/sys/class/power_supply/BAT0/capacity")
(buffer-string)))))
(defbar-unit fg42/statusbar-memory 3 "M--S--"
(let* ((struct (string-trim
(shell-command-to-string "free -k|tail -n 2|awk '{printf(\"%s,%s,\", $3, $2)}'")))
(vals (mapcar #'cl-parse-integer (butlast (split-string struct ","))))
;; TODO: Check for division by zero
(m (* 100 (/ (float(car vals)) (cadr vals))))
;; TODO: Check for division by zero
(s (* 100 (/ (float(caddr vals)) (cadddr vals))))
(x ))
(format
"M%sS%s"
(propertize (format "%02d" m) 'face (fg42/percentage-face m 90 75))
(propertize (format "%02d" s) 'face (fg42/percentage-face s 90 75)))))
;; The default modeline for FG42 that is compatible with ;; The default modeline for FG42 that is compatible with
;; the FG42's status bar only ;; the FG42's status bar only
@ -40,7 +63,8 @@
(list (list
:brief (list :brief (list
'battery 'fg42/statusbar-battery
'fg42/statusbar-memory
"|" '(buffer-name) "|" '(format-mode-line "%l:%c") "|" '(format-time-string "%m-%d %H:%M")) "|" '(buffer-name) "|" '(format-mode-line "%l:%c") "|" '(format-time-string "%m-%d %H:%M"))
:long " ")) :long " "))
;; No GUI ;; No GUI

View File

@ -173,10 +173,14 @@ that runs the given BODY at the given INTERVAL."
`(progn `(progn
(defvar ,name ,default) (defvar ,name ,default)
(defvar ,timer-name) (defvar ,timer-name)
(add-hook 'fg42/statusbar-enable-hook (let ((fn (lambda () ,@body)))
(lambda () (add-hook 'fg42/statusbar-enable-hook
(setq ,timer-name (lambda ()
(run-with-timer 0 ,interval (lambda () ,@body))))) (setq ,timer-name
(run-with-timer 0 ,interval
(lambda ()
(setq ,name (funcall fn))))))))
(add-hook 'fg42/statusbar-disable-hook (add-hook 'fg42/statusbar-disable-hook
(lambda () (lambda ()
(when (timerp ,timer-name) (when (timerp ,timer-name)