Sort your Ledger journal with Emacs
              ===================================

 Last edited: $Date: 2022/01/02 21:17:01 $

                Ledger for plain text accounting
                --------------------------------

 Ledger  (https://www.ledger-cli.org/)   is   an   open  source
 powerful, double-entry accounting system that you access  from
 the command line.

 It   is   the original   form    of   plain    text  accounting
 (https://plaintextaccounting.org/).

 The advantages of plain text accounting are:

 - plain text format, so you can use your favorite editor
 - makes it easy to create scripts to minimize the amount of work
 - excellent for usage with a version control system
 - completely transparent to the user, no "black box" doing
   incomprehensible things
 - light weight application
 - open source, so no vendor lock in
 - works fine on BSD and Linux

 See       also       the       [Wikipedia       page        on
 Ledger (https://en.wikipedia.org/wiki/Ledger_%28software%29).

 Even  if  you  have  no  legal  obligation  to  register  your
 financial  transactions  in  an  accounting  system,  you  can
 benefit from using Legder.

 It  is  easy  to setup, doesn't take much time to maintain and
 gives you a very good insight in  what  you  have  spent  your
 money on.

                        Version control
                        ---------------

 For  version  control  I  have  developed  the  habit to use a
 combination of RCS
 (https://en.wikipedia.org/wiki/Revision_Control_System)
 and Git.

 RCS is an old revision control  system,  that  works  only  on
 local  files.   I  use  this as a safety-net. During my work I
 frequently commit the changes in  the  journal  in  RCS.  This
 gives  me  a  number  of save-points, I can revert to, in case
 this might be necessary.

 When everything is OK, I commit the changes to Git. This  way,
 my  Git  repository  is  not  clobbered  with  small  changes,
 correction of errors and so on.

 I use this method for almost anything I  write,  including  my
 ledger journal.

 Emacs  cooperates  very well with RCS. The default key binding
 for this is `C-x v v` (vc-next-action).  Hit  this  to  rotate
 through  check  in  and check out. Log entries are stored with
 `C-c C-c` (vc-finish-logentry).

 In case you want to rename a file that is under the control of
 RCS, use M-x vc-rename-file.

                          Ledger-mode
                          -----------

 At  the  start of the new year it is time to close to books on
 the previous year.

 To minimize the amount of work I start with downloading a  CSV
 file with the bank-account transactions.

 A  simple  Perl-script  creates a ledger journal from this CSV
 file.

 A shell script creates ledger journal entries from my outgoing
 invoices.  These  invoices are in Postscript, the shell script
 combines a mixture of grep, awk and ed.

 After a concatenate of the  invoice  journal  entries  to  the
 bank-account  transaction journal entries, the only thing left
 to do, is to sort the ledger journal in chronological order.

 For this, the Emacs ledger-mode works great!

 I have named my journal 2021.ledger.

 In Emacs I have set the variable ledger-default-date-format to
 "%Y-%m-%d",  which  results  in  YYYY-MM-DD as the date of the
 records.

 This is the workflow:

 - open 2021.ledger in Emacs
 - Emacs recognizes the format and activates ledger-mode
 - `C-x h` (mark-whole-buffer) marks the entire buffer as
   active region
 - `C-c C-s` sorts the journal entries in chronological order

 [Ledger-mode](https://github.com/ledger/ledger-mode)  can   do
 much more, I use only a fraction of its possibilities.

 See   also   the   ledger-mode    page    at    ledger-cli.org
 (https://www.ledger-cli.org/3.0/doc/ledger-mode.html).