[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#771966: marked as done (unblock: ledger/3.1+dfsg1-2)



Your message dated Wed, 03 Dec 2014 23:01:41 +0000
with message-id <1417647701.10998.22.camel@adam-barratt.org.uk>
and subject line Re: Bug#771966: unblock: ledger/3.1+dfsg1-2
has caused the Debian Bug report #771966,
regarding unblock: ledger/3.1+dfsg1-2
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
771966: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771966
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- 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 ---
--- Begin Message ---
On Wed, 2014-12-03 at 23:54 +0100, David Bremner wrote:
> 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.

Unblocked, thanks.

Regards,

Adam

--- End Message ---

Reply to: