From 47ae01357b8702df78a4dc15280d78302135b13e Mon Sep 17 00:00:00 2001 From: Craig Earls Date: Sat, 23 Feb 2013 09:15:16 -0700 Subject: Initial commit of environment handling Reads and parses .ledgerc to an alist --- lisp/ldg-init.el | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 lisp/ldg-init.el diff --git a/lisp/ldg-init.el b/lisp/ldg-init.el new file mode 100644 index 00000000..646d91b2 --- /dev/null +++ b/lisp/ldg-init.el @@ -0,0 +1,62 @@ +;;; 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 + +(defvar init-file-name "~/.ledgerrc") +(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) + (save-excursion + (if (and (file-exists-p init-file-name) + (file-readable-p init-file-name)) + (progn + (find-file init-file-name) + (ledger-init-parse-initialization (file-name-nondirectory init-file-name)) + (kill-buffer (file-name-nondirectory init-file-name)))))) + + + +(provide 'ldg-init) + +;;; ldg-init.el ends here -- cgit v1.2.3 From 4cb2779464073aa8f1ba9d25121e3496fa71168f Mon Sep 17 00:00:00 2001 From: Craig Earls Date: Sat, 23 Feb 2013 17:53:55 -0700 Subject: ledger-mode now automatically loads and parses the init file. Currently only pays attention to decimal-comma --- lisp/ldg-commodities.el | 3 +-- lisp/ldg-init.el | 29 ++++++++++++++++++----------- lisp/ldg-mode.el | 2 ++ lisp/ldg-new.el | 11 ++++++----- 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/lisp/ldg-commodities.el b/lisp/ldg-commodities.el index 14cc168f..7f15ab81 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) diff --git a/lisp/ldg-init.el b/lisp/ldg-init.el index 646d91b2..ef69de3d 100644 --- a/lisp/ldg-init.el +++ b/lisp/ldg-init.el @@ -22,14 +22,17 @@ ;;; Commentary: ;; Determine the ledger environment -(defvar init-file-name "~/.ledgerrc") +(defcustom 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 ) + (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) @@ -43,17 +46,21 @@ (if (> (length value) 0) value t)))))))) - ledger-environment-alist)) + ledger-environment-alist)) (defun ledger-init-load-init-file () (interactive) (save-excursion - (if (and (file-exists-p init-file-name) + (if (get-buffer (file-name-nondirectory init-file-name)) + (ledger-init-parse-initialization (file-name-nondirectory init-file-name)) + (if (and + init-file-name + (file-exists-p init-file-name) (file-readable-p init-file-name)) - (progn - (find-file init-file-name) - (ledger-init-parse-initialization (file-name-nondirectory init-file-name)) - (kill-buffer (file-name-nondirectory init-file-name)))))) + (let + (find-file-noselect init-file-name) + (ledger-init-parse-initialization (file-name-nondirectory init-file-name)) + (kill-buffer (file-name-nondirectory init-file-name))))))) diff --git a/lisp/ldg-mode.el b/lisp/ldg-mode.el index 01a1b615..96ce576b 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) 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: -- cgit v1.2.3 From 172a3076bc6d48d0739ddb362f31464eb1fdd931 Mon Sep 17 00:00:00 2001 From: Craig Earls Date: Sat, 23 Feb 2013 18:07:23 -0700 Subject: Updated README files --- README-1ST | 10 ++++++---- README.md | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/README-1ST b/README-1ST index 87e41257..14b9fc6b 100644 --- a/README-1ST +++ b/README-1ST @@ -117,16 +117,18 @@ it's usually fairly obvious where things have gone astray. - Q: Something else fails, or Ledger crashes on startup - A: This, I am most interested in hearing about. Please e-mail me a copy of - config.log and your build log to . Also, if - Ledger is crashing, try running it under gdb like so: + A: This, I am most interested in hearing about. Please file a bug + at the Ledger Bugzilla, http://bugs.ledger-cli.org/. The more + details you can provide, the better. Also, if Ledger is crashing, + try running it under gdb like so: $ gdb ledger (gdb) run ... runs till crash ... (gdb) bt - Send me that backtrace output, and the output from "ledger --version". + Put that backtrace output, and the output from "ledger + --version" in the bug report. ---------------------------------------------------------------------- diff --git a/README.md b/README.md index 5ab146e2..b81c81e7 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ few alternatives. I know, you just want to build and play. If you have all the dependencies installed (see below), then simply do this: - git clone git://github.com/jwiegley/ledger.git + git clone git://github.com/ledger/ledger.git cd ledger && ./acprep update # Update to the latest, configure, make Now try your first ledger command: -- cgit v1.2.3 From 7a561f6b2eca69eaf3f0a430a3af9788d299da1e Mon Sep 17 00:00:00 2001 From: Craig Earls Date: Sun, 24 Feb 2013 08:20:28 -0700 Subject: Bug 907. --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index b81c81e7..45f9de90 100644 --- a/README.md +++ b/README.md @@ -153,8 +153,7 @@ Now that you're up and running, here are a few resources to keep in mind: - [Home page](http://ledger-cli.org) - [IRC channel](irc://irc.freenode.net/ledger) - [Mailing List / Forum](http://groups.google.com/group/ledger-cli) - - [GitHub project page](http://github.com/jwiegley/ledger) - - [Buildbot status](http://www.newartisans.com:9090) + - [GitHub project page](http://github.com/ledger/ledger) - [Ohloh code analysis](http://www.ohloh.net/projects/ledger) If you have ideas you'd like to share, the best way is either to e-mail me a -- cgit v1.2.3 From 94ce2f0fdb4a8ffe576cce0c8bdb2bc96e921cc9 Mon Sep 17 00:00:00 2001 From: Craig Earls Date: Mon, 25 Feb 2013 12:38:53 -0700 Subject: Fixed typo in doc/CMakeLists.txt line 58 "mesage" ==> "message" --- doc/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 8ca83783..c2b1d96a 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -55,7 +55,7 @@ foreach(file ${info_files}) endif(BUILD_WEB_DOCS) if(NOT TEXI2PDF) - mesage(WARNING "Could not find texi2pdf. PDF version of documentation will not be built.") + message(WARNING "Could not find texi2pdf. PDF version of documentation will not be built.") else() add_custom_command(OUTPUT ${file_base}.pdf COMMAND texi2pdf -b -q -o ${file_base}.pdf ${CMAKE_CURRENT_SOURCE_DIR}/${file} -- cgit v1.2.3 From 260d05c8aeb43e73397fee83312c31e800206263 Mon Sep 17 00:00:00 2001 From: Craig Earls Date: Mon, 25 Feb 2013 13:19:51 -0700 Subject: Ledger-mode now automatically configures itself for --decimal-comma if that option is set in ~/.ledgerrc --- lisp/ldg-init.el | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lisp/ldg-init.el b/lisp/ldg-init.el index ef69de3d..fbb4b838 100644 --- a/lisp/ldg-init.el +++ b/lisp/ldg-init.el @@ -22,7 +22,7 @@ ;;; Commentary: ;; Determine the ledger environment -(defcustom init-file-name "~/.ledgerrc" +(defcustom ledger-init-file-name "~/.ledgerrc" "Location of the ledger initialization file. nil if you don't have one" :group 'ledger) @@ -50,17 +50,17 @@ (defun ledger-init-load-init-file () (interactive) - (save-excursion - (if (get-buffer (file-name-nondirectory init-file-name)) - (ledger-init-parse-initialization (file-name-nondirectory init-file-name)) - (if (and - init-file-name - (file-exists-p init-file-name) - (file-readable-p init-file-name)) - (let - (find-file-noselect init-file-name) - (ledger-init-parse-initialization (file-name-nondirectory init-file-name)) - (kill-buffer (file-name-nondirectory init-file-name))))))) + (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)))))) -- cgit v1.2.3 From fe9153496a8cf494bc1962de1c43c43ed109d304 Mon Sep 17 00:00:00 2001 From: Craig Earls Date: Tue, 26 Feb 2013 08:11:36 -0700 Subject: Added a note to the introduction about paying attention to shell expansions --- doc/ledger3.texi | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/ledger3.texi b/doc/ledger3.texi index 44f305f2..ae67df19 100644 --- a/doc/ledger3.texi +++ b/doc/ledger3.texi @@ -304,6 +304,16 @@ If you would rather start with your own journal right away please see @ref{Keepi * Using the Windows command line:: @end menu +Please note that as a command line program, Ledger is controlled from +your shell. There are several different command shells that all behave +slightly differently with repsect to some special characters. In +particular, the BaSH shell will interpret \$ signs differently than +ledger and they must be escaped to reach the actual program. Another +example is zsh, which will interpret \^ differently than ledger expects. +In all cases that follow you should take that into account when entering +the commandline arguments given. There are too many variations between +shells to give concrete examples for each. + @node Balance Report, Register Report, Run Some Reports, Run Some Reports @subsection Balance Report @cindex balance report -- cgit v1.2.3 From 09f5e41d96949927c20d9ced2c9d37fa5a9e785a Mon Sep 17 00:00:00 2001 From: Craig Earls Date: Tue, 26 Feb 2013 08:13:51 -0700 Subject: unescaped a few symbols --- doc/ledger3.texi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/ledger3.texi b/doc/ledger3.texi index ae67df19..dbc25d8f 100644 --- a/doc/ledger3.texi +++ b/doc/ledger3.texi @@ -307,9 +307,9 @@ If you would rather start with your own journal right away please see @ref{Keepi Please note that as a command line program, Ledger is controlled from your shell. There are several different command shells that all behave slightly differently with repsect to some special characters. In -particular, the BaSH shell will interpret \$ signs differently than +particular, the BaSH shell will interpret $ signs differently than ledger and they must be escaped to reach the actual program. Another -example is zsh, which will interpret \^ differently than ledger expects. +example is zsh, which will interpret ^ differently than ledger expects. In all cases that follow you should take that into account when entering the commandline arguments given. There are too many variations between shells to give concrete examples for each. -- cgit v1.2.3 From 821847b0185f3d69bfbe3af3867556335111b9a2 Mon Sep 17 00:00:00 2001 From: Craig Earls Date: Tue, 26 Feb 2013 10:42:30 -0700 Subject: Ensure that commodities using decimal period, have comma separators removed for string-to-number. --- lisp/ldg-commodities.el | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lisp/ldg-commodities.el b/lisp/ldg-commodities.el index 7f15ab81..612350b3 100644 --- a/lisp/ldg-commodities.el +++ b/lisp/ldg-commodities.el @@ -94,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)) -- cgit v1.2.3 From 5e0e7e0a973f8a323decbf818e66a6af3ba218fd Mon Sep 17 00:00:00 2001 From: Craig Earls Date: Tue, 26 Feb 2013 15:08:52 -0700 Subject: Add reconcile menu entry and correct bug in report that failed on automatically generated xacts --- lisp/ldg-mode.el | 2 ++ lisp/ldg-report.el | 20 +++++++++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/lisp/ldg-mode.el b/lisp/ldg-mode.el index 96ce576b..37c0f69e 100644 --- a/lisp/ldg-mode.el +++ b/lisp/ldg-mode.el @@ -128,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-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))) -- cgit v1.2.3