Bug 879 cannot reconcile two ledger buffers
This commit is contained in:
parent
d243f00b91
commit
36a00113d9
1 changed files with 50 additions and 49 deletions
|
|
@ -74,7 +74,6 @@
|
||||||
(car where)
|
(car where)
|
||||||
(error "buffer not set")))
|
(error "buffer not set")))
|
||||||
|
|
||||||
|
|
||||||
(defun ledger-reconcile-toggle ()
|
(defun ledger-reconcile-toggle ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(let ((where (get-text-property (point) 'where))
|
(let ((where (get-text-property (point) 'where))
|
||||||
|
|
@ -100,15 +99,6 @@
|
||||||
(beginning-of-line)
|
(beginning-of-line)
|
||||||
(ledger-display-balance)))
|
(ledger-display-balance)))
|
||||||
|
|
||||||
(defun ledger-reconcile-new-account (account)
|
|
||||||
(interactive "sAccount to reconcile: ")
|
|
||||||
(set (make-local-variable 'ledger-acct) account)
|
|
||||||
(let ((buf (current-buffer)))
|
|
||||||
(if ledger-fold-on-reconcile
|
|
||||||
(ledger-occur-change-regex account ledger-buf))
|
|
||||||
(set-buffer buf)
|
|
||||||
(ledger-reconcile-refresh)))
|
|
||||||
|
|
||||||
(defun ledger-reconcile-refresh ()
|
(defun ledger-reconcile-refresh ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(let ((inhibit-read-only t)
|
(let ((inhibit-read-only t)
|
||||||
|
|
@ -152,7 +142,7 @@
|
||||||
(target-buffer (if where
|
(target-buffer (if where
|
||||||
(ledger-reconcile-get-buffer where)
|
(ledger-reconcile-get-buffer where)
|
||||||
nil))
|
nil))
|
||||||
(cur-buf (current-buffer)))
|
(cur-buf (get-buffer ledger-recon-buffer-name)))
|
||||||
(when target-buffer
|
(when target-buffer
|
||||||
(switch-to-buffer-other-window target-buffer)
|
(switch-to-buffer-other-window target-buffer)
|
||||||
(goto-char (cdr where))
|
(goto-char (cdr where))
|
||||||
|
|
@ -171,7 +161,7 @@
|
||||||
|
|
||||||
(defun ledger-reconcile-quit ()
|
(defun ledger-reconcile-quit ()
|
||||||
(interactive)
|
(interactive)
|
||||||
;(ledger-reconcile-quit-cleanup)
|
(ledger-reconcile-quit-cleanup)
|
||||||
(let ((buf ledger-buf)
|
(let ((buf ledger-buf)
|
||||||
(recon-buf (get-buffer ledger-recon-buffer-name)))
|
(recon-buf (get-buffer ledger-recon-buffer-name)))
|
||||||
;Make sure you delete the window before you delete the buffer,
|
;Make sure you delete the window before you delete the buffer,
|
||||||
|
|
@ -186,9 +176,9 @@
|
||||||
(let ((buf ledger-buf)
|
(let ((buf ledger-buf)
|
||||||
(reconcile-buf (get-buffer ledger-recon-buffer-name)))
|
(reconcile-buf (get-buffer ledger-recon-buffer-name)))
|
||||||
(with-current-buffer buf
|
(with-current-buffer buf
|
||||||
(remove-hook 'after-save-hook 'ledger-reconcile-refresh-after-save t))
|
(remove-hook 'after-save-hook 'ledger-reconcile-refresh-after-save t)
|
||||||
(if ledger-fold-on-reconcile
|
(if ledger-fold-on-reconcile
|
||||||
(ledger-occur-quit-buffer buf))))
|
(ledger-occur-quit-buffer buf)))))
|
||||||
|
|
||||||
(defun ledger-marker-where-xact-is (emacs-xact posting)
|
(defun ledger-marker-where-xact-is (emacs-xact posting)
|
||||||
"find the position of the xact in the ledger-buf buffer using
|
"find the position of the xact in the ledger-buf buffer using
|
||||||
|
|
@ -219,11 +209,10 @@
|
||||||
(unless (eobp)
|
(unless (eobp)
|
||||||
(unless (looking-at "(")
|
(unless (looking-at "(")
|
||||||
(error (buffer-string)))
|
(error (buffer-string)))
|
||||||
(read (current-buffer))))))
|
(read (current-buffer)))))) ;current-buffer is the *temp* created above
|
||||||
(if (> (length xacts) 0)
|
(if (> (length xacts) 0)
|
||||||
(progn
|
(progn
|
||||||
(dolist (xact xacts)
|
(dolist (xact xacts)
|
||||||
(let ((index 1))
|
|
||||||
(dolist (posting (nthcdr 5 xact))
|
(dolist (posting (nthcdr 5 xact))
|
||||||
(let ((beg (point))
|
(let ((beg (point))
|
||||||
(where (ledger-marker-where-xact-is xact posting)))
|
(where (ledger-marker-where-xact-is xact posting)))
|
||||||
|
|
@ -239,18 +228,17 @@
|
||||||
'where where))
|
'where where))
|
||||||
(set-text-properties beg (1- (point))
|
(set-text-properties beg (1- (point))
|
||||||
(list 'face 'ledger-font-reconciler-uncleared-face
|
(list 'face 'ledger-font-reconciler-uncleared-face
|
||||||
'where where))))
|
'where where)))) ))
|
||||||
(setq index (1+ index)))))
|
|
||||||
(goto-char (point-max))
|
(goto-char (point-max))
|
||||||
(delete-char -1))
|
(delete-char -1)) ;gets rid of the extra line feed at the bottom of the list
|
||||||
(insert (concat "There are no uncleared entries for " account)))
|
(insert (concat "There are no uncleared entries for " account)))
|
||||||
(goto-char (point-min))
|
(goto-char (point-min))
|
||||||
(set-buffer-modified-p nil)
|
(set-buffer-modified-p nil)
|
||||||
(toggle-read-only t)
|
(toggle-read-only t)
|
||||||
|
|
||||||
; this next piece of code ensures that the last of the visible
|
; this next piece of code ensures that the last of the visible
|
||||||
; transactions in the ledger buffer is at the bottom of the
|
; transactions in the ledger buffer is at the bottom of the main
|
||||||
; main window. The key to this is to ensure the window is selected
|
; window. The key to this is to ensure the window is selected
|
||||||
; when the buffer point is moved and recentered. If they aren't
|
; when the buffer point is moved and recentered. If they aren't
|
||||||
; strange things happen.
|
; strange things happen.
|
||||||
|
|
||||||
|
|
@ -278,32 +266,44 @@
|
||||||
(defun ledger-reconcile (account)
|
(defun ledger-reconcile (account)
|
||||||
(interactive "sAccount to reconcile: ")
|
(interactive "sAccount to reconcile: ")
|
||||||
(let ((buf (current-buffer))
|
(let ((buf (current-buffer))
|
||||||
(rbuf (get-buffer ledger-recon-buffer-name)))
|
(rbuf (get-buffer ledger-recon-buffer-name))) ;this means only one *Reconcile* buffer, ever
|
||||||
(if rbuf
|
(if rbuf ; *Reconcile* already exists
|
||||||
(progn
|
(with-current-buffer rbuf
|
||||||
(quit-window (get-buffer-window rbuf))
|
(set 'ledger-acct account) ; already buffer local
|
||||||
(kill-buffer rbuf)))
|
(if (not (eq buf rbuf))
|
||||||
|
(progn ; called from some other ledger-mode buffer
|
||||||
|
(ledger-reconcile-quit-cleanup)
|
||||||
|
(set 'ledger-buf buf))) ; should already be buffer-local
|
||||||
|
(if ledger-fold-on-reconcile
|
||||||
|
(ledger-occur-change-regex account ledger-buf))
|
||||||
|
(set-buffer (get-buffer ledger-recon-buffer-name))
|
||||||
|
(ledger-reconcile-refresh))
|
||||||
|
|
||||||
|
(progn ; no recon-buffer, starting from scratch.
|
||||||
(add-hook 'after-save-hook 'ledger-reconcile-refresh-after-save nil t)
|
(add-hook 'after-save-hook 'ledger-reconcile-refresh-after-save nil t)
|
||||||
(if ledger-fold-on-reconcile
|
(if ledger-fold-on-reconcile
|
||||||
(ledger-occur-mode account buf))
|
(ledger-occur-mode account buf))
|
||||||
|
|
||||||
(with-current-buffer
|
(with-current-buffer
|
||||||
(if ledger-reconcile-force-window-bottom
|
(if ledger-reconcile-force-window-bottom
|
||||||
;create the *Reconcile* window directly below the ledger
|
;create the *Reconcile* window directly below the ledger buffer.
|
||||||
;buffer.
|
|
||||||
(progn
|
(progn
|
||||||
(set-window-buffer
|
(set-window-buffer
|
||||||
(split-window (get-buffer-window (current-buffer)) nil nil)
|
(split-window (get-buffer-window buf) nil nil)
|
||||||
(get-buffer-create ledger-recon-buffer-name))
|
(get-buffer-create ledger-recon-buffer-name))
|
||||||
(get-buffer ledger-recon-buffer-name))
|
(get-buffer ledger-recon-buffer-name))
|
||||||
(pop-to-buffer (get-buffer-create ledger-recon-buffer-name)))
|
(pop-to-buffer (get-buffer-create ledger-recon-buffer-name)))
|
||||||
(ledger-reconcile-mode)
|
(ledger-reconcile-mode)
|
||||||
(set (make-local-variable 'ledger-buf) buf)
|
(set (make-local-variable 'ledger-buf) buf)
|
||||||
(set (make-local-variable 'ledger-acct) account)
|
(set (make-local-variable 'ledger-acct) account)
|
||||||
(ledger-do-reconcile))))
|
(ledger-do-reconcile))))))
|
||||||
|
|
||||||
(defvar ledger-reconcile-mode-abbrev-table)
|
(defvar ledger-reconcile-mode-abbrev-table)
|
||||||
|
|
||||||
|
(defun ledger-reconcile-display-internals ()
|
||||||
|
(interactive)
|
||||||
|
(message "%S %S" ledger-acct ledger-buf))
|
||||||
|
|
||||||
(define-derived-mode ledger-reconcile-mode text-mode "Reconcile"
|
(define-derived-mode ledger-reconcile-mode text-mode "Reconcile"
|
||||||
"A mode for reconciling ledger entries."
|
"A mode for reconciling ledger entries."
|
||||||
(let ((map (make-sparse-keymap)))
|
(let ((map (make-sparse-keymap)))
|
||||||
|
|
@ -313,12 +313,13 @@
|
||||||
(define-key map [? ] 'ledger-reconcile-toggle)
|
(define-key map [? ] 'ledger-reconcile-toggle)
|
||||||
(define-key map [?a] 'ledger-reconcile-add)
|
(define-key map [?a] 'ledger-reconcile-add)
|
||||||
(define-key map [?d] 'ledger-reconcile-delete)
|
(define-key map [?d] 'ledger-reconcile-delete)
|
||||||
(define-key map [?g] 'ledger-reconcile-new-account)
|
(define-key map [?g] 'ledger-reconcile);
|
||||||
(define-key map [?n] 'next-line)
|
(define-key map [?n] 'next-line)
|
||||||
(define-key map [?p] 'previous-line)
|
(define-key map [?p] 'previous-line)
|
||||||
(define-key map [?s] 'ledger-reconcile-save)
|
(define-key map [?s] 'ledger-reconcile-save)
|
||||||
(define-key map [?q] 'ledger-reconcile-quit)
|
(define-key map [?q] 'ledger-reconcile-quit)
|
||||||
(define-key map [?b] 'ledger-display-balance)
|
(define-key map [?b] 'ledger-display-balance)
|
||||||
|
(define-key map [?i] 'ledger-reconcile-display-internals)
|
||||||
|
|
||||||
(define-key map [menu-bar] (make-sparse-keymap "ldg-recon-menu"))
|
(define-key map [menu-bar] (make-sparse-keymap "ldg-recon-menu"))
|
||||||
(define-key map [menu-bar ldg-recon-menu] (cons "Reconcile" map))
|
(define-key map [menu-bar ldg-recon-menu] (cons "Reconcile" map))
|
||||||
|
|
@ -334,7 +335,7 @@
|
||||||
(define-key map [menu-bar ldg-recon-menu sep3] '("--"))
|
(define-key map [menu-bar ldg-recon-menu sep3] '("--"))
|
||||||
(define-key map [menu-bar ldg-recon-menu bal] '("Show Cleared Balance" . ledger-display-balance))
|
(define-key map [menu-bar ldg-recon-menu bal] '("Show Cleared Balance" . ledger-display-balance))
|
||||||
(define-key map [menu-bar ldg-recon-menu sep4] '("--"))
|
(define-key map [menu-bar ldg-recon-menu sep4] '("--"))
|
||||||
(define-key map [menu-bar ldg-recon-menu rna] '("Reconcile New Account" . ledger-reconcile-new-account))
|
(define-key map [menu-bar ldg-recon-menu rna] '("Reconcile New Account" . ledger-reconcile))
|
||||||
(define-key map [menu-bar ldg-recon-menu ref] '("Refresh" . ledger-reconcile-refresh))
|
(define-key map [menu-bar ldg-recon-menu ref] '("Refresh" . ledger-reconcile-refresh))
|
||||||
(define-key map [menu-bar ldg-recon-menu sav] '("Save" . ledger-reconcile-save))
|
(define-key map [menu-bar ldg-recon-menu sav] '("Save" . ledger-reconcile-save))
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue