簡易小遣い帳

だいぶ前にxyzzyで作ったmoney.elをemacs用に移植した(のも結構前だけどせっかくなので公開してみる)。

C-x m s (spend)で支出を入力、C-x m d (deposit)で収入を入力していく。C-x m aで全所持金を表示。だけ。英語があってるかは気にしない。
このキーバインドはmoney.el中では決めてないので変えたければ下の設定を適当に変えればいけます。

記録ファイルの実態は

[yyyy-mm-dd] 金額(入金が正) 品目

の列がならんだテキストなのでなにか必要があったら適当に手で編集する方向で。行頭に;を打てばその行はコメントになります*1

.emacs設定例

(require 'money)
(setq *money-logfile* "~/money.txt") ;記録ファイル

;キー設定
(defvar money-map (make-keymap))
(setf (symbol-function 'money-prefix) money-map)
(define-key ctl-x-map "m" 'money-prefix)
(define-key money-map "a" 'money-balance)
(define-key money-map "b" 'money-balance)
(define-key money-map "d" 'money-deposit)
(define-key money-map "s" 'money-spend)

money.el

(provide 'money)

(defvar *money-logfile* "~/money.txt")

(defun money-balance ()
  (interactive)
  (let ((sum 0)
	(regexp-money "^\\[[12][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]\\] \\([+-]?[0-9]+\\) "))
    (with-current-buffer (find-file-noselect *money-logfile*)
      (beginning-of-buffer)
      (do nil ((not (re-search-forward regexp-money nil t)))
	(setq sum (+ sum (parse-integer (match-string 1)))))
      (message "%d yen available." sum))))

;(format-time-string howm-date-format (howm-current-date-lazy))

(defun money-deposit (amount note)
  (interactive "nHow much? : \nsfor what? : ")
  (with-current-buffer (find-file-noselect *money-logfile*)
    (end-of-buffer)
    (unless (bolp) (newline))
    (insert (concat (format-time-string "[%Y-%m-%d]") (format " %d " amount) note))
    (newline)))

(defun money-spend (amount note)
  (interactive "nHow much? : \nsfor what? : ")
  (money-deposit (- amount) note))

;; (defvar money-map (make-keymap))
;; (setf (symbol-function 'money-prefix) money-map)

;; (define-key ctl-x-map "m" 'money-prefix)
;; (define-key money-map "a" 'money-balance)
;; (define-key money-map "b" 'money-balance)
;; (define-key money-map "d" 'money-deposit)
;; (define-key money-map "s" 'money-spend)

*1:というか"^\\[[12][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]\\] \\([+-]?[0-9]+\\) "にマッチしない行が無視されるだけだけど