diff options
author | Craig Earls <enderw88@gmail.com> | 2013-03-27 20:02:11 -0700 |
---|---|---|
committer | Craig Earls <enderw88@gmail.com> | 2013-03-27 20:02:11 -0700 |
commit | 7fea9d21fb72e1d66423a928297dd3cc29c7cc78 (patch) | |
tree | 9ecd8465387e9aebb1239fc5c5dbae5f796da58d /lisp | |
parent | 4ca0e8916b5a821a4659918a754427799b5b9036 (diff) | |
download | fork-ledger-7fea9d21fb72e1d66423a928297dd3cc29c7cc78.tar.gz fork-ledger-7fea9d21fb72e1d66423a928297dd3cc29c7cc78.tar.bz2 fork-ledger-7fea9d21fb72e1d66423a928297dd3cc29c7cc78.zip |
Align post speed improvements after adding the long account name handling.
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/ldg-post.el | 49 | ||||
-rw-r--r-- | lisp/ldg-xact.el | 2 |
2 files changed, 27 insertions, 24 deletions
diff --git a/lisp/ldg-post.el b/lisp/ldg-post.el index f2adc676..91ee623d 100644 --- a/lisp/ldg-post.el +++ b/lisp/ldg-post.el @@ -136,21 +136,17 @@ point at beginning of the commodity." (match-end 3)) (point)))) (defvar ledger-post-account-regex - "\\(^[ \t]+\\)\\([\\[(;!*A-Za-z0-9]\\)\\(.+?\\)\\( \\|\n\\)") + "\\(^[ \t]+\\)\\(.+?\\)\\( \\|\n\\)") (defun ledger-next-account (&optional end) "Move point to the beginning of the next account, or status marker (!*), as long as it is not past END. Return the column of the beginning of the account and leave point at beginning of account" (if (> end (point)) - (when (re-search-forward ledger-post-account-regex (1+ end) t) + (when (re-search-forward ledger-post-account-regex (1+ end) t) + ;; the 1+ is to make sure we can catch the newline (goto-char (match-beginning 2)) - (list (current-column) (length (match-string-no-properties 3)))))) - -(defsubst ledger-post-adjust (adjust-by) - (if (> adjust-by 0) - (insert (make-string adjust-by ? )) - (delete-char adjust-by))) + (current-column)))) (defun ledger-post-align-postings (&optional beg end) "Align all accounts and amounts within region, if there is no @@ -178,24 +174,31 @@ region align the posting on the current line." (goto-char (setq begin-region (line-beginning-position))) - + ;; This is the guts of the alignment loop (while (and (or (setq acc-col (ledger-next-account (line-end-position))) - lines-left) - (< (point) end-region)) + lines-left) + (< (point) end-region)) (when acc-col - (if (/= (setq acc-adjust (- ledger-post-account-alignment-column (car acc-col))) 0) - (ledger-post-adjust acc-adjust)) - - (when (and - (> ledger-post-amount-alignment-column (+ ledger-post-account-alignment-column (cadr acc-col))) - (setq amt-offset (ledger-next-amount (line-end-position)))) - (let* ((amt-adjust (- ledger-post-amount-alignment-column - amt-offset - (current-column)))) - (if (/= amt-adjust 0) - (ledger-post-adjust amt-adjust))))) - (forward-line) + (when (/= (setq acc-adjust (- ledger-post-account-alignment-column acc-col)) 0) + (if (> acc-adjust 0) + (insert (make-string acc-adjust ? )) + (delete-char acc-adjust))) + (when (setq amt-offset (ledger-next-amount (line-end-position))) + (let* ((amt-adjust (- ledger-post-amount-alignment-column + amt-offset + (current-column)))) + (if (/= amt-adjust 0) + (if (> amt-adjust 0) + (insert (make-string amt-adjust ? )) + (let ((curpoint (point))) + (beginning-of-line) + (ledger-next-account (line-end-position)) + (when (> (+ curpoint amt-adjust) + (match-end 2)) + (goto-char curpoint) + (delete-char amt-adjust)))))))) + (forward-line) (setq lines-left (not (eobp)))) (setq inhibit-modification-hooks nil)))) diff --git a/lisp/ldg-xact.el b/lisp/ldg-xact.el index e2180b57..d6ccc2bf 100644 --- a/lisp/ldg-xact.el +++ b/lisp/ldg-xact.el @@ -21,7 +21,7 @@ ;;; Commentary: -;; Utilites for running ledger synchronously. +;; Utilities for running ledger synchronously. ;;; Code: |