summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorCraig Earls <enderw88@gmail.com>2013-02-26 15:37:15 -0700
committerCraig Earls <enderw88@gmail.com>2013-02-26 15:37:15 -0700
commita40d9f721fa237ed61b6dda7d18e86d18d150db7 (patch)
tree686289505b3986e26cef942566eed444c8492897 /lisp
parent929175216dc55544c8c5911902014c7727a95fd7 (diff)
parent5e0e7e0a973f8a323decbf818e66a6af3ba218fd (diff)
downloadfork-ledger-a40d9f721fa237ed61b6dda7d18e86d18d150db7.tar.gz
fork-ledger-a40d9f721fa237ed61b6dda7d18e86d18d150db7.tar.bz2
fork-ledger-a40d9f721fa237ed61b6dda7d18e86d18d150db7.zip
Merge branch 'next' into ledger-mode-automatic-transactions
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ldg-commodities.el7
-rw-r--r--lisp/ldg-init.el69
-rw-r--r--lisp/ldg-mode.el4
-rw-r--r--lisp/ldg-new.el11
-rw-r--r--lisp/ldg-report.el20
5 files changed, 94 insertions, 17 deletions
diff --git a/lisp/ldg-commodities.el b/lisp/ldg-commodities.el
index 14cc168f..612350b3 100644
--- a/lisp/ldg-commodities.el
+++ b/lisp/ldg-commodities.el
@@ -36,7 +36,6 @@
This only has effect interfacing to calc mode in edit amount"
:type 'boolean
:group 'ledger)
-
(defun ledger-split-commodity-string (str)
"Split a commoditized amount into two parts"
(let (val
@@ -85,7 +84,7 @@ DIRECTION can be :to-user or :from-user. All math calculations
are done with decimal-period, some users may prefer decimal-comma
which must be translated both directions."
(let ((val number-string))
- (if ledger-use-decimal-comma
+ (if (assoc "decimal-comma" ledger-environment-alist)
(cond ((eq direction :from-user)
;; change string to decimal-period
(while (string-match "," val)
@@ -95,7 +94,9 @@ which must be translated both directions."
(while (string-match "\\." val)
(setq val (replace-match "," nil nil val)))) ;; gets rid of periods
(t
- (error "ledger-commodity-string-number-decimalize: direction not properly specified %S" direction))))
+ (error "ledger-commodity-string-number-decimalize: direction not properly specified %S" direction)))
+ (while (string-match "," val)
+ (setq val (replace-match "" nil nil val))))
val))
diff --git a/lisp/ldg-init.el b/lisp/ldg-init.el
new file mode 100644
index 00000000..fbb4b838
--- /dev/null
+++ b/lisp/ldg-init.el
@@ -0,0 +1,69 @@
+;;; ldg-init.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.
+
+;;; Commentary:
+;; Determine the ledger environment
+
+(defcustom ledger-init-file-name "~/.ledgerrc"
+ "Location of the ledger initialization file. nil if you don't have one"
+ :group 'ledger)
+
+(defvar ledger-environment-alist nil)
+
+(defun ledger-init-parse-initialization (file)
+ (with-current-buffer file
+ (setq ledger-environment-alist nil)
+ (goto-char (point-min))
+ (while (re-search-forward "^--.+?\\($\\|[ ]\\)" nil t )
+ (let ((matchb (match-beginning 0)) ;; save the match data, string-match stomp on it
+ (matche (match-end 0)))
+ (end-of-line)
+ (setq ledger-environment-alist
+ (append ledger-environment-alist
+ (list (cons (let ((flag (buffer-substring (+ 2 matchb) matche)))
+ (if (string-match "[ \t\n\r]+\\'" flag)
+ (replace-match "" t t flag)
+ flag))
+ (let ((value (buffer-substring matche (point) )))
+ (if (> (length value) 0)
+ value
+ t))))))))
+ ledger-environment-alist))
+
+(defun ledger-init-load-init-file ()
+ (interactive)
+ (let ((init-base-name (file-name-nondirectory ledger-init-file-name)))
+ (if (get-buffer init-base-name) ;; init file already loaded, parse it and leave it
+ (ledger-init-parse-initialization init-base-name)
+ (if (and ;; init file not loaded, load, parse and kill
+ ledger-init-file-name
+ (file-exists-p ledger-init-file-name)
+ (file-readable-p ledger-init-file-name))
+ (progn
+ (find-file-noselect ledger-init-file-name)
+ (ledger-init-parse-initialization init-base-name)
+ (kill-buffer init-base-name))))))
+
+
+
+(provide 'ldg-init)
+
+;;; ldg-init.el ends here
diff --git a/lisp/ldg-mode.el b/lisp/ldg-mode.el
index 01a1b615..37c0f69e 100644
--- a/lisp/ldg-mode.el
+++ b/lisp/ldg-mode.el
@@ -76,6 +76,8 @@
(add-hook 'before-revert-hook 'ledger-remove-overlays nil t)
(make-variable-buffer-local 'highlight-overlay)
+ (ledger-init-load-init-file)
+
(let ((map (current-local-map)))
(define-key map [(control ?c) (control ?a)] 'ledger-add-transaction)
(define-key map [(control ?c) (control ?b)] 'ledger-post-edit-amount)
@@ -126,6 +128,8 @@
(define-key map [toggle-post] '(menu-item "Toggle Current Posting" ledger-toggle-current))
(define-key map [toggle-xact] '(menu-item "Toggle Current Transaction" ledger-toggle-current-entry))
(define-key map [sep4] '(menu-item "--"))
+ (define-key map [edit-amount] '(menu-item "Reconcile Account" ledger-reconcile))
+ (define-key map [sep6] '(menu-item "--"))
(define-key map [edit-amount] '(menu-item "Calc on Amount" ledger-post-edit-amount))
(define-key map [sep] '(menu-item "--"))
(define-key map [delete-xact] '(menu-item "Delete Entry" ledger-delete-current-transaction))
diff --git a/lisp/ldg-new.el b/lisp/ldg-new.el
index d3a4bd02..7a2961f7 100644
--- a/lisp/ldg-new.el
+++ b/lisp/ldg-new.el
@@ -32,22 +32,23 @@
;;; Commentary:
;; Load up the ledger mode
+(require 'esh-arg)
+(require 'ldg-commodities)
(require 'ldg-complete)
(require 'ldg-exec)
+(require 'ldg-fonts)
+(require 'ldg-init)
(require 'ldg-mode)
+(require 'ldg-occur)
(require 'ldg-post)
(require 'ldg-reconcile)
(require 'ldg-register)
(require 'ldg-report)
+(require 'ldg-sort)
(require 'ldg-state)
(require 'ldg-test)
(require 'ldg-texi)
(require 'ldg-xact)
-(require 'ldg-sort)
-(require 'ldg-fonts)
-(require 'ldg-occur)
-(require 'ldg-commodities)
-(require 'esh-arg)
;;; Code:
diff --git a/lisp/ldg-report.el b/lisp/ldg-report.el
index 944ae2e6..4db58494 100644
--- a/lisp/ldg-report.el
+++ b/lisp/ldg-report.el
@@ -319,16 +319,18 @@ Optional EDIT the command."
(let ((file (match-string 1))
(line (string-to-number (match-string 2))))
(delete-region (match-beginning 0) (match-end 0))
- (set-text-properties (line-beginning-position) (line-end-position)
- (list 'ledger-source (cons file (save-window-excursion
- (save-excursion
- (find-file file)
- (widen)
- (ledger-goto-line line)
- (point-marker))))))
- (add-text-properties (line-beginning-position) (line-end-position)
+ (if file
+ (progn
+ (set-text-properties (line-beginning-position) (line-end-position)
+ (list 'ledger-source (cons file (save-window-excursion
+ (save-excursion
+ (find-file file)
+ (widen)
+ (ledger-goto-line line)
+ (point-marker))))))
+ (add-text-properties (line-beginning-position) (line-end-position)
(list 'face 'ledger-font-report-clickable-face))
- (end-of-line))))
+ (end-of-line))))))
(goto-char data-pos)))