summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/ldg-complete.el24
-rw-r--r--lisp/ldg-fonts.el2
-rw-r--r--lisp/ldg-mode.el17
-rw-r--r--lisp/ldg-regex.el17
4 files changed, 47 insertions, 13 deletions
diff --git a/lisp/ldg-complete.el b/lisp/ldg-complete.el
index bd907bc8..3ba35909 100644
--- a/lisp/ldg-complete.el
+++ b/lisp/ldg-complete.el
@@ -38,6 +38,11 @@
(point)))
(end (point))
begins args)
+ ;; to support end of line metadata
+ (save-excursion
+ (when (search-backward ";"
+ (line-beginning-position) t)
+ (setq begin (match-beginning 0))))
(save-excursion
(goto-char begin)
(when (< (point) end)
@@ -73,7 +78,7 @@ Return tree structure"
(save-excursion
(goto-char (point-min))
(while (re-search-forward
- ledger-account-any-status-regex nil t)
+ ledger-account-or-metadata-regex nil t)
(unless (and (>= origin (match-beginning 0))
(< origin (match-end 0)))
(setq account-elements
@@ -90,6 +95,21 @@ Return tree structure"
(setq account-elements (cdr account-elements)))))))
account-tree))
+(defun ledger-find-metadata-in-buffer ()
+ "Search through buffer and build list of metadata.
+Return list."
+ (let ((origin (point)) accounts)
+ (save-excursion
+ (setq ledger-account-tree (list t))
+ (goto-char (point-min))
+ (while (re-search-forward
+ ledger-metadata-regex
+ nil t)
+ (unless (and (>= origin (match-beginning 0))
+ (< origin (match-end 0)))
+ (setq accounts (cons (match-string-no-properties 2) accounts)))))
+ accounts))
+
(defun ledger-accounts ()
"Return a tree of all accounts in the buffer."
(let* ((current (caar (ledger-parse-arguments)))
@@ -157,7 +177,7 @@ Does not use ledger xact"
(setq rest-of-name (match-string 3))
;; Start copying the postings
(forward-line)
- (while (looking-at ledger-account-any-status-regex)
+ (while (looking-at ledger-account-or-metadata-regex)
(setq xacts (cons (buffer-substring-no-properties
(line-beginning-position)
(line-end-position))
diff --git a/lisp/ldg-fonts.el b/lisp/ldg-fonts.el
index cb7a81c0..8ba84c84 100644
--- a/lisp/ldg-fonts.el
+++ b/lisp/ldg-fonts.el
@@ -113,7 +113,7 @@
(defvar ledger-font-lock-keywords
`( ;; (,ledger-other-entries-regex 1
;; ledger-font-other-face)
- (,ledger-comment-regex 2
+ (,ledger-comment-regex 0
'ledger-font-comment-face)
(,ledger-payee-pending-regex 2
'ledger-font-payee-pending-face) ; Works
diff --git a/lisp/ldg-mode.el b/lisp/ldg-mode.el
index 4bc195ed..86889dda 100644
--- a/lisp/ldg-mode.el
+++ b/lisp/ldg-mode.el
@@ -68,13 +68,18 @@ And calculate the target-delta of the account being reconciled."
(message balance))))
(defun ledger-magic-tab (&optional interactively)
- "Decide what to with with <TAB> .
-Can be pcomplete, or align-posting"
+ "Decide what to with with <TAB>.
+Can indent, complete or align depending on context."
(interactive "p")
- (if (and (> (point) 1)
- (looking-back "[:A-Za-z0-9]" 1))
- (ledger-pcomplete interactively)
- (ledger-post-align-postings)))
+ (when (= (point) (line-end-position))
+ (if (= (point) (line-beginning-position))
+ (indent-to ledger-post-account-alignment-column)
+ (save-excursion
+ (re-search-backward ledger-account-or-metadata-regex
+ (line-beginning-position) t))
+ (when (= (point) (match-end 0))
+ (ledger-pcomplete interactively))))
+ (ledger-post-align-postings))
(defvar ledger-mode-abbrev-table)
diff --git a/lisp/ldg-regex.el b/lisp/ldg-regex.el
index 226475df..83bc2197 100644
--- a/lisp/ldg-regex.el
+++ b/lisp/ldg-regex.el
@@ -43,7 +43,7 @@
"\\(^[~=A-Za-z].+\\)+")
(defconst ledger-comment-regex
- "\\( \\| \\|^\\)\\(;.*\\)")
+ "^[;#|\\*%].*\\|[ \t]+;.*")
(defconst ledger-payee-any-status-regex
"^[0-9/.=-]+\\(\\s-+\\*\\)?\\(\\s-+(.*?)\\)?\\s-+\\(.+?\\)\\(\t\\|\n\\| [ \t]\\)")
@@ -61,13 +61,22 @@
"^--.+?\\($\\|[ ]\\)")
(defconst ledger-account-any-status-regex
- "^[ \t]+\\([*!]\\s-+\\)?\\([[(]?.+?\\)\\(\t\\|\n\\| [ \t]\\)")
+ "^[ \t]+\\(?1:[*!]\\s-*\\)?\\(?2:[^ ;].*?\\)\\( \\|\t\\|$\\)")
(defconst ledger-account-pending-regex
- "\\(^[ \t]+\\)\\(!.+?\\)\\( \\|$\\)")
+ "\\(^[ \t]+\\)\\(!\\s-*.*?\\)\\( \\|\t\\|$\\)")
(defconst ledger-account-cleared-regex
- "\\(^[ \t]+\\)\\(\\*.+?\\)\\( \\|$\\)")
+ "\\(^[ \t]+\\)\\(*\\s-*.*?\\)\\( \\|\t\\|$\\)")
+
+(defconst ledger-metadata-regex
+ "[ \t]+\\(?2:;[ \t]+.+\\)$")
+
+(defconst ledger-account-or-metadata-regex
+ (concat
+ ledger-account-any-status-regex
+ "\\|"
+ ledger-metadata-regex))