Merge pull request #144 from enderw88/next
Add regional sort facility to ledger mode
This commit is contained in:
commit
fdb9d0c2ca
7 changed files with 94 additions and 25 deletions
|
|
@ -2376,7 +2376,7 @@ reconcile uncleared entries related to an account
|
|||
@item C-c C-d
|
||||
delete the current entry
|
||||
@item C-c C-s
|
||||
sort all entries in the journal by date. Drop comments outside of entries
|
||||
sort all entries in the region.
|
||||
@item C-c C-o C-r
|
||||
run a ledger report
|
||||
@item C-C C-o C-g
|
||||
|
|
|
|||
|
|
@ -56,6 +56,21 @@
|
|||
"Face for Ledger comments"
|
||||
:group 'ledger-faces)
|
||||
|
||||
(defface ledger-font-reconciler-uncleared-face
|
||||
`((t :foreground "green" :weight normal ))
|
||||
"Default face for uncleared transactions in the reconcile window"
|
||||
:group 'ledger-faces)
|
||||
|
||||
(defface ledger-font-reconciler-cleared-face
|
||||
`((t :foreground "grey70" :weight normal ))
|
||||
"Default face for cleared (*) transactions in the reconcile window"
|
||||
:group 'ledger-faces)
|
||||
|
||||
(defface ledger-font-reconciler-pending-face
|
||||
`((t :foreground "yellow" :weight normal ))
|
||||
"Default face for pending (!) transactions in the reconcile window"
|
||||
:group 'ledger-faces)
|
||||
|
||||
|
||||
(defvar ledger-font-lock-keywords
|
||||
'(("^[0-9]+[-/.=][-/.=0-9]+\\s-\\!\\s-+\\(([^)]+)\\s-+\\)?\\([^*].+?\\)\\(\\( ;\\| ;\\|$\\)\\)" 2 'ledger-font-pending-face)
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ customizable to ease retro-entry.")
|
|||
(define-key map [(control ?c) (control ?c)] 'ledger-toggle-current)
|
||||
(define-key map [(control ?c) (control ?e)] 'ledger-toggle-current-entry)
|
||||
(define-key map [(control ?c) (control ?r)] 'ledger-reconcile)
|
||||
(define-key map [(control ?c) (control ?s)] 'ledger-sort)
|
||||
(define-key map [(control ?c) (control ?s)] 'ledger-sort-region)
|
||||
(define-key map [(control ?c) (control ?t)] 'ledger-test-run)
|
||||
(define-key map [tab] 'pcomplete)
|
||||
(define-key map [(control ?i)] 'pcomplete)
|
||||
|
|
@ -96,7 +96,8 @@ customizable to ease retro-entry.")
|
|||
(define-key map [menu-bar ldg-menu sm] '("Set Month" . ledger-set-month))
|
||||
(define-key map [menu-bar ldg-menu sy] '("Set Year" . ledger-set-year))
|
||||
(define-key map [menu-bar ldg-menu s1] '("--"))
|
||||
(define-key map [menu-bar ldg-menu so] '("Sort Buffer" . ledger-sort))
|
||||
(define-key map [menu-bar ldg-menu so1] '("Sort Buffer" . ledger-sort-buffer))
|
||||
(define-key map [menu-bar ldg-menu so2] '("Sort Region" . ledger-sort-region))
|
||||
(define-key map [menu-bar ldg-menu s2] '("--"))
|
||||
(define-key map [menu-bar ldg-menu te] '("Toggle Current Posting" . ledger-toggle-current))
|
||||
(define-key map [menu-bar ldg-menu tt] '("Toggle Current Transaction" . ledger-toggle-current-entry))
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@
|
|||
(require 'ldg-test)
|
||||
(require 'ldg-texi)
|
||||
(require 'ldg-xact)
|
||||
(require 'ldg-sort)
|
||||
(require 'ldg-fonts)
|
||||
;(autoload #'ledger-mode "ldg-mode" nil t)
|
||||
;(autoload #'ledger-fully-complete-entry "ldg-complete" nil t)
|
||||
|
|
|
|||
|
|
@ -55,13 +55,17 @@
|
|||
(with-current-buffer ledger-buf
|
||||
(goto-char (cdr where))
|
||||
(setq cleared (ledger-toggle-current-entry)))
|
||||
;remove the existing face and add the new face
|
||||
(remove-text-properties (line-beginning-position)
|
||||
(line-end-position)
|
||||
(list 'face))
|
||||
(if cleared
|
||||
(add-text-properties (line-beginning-position)
|
||||
(line-end-position)
|
||||
(list 'face 'bold))
|
||||
(remove-text-properties (line-beginning-position)
|
||||
(line-end-position)
|
||||
(list 'face))))
|
||||
(list 'face 'ledger-font-reconciler-cleared-face ))
|
||||
(add-text-properties (line-beginning-position)
|
||||
(line-end-position)
|
||||
(list 'face 'ledger-font-reconciler-uncleared-face ))))
|
||||
(forward-line)
|
||||
(ledger-display-balance)))
|
||||
|
||||
|
|
@ -172,10 +176,11 @@
|
|||
(nth 4 item) (nth 1 xact) (nth 2 xact)))
|
||||
(if (nth 3 xact)
|
||||
(set-text-properties beg (1- (point))
|
||||
(list 'face 'bold
|
||||
(list 'face 'ledger-font-reconciler-cleared-face
|
||||
'where where))
|
||||
(set-text-properties beg (1- (point))
|
||||
(list 'where where))))
|
||||
(list 'face 'ledger-font-reconciler-uncleared-face
|
||||
'where where))))
|
||||
(setq index (1+ index)))))
|
||||
(goto-char (point-min))
|
||||
(set-buffer-modified-p nil)
|
||||
|
|
|
|||
62
lisp/ldg-sort.el
Normal file
62
lisp/ldg-sort.el
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
;;; ldg-xact.el --- Helper code for use with the "ledger" command-line tool
|
||||
|
||||
;; Copyright (C) 2003-2013 John Wiegley (johnw AT gnu DOT org)
|
||||
|
||||
;; This file is not part of GNU Emacs.
|
||||
|
||||
;; This is free software; you can redistribute it and/or modify it under
|
||||
;; the terms of the GNU General Public License as published by the Free
|
||||
;; Software Foundation; either version 2, or (at your option) any later
|
||||
;; version.
|
||||
;;
|
||||
;; This is distributed in the hope that it will be useful, but WITHOUT
|
||||
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
;; for more details.
|
||||
;;
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with GNU Emacs; see the file COPYING. If not, write to the
|
||||
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||
;; MA 02111-1307, USA.
|
||||
|
||||
;; A sample entry sorting function, which works if entry dates are of
|
||||
;; the form YYYY/mm/dd.
|
||||
|
||||
(defun ledger-next-record-function ()
|
||||
(if (re-search-forward
|
||||
(concat "^[0-9/.=-]+\\(\\s-+\\*\\)?\\(\\s-+(.*?)\\)?\\s-+"
|
||||
"\\(.+?\\)\\(\t\\|\n\\| [ \t]\\)") nil t)
|
||||
(goto-char (match-beginning 0))
|
||||
(goto-char (point-max))))
|
||||
|
||||
(defun ledger-end-record-function ()
|
||||
(forward-paragraph))
|
||||
|
||||
(defun ledger-sort-region (beg end)
|
||||
(interactive "r") ;load beg and end from point and mark automagically
|
||||
(let ((new-beg beg)
|
||||
(new-end end))
|
||||
(save-excursion
|
||||
(save-restriction
|
||||
(ledger-next-record-function) ;make sure point is at the beginning of a xact
|
||||
(message "beg: %s end: %s" new-beg new-end)
|
||||
(setq new-beg (point))
|
||||
(goto-char end)
|
||||
(ledger-next-record-function) ;make sure end of region is at the beginning of
|
||||
;next record after the region
|
||||
(setq new-end (point))
|
||||
(narrow-to-region beg end)
|
||||
(goto-char (point-min))
|
||||
|
||||
(let ((inhibit-field-text-motion t))
|
||||
(sort-subr
|
||||
nil
|
||||
'ledger-next-record-function
|
||||
'ledger-end-record-function))))))
|
||||
|
||||
(defun ledger-sort-buffer ()
|
||||
(interactive)
|
||||
(ledger-sort-region (point-min) (point-max)))
|
||||
|
||||
|
||||
(provide 'ldg-sort)
|
||||
|
|
@ -22,21 +22,6 @@
|
|||
;; A sample entry sorting function, which works if entry dates are of
|
||||
;; the form YYYY/mm/dd.
|
||||
|
||||
(defun ledger-sort ()
|
||||
(interactive)
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(sort-subr
|
||||
nil
|
||||
(function
|
||||
(lambda ()
|
||||
(if (re-search-forward
|
||||
(concat "^[0-9/.=-]+\\(\\s-+\\*\\)?\\(\\s-+(.*?)\\)?\\s-+"
|
||||
"\\(.+?\\)\\(\t\\|\n\\| [ \t]\\)") nil t)
|
||||
(goto-char (match-beginning 0))
|
||||
(goto-char (point-max)))))
|
||||
(function
|
||||
(lambda ()
|
||||
(forward-paragraph))))))
|
||||
|
||||
|
||||
(provide 'ldg-xact)
|
||||
Loading…
Add table
Reference in a new issue