Backed out recent changes that broke the complete cycling behavior.

This commit is contained in:
Craig Earls 2014-01-07 13:25:07 -07:00
parent f5d5149d76
commit af84005a52
4 changed files with 32 additions and 77 deletions

View file

@ -175,11 +175,6 @@ typing a close match to the payee. Ledger-mode will call @command{ledger
xact} with the data you enter and place the transaction in the proper xact} with the data you enter and place the transaction in the proper
chronological place in the ledger. chronological place in the ledger.
To complete just the part of the transaction where your cursor is at,
Ledger-mode supports Emacs' universal @command{completion-at-point}
command. You may bind this command to @kbd{C-M-i} since this is the
default for Emacs programming modes.
@node Reconciliation, Reports, Quick Add, Quick Demo @node Reconciliation, Reports, Quick Add, Quick Demo
@subsection Reconciliation @subsection Reconciliation
@kindex C-c C-r @kindex C-c C-r

View file

@ -145,38 +145,9 @@ Return list."
(cdr root)) (cdr root))
'string-lessp)))) 'string-lessp))))
(defun ledger-command-at-point ()
"Do appropriate completion for current context."
(let ((context (mapcar*
(lambda(x) (if (symbolp x) (symbol-name x)))
(ledger-context-at-point))))
(cond
((string= "acct-transaction" (car context))
(concat (car context) "/" (nth 1 context)))
((string= "pmnt-transaction" (car context))
(concat (car context) "/" (nth 1 context)))
(t
(car context)))))
(defun ledger-complete-at-point () (defun ledger-complete-at-point ()
"Calls the right completion function for first argument completions." "Do appropriate completion for the thing at point."
(ignore (interactive)
(funcall (or (pcomplete-find-completion-function
(ledger-command-at-point))
pcomplete-default-completion-function))))
(defun pcomplete/ledger-mode/empty-line ()
"Complete when at empty line."
(ignore
(ledger-add-transaction (read-string "Transaction: "
(ledger-year-and-month)) (point))))
(defun pcomplete/ledger-mode/pmnt-transaction/date ()
"Complete when at date in transaction."
(ignore))
(defun pcomplete/ledger-mode/pmnt-transaction/payee ()
"Complete when at payee in transaction."
(while (pcomplete-here (while (pcomplete-here
(if (eq (save-excursion (if (eq (save-excursion
(ledger-thing-at-point)) 'transaction) (ledger-thing-at-point)) 'transaction)
@ -197,24 +168,8 @@ Return list."
(goto-char (line-end-position)) (goto-char (line-end-position))
(search-backward ";" (line-beginning-position) t) (search-backward ";" (line-beginning-position) t)
(skip-chars-backward " \t0123456789.,") (skip-chars-backward " \t0123456789.,")
(throw 'pcompleted t))))))) (throw 'pcompleted t)))
(ledger-accounts)))))
(defun pcomplete/ledger-mode/acct-transaction/indent ()
"Complete when at indent in transaction."
(ignore (ledger-thing-at-point)))
(defun pcomplete/ledger-mode/acct-transaction/account ()
"Complete when at account in transaction."
(set (make-local-variable 'pcomplete-termination-string) " ")
(pcomplete-here (ledger-accounts)))
(defun pcomplete/ledger-mode/acct-transaction/amount ()
"Complete when at amount in transaction."
(ignore (ledger-post-edit-amount)))
(defun pcomplete/ledger-mode/acct-transaction/comment ()
"Complete when at amount in transaction."
(pcomplete-here (ledger-find-metadata-in-buffer)))
(defun ledger-fully-complete-xact () (defun ledger-fully-complete-xact ()
"Completes a transaction if there is another matching payee in the buffer. "Completes a transaction if there is another matching payee in the buffer.
@ -266,7 +221,7 @@ ledger-magic-tab would cycle properly"
pcomplete-expand-and-complete pcomplete-expand-and-complete
pcomplete-reverse))) pcomplete-reverse)))
(progn (progn
(delete-char pcomplete-last-completion-length) (delete-backward-char pcomplete-last-completion-length)
(if (eq this-command 'pcomplete-reverse) (if (eq this-command 'pcomplete-reverse)
(progn (progn
(push (car (last pcomplete-current-completions)) (push (car (last pcomplete-current-completions))

View file

@ -42,7 +42,16 @@
(defconst ledger-code-string "\\((.*)\\)?") (defconst ledger-code-string "\\((.*)\\)?")
(defconst ledger-payee-string "\\(.*\\)") (defconst ledger-payee-string "\\(.*\\)")
(defmacro ledger-single-line-config (&rest elements) (defmacro ledger-line-regex (&rest elements)
(let (regex-string)
(concat (dolist (e elements regex-string)
(setq regex-string
(concat regex-string
(eval
(intern
(concat "ledger-" (symbol-name e) "-string")))))) "[ \t]*$")))
(defmacro ledger-single-line-config2 (&rest elements)
"Take list of ELEMENTS and return regex and element list for use in context-at-point" "Take list of ELEMENTS and return regex and element list for use in context-at-point"
(let (regex-string) (let (regex-string)
`'(,(concat (dolist (e elements regex-string) `'(,(concat (dolist (e elements regex-string)
@ -53,25 +62,23 @@
(concat "ledger-" (symbol-name e) "-string")))))) "[ \t]*$") (concat "ledger-" (symbol-name e) "-string")))))) "[ \t]*$")
,elements))) ,elements)))
(defmacro ledger-single-line-config (&rest elements)
"Take list of ELEMENTS and return regex and element list for use in context-at-point"
`'(,(eval `(ledger-line-regex ,@elements))
,elements))
(defconst ledger-line-config (defconst ledger-line-config
(list (list (list 'xact (list (ledger-single-line-config date nil status nil code nil payee nil comment)
(list 'pmnt-transaction (ledger-single-line-config date nil status nil code nil payee)
(list (ledger-single-line-config date nil status nil code nil payee nil comment) (ledger-single-line-config date nil status nil payee)))
(ledger-single-line-config date nil status nil code nil payee) (list 'acct-transaction (list (ledger-single-line-config indent comment)
(ledger-single-line-config date nil status nil payee) (ledger-single-line-config2 indent status account nil commodity amount nil comment)
(ledger-single-line-config date nil code nil payee nil comment) (ledger-single-line-config2 indent status account nil commodity amount)
(ledger-single-line-config date nil code nil payee) (ledger-single-line-config2 indent status account nil amount nil commodity comment)
(ledger-single-line-config date nil payee) (ledger-single-line-config2 indent status account nil amount nil commodity)
(ledger-single-line-config date))) (ledger-single-line-config2 indent status account nil amount)
(list 'acct-transaction (ledger-single-line-config2 indent status account nil comment)
(list (ledger-single-line-config indent comment) (ledger-single-line-config2 indent status account)))))
(ledger-single-line-config indent status account nil commodity amount nil comment)
(ledger-single-line-config indent status account nil commodity amount)
(ledger-single-line-config indent status account nil amount nil commodity comment)
(ledger-single-line-config indent status account nil amount nil commodity)
(ledger-single-line-config indent status account nil amount)
(ledger-single-line-config indent status account nil comment)
(ledger-single-line-config indent status account)))))
(defun ledger-extract-context-info (line-type pos) (defun ledger-extract-context-info (line-type pos)
"Get context info for current line with LINE-TYPE. "Get context info for current line with LINE-TYPE.
@ -131,7 +138,7 @@ the fields in the line in a association list."
((memq first-char '(?\ ?\t)) ((memq first-char '(?\ ?\t))
(ledger-extract-context-info 'acct-transaction pos)) (ledger-extract-context-info 'acct-transaction pos))
((memq first-char '(?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9)) ((memq first-char '(?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9))
(ledger-extract-context-info 'pmnt-transaction pos)) (ledger-extract-context-info 'xact pos))
((equal first-char ?\=) ((equal first-char ?\=)
'(automated-xact nil nil)) '(automated-xact nil nil))
((equal first-char ?\~) ((equal first-char ?\~)

View file

@ -79,8 +79,6 @@
(defconst ledger-account-cleared-regex (defconst ledger-account-cleared-regex
"\\(^[ \t]+\\)\\(*\\s-*.*?\\)\\( \\|\t\\|$\\)") "\\(^[ \t]+\\)\\(*\\s-*.*?\\)\\( \\|\t\\|$\\)")
(defconst ledger-metadata-regex
"[ \t]+\\(?2:;[ \t]+.+\\)$")
(defmacro ledger-define-regexp (name regex docs &rest args) (defmacro ledger-define-regexp (name regex docs &rest args)
"Simplify the creation of a Ledger regex and helper functions." "Simplify the creation of a Ledger regex and helper functions."