読者です 読者をやめる 読者になる 読者になる

opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

StumpWMのモードラインにバッテリー残量を表示

StumpWMのモードラインにバッテリー残量を表示した。

方法

acpiコマンドの出力をラップして電池残量と残り時間を表示する。

$ acpi -bi

とすると、例えば

Battery 0: Discharging, 88%, 07:58:01 remaining
Battery 0: design capacity 7150 mAh, last full capacity 6580 mAh = 92%

このような出力が得られる。

このうちⅠ行目の88%とその後ろの07:58:01を抜き出してモードラインに表示する。

battery.lisp

ということで次のような感じのコードを書いた。

(defpackage stumpwm-helper-battery
  (:use cl)
  (:nicknames battery)
  (:export battery-level battery-level-string))
(in-package :stumpwm-helper-battery)

(defun battery-exists (acpi-output)
  (if (ppcre:scan-to-strings "No support" acpi-output)
      nil
      t))

;; No support for device type: power_supply
(defun battery-level ()
  (let ((raw-string (stumpwm:run-shell-command "acpi -bi | head -n 1 | tr -d '\\n'" t)))
    (if (battery-exists raw-string)
        (let ((split-raw-string (ppcre:split " " raw-string)))
          (values
           (fourth split-raw-string)
           (fifth split-raw-string)))
        (values nil "No Battery"))))

(defun battery-level-string ()
  (multiple-value-bind (percent remaining)
      (battery-level)
    (if (null percent)
        "No Battery"
        (let ((state (if (null remaining)
                        "Full"
                        remaining)))
          (concatenate 'string percent " " state)))))

これを~/.stumpwm.d/init.lispからloadして使えるようにする。

以下の関数が使えるようになる。

(battery:battery-level-string)

これで、mode-lineに表示するためのバッテリー残量表示の文字列が得られるので、これをmode-lineに設定する。

(setf *screen-mode-line-format*
      (list
       "<%n>"
       "%v"
       " | Vol: "
       '(:eval (run-shell-command "amixer get Master | egrep -m 1 -o '[0-9]+%' | tr -d '\\n'" t))
       '(:eval (run-shell-command "amixer get Master | egrep -m 1 -o '\\[(on)\\]|\\[(off)\\]' | tr -d '\\n'" t))
       " | "
       '(:eval (battery:battery-level-string))
       " | "
       '(:eval (run-shell-command "LANG=c date +'%I:%M%p %a %d %b %Y' | tr -d '\\n'" t))
       ))

現在のうちのmode-lineの設定はこんな感じ。 これでmode-lineにバッテリー残量が表示される(ばず)

Firefox ブラウザ無料ダウンロード