MBAのOSをMavericksにしたらdisplay-battery-modeが使えなくなってた件
(emacs-version) "GNU Emacs 24.2.1 (x86_64-apple-darwin12.2.1, Carbon Version 1.6.0 AppKit 1187.34)"
において、
(display-battery-mode 1)
とすると、`number-or-marker-p' 付近でエラーが発生するので、起動時にこれをevalするようになっていると、そこでエラーとなりそれ以降のelispが読み込まれない。理由は、Mountain Lion当時、pmsetが返す文字列は以下だった
$ pmset -g ps Currently drawing from 'AC Power' -InternalBattery-0 99%; charged; 0:00 remaining
が、Mavericksになってその文字列に変更が加えられたから。
$ pmset -g ps Now drawing from 'Battery Power' -InternalBattery-0 99%; charged; 0:00 remaining
battery.el内のbattery-pmset()がこれら文字列を解析して表示しているのだが、初っ端からして異なっているためにmatchせず、N/Aになる。
なので、battery.elのbattery-pmset()の定義内を
(re-search-forward "Currentl?y drawing from '\\(AC\\|Battery\\) Power'" nil t)
から
(re-search-forward "\\(Currentl?y\\|Now\\) drawing from '\\(AC\\|Battery\\) Power'" nil t)
に変更するpatchを作ればOK.
適当に作った.
--- battery.el 2013-01-02 05:37:17.000000000 +0900 +++ mavericks-battery.el 2013-10-23 12:11:13.000000000 +0900 @@ -543,7 +543,7 @@ The following %-sequences are provided: (with-temp-buffer (ignore-errors (call-process "pmset" nil t nil "-g" "ps")) (goto-char (point-min)) - (when (re-search-forward "Currentl?y drawing from '\\(AC\\|Battery\\) Power'" nil t) + (when (re-search-forward "\\(Currentl?y\\|Now\\) drawing from '\\(AC\\|Battery\\) Power'" nil t) (setq power-source (match-string 1)) (when (re-search-forward "^ -InternalBattery-0[ \t]+" nil t) (when (looking-at "\\([0-9]\\{1,3\\}\\)%")