@kyanny's blog

商品にならぬ技術は役に立たない - トーマス・エジソン

yen.elを改造してみた

Emacsのcolor-theme-selectでテーマを切り替えたりしていたら、howmemacs-w3mでハイパーリンクの下線が表示されなくなってしまった。howmでは色分けも全部リセットされてしまっていて、非常に使いづらい。終了時にテーマを保存の設定をコメントアウトしてMeadow再起動して、デフォルトの.emacsに記載されているカラーテーマに戻すとちゃんと色が反映される。その後gnome2などに変更するとちゃんと色はついたままなんだけど、テーマ保存を再度有効にして再起動するとやっぱり色がなくなる。font-lockの関係だろうとは思うけど、当然何が悪いのかわからないのでとりあえずデフォルトのテーマに戻して使っている。

そんなこんなで、リンクの下線の色とかがおかしくなることについて情報がないかとぐぐっていたら、どういうわけかyen.elという、howmと併用して使うツールの一覧ページにたどり着いた。その中に、 『領域内の「○○円」を合計』するためのyen.elというEmacs Lispを発見した。これは、リージョンの中の●●円という数字を探して和をとってくれる。

これ、月々のクレジットカードの支払額を計算したりするときに便利そう!と思ってインストールしてみたんだけど、わざわざ「円」と末尾につけないといけない。俺がM-x yen-regionを呼ぶときは数字を足したいに決まっているので、「円」が末尾にあってもなくてもリージョン内の数字全部の和をとってくれるようにしたい。ので、改造してみた。以下、実は初めて使ったdiffコマンドの結果。

  • yen.el.patch
*** yen.el	Mon Dec  5 18:52:49 2005
--- yen.el.default	Mon Dec  5 18:53:17 2005
***************
*** 23,32 ****
  ;;; ・C-y で結果を paste できる
  ;;; ・「31,415 円」のような表記にも対応
  
! ;; (defvar yen-regexp "\\(-?[0-9.,]+\\) ?円")
! ;; `100円'という単位つきだけでなく`100'という単位なしも計算したいので改造
! 
! (defvar yen-regexp "\\(-?[0-9.,]+\\) ?円\?")
  (defvar yen-number-pos 1)
  (defvar yen-ignore-char ?,)
  
--- 23,29 ----
  ;;; ・C-y で結果を paste できる
  ;;; ・「31,415 円」のような表記にも対応
  
! (defvar yen-regexp "\\(-?[0-9.,]+\\) ?円")
  (defvar yen-number-pos 1)
  (defvar yen-ignore-char ?,)

円\?と、正規表現をちょっと変更しただけ。M-x re-builderを使ったらすごく簡単にできた。\はひょっとしたら不要なのかもしれないがとりあえずこれで期待通りに動いているのでOKということで。

割とハマりかけたのが、C-x C-eで関数を評価し、.emacs内の(load "yen-region")も評価してtが返ってきてよしOK、と思って他のバッファで実行させてみたら、円なしの数字の和をとると0になってしまった。おかしいなあと思いつつ、一度再起動したらうまくいった。loadだのrequireだのの動作についてはまだ学習してない分野なのでわからないなあ。でも、手ごろなところにいい教材があって、早くも初めてのEmacs Lisp改造ができた。同じページにあったhowmoneyというhowmでお小遣い帳も入れてみたので、こちらを使うほうが便利なんだけど、まあこれはこれで楽しい体験でした、ということで。