Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 2.25 KB | None | 0 0
  1. (defun two-pi-r-ledger-get-data (buf)
  2.   (let ((items
  3.           (with-temp-buffer
  4.             (let ((exit-code (ledger-run-ledger buf "emacs")))
  5.               (when (= 0 exit-code)
  6.                 (goto-char (point-min))
  7.                 (unless (eobp)
  8.                   (unless (looking-at "(")
  9.                     (error (buffer-string)))
  10.                   (read (current-buffer))))))))
  11.     items))
  12.  
  13. (defun two-pi-r-ledger-all-payees nil
  14.   "Parse the ledger emacs output and get a list of everyone who's ever been paid"
  15.   (let ((accounts (two-pi-r-ledger-get-data (current-buffer))))
  16.     (remove-duplicates (mapcar #'fifth accounts) :test #'string=)))
  17.  
  18. (defun two-pi-r-ledger-all-accounts nil
  19.   "Parse the ledger emacs output and get a list of every kind of account."
  20.   (let* ((data (two-pi-r-ledger-get-data (current-buffer)))
  21.          (intxns (mapcar #'sixth data))
  22.          (outtxns (mapcar #'seventh data)))
  23.     (remove-duplicates (append (mapcar #'cadr intxns)
  24.                                (mapcar #'cadr outtxns))
  25.                        :test #'string=)))
  26. (setq *two-pi-r-allow-space-in-completion-map* (make-sparse-keymap))
  27. (set-keymap-parent *two-pi-r-allow-space-in-completion-map* minibuffer-local-completion-map)
  28. (define-key *two-pi-r-allow-space-in-completion-map* " " 'self-insert-command)
  29. (defun two-pi-r-ledger-add-entry (date title in amount out)
  30.   (interactive
  31.    (let ((minibuffer-local-completion-map *two-pi-r-allow-space-in-completion-map*)
  32.          (accounts (mapcar 'list (two-pi-r-ledger-all-accounts)))
  33.          (payees (mapcar 'list (two-pi-r-ledger-all-payees))))
  34.      (list (read-string "Date: " (format-time-string "%Y/%m/%d" (current-time)))
  35.            (completing-read "Who did you pay? " payees)
  36.            (completing-read "Where did the money go? " accounts)
  37.            (format "$%.2f" (read-number "How much did you pay? "))
  38.            (completing-read "Where did the money come from? " accounts))))
  39.   (newline)
  40.   (insert date) (insert " ") (insert title) (newline)
  41.   (indent-to 4) (insert in) (indent-to (- 80 (length amount))) (insert amount) (newline)
  42.   (indent-to 4) (insert out) (newline))
  43. (load "ledger")
  44. (define-key ledger-mode-map "\C-ca" 'two-pi-r-ledger-add-entry)
  45. (define-key ledger-mode-map "\C-m" 'newline)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement