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

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\\}\\)%")