summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ledger-mode.el37
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))