This is actually already implemented in ldg-post.el, part of the new ledger-mode. :) Our implementations are pretty similar.
John On Apr 14, 2010, at 3:57 PM, David Glasser wrote: > (defun hash-keys (hashtable) > "Return all keys in hashtable." > (let (allkeys) > (maphash (lambda (kk vv) (setq allkeys (cons kk allkeys))) hashtable) > allkeys)) > > (defun dsg-ledger-all-accounts () > "Returns a list of the accounts in this file." > (let ((origin (point)) (accounts (make-hash-table))) > (save-excursion > (goto-char (point-min)) > (while (re-search-forward > "^[ \t]+\\([*!]\\s-+\\)?[[(]?\\(.+?\\)\\(\t\\|\n\\| [ \t]\\)" nil > t) > (unless (and (>= origin (match-beginning 0)) > (< origin (match-end 0))) > (puthash (match-string-no-properties 2) t accounts)))) > (hash-keys accounts))) > > (defun on-empty-line () > (save-excursion > (beginning-of-line) > (= (line-end-position) (point)))) > > (defun dsg-ledger-insert-account () > "Prompts the user for an account to insert at point." > (interactive) > (let ((accounts (dsg-ledger-all-accounts))) > (insert > (if (on-empty-line) " " "") > (ido-completing-read "Account: " accounts) " "))) > > > -- > [email protected] | langtonlabs.org | flickr.com/photos/glasser/ > > > -- > To unsubscribe, reply using "remove me" as the subject.
