branch: elpa/beancount
commit 9508e5640c4c2f6eeb0ebe321f42d40a447c5de8
Author: Daniele Nicolodi <dani...@grinta.net>
Commit: Daniele Nicolodi <dani...@grinta.net>

    Add README.org
---
 README.org | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 83 insertions(+)

diff --git a/README.org b/README.org
new file mode 100644
index 0000000000..1d869e5f8d
--- /dev/null
+++ b/README.org
@@ -0,0 +1,83 @@
+#+TITLE: Emacs major-mode to work with Beancount ledger files
+
+This package provides =beancount-mode= an Emacs 
[[https://www.gnu.org/software/emacs/manual/html_node/emacs/Major-Modes.html][major-mode]]
+implementing syntax highlighting, indentation, completion , and other
+facilities to edit and work with Beancount ledger files.
+
+To instruct Emacs to activate =beancount-mode= when opening files with
+a ~.beancount~ extension, you can add this code to your Emacs
+configuration, typically in the =~/.emacs.d/init.el= file:
+
+#+begin_src elisp
+(add-to-list 'load-path "/path/to/beancount-mode/")
+(require 'beancount)
+(add-to-list 'auto-mode-alist '("\\.beancount\\'" . beancount-mode))
+#+end_src
+
+Most facilities commonly provided by Emacs major modes are implemented
+by =beancount-mode=. Documentation on the provided functionality and on
+the default keybindings can be obtained with the =describe-mode= command
+in a buffer with =beancount-mode= active.
+
+In a nutshell, when =beancount-mode= is active:
+
+- The "TAB" key either indents, completes, or folds the heading at
+  point, depending on the context.
+
+- Amounts in postings are indented so that the decimal point is at the
+  =beancount-number-alignment-column= column. Setting this variable to
+  0 will cause the alignment column to be determined from file
+  content.
+
+- Postings in transactions, as well as metadata, links, and tags
+  following directives, and are indented with
+  =beancount-transaction-indent= spaces.
+
+- Pressing the "RET" key causes the current line to be automatically
+  indented. If the current line is a posting, the amount will be
+  indented as described above.
+
+The automatic indentation behavior is defined by Emacs auto indent
+mechanism, however, it can be surprising or undesired. It can be
+disabled setting =electric-indent-chars= to =nil= after loading
+=beancount-mode=, for example like this:
+
+#+begin_src elisp
+(add-hook 'beancount-mode-hook
+  (lambda () (setq-local electric-indent-chars nil))
+#+end_src
+
+Beancount ledger files can grow very large. It is thus often practical
+to structure them in sections and subsections. To support this,
+=beancount-mode= leverages 
[[https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Mode.html][Outline
 minor-mode]] to enable navigation of
+the document structure to fold and unfold the document sections,
+similarly to what is possible in [[https://orgmode.org/][Org mode]]. Lines 
starting with one
+asterisks "=*=" or three or more semicolons "=;;;=" are interpreted as
+section headings. In Beancount, the semicolon starts a comment and all
+lines starting with an asterisks are ignored. The number of semicolons
+or asterisks determines the heading level.
+
+To enable this functionality, =outline-minor-mode= should be
+explicitly activated. It is possible to do so automatically when
+=beancout-mode= is activated:
+
+#+begin_src elisp
+(add-hook 'beancount-mode-hook #'outline-minor-mode)
+#+end_src
+
+Outline minor mode uses a rather peculiar choice of keybindings. It is
+possible to map the most used functionality to keys more familiar to
+=org-mode= users adding a few lines to the Emacs configuration:
+
+#+begin_src elisp
+(define-key beancount-mode-map (kbd "C-c C-n") #'outline-next-visible-heading)
+(define-key beancount-mode-map (kbd "C-c C-p") 
#'outline-previous-visible-heading)
+#+end_src
+
+Alternatively the keybindings for =outline-minor-mode= can be globally
+remapped. Please refer to the =outline-minor-mode= documentation in
+the Emacs manual for more details.
+
+The =etc/emacsrc= file contains some example configuration for
+=beancount-mode= and some experiments that may find their way into the
+main codebase.

Reply via email to