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
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
@subsection Reconciliation
@kindex C-c C-r

View file

@ -145,38 +145,9 @@ Return list."
(cdr root))
'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 ()
"Calls the right completion function for first argument completions."
(ignore
(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."
"Do appropriate completion for the thing at point."
(interactive)
(while (pcomplete-here
(if (eq (save-excursion
(ledger-thing-at-point)) 'transaction)
@ -197,24 +168,8 @@ Return list."
(goto-char (line-end-position))
(search-backward ";" (line-beginning-position) t)
(skip-chars-backward " \t0123456789.,")
(throw 'pcompleted t)))))))
(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)))
(throw 'pcompleted t)))
(ledger-accounts)))))
(defun ledger-fully-complete-xact ()
"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-reverse)))
(progn
(delete-char pcomplete-last-completion-length)
(delete-backward-char pcomplete-last-completion-length)
(if (eq this-command 'pcomplete-reverse)
(progn
(push (car (last pcomplete-current-completions))

View file

@ -42,7 +42,16 @@
(defconst ledger-code-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"
(let (regex-string)
`'(,(concat (dolist (e elements regex-string)
@ -53,25 +62,23 @@
(concat "ledger-" (symbol-name e) "-string")))))) "[ \t]*$")
,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
(list
(list 'pmnt-transaction
(list (ledger-single-line-config date nil status nil code nil payee nil comment)
(ledger-single-line-config date nil status nil code nil payee)
(ledger-single-line-config date nil status nil payee)
(ledger-single-line-config date nil code nil payee nil comment)
(ledger-single-line-config date nil code nil payee)
(ledger-single-line-config date nil payee)
(ledger-single-line-config date)))
(list 'acct-transaction
(list (ledger-single-line-config indent comment)
(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)))))
(list (list 'xact (list (ledger-single-line-config date nil status nil code nil payee nil comment)
(ledger-single-line-config date nil status nil code nil payee)
(ledger-single-line-config date nil status nil payee)))
(list 'acct-transaction (list (ledger-single-line-config indent comment)
(ledger-single-line-config2 indent status account nil commodity amount nil comment)
(ledger-single-line-config2 indent status account nil commodity amount)
(ledger-single-line-config2 indent status account nil amount nil commodity comment)
(ledger-single-line-config2 indent status account nil amount nil commodity)
(ledger-single-line-config2 indent status account nil amount)
(ledger-single-line-config2 indent status account nil comment)
(ledger-single-line-config2 indent status account)))))
(defun ledger-extract-context-info (line-type pos)
"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))
(ledger-extract-context-info 'acct-transaction pos))
((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 ?\=)
'(automated-xact nil nil))
((equal first-char ?\~)

View file

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