diff options
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/ledger-mode.el | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/lisp/ledger-mode.el b/lisp/ledger-mode.el index 79b6f0ec..b1df4a6b 100644 --- a/lisp/ledger-mode.el +++ b/lisp/ledger-mode.el @@ -168,16 +168,33 @@ Can indent, complete or align depending on context." nil 'noerr) (replace-match "")))))))) -(defun ledger-insert-effective-date () - (interactive) - (let ((context (car (ledger-context-at-point))) - (date-string (format-time-string (cdr (assoc "date-format" ledger-environment-alist))))) - (cond ((eq 'xact context) - (beginning-of-line) - (insert date-string "=")) - ((eq 'acct-transaction context) - (end-of-line) - (insert " ; [=" date-string "]"))))) +(defun ledger-insert-effective-date (&optional arg) + "Insert an effective date to the transaction or posting. + +Replace the current effective date if there's one in the same +line. + +With a prefix argument, remove the effective date. " + (interactive "P") + (if (and (listp arg) + (= 4 (prefix-numeric-value arg))) + (ledger-remove-effective-date) + (let ((context (car (ledger-context-at-point))) + (date-string (format-time-string + (cdr (assoc "date-format" ledger-environment-alist))))) + (save-restriction + (narrow-to-region (point-at-bol) (point-at-eol)) + (cond + ((eq 'xact context) + (beginning-of-line) + (re-search-forward ledger-iso-date-regexp) + (when (= (char-after) ?=) + (ledger-remove-effective-date)) + (insert "=" date-string)) + ((eq 'acct-transaction context) + (end-of-line) + (ledger-remove-effective-date) + (insert " ; [=" date-string "]"))))))) (defun ledger-mode-remove-extra-lines () (goto-char (point-min)) |