今日はEmacsで易家計簿を作るにはどうしたら良さそうか考えてみました(・ω・)/


実際の所、最近預金残高を見るたびにドンドン減っていくのが悲しいのです(ノω・、)


どうせリタイアしたころには年金なんて出ないでしょうから、

せめて月に使ったお金をざっくり管理して、

無駄な所は省いていかないといけません。


もちろん世の中には家計簿をつけるためのプログラムが色々ある訳ですが、

せっかくなのでEmacsを使ってみたいと思います。


とは言え、Lispなんて書けませんから、

Emacsに元からある機能をやりくりします。


多分

- Org modeの表計算

- Remember mode

の2つを使うと、ザックリな事は出来そうです。


目指すのは、

- とにかくサクッと登録したい

- お金を使った物のカテゴリー位は記録したい

- ざっくり眺めて、1週間ごととか1か月ごとに、使ったお金の合計が分かればそれで良い

- カテゴリーごとに合計が出るともっと良い

という程度の物です。


グラフ化したりは、多分要りません。

(使い始めは楽しいけど、すぐ飽きるので)


では始めます。


まずEmacsの設定ファイルに以下を追加します。



;;Remember Mode Setting
(setq org-directory "~/org/")
(setq remember-annotation-functions '(org-remember-annotation))
(setq remember-handler-functions '(org-remember-handler))
(add-hook 'remember-mode-hook 'org-remember-apply-template)
(define-key global-map "\C-cr" 'org-remember)


;;Template Setting for Remember Mode
(setq org-remember-templates
'(("Journal" ?j "** %^{Head Line} %t %^g\n%i%?" "~/org/journal.org")
("Book" ?b "** %^{Book Title} %t :BOOK: \n%[~/org/.book_template.txt]\n""~/org/journal.org")
("Cinema" ?c "** %^{Film Title} %t :CINEMA: \n%[~/org/.film_template.txt\n""~/org/journal.org")

("Account" ?a "** %^{Ammount} %u %^g %!" "~/org/account.org")))


といっても、今回追記したのは一番下の赤文字の部分のみです。

"Account" ?a

の部分の意味は、まずCtrl+c rを押した時に出てくるテンプレート選択に"account"を追加してます。

その時、小文字の"a"をタイプするとAccountを選択するように指示しています。


くらいまーず はい

その後の

"** %^{Ammount} %u %^g %!"

では実際に書き込む文字列のテンプレートを作っています。


まず

**

を書きこんで、


%^{Ammount}

の部分でユーザーからの書き込みを待ちます。

ここでは金額を書き込むことにします。


その後ろに

%u

で書きこんだ日付を入れて、


%^g

でタグを設定するようにユーザーに促します。


通常書き終わると、Ctrl+c Ctrl+cと入力しないと保存されないのですが、

ここでは一番最後に

%!

と書いておくことで、タグを入力し終わったら則保存するよう設定します。


その後ろの

"~/org/account.org"

の部分は、入力した内容を保存するファイルを指定しています。


さてこれで、いつでも Ctrl+c r を打って、金額と使い道を入れたら

特定のファイルに書き込まれるようになりました。


試しに適当に入力してみるとこんな感じになります。


金額 日付 使い道


の順で並んでいます。

タグのところはBookとかDrinkとかだけでも良いですし、

具体的に何を買ったのかを書いても良さそうです。


くらいまーず はい


このままですと計算できないので、

これを表に落とします。


マウスで領域選択して、Ctrl+c | で下のように表形式にしてくれます。


もしきれいに表が作られない(縦線がジグザグになったり)する場合は、

使っているフォントが悪者です。

どうしてもアジア系のフォントはアルファベットと幅が異なりますので、

Emacsが文字数をカウントしてあわせてくれる表の幅がずれる事があります。


くらいまーず はい

表にしたので、今度は使った用途別に並べ替えてみます。

用途別に並べ替えたいので、一番上の :Book: の所から初めて、

下まで選択します。



くらいまーず はい

この状態で Ctrl+c ^ と打つと、

ミニバッファに


- アルファベット順

- 番号順

- 日付順


のどれでソートを書けるか聞いてきます。



くらいまーず はい

アルファベット順に並べ替えたいので、”a”をタイプするとこうなります。

当然漢字もきちんと並べ替えてくれますが、英語で書くか日本語で書くか決めておいた方が良さそうです。


くらいまーず はい

ではこの表で使ったお金の合計を出してみましょう。

まず合計した値を入れるために、一番下に行を追加します。


:本:ハイペリオン:


と書いてある所で TAB を押すと行が追加できます。


で、数字が書かれている列の一番下にカーソルを持ってきて、

Ctrl-u Ctrl-c =

と押すと、ミニバッファに式を入れるよう求められます。



くらいまーず はい

Field formula B12=

と表示されるので、続けて


Field formula B12=vsum(B1..B11)


と打ち込んでEnterを押します。


列は左からA、B、C、、、、、

行は上から1,2,3、、、、、

と数えます。


式の入力を間違えて無ければ、

合計値が入力されます。


くらいまーず はい

若干面倒くさいですが、

下のようにカテゴリーごとに計算させることも可能です。

(自分で足し算の範囲を指定しているので当たり前ですが)



くらいまーず はい


列と行の番号が知りたい場合は、

表の中で Ctrl+c } と打つと番号が表示されます。


くらいまーず はい

またこんな滅多に使わない機能の為にキーバインドなんて覚えてられるか!

という人の為に、上のツールバーから色々な機能を使えます。

月に一度位の頻度なら、頑張って覚えずにここに甘えるのが無難です。


くらいまーず はい


という訳で、Emacs上で管理するザックリ家計簿の巻きでした。






ダウンロードするだけで、Emacs+Cygwin(+vim)が使えるすぐれもの

gnupackを導入しました。

http://gnupack.sourceforge.jp/docs/current/UsersGuide.html



フェイスのせってもしてあって、IMEも設定してくれているから、

何もしなくても格好よいEmacsで日本語がサクサク使えます。

くらいまーず はい

ところで、Emacsというと、M+x shellでbashとかコマンドプロンプトが

Emacs上で使えて便利なんですが、

このgnupackはそのままではEmacs上でCygwinが使えません。

ついでに、CygwinでIcarusも使えるようにすると、

Verilogのお勉強が便利だな~と思ったのでやってみました(・ω・)/

まずはCygwinでIcarusを使えるようにしてみます。



くらいまーず はい

当たり前ですが、初期状態で iverilog とか打ち込んでも、

そんなコマンドねーよと怒られます。


考えてみると、cdとかmkdirとかのコマンドも実際にはプログラムを呼び出している訳で、

C:\gnupack_basic-4.08a\app\cygwin\cygwin\bin

の中には、cd.exeとかwhich.exeとかが入ってます。


Icarusの方も、

C:\iverilog\bin

の中に、iverilog.exeとかgtkwave.exeが入ってる・・・


という事は、Cygwinのbinフォルダに、Icarusの実行ファイルを入れてしまえば使えるのでは・・・

と正しいのか良く分からない事が浮かんだので実行してみました。


まず

C:\iverilog\bin

の中身を

C:\gnupack_basic-4.08a\app\cygwin\cygwin\bin

に全部コピーします。


次に

C:\iverilog\lib

の中身を

C:\gnupack_basic-4.08a\app\cygwin\cygwin\lib

へコピーしました。


で再度立ち上げなおして、 iverilog と打ってみると、

ソースファイルよこせやと怒られました。

ソースを用意してVCDファイルをはかせてみましたが、

これで上手く動いているみたいです。


PATHを渡してあげるとか、スマートな方法が有りそうな気もしますが、

動いたので良しとします。


なんでもやって見るもんですね


くらいまーず はい

CygwinでIcarusを動かせたので、

今度はEmacs上でCygwinを使うための設定です。


まず下のリンクから、cygwin_mount.elを落としてきます。

http://www.emacswiki.org/cgi-bin/wiki/cygwin-mount.el


落としたLispファイルは下のフォルダにおきました。

C:\gnupack_basic-4.08a\app\emacs\site-lisp


C:\gnupack_basic-4.08a\home\.emacs.d

init.elに下の行を追加します。


(setenv "PATH" (concat "C:/gnupack_basic-4.08a/app/cygwin/cygwin/bin/" (getenv "PATH")))
(setq exec-path (cons "C:/gnupack_basic-4.08a/app/cygwin/cygwin/bin/" exec-path))
(require 'cygwin-mount)
(cygwin-mount-activate)


”C:/gnupack_basic-4.08a/app/cygwin/cygwin/bin/”の部分はインストールした場所によって変わってきます。


これでEmacsを立ち上げなおして、

M-x shell

と打つと、Emacs上でCygwinが使えるようになりました。


くらいまーず はい

これで、下みたいにEmacsの中だけでverilog書いてコンパイルして、シミュレーション結果を出力した後、

GTKwaveにVCDファイルを渡して波形表示させることが出来るようになりました。


くらいまーず はい

メモを取るやり方って人それぞれあると思います。


昔はメモ帳を開いて書き込んでたんですが、

保存したファイルがどこにあるのか分からなくなってやめました。


紙のノートは確かに図でもなんでもすぐ書けて今でも使ってますが、

検索性に乏しいのが難点ですよね。

大きな項目ごとならインデックスを作ってなんとか出来ても、

単語単位になるとお手上げです。


Tomboyが良さそうだな~と使ってみたんですが、

一つのメモあたらり一つのファイルを吐きだすのでデータの移動が面倒だったり、

タグが一つしか登録できないので、検索しにくかったり、

時々妙に重くなってイライラしたりしてました。


さて、Emacsではどうでしょうか・・・?

Org-modeのRememberという機能を少し使ってみました。



まずは初期設定です。

下の行を.emacsに追加します。


くらいまーず はい

setq org-directory "~/org/"


ではorg-modeで使うディレクトリを指定しています。

取り敢えずHOMEにorgというディレクトリを作って、そこを指定しました。


一番下の


define-key global-map "\C-cr" 'org-remember


は Ctrl+c r と打つとrememberモードを起動しますよというキー設定です。


取り敢えず今欲しいのは

・何かメモする

・本がたまってきたので、Scanしてない本が分かるようにしたい

・映画見たらメモっておこうかな

という所です。


この3つを一つのファイルにまとめて書いてみます。


まず、orgフォルダの中に、"journal.org"という空のファイルを作りました。

このファイルが上3つをまとめて書きこむファイルになります。


次に.emacsファイルの中に、 Ctrl+c r が押されたら、 jounal.org に書き込みますよ

という設定をします。

その時メモなのか本の登録なのかで動作を分けています。



くらいまーず はい

一番上の


"journal" ?j "**%~{Head Line} %t %^g\n%i%?" "~/org/journal.org"


はメモ書きの設定です。

その他本の登録と映画の登録を設定しています。

本と映画の登録の所では、

:BOOK: とか :CINEMA: とか書いてあります。

これはタグの設定です。


また

~/org/.book_template.txt

は本の登録の時には、テキストファイルに書かれた内容をテンプレートとして使いますよ

という事を設定しています。


今のところそれぞれのテンプレートの内容は


.book_template.txt


くらいまーず はい

.film_template.txt


くらいまーず はい

としています。


取り敢えずここまでの準備が出来たら、

早速使ってみます。


下のように何かを開いている画面で、

Ctrl+c r

を押します。


くらいまーず はい


すると画面が分割されて、

一番下のミニバッファに


Select template: [j]ournal [b]ook [c]inema

と出てきました。


くらいまーず はい


取り敢えずただのメモなので、jを押してjournalを選びます。


すると下側の画面に文字が現れて、

一番下に

HeadLine:

と出てきました。

なんでも好きなタイトルを入れられます。

取り敢えず、test と書いて<ENTER>を押しました。


くらいまーず はい

次にミニバッファはタグをどうするか聞いてきます。

何も書かずに<ENTER>を押しても大丈夫ですが、

ここではMEMOと登録しました。


くらいまーず はい

タグの登録が終わると、カーソルが上の画面に移動します。

タイトルの下に好きな内容を書いて、

Ctrl+c Ctrl+c

と押すと、journal.orgに保存してくれます。



くらいまーず はい


次に本を登録してみましょう。


Ctrl+c rを押した後、bを押してbookを選択します。



上の画面にはテンプレートが読みだされています。

日付の横には :BOOK: というタグも既に挿入済みです。


本のタイトルとして「Emacsテクニックバイブル」を入れて、
くらいまーず はい


その他必要な情報を入れたらCtrl+c Ctrl+cで

journal.orgに保存させます。
くらいまーず はい

ではjournal.orgがどうなっているかみてみます。


*2010/10月
という階層の一番下に追加されているのが分かります。

その他試用がてら色々登録したメモや本が並んでいます。
くらいまーず はい
さて、後ここでやりたいのは、


・どの本のスキャンが終わってないのかを分かりやすくしたい

・本のジャンルも登録しておきたい


という事です。


スキャンする本はTODOリストに登録して、

ジャンルはタグを付けておきましょう。


このファイルの一番上には下の3行が書かれています。

これはタグとTODO項目の設定です。
くらいまーず はい

タグはBOOK/CINEMA/MEMOの他、

その下に本のジャンル分けに使えそうな名前をタグとして登録しています。


TODO項目は、デフォルトでTODO/DONEしかないのですが、

SCANという項目を追加しました。


先ほど登録した「Emacsテクニックバイブル」の上にカーソルを持って行って、

Ctrl+c Ctrl+t

を押すと、TODOという文字が追加されます。


くらいまーず はい


設定したいのは「SCAN」なので、

<Shift>+右矢印 でSCANという文字に変化させます。


くらいまーず はい

これでどの本をスキャンする必要があるのかはっきり分かるようになりました。


もちろん「SCAN」という項目の付いた見出しだけ表示させることも出来ます。



くらいまーず はい

読み終わった本が大量に積んであって、後何冊スキャンすればよいのか良く分からなくなっていたので、

これは助かります。


次に、本のジャンルが分かるように、タグを付けてみます。


今は:BOOK:というタグだけが付いている本のタイトルの上で、

Ctrl+c Ctrl+q

を押します。

くらいまーず はい

すると画面の下にタグを選択するバッファが出来ました。

ここで表示されているタグリストは、

先ほどファイルの一番上で定義したものです。

くらいまーず はい

BOOKの他に、Computerのタグも付けたいので、

大文字でCをタイプすると、

Current: BOOK Computer

と2つのタグが設定されました。


くらいまーず はい

<ENTER>を押してタグの設定を終了すると、

無事

:BOOK:Computer:

とタグが付いています。


くらいまーず はい

こうしてタグを付けておけば、

自分が持っている本のリストを表示させたり、あるいは特定のジャンルだけで検索をかけたり出来ます。


くらいまーず はい

くらいまーず はい


また、各見出しに

<2010-10-17 日>

などと日時を登録しておくと、


くらいまーず はい

アジェンダビューと呼ばる情報取りまとめ機能で表示したとき、

下のように「この日はこんなことを登録してますよ」と表示させる事が出来ます。


くらいまーず はい
日記として使うも良し、経済の動向をメモするのに使っても良し、

急なTODOをメモするのも良いし、家計簿代わりにも使えるかもしれません。

結構いろいろ使えるんじゃないでしょうか?


中身はただのテキストファイルなのでどんなに書き込んでも容量はたかが知れています。

しかもファイルを開くことなく簡単に書き込みができて、

古いPCからデータを移す時も数個のテキストファイルを移動させるだけです。

タグやTODO項目による検索機能も豊富ですし。


仕事でも真面目に使ってみようかと思っています。