--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Please unblock package ledger
(explain the reason for the unblock here)
Upstream 3.1 contained several usability regressions for the
emacs-mode in binary package ledger-el. These regressions are
reported in bug #769454
Shortly after the release of 3.1 upstream committed several patches to
the emacs support, which I have cherry-picked.
(include/attach the debdiff against the package in testing)
I will attach the debdiff. Unfortunately the patch export is a bit
sub-optimimal, so I'll also attach a git log, in case that helps.
unblock ledger/3.1+dfsg1-2
- -- System Information:
Debian Release: jessie/sid
APT prefers testing
APT policy: (900, 'testing')
Architecture: amd64 (x86_64)
Kernel: Linux 3.16.0-4-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_CA.UTF-8, LC_CTYPE=en_CA.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQGcBAEBCAAGBQJUf5SbAAoJEPIClx2kp54sYPoL/jDUXIBgzd1cKGajStjA1Bto
86hcuplnZUenLY/wFupXYfSvpH+AMUYFJ2og9Z4F7W/lHbdNK8chwWzkl1eWUmNi
qhge/gk9qK0JRxlE3t1Ia+Q9DgKDPwrhA9GGGLAGpkr/cdVOu33+zBuvZkGATDjS
9e0XoAPO2V/ntY9bC2PRp0vpazEiRYWR4dfm3Sr3yUAzKVJRK/pPeV2e1Xb0ewZU
wVERza3cbXAyGYCNlToA82FE0umCjADiRNJaG6iVNjJU44KGw4NRG6RTGm6LTBp2
KsG9JqyaQDIlGfggmj71HUszs1hSWryx0w65O10EykyH4CoUonBbqP6QSLhVngT0
GU0w/yLcQrG9L9ge4ecP7bdlETmihMg9owJuqKcYmIhK3VylzNqntxpax0i8k749
2XPBrb5dSwBJivHdD2LfhQyDIfXPAh/D1Hf5qImPbAVZNcJh9m0UhZ/nHCERG4DU
jRp/wr9MC6dsk1dj3GDkGl7faAtU5BTi0dTf7i1X6Q==
=siMe
-----END PGP SIGNATURE-----
diff -Nru ledger-3.1+dfsg1/debian/changelog ledger-3.1+dfsg1/debian/changelog
--- ledger-3.1+dfsg1/debian/changelog 2014-10-13 11:04:40.000000000 +0200
+++ ledger-3.1+dfsg1/debian/changelog 2014-12-03 22:29:20.000000000 +0100
@@ -1,3 +1,12 @@
+ledger (3.1+dfsg1-2) unstable; urgency=medium
+
+ * Cherry pick patches for Emacs ledger-mode (ledger-el) from
+ upstream (Closes: #769454).
+ - fix for completely broken M-p in Emacs ledger-mode
+ - fixes for syntax highlightling in ledger-mode
+
+ -- David Bremner <bremner@debian.org> Wed, 03 Dec 2014 22:25:08 +0100
+
ledger (3.1+dfsg1-1) unstable; urgency=medium
* New upstream release
diff -Nru ledger-3.1+dfsg1/debian/patches/0001-debcherry-fixup-patch.patch ledger-3.1+dfsg1/debian/patches/0001-debcherry-fixup-patch.patch
--- ledger-3.1+dfsg1/debian/patches/0001-debcherry-fixup-patch.patch 2014-10-13 11:04:57.000000000 +0200
+++ ledger-3.1+dfsg1/debian/patches/0001-debcherry-fixup-patch.patch 2014-12-03 23:24:40.000000000 +0100
@@ -1,8 +1,24 @@
-From 6bf5613f5adff590fe25f22583c5e09625debcf3 Mon Sep 17 00:00:00 2001
+From 95ad158c8d7fa773dadbaf49d5ce4174bb110e4b Mon Sep 17 00:00:00 2001
From: David Bremner <david@tethera.net>
-Date: Mon, 13 Oct 2014 11:04:57 +0200
+Date: Wed, 3 Dec 2014 23:24:40 +0100
Subject: [PATCH 1/2] debcherry fixup patch
+6f83309 Fix minor navigation bugs. Prev and next act now properly handle directives and empty lines
+ - no changes against upstream or conflicts
+aabb590 Fix a bug the caused reconciliation to lock up in an automatic transaction was followed immediately with a virtual transaction on the same account.
+ - no changes against upstream or conflicts
+2950adb Smash a bug that cause the status on a posting with no amount to bleed into the next line.
+ - extra changes or conflicts
+66c1721 Add 1 to the end of region for single line directives. This will force the layout to show across the entire buffer.
+ - no changes against upstream or conflicts
+0b47567 Handle block comments as blocks rather than individual lines.
+ - extra changes or conflicts
+2f7d166 Fix navigate bug keeping prev-xact key binding from working.
+ - extra changes or conflicts
+839f618 Detect the beginning of periodic transactions properly.
+ - extra changes or conflicts
+7857f98 Improve finding boundaries of elements for fontification. Also added P for price directives.
+ - extra changes or conflicts
88dbf49 disable RPATH for libledger
- extra changes or conflicts
a5315c6 Don't install files deleted by Debian
@@ -12,9 +28,16 @@
b55f44e enable "tidy mode" for texi2pdf
- extra changes or conflicts
---
- doc/CMakeLists.txt | 2 +-
- src/CMakeLists.txt | 4 +++-
- 2 files changed, 4 insertions(+), 2 deletions(-)
+ doc/CMakeLists.txt | 2 +-
+ lisp/ledger-fontify.el | 75 +++++++++++++++++++++++++++++++--------------
+ lisp/ledger-fonts.el | 7 +++++
+ lisp/ledger-mode.el | 12 ++++----
+ lisp/ledger-navigate.el | 81 ++++++++++++++++++++++++++++++++++++++++++++-----
+ lisp/ledger-occur.el | 2 +-
+ lisp/ledger-regex.el | 5 +--
+ lisp/ledger-xact.el | 2 +-
+ src/CMakeLists.txt | 4 ++-
+ 9 files changed, 149 insertions(+), 41 deletions(-)
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
index 96c6d51..d810078 100644
@@ -29,6 +52,330 @@
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file}
VERBATIM)
list(APPEND ledger_doc_files ${file_base}.pdf)
+diff --git a/lisp/ledger-fontify.el b/lisp/ledger-fontify.el
+index 45baa43..309cbc3 100644
+--- a/lisp/ledger-fontify.el
++++ b/lisp/ledger-fontify.el
+@@ -52,7 +52,7 @@
+ (interactive "d")
+ (save-excursion
+ (goto-char position)
+- (let ((extents (ledger-navigate-find-xact-extents position))
++ (let ((extents (ledger-navigate-find-element-extents position))
+ (state (ledger-transaction-state)))
+ (if (and ledger-fontify-xact-state-overrides state)
+ (cond ((eq state 'cleared)
+@@ -63,6 +63,7 @@
+
+ (defun ledger-fontify-xact-by-line (extents)
+ "do line-by-line detailed fontification of xact"
++ (interactive)
+ (save-excursion
+ (ledger-fontify-xact-start (car extents))
+ (while (< (point) (cadr extents))
+@@ -92,30 +93,58 @@ Fontify the first line of an xact"
+ (ledger-fontify-set-face (list (match-beginning 8)
+ (match-end 8)) 'ledger-font-comment-face)))
+
++
+ (defun ledger-fontify-posting (pos)
+- (let ((state nil))
+- (re-search-forward ledger-posting-regex)
+- (if (match-string 1)
+- (save-match-data (setq state (ledger-state-from-string (s-trim (match-string 1))))))
+- (ledger-fontify-set-face (list (match-beginning 0) (match-end 2))
+- (cond ((eq state 'cleared)
+- 'ledger-font-posting-account-cleared-face)
+- ((eq state 'pending)
+- 'ledger-font-posting-account-pending-face)
+- (t
+- 'ledger-font-posting-account-face)))
+- (ledger-fontify-set-face (list (match-beginning 4) (match-end 4))
+- (cond ((eq state 'cleared)
+- 'ledger-font-posting-amount-cleared-face)
+- ((eq state 'pending)
+- 'ledger-font-posting-amount-pending-face)
+- (t
+- 'ledger-font-posting-amount-face)))
+- (ledger-fontify-set-face (list (match-beginning 5) (match-end 5))
+- 'ledger-font-comment-face)))
++ (let* ((state nil)
++ (end-of-line-comment nil)
++ (end (progn (end-of-line)
++ (point)))
++ (start (progn (beginning-of-line)
++ (point))))
++
++ ;; Look for a posting status flag
++ (save-match-data ;; must use save-match-data to shadow the search
++ ;; results. If there is no status flag then the
++ ;; search below will fail and NOT clear the match
++ ;; data. So if the previous line did have a
++ ;; status flag it is still sitting in the match
++ ;; data, causing the current line to be fontified
++ ;; like the previous line. Don't ask how long
++ ;; that took to figure out
++ (re-search-forward " \\([*!]\\) " end t)
++ (if (match-string 1)
++ (setq state (ledger-state-from-string (s-trim (match-string 1))))))
++ (beginning-of-line)
++ (re-search-forward "[[:graph:]]\\([ \t][ \t]\\)" end 'end) ;; find the end of the account, or end of line
++
++ (when (<= (point) end) ;; we are still on the line
++ (ledger-fontify-set-face (list start (point))
++ (cond ((eq state 'cleared)
++ 'ledger-font-posting-account-cleared-face)
++ ((eq state 'pending)
++ 'ledger-font-posting-account-pending-face)
++ (t
++ 'ledger-font-posting-account-face)))
++
++
++ (when (< (point) end) ;; there is still more to fontify
++ (setq start (point)) ;; update start of next font region
++ (setq end-of-line-comment (re-search-forward ";" end 'end)) ;; find the end of the line, or start of a comment
++ (ledger-fontify-set-face (list start (point) )
++ (cond ((eq state 'cleared)
++ 'ledger-font-posting-amount-cleared-face)
++ ((eq state 'pending)
++ 'ledger-font-posting-amount-pending-face)
++ (t
++ 'ledger-font-posting-amount-face)))
++ (when end-of-line-comment
++ (setq start (point))
++ (end-of-line)
++ (ledger-fontify-set-face (list (- start 1) (point)) ;; subtract 1 from start because we passed the semi-colon
++ 'ledger-font-comment-face))))))
+
+ (defun ledger-fontify-directive-at (position)
+- (let ((extents (ledger-navigate-find-xact-extents position))
++ (let ((extents (ledger-navigate-find-element-extents position))
+ (face 'ledger-font-default-face))
+ (cond ((looking-at "=")
+ (setq face 'ledger-font-auto-xact-face))
+@@ -153,6 +182,8 @@ Fontify the first line of an xact"
+ (setq face 'ledger-font-include-directive-face))
+ ((looking-at "payee")
+ (setq face 'ledger-font-payee-directive-face))
++ ((looking-at "P")
++ (setq face 'ledger-font-price-directive-face))
+ ((looking-at "tag")
+ (setq face 'ledger-font-tag-directive-face)))
+ (ledger-fontify-set-face extents face)))
+diff --git a/lisp/ledger-fonts.el b/lisp/ledger-fonts.el
+index f8ca3fa..9992731 100644
+--- a/lisp/ledger-fonts.el
++++ b/lisp/ledger-fonts.el
+@@ -70,6 +70,8 @@
+ "Default face for pending (!) payees"
+ :group 'ledger-faces)
+
++
++
+ (defface ledger-font-xact-highlight-face
+ `((t :inherit ledger-occur-xact-face))
+ "Default face for transaction under point"
+@@ -95,6 +97,11 @@
+ "Default face for other transactions"
+ :group 'ledger-faces)
+
++(defface ledger-font-price-directive-face
++ `((t :inherit ledger-font-directive-face))
++ "Default face for other transactions"
++ :group 'ledger-faces)
++
+ (defface ledger-font-apply-directive-face
+ `((t :inherit ledger-font-directive-face))
+ "Default face for other transactions"
+diff --git a/lisp/ledger-mode.el b/lisp/ledger-mode.el
+index 3b00bb9..1eab0f3 100644
+--- a/lisp/ledger-mode.el
++++ b/lisp/ledger-mode.el
+@@ -96,11 +96,11 @@
+ "Start a ledger session with the current month, but make it customizable to ease retro-entry.")
+
+ (defun ledger-read-account-with-prompt (prompt)
+- (let* ((context (ledger-context-at-point))
+- (default (if (eq (ledger-context-line-type context) 'acct-transaction)
+- (regexp-quote (ledger-context-field-value context 'account))
+- nil)))
+- (ledger-read-string-with-default prompt default)))
++ (let ((context (ledger-context-at-point)))
++ (ledger-read-string-with-default prompt
++ (if (eq (ledger-context-line-type context) 'acct-transaction)
++ (regexp-quote (ledger-context-field-value context 'account))
++ nil))))
+
+ (defun ledger-read-date (prompt)
+ "Returns user-supplied date after `PROMPT', defaults to today."
+@@ -262,7 +262,7 @@ With a prefix argument, remove the effective date. "
+ (define-key map [(control ?c) (control ?o) (control ?r)] 'ledger-report)
+ (define-key map [(control ?c) (control ?o) (control ?s)] 'ledger-report-save)
+
+- (define-key map [(meta ?p)] 'ledger-navigate-prev-xact)
++ (define-key map [(meta ?p)] 'ledger-navigate-prev-xact-or-directive)
+ (define-key map [(meta ?n)] 'ledger-navigate-next-xact-or-directive)
+ map)
+ "Keymap for `ledger-mode'.")
+diff --git a/lisp/ledger-navigate.el b/lisp/ledger-navigate.el
+index 1e66dde..d954222 100644
+--- a/lisp/ledger-navigate.el
++++ b/lisp/ledger-navigate.el
+@@ -54,26 +54,31 @@ beginning with whitespace"
+ (ledger-navigate-start-xact-or-directive-p)))
+ (forward-line))))
+
+-(defun ledger-navigate-prev-xact ()
++(defun ledger-navigate-prev-xact-or-directive ()
+ "Move point to beginning of previous xact."
+- (ledger-navigate-beginning-of-xact)
+- (re-search-backward ledger-xact-start-regex nil t))
++ (interactive)
++ (let ((context (car (ledger-context-at-point))))
++ (when (equal context 'acct-transaction)
++ (ledger-navigate-beginning-of-xact))
++ (beginning-of-line)
++ (re-search-backward "^[[:graph:]]" nil t)))
+
+ (defun ledger-navigate-beginning-of-xact ()
+ "Move point to the beginning of the current xact"
+ (interactive)
+ ;; need to start at the beginning of a line incase we are in the first line of an xact already.
+ (beginning-of-line)
+- (unless (looking-at ledger-xact-start-regex)
+- (re-search-backward ledger-xact-start-regex nil t)
+- (beginning-of-line))
++ (let ((sreg (concat "^\\(=\\|~\\|" ledger-iso-date-regexp "\\)")))
++ (unless (looking-at sreg)
++ (re-search-backward sreg nil t)
++ (beginning-of-line)))
+ (point))
+
+ (defun ledger-navigate-end-of-xact ()
+ "Move point to end of xact."
+ (interactive)
+ (ledger-navigate-next-xact-or-directive)
+- (backward-char)
++ (re-search-backward "^[ \t]")
+ (end-of-line)
+ (point))
+
+@@ -91,4 +96,66 @@ Requires empty line separating xacts."
+ (list (ledger-navigate-beginning-of-xact)
+ (ledger-navigate-end-of-xact))))
+
++(defun ledger-navigate-find-directive-extents (pos)
++ (goto-char pos)
++ (let ((begin (progn (beginning-of-line)
++ (point)))
++ (end (progn (end-of-line)
++ (+ 1 (point)))))
++ ;; handle block comments here
++ (beginning-of-line)
++ (if (looking-at " *;")
++ (progn
++ (while (and (looking-at " *;")
++ (> (point) (point-min)))
++ (forward-line -1))
++ ;; We are either at the beginning of the buffer, or we found
++ ;; a line outside the comment. If we are not at the
++ ;; beginning of the buffer then we need to move forward a
++ ;; line.
++ (if (> (point) (point-min))
++ (progn (forward-line 1)
++ (beginning-of-line)))
++ (setq begin (point))
++ (goto-char pos)
++ (beginning-of-line)
++ (while (and (looking-at " *;")
++ (< (point) (point-max)))
++ (forward-line 1))
++ (setq end (point))))
++ (list begin end)))
++
++(defun ledger-navigate-block-comment (pos)
++ (interactive "d")
++ (goto-char pos)
++ (let ((begin (progn (beginning-of-line)
++ (point)))
++ (end (progn (end-of-line)
++ (point))))
++ ;; handle block comments here
++ (beginning-of-line)
++ (if (looking-at " *;")
++ (progn
++ (while (and (looking-at " *;")
++ (> (point) (point-min)))
++ (forward-line -1))
++ (setq begin (point))
++ (goto-char pos)
++ (beginning-of-line)
++ (while (and (looking-at " *;")
++ (< (point) (point-max)))
++ (forward-line 1))
++ (setq end (point))))
++ (list begin end)))
++
++
++(defun ledger-navigate-find-element-extents (pos)
++ "return list containing beginning and end of the entity surrounding point"
++ (interactive "d")
++ (save-excursion
++ (goto-char pos)
++ (beginning-of-line)
++ (if (looking-at "[ =~0-9]")
++ (ledger-navigate-find-xact-extents pos)
++ (ledger-navigate-find-directive-extents pos))))
+ ;;; ledger-navigate.el ends here
+diff --git a/lisp/ledger-occur.el b/lisp/ledger-occur.el
+index cd7a267..400967f 100644
+--- a/lisp/ledger-occur.el
++++ b/lisp/ledger-occur.el
+@@ -160,7 +160,7 @@ Used for coordinating `ledger-occur' with other buffers, like reconcile."
+ (while (not (eobp))
+ ;; if something found
+ (when (setq endpoint (re-search-forward regex nil 'end))
+- (setq bounds (ledger-navigate-find-xact-extents endpoint))
++ (setq bounds (ledger-navigate-find-element-extents endpoint))
+ (push bounds lines)
+ ;; move to the end of the xact, no need to search inside it more
+ (goto-char (cadr bounds))))
+diff --git a/lisp/ledger-regex.el b/lisp/ledger-regex.el
+index 238cfc6..b13647b 100644
+--- a/lisp/ledger-regex.el
++++ b/lisp/ledger-regex.el
+@@ -333,7 +333,8 @@
+ "\\)"))
+
+ (defconst ledger-xact-start-regex
+- (concat ledger-iso-date-regexp ;; subexp 1
++ (concat "^" ledger-iso-date-regexp ;; subexp 1
++ ;; "\\(=" ledger-iso-date-regexp "\\)?"
+ " ?\\([ *!]\\)" ;; mark, subexp 5
+ " ?\\((.*)\\)?" ;; code, subexp 6
+ " ?\\([^;\n]+\\)" ;; desc, subexp 7
+@@ -343,7 +344,7 @@
+ (defconst ledger-posting-regex
+ (concat "^[ \t]+ ?" ;; initial white space
+ "\\([*!]\\)? ?" ;; state, subexpr 1
+- "\\(.+?\\(\n\\|[ \t][ \t]\\)\\)" ;; account, subexpr 2
++ "\\([[:print:]]+\\([ \t][ \t]\\)\\)" ;; account, subexpr 2
+ "\\([^;\n]*\\)" ;; amount, subexpr 4
+ "\\(.*\\)" ;; comment, subexpr 5
+ ))
+diff --git a/lisp/ledger-xact.el b/lisp/ledger-xact.el
+index 522f8d9..3ef6738 100644
+--- a/lisp/ledger-xact.el
++++ b/lisp/ledger-xact.el
+@@ -42,7 +42,7 @@
+ (defun ledger-highlight-xact-under-point ()
+ "Move the highlight overlay to the current transaction."
+ (if ledger-highlight-xact-under-point
+- (let ((exts (ledger-navigate-find-xact-extents (point)))
++ (let ((exts (ledger-navigate-find-element-extents (point)))
+ (ovl ledger-xact-highlight-overlay))
+ (if (not ledger-xact-highlight-overlay)
+ (setq ovl
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index aec75c0..688cd9e 100644
--- a/src/CMakeLists.txt
@@ -52,5 +399,5 @@
install(TARGETS libledger DESTINATION ${CMAKE_INSTALL_LIBDIR})
--
-2.1.1
+2.1.3
diff -Nru ledger-3.1+dfsg1/debian/patches/0002-Fix-texinfo-syntax-errors.patch ledger-3.1+dfsg1/debian/patches/0002-Fix-texinfo-syntax-errors.patch
--- ledger-3.1+dfsg1/debian/patches/0002-Fix-texinfo-syntax-errors.patch 2014-10-13 11:04:57.000000000 +0200
+++ ledger-3.1+dfsg1/debian/patches/0002-Fix-texinfo-syntax-errors.patch 2014-12-03 23:24:40.000000000 +0100
@@ -1,4 +1,4 @@
-From 6893d283b07ab11e17c700b8e5e0918c41ec4e19 Mon Sep 17 00:00:00 2001
+From 99144a6a7ff6f11c2574b5c90837fe8f543e6a9e Mon Sep 17 00:00:00 2001
From: Martin Michlmayr <tbm@cyrius.com>
Date: Sun, 12 Oct 2014 16:52:43 -0400
Subject: [PATCH 2/2] Fix texinfo syntax errors
@@ -48,5 +48,5 @@
text that occurs between parentheses before the payee).
--
-2.1.1
+2.1.3
commit a194a99c20991760936f2538f68d40d7f7c5661e
Author: David Bremner <bremner@debian.org>
Date: Wed Dec 3 22:25:37 2014 +0100
changelog stanza for 3.1+dfsg1-2
diff --git a/debian/changelog b/debian/changelog
index 9322708..b0371ac 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+ledger (3.1+dfsg1-2) unstable; urgency=medium
+
+ * Cherry pick patches for Emacs ledger-mode (ledger-el) from
+ upstream (Closes: #769454).
+ - fix for completely broken M-p in Emacs ledger-mode
+ - fixes for syntax highlightling in ledger-mode
+
+ -- David Bremner <bremner@debian.org> Wed, 03 Dec 2014 22:25:08 +0100
+
ledger (3.1+dfsg1-1) unstable; urgency=medium
* New upstream release
commit ef3a1ab0a948d8250eb5309141551a01ed94d727
Author: Craig Earls <enderw88@gmail.com>
Date: Sat Nov 15 21:36:34 2014 -0700
Fix minor navigation bugs. Prev and next act now properly handle directives and empty lines
(cherry picked from commit db7e4fd741021bec72121f915414679d30144735)
diff --git a/lisp/ledger-mode.el b/lisp/ledger-mode.el
index 9376e2e..1eab0f3 100644
--- a/lisp/ledger-mode.el
+++ b/lisp/ledger-mode.el
@@ -262,7 +262,7 @@ With a prefix argument, remove the effective date. "
(define-key map [(control ?c) (control ?o) (control ?r)] 'ledger-report)
(define-key map [(control ?c) (control ?o) (control ?s)] 'ledger-report-save)
- (define-key map [(meta ?p)] 'ledger-navigate-prev-xact)
+ (define-key map [(meta ?p)] 'ledger-navigate-prev-xact-or-directive)
(define-key map [(meta ?n)] 'ledger-navigate-next-xact-or-directive)
map)
"Keymap for `ledger-mode'.")
diff --git a/lisp/ledger-navigate.el b/lisp/ledger-navigate.el
index 5da5cf8..d954222 100644
--- a/lisp/ledger-navigate.el
+++ b/lisp/ledger-navigate.el
@@ -54,11 +54,14 @@ beginning with whitespace"
(ledger-navigate-start-xact-or-directive-p)))
(forward-line))))
-(defun ledger-navigate-prev-xact ()
+(defun ledger-navigate-prev-xact-or-directive ()
"Move point to beginning of previous xact."
(interactive)
- (ledger-navigate-beginning-of-xact)
- (re-search-backward ledger-xact-start-regex nil t))
+ (let ((context (car (ledger-context-at-point))))
+ (when (equal context 'acct-transaction)
+ (ledger-navigate-beginning-of-xact))
+ (beginning-of-line)
+ (re-search-backward "^[[:graph:]]" nil t)))
(defun ledger-navigate-beginning-of-xact ()
"Move point to the beginning of the current xact"
@@ -75,7 +78,7 @@ beginning with whitespace"
"Move point to end of xact."
(interactive)
(ledger-navigate-next-xact-or-directive)
- (backward-char)
+ (re-search-backward "^[ \t]")
(end-of-line)
(point))
commit 09833b86fb7d8fba96e3151192c7570c81228b1f
Author: Craig Earls <enderw88@gmail.com>
Date: Fri Nov 14 17:22:04 2014 -0700
Fix a bug the caused reconciliation to lock up in an automatic transaction was followed immediately with a virtual transaction on the same account.
This was related to the navigation changes push a while back.
(cherry picked from commit 312b7ffa72787762de630bd750efd35f65d11c8d)
diff --git a/lisp/ledger-navigate.el b/lisp/ledger-navigate.el
index d4e7098..5da5cf8 100644
--- a/lisp/ledger-navigate.el
+++ b/lisp/ledger-navigate.el
@@ -65,7 +65,7 @@ beginning with whitespace"
(interactive)
;; need to start at the beginning of a line incase we are in the first line of an xact already.
(beginning-of-line)
- (let ((sreg (concat "^\\(~\\|" ledger-iso-date-regexp "\\)")))
+ (let ((sreg (concat "^\\(=\\|~\\|" ledger-iso-date-regexp "\\)")))
(unless (looking-at sreg)
(re-search-backward sreg nil t)
(beginning-of-line)))
@@ -152,7 +152,7 @@ Requires empty line separating xacts."
(save-excursion
(goto-char pos)
(beginning-of-line)
- (if (looking-at "[ ~0-9]")
+ (if (looking-at "[ =~0-9]")
(ledger-navigate-find-xact-extents pos)
(ledger-navigate-find-directive-extents pos))))
;;; ledger-navigate.el ends here
diff --git a/lisp/ledger-occur.el b/lisp/ledger-occur.el
index cd7a267..400967f 100644
--- a/lisp/ledger-occur.el
+++ b/lisp/ledger-occur.el
@@ -160,7 +160,7 @@ Used for coordinating `ledger-occur' with other buffers, like reconcile."
(while (not (eobp))
;; if something found
(when (setq endpoint (re-search-forward regex nil 'end))
- (setq bounds (ledger-navigate-find-xact-extents endpoint))
+ (setq bounds (ledger-navigate-find-element-extents endpoint))
(push bounds lines)
;; move to the end of the xact, no need to search inside it more
(goto-char (cadr bounds))))
commit 2780eb2f1a5b487514226ef2b41bb69a02062d43
Author: Craig Earls <enderw88@gmail.com>
Date: Tue Nov 11 19:54:43 2014 -0700
Smash a bug that cause the status on a posting with no amount to bleed into the next line.
(cherry picked from commit a3f3aa304fcfb19fc716c5eaf33a6e152bb3aa71)
diff --git a/lisp/ledger-fontify.el b/lisp/ledger-fontify.el
index d876e5e..309cbc3 100644
--- a/lisp/ledger-fontify.el
+++ b/lisp/ledger-fontify.el
@@ -63,6 +63,7 @@
(defun ledger-fontify-xact-by-line (extents)
"do line-by-line detailed fontification of xact"
+ (interactive)
(save-excursion
(ledger-fontify-xact-start (car extents))
(while (< (point) (cadr extents))
@@ -92,27 +93,55 @@ Fontify the first line of an xact"
(ledger-fontify-set-face (list (match-beginning 8)
(match-end 8)) 'ledger-font-comment-face)))
+
(defun ledger-fontify-posting (pos)
- (let ((state nil))
- (re-search-forward ledger-posting-regex)
- (if (match-string 1)
- (save-match-data (setq state (ledger-state-from-string (s-trim (match-string 1))))))
- (ledger-fontify-set-face (list (match-beginning 0) (match-end 2))
- (cond ((eq state 'cleared)
- 'ledger-font-posting-account-cleared-face)
- ((eq state 'pending)
- 'ledger-font-posting-account-pending-face)
- (t
- 'ledger-font-posting-account-face)))
- (ledger-fontify-set-face (list (match-beginning 4) (match-end 4))
- (cond ((eq state 'cleared)
- 'ledger-font-posting-amount-cleared-face)
- ((eq state 'pending)
- 'ledger-font-posting-amount-pending-face)
- (t
- 'ledger-font-posting-amount-face)))
- (ledger-fontify-set-face (list (match-beginning 5) (match-end 5))
- 'ledger-font-comment-face)))
+ (let* ((state nil)
+ (end-of-line-comment nil)
+ (end (progn (end-of-line)
+ (point)))
+ (start (progn (beginning-of-line)
+ (point))))
+
+ ;; Look for a posting status flag
+ (save-match-data ;; must use save-match-data to shadow the search
+ ;; results. If there is no status flag then the
+ ;; search below will fail and NOT clear the match
+ ;; data. So if the previous line did have a
+ ;; status flag it is still sitting in the match
+ ;; data, causing the current line to be fontified
+ ;; like the previous line. Don't ask how long
+ ;; that took to figure out
+ (re-search-forward " \\([*!]\\) " end t)
+ (if (match-string 1)
+ (setq state (ledger-state-from-string (s-trim (match-string 1))))))
+ (beginning-of-line)
+ (re-search-forward "[[:graph:]]\\([ \t][ \t]\\)" end 'end) ;; find the end of the account, or end of line
+
+ (when (<= (point) end) ;; we are still on the line
+ (ledger-fontify-set-face (list start (point))
+ (cond ((eq state 'cleared)
+ 'ledger-font-posting-account-cleared-face)
+ ((eq state 'pending)
+ 'ledger-font-posting-account-pending-face)
+ (t
+ 'ledger-font-posting-account-face)))
+
+
+ (when (< (point) end) ;; there is still more to fontify
+ (setq start (point)) ;; update start of next font region
+ (setq end-of-line-comment (re-search-forward ";" end 'end)) ;; find the end of the line, or start of a comment
+ (ledger-fontify-set-face (list start (point) )
+ (cond ((eq state 'cleared)
+ 'ledger-font-posting-amount-cleared-face)
+ ((eq state 'pending)
+ 'ledger-font-posting-amount-pending-face)
+ (t
+ 'ledger-font-posting-amount-face)))
+ (when end-of-line-comment
+ (setq start (point))
+ (end-of-line)
+ (ledger-fontify-set-face (list (- start 1) (point)) ;; subtract 1 from start because we passed the semi-colon
+ 'ledger-font-comment-face))))))
(defun ledger-fontify-directive-at (position)
(let ((extents (ledger-navigate-find-element-extents position))
diff --git a/lisp/ledger-navigate.el b/lisp/ledger-navigate.el
index 97a545b..d4e7098 100644
--- a/lisp/ledger-navigate.el
+++ b/lisp/ledger-navigate.el
@@ -65,7 +65,7 @@ beginning with whitespace"
(interactive)
;; need to start at the beginning of a line incase we are in the first line of an xact already.
(beginning-of-line)
- (let ((sreg (concat "\\(~\\|" ledger-iso-date-regexp "\\)")))
+ (let ((sreg (concat "^\\(~\\|" ledger-iso-date-regexp "\\)")))
(unless (looking-at sreg)
(re-search-backward sreg nil t)
(beginning-of-line)))
diff --git a/lisp/ledger-regex.el b/lisp/ledger-regex.el
index 238cfc6..b13647b 100644
--- a/lisp/ledger-regex.el
+++ b/lisp/ledger-regex.el
@@ -333,7 +333,8 @@
"\\)"))
(defconst ledger-xact-start-regex
- (concat ledger-iso-date-regexp ;; subexp 1
+ (concat "^" ledger-iso-date-regexp ;; subexp 1
+ ;; "\\(=" ledger-iso-date-regexp "\\)?"
" ?\\([ *!]\\)" ;; mark, subexp 5
" ?\\((.*)\\)?" ;; code, subexp 6
" ?\\([^;\n]+\\)" ;; desc, subexp 7
@@ -343,7 +344,7 @@
(defconst ledger-posting-regex
(concat "^[ \t]+ ?" ;; initial white space
"\\([*!]\\)? ?" ;; state, subexpr 1
- "\\(.+?\\(\n\\|[ \t][ \t]\\)\\)" ;; account, subexpr 2
+ "\\([[:print:]]+\\([ \t][ \t]\\)\\)" ;; account, subexpr 2
"\\([^;\n]*\\)" ;; amount, subexpr 4
"\\(.*\\)" ;; comment, subexpr 5
))
commit 544dd9a8f95f1678de38c01a8a537e5250e35241
Author: Craig Earls <enderw88@gmail.com>
Date: Sun Nov 9 10:02:03 2014 -0700
Add 1 to the end of region for single line directives. This will force the layout to show across the entire buffer.
(cherry picked from commit e54d7392bfafa51e657f92ee1a1feb68f7f2b123)
diff --git a/lisp/ledger-navigate.el b/lisp/ledger-navigate.el
index 5bc1837..97a545b 100644
--- a/lisp/ledger-navigate.el
+++ b/lisp/ledger-navigate.el
@@ -98,7 +98,7 @@ Requires empty line separating xacts."
(let ((begin (progn (beginning-of-line)
(point)))
(end (progn (end-of-line)
- (point))))
+ (+ 1 (point)))))
;; handle block comments here
(beginning-of-line)
(if (looking-at " *;")
commit 76bd06ec0c7b8ab5a96b6245b941e2a1338c275f
Author: Craig Earls <enderw88@gmail.com>
Date: Sun Nov 9 09:50:22 2014 -0700
Handle block comments as blocks rather than individual lines.
(cherry picked from commit 2ef1c092100d53ad2882a59b9668cd183226c28f)
diff --git a/lisp/ledger-navigate.el b/lisp/ledger-navigate.el
index 5c89480..5bc1837 100644
--- a/lisp/ledger-navigate.el
+++ b/lisp/ledger-navigate.el
@@ -95,10 +95,56 @@ Requires empty line separating xacts."
(defun ledger-navigate-find-directive-extents (pos)
(goto-char pos)
- (list (progn (beginning-of-line)
- (point))
- (progn (end-of-line)
- (point))))
+ (let ((begin (progn (beginning-of-line)
+ (point)))
+ (end (progn (end-of-line)
+ (point))))
+ ;; handle block comments here
+ (beginning-of-line)
+ (if (looking-at " *;")
+ (progn
+ (while (and (looking-at " *;")
+ (> (point) (point-min)))
+ (forward-line -1))
+ ;; We are either at the beginning of the buffer, or we found
+ ;; a line outside the comment. If we are not at the
+ ;; beginning of the buffer then we need to move forward a
+ ;; line.
+ (if (> (point) (point-min))
+ (progn (forward-line 1)
+ (beginning-of-line)))
+ (setq begin (point))
+ (goto-char pos)
+ (beginning-of-line)
+ (while (and (looking-at " *;")
+ (< (point) (point-max)))
+ (forward-line 1))
+ (setq end (point))))
+ (list begin end)))
+
+(defun ledger-navigate-block-comment (pos)
+ (interactive "d")
+ (goto-char pos)
+ (let ((begin (progn (beginning-of-line)
+ (point)))
+ (end (progn (end-of-line)
+ (point))))
+ ;; handle block comments here
+ (beginning-of-line)
+ (if (looking-at " *;")
+ (progn
+ (while (and (looking-at " *;")
+ (> (point) (point-min)))
+ (forward-line -1))
+ (setq begin (point))
+ (goto-char pos)
+ (beginning-of-line)
+ (while (and (looking-at " *;")
+ (< (point) (point-max)))
+ (forward-line 1))
+ (setq end (point))))
+ (list begin end)))
+
(defun ledger-navigate-find-element-extents (pos)
"return list containing beginning and end of the entity surrounding point"
commit fcaa5d313146fb18f77148cc76415f267b116abe
Author: Craig Earls <enderw88@gmail.com>
Date: Sun Nov 9 09:05:13 2014 -0700
Fix navigate bug keeping prev-xact key binding from working.
(cherry picked from commit 8a87fd1310c69133506d4e428abd02de07d29ac9)
diff --git a/lisp/ledger-mode.el b/lisp/ledger-mode.el
index 3b00bb9..9376e2e 100644
--- a/lisp/ledger-mode.el
+++ b/lisp/ledger-mode.el
@@ -96,11 +96,11 @@
"Start a ledger session with the current month, but make it customizable to ease retro-entry.")
(defun ledger-read-account-with-prompt (prompt)
- (let* ((context (ledger-context-at-point))
- (default (if (eq (ledger-context-line-type context) 'acct-transaction)
- (regexp-quote (ledger-context-field-value context 'account))
- nil)))
- (ledger-read-string-with-default prompt default)))
+ (let ((context (ledger-context-at-point)))
+ (ledger-read-string-with-default prompt
+ (if (eq (ledger-context-line-type context) 'acct-transaction)
+ (regexp-quote (ledger-context-field-value context 'account))
+ nil))))
(defun ledger-read-date (prompt)
"Returns user-supplied date after `PROMPT', defaults to today."
diff --git a/lisp/ledger-navigate.el b/lisp/ledger-navigate.el
index 2759d2d..5c89480 100644
--- a/lisp/ledger-navigate.el
+++ b/lisp/ledger-navigate.el
@@ -56,6 +56,7 @@ beginning with whitespace"
(defun ledger-navigate-prev-xact ()
"Move point to beginning of previous xact."
+ (interactive)
(ledger-navigate-beginning-of-xact)
(re-search-backward ledger-xact-start-regex nil t))
diff --git a/lisp/ledger-xact.el b/lisp/ledger-xact.el
index 522f8d9..3ef6738 100644
--- a/lisp/ledger-xact.el
+++ b/lisp/ledger-xact.el
@@ -42,7 +42,7 @@
(defun ledger-highlight-xact-under-point ()
"Move the highlight overlay to the current transaction."
(if ledger-highlight-xact-under-point
- (let ((exts (ledger-navigate-find-xact-extents (point)))
+ (let ((exts (ledger-navigate-find-element-extents (point)))
(ovl ledger-xact-highlight-overlay))
(if (not ledger-xact-highlight-overlay)
(setq ovl
commit 1762af6098820ca9149d3f2ed3b5f7c6bbc21562
Author: Craig Earls <enderw88@gmail.com>
Date: Fri Nov 7 18:56:11 2014 -0700
Detect the beginning of periodic transactions properly.
(cherry picked from commit 6f3dad2024bb33c13dbb029b2127e2a23da86e35)
diff --git a/lisp/ledger-navigate.el b/lisp/ledger-navigate.el
index 1843430..2759d2d 100644
--- a/lisp/ledger-navigate.el
+++ b/lisp/ledger-navigate.el
@@ -64,9 +64,10 @@ beginning with whitespace"
(interactive)
;; need to start at the beginning of a line incase we are in the first line of an xact already.
(beginning-of-line)
- (unless (looking-at ledger-xact-start-regex)
- (re-search-backward ledger-xact-start-regex nil t)
- (beginning-of-line))
+ (let ((sreg (concat "\\(~\\|" ledger-iso-date-regexp "\\)")))
+ (unless (looking-at sreg)
+ (re-search-backward sreg nil t)
+ (beginning-of-line)))
(point))
(defun ledger-navigate-end-of-xact ()
@@ -104,7 +105,7 @@ Requires empty line separating xacts."
(save-excursion
(goto-char pos)
(beginning-of-line)
- (if (looking-at "[ 0-9]")
+ (if (looking-at "[ ~0-9]")
(ledger-navigate-find-xact-extents pos)
(ledger-navigate-find-directive-extents pos))))
;;; ledger-navigate.el ends here
commit f2fcc9bd535eba2a89e4aa5aa5b748b37f0b35de
Author: Craig Earls <enderw88@gmail.com>
Date: Fri Nov 7 18:19:57 2014 -0700
Improve finding boundaries of elements for fontification. Also added P for price directives.
(cherry picked from commit 1bd67755fa3127d80b7534d15f1f9de1b477c19a)
diff --git a/lisp/ledger-fontify.el b/lisp/ledger-fontify.el
index 45baa43..d876e5e 100644
--- a/lisp/ledger-fontify.el
+++ b/lisp/ledger-fontify.el
@@ -52,7 +52,7 @@
(interactive "d")
(save-excursion
(goto-char position)
- (let ((extents (ledger-navigate-find-xact-extents position))
+ (let ((extents (ledger-navigate-find-element-extents position))
(state (ledger-transaction-state)))
(if (and ledger-fontify-xact-state-overrides state)
(cond ((eq state 'cleared)
@@ -115,7 +115,7 @@ Fontify the first line of an xact"
'ledger-font-comment-face)))
(defun ledger-fontify-directive-at (position)
- (let ((extents (ledger-navigate-find-xact-extents position))
+ (let ((extents (ledger-navigate-find-element-extents position))
(face 'ledger-font-default-face))
(cond ((looking-at "=")
(setq face 'ledger-font-auto-xact-face))
@@ -153,6 +153,8 @@ Fontify the first line of an xact"
(setq face 'ledger-font-include-directive-face))
((looking-at "payee")
(setq face 'ledger-font-payee-directive-face))
+ ((looking-at "P")
+ (setq face 'ledger-font-price-directive-face))
((looking-at "tag")
(setq face 'ledger-font-tag-directive-face)))
(ledger-fontify-set-face extents face)))
diff --git a/lisp/ledger-fonts.el b/lisp/ledger-fonts.el
index f8ca3fa..9992731 100644
--- a/lisp/ledger-fonts.el
+++ b/lisp/ledger-fonts.el
@@ -70,6 +70,8 @@
"Default face for pending (!) payees"
:group 'ledger-faces)
+
+
(defface ledger-font-xact-highlight-face
`((t :inherit ledger-occur-xact-face))
"Default face for transaction under point"
@@ -95,6 +97,11 @@
"Default face for other transactions"
:group 'ledger-faces)
+(defface ledger-font-price-directive-face
+ `((t :inherit ledger-font-directive-face))
+ "Default face for other transactions"
+ :group 'ledger-faces)
+
(defface ledger-font-apply-directive-face
`((t :inherit ledger-font-directive-face))
"Default face for other transactions"
diff --git a/lisp/ledger-navigate.el b/lisp/ledger-navigate.el
index 1e66dde..1843430 100644
--- a/lisp/ledger-navigate.el
+++ b/lisp/ledger-navigate.el
@@ -91,4 +91,20 @@ Requires empty line separating xacts."
(list (ledger-navigate-beginning-of-xact)
(ledger-navigate-end-of-xact))))
+(defun ledger-navigate-find-directive-extents (pos)
+ (goto-char pos)
+ (list (progn (beginning-of-line)
+ (point))
+ (progn (end-of-line)
+ (point))))
+
+(defun ledger-navigate-find-element-extents (pos)
+ "return list containing beginning and end of the entity surrounding point"
+ (interactive "d")
+ (save-excursion
+ (goto-char pos)
+ (beginning-of-line)
+ (if (looking-at "[ 0-9]")
+ (ledger-navigate-find-xact-extents pos)
+ (ledger-navigate-find-directive-extents pos))))
;;; ledger-navigate.el ends here
--- End Message ---