Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defun two-pi-r-ledger-get-data (buf)
- (let ((items
- (with-temp-buffer
- (let ((exit-code (ledger-run-ledger buf "emacs")))
- (when (= 0 exit-code)
- (goto-char (point-min))
- (unless (eobp)
- (unless (looking-at "(")
- (error (buffer-string)))
- (read (current-buffer))))))))
- items))
- (defun two-pi-r-ledger-all-payees nil
- "Parse the ledger emacs output and get a list of everyone who's ever been paid"
- (let ((accounts (two-pi-r-ledger-get-data (current-buffer))))
- (remove-duplicates (mapcar #'fifth accounts) :test #'string=)))
- (defun two-pi-r-ledger-all-accounts nil
- "Parse the ledger emacs output and get a list of every kind of account."
- (let* ((data (two-pi-r-ledger-get-data (current-buffer)))
- (intxns (mapcar #'sixth data))
- (outtxns (mapcar #'seventh data)))
- (remove-duplicates (append (mapcar #'cadr intxns)
- (mapcar #'cadr outtxns))
- :test #'string=)))
- (setq *two-pi-r-allow-space-in-completion-map* (make-sparse-keymap))
- (set-keymap-parent *two-pi-r-allow-space-in-completion-map* minibuffer-local-completion-map)
- (define-key *two-pi-r-allow-space-in-completion-map* " " 'self-insert-command)
- (defun two-pi-r-ledger-add-entry (date title in amount out)
- (interactive
- (let ((minibuffer-local-completion-map *two-pi-r-allow-space-in-completion-map*)
- (accounts (mapcar 'list (two-pi-r-ledger-all-accounts)))
- (payees (mapcar 'list (two-pi-r-ledger-all-payees))))
- (list (read-string "Date: " (format-time-string "%Y/%m/%d" (current-time)))
- (completing-read "Who did you pay? " payees)
- (completing-read "Where did the money go? " accounts)
- (format "$%.2f" (read-number "How much did you pay? "))
- (completing-read "Where did the money come from? " accounts))))
- (newline)
- (insert date) (insert " ") (insert title) (newline)
- (indent-to 4) (insert in) (indent-to (- 80 (length amount))) (insert amount) (newline)
- (indent-to 4) (insert out) (newline))
- (load "ledger")
- (define-key ledger-mode-map "\C-ca" 'two-pi-r-ledger-add-entry)
- (define-key ledger-mode-map "\C-m" 'newline)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement