Merge branch 'master' into ExceptTLayer
| @ -7,7 +7,7 @@ m4_define({{_webseparate_}}, m4_ifdef({{WEB && SEPARATE}},{{$1}}) )m4_dnl | ||||
| m4_define({{_webcombined_}}, m4_ifdef({{WEB && COMBINED}},{{$1}}) )m4_dnl | ||||
| m4_dnl | ||||
| m4_define({{_author_}}, {{}})m4_dnl | ||||
| m4_define({{_monthyear_}}, {{July 2018}})m4_dnl | ||||
| m4_define({{_monthyear_}}, {{September 2018}})m4_dnl | ||||
| m4_define({{_version_}}, {{1.10.99}})m4_dnl | ||||
| m4_dnl | ||||
| m4_dnl Links to dev and recent release versions of a manual. | ||||
| @ -20,6 +20,7 @@ This doc is for version **_version_** (dev). | ||||
| m4_dnl Too painful for static generation, insert from site.js instead | ||||
| m4_dnl Available versions: | ||||
| m4_dnl <a href="/$1.html">dev</a> | ||||
| m4_dnl | <a href="/doc/1.11/$1.html">1.11</a> | ||||
| m4_dnl | <a href="/doc/1.10/$1.html">1.10</a> | ||||
| m4_dnl | <a href="/doc/1.9/$1.html">1.9</a> | ||||
| m4_dnl | <a href="/doc/1.5/$1.html">1.5</a> | ||||
|  | ||||
| @ -1,6 +1,11 @@ | ||||
| User-visible changes in hledger-api. See also hledger, hledger-lib. | ||||
| 
 | ||||
| 
 | ||||
| # 1.11 (2018/9/30) | ||||
| 
 | ||||
| * use hledger 1.11 | ||||
| 
 | ||||
| 
 | ||||
| # 1.10 (2018/6/30) | ||||
| 
 | ||||
| * use hledger-lib 1.10 | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| 
 | ||||
| .TH "hledger\-api" "1" "July 2018" "hledger\-api 1.10.99" "hledger User Manuals" | ||||
| .TH "hledger\-api" "1" "September 2018" "hledger\-api 1.10.99" "hledger User Manuals" | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -2,10 +2,10 @@ | ||||
| -- | ||||
| -- see: https://github.com/sol/hpack | ||||
| -- | ||||
| -- hash: 07d6eec88f8c0ba15f32b5bf4c9f74e54364b6da30852617699b496fbf3bf63a | ||||
| -- hash: 7f5a11be3e9db0d4fcebb5b663ee988461de6d815042a7785f9076e083dde205 | ||||
| 
 | ||||
| name:           hledger-api | ||||
| version:        1.10.99 | ||||
| version:        1.11 | ||||
| synopsis:       Web API server for the hledger accounting tool | ||||
| description:    This is a simple web API server for hledger data. | ||||
|                 It comes with a series of simple client-side web app examples. | ||||
| @ -45,7 +45,7 @@ executable hledger-api | ||||
|   other-modules: | ||||
|       Paths_hledger_api | ||||
|   ghc-options: -threaded | ||||
|   cpp-options: -DVERSION="1.10.99" | ||||
|   cpp-options: -DVERSION="1.11" | ||||
|   build-depends: | ||||
|       Decimal | ||||
|     , aeson | ||||
| @ -55,8 +55,8 @@ executable hledger-api | ||||
|     , data-default >=0.5 | ||||
|     , docopt | ||||
|     , either | ||||
|     , hledger >=1.10.99 && <1.11 | ||||
|     , hledger-lib >=1.10.99 && <1.11 | ||||
|     , hledger >=1.11 && <1.12 | ||||
|     , hledger-lib >=1.11 && <1.12 | ||||
|     , microlens >=0.4 | ||||
|     , microlens-platform >=0.2.3.1 | ||||
|     , safe | ||||
|  | ||||
| @ -37,12 +37,12 @@ import           Text.Printf | ||||
| import Hledger.Query | ||||
| import Hledger.Cli hiding (Reader, version) | ||||
| 
 | ||||
| hledgerApiVersion="1.10.99" | ||||
| hledgerApiVersion="1.11" | ||||
| 
 | ||||
| -- https://github.com/docopt/docopt.hs#readme | ||||
| doc :: Docopt | ||||
| doc = [docopt| | ||||
| hledger-api 1.10.99 | ||||
| hledger-api 1.11 | ||||
| 
 | ||||
| Serves hledger data and reports as a JSON web API. | ||||
| 
 | ||||
|  | ||||
| @ -117,4 +117,4 @@ SEE ALSO | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| hledger-api 1.10.99                July 2018                    hledger-api(1) | ||||
| hledger-api 1.10.99             September 2018                  hledger-api(1) | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| name: hledger-api | ||||
| version: '1.10.99' | ||||
| version: '1.11' | ||||
| synopsis: Web API server for the hledger accounting tool | ||||
| description: | | ||||
|   This is a simple web API server for hledger data. | ||||
| @ -32,8 +32,8 @@ extra-source-files: | ||||
| #data-files: | ||||
| 
 | ||||
| dependencies: | ||||
| - hledger-lib >=1.10.99 && <1.11 | ||||
| - hledger >=1.10.99 && <1.11 | ||||
| - hledger-lib >=1.11 && <1.12 | ||||
| - hledger >=1.11 && <1.12 | ||||
| - base >=4.8 && <4.12 | ||||
| - aeson | ||||
| - bytestring | ||||
| @ -58,4 +58,4 @@ executables: | ||||
|   hledger-api: | ||||
|     main: hledger-api.hs | ||||
|     ghc-options: -threaded | ||||
|     cpp-options: -DVERSION="1.10.99" | ||||
|     cpp-options: -DVERSION="1.11" | ||||
|  | ||||
| @ -46,28 +46,22 @@ HERE | ||||
| #Updating package index Hackage (mirrored at https://s3.amazonaws.com/hackage.fpcomplete.com/) ... | ||||
| #   /Users/simon/.stack/indices/Hackage/hackage-security-lock: createDirectory: already exists (File exists) | ||||
| 
 | ||||
| # this script's name (can't use $0 when it's piped into bash) | ||||
| HLEDGER_INSTALL_TOOL=hledger-install.sh | ||||
|   # ^ this script's name (can't use $0 when it's piped into bash) | ||||
| 
 | ||||
| HLEDGER_INSTALL_VERSION=20180824 | ||||
| # this script's version | ||||
| HLEDGER_INSTALL_VERSION=20181001 | ||||
| 
 | ||||
| # stackage version to install from when using stack | ||||
| # You can specify a different stackage version here, or comment out | ||||
| # this line to use your current global resolver, which might avoid | ||||
| # some unnecessary building. | ||||
| # Mac Sierra+ requires at least lts-8.0. | ||||
| # Old lts-6 or lts-7 would probably require tweaking the hledger install commands below. | ||||
| RESOLVER="--resolver=lts-12" | ||||
| #RESOLVER="--resolver=nightly-2018-07-09" | ||||
|   # ^ You can specify a different stackage snapshot here, | ||||
|   # or comment out this line to use your current global resolver, which might | ||||
|   # avoid some unnecessary building. OSX Sierra+ requires at least lts-8.0. | ||||
|   # lts-6 or 7 probably require tweaking the hledger install commands below. | ||||
| 
 | ||||
| HLEDGER_LIB_VERSION=1.10 | ||||
| HLEDGER_VERSION=1.10 | ||||
| HLEDGER_UI_VERSION=1.10.1 | ||||
| HLEDGER_WEB_VERSION=1.10 | ||||
| HLEDGER_API_VERSION=1.10 | ||||
| 
 | ||||
| HLEDGER_DIFF_VERSION=0.2.0.14 | ||||
| HLEDGER_IADD_VERSION=1.3.6 | ||||
| HLEDGER_INTEREST_VERSION=1.5.2 | ||||
| HLEDGER_IRR_VERSION=0.1.1.15 | ||||
| # things to be installed | ||||
| 
 | ||||
| HLEDGER_MAIN_TOOLS="\ | ||||
| hledger \ | ||||
| @ -80,11 +74,30 @@ HLEDGER_OTHER_TOOLS="\ | ||||
| hledger-diff \ | ||||
| hledger-iadd \ | ||||
| hledger-interest \ | ||||
| hledger-irr \ | ||||
| " | ||||
| 
 | ||||
| # latest hledger package versions, update often: | ||||
| HLEDGER_VERSION=1.11 | ||||
| HLEDGER_LIB_VERSION=$HLEDGER_VERSION | ||||
| HLEDGER_UI_VERSION=$HLEDGER_VERSION | ||||
| HLEDGER_WEB_VERSION=$HLEDGER_VERSION | ||||
| HLEDGER_API_VERSION=$HLEDGER_VERSION | ||||
| HLEDGER_DIFF_VERSION=0.2.0.14 | ||||
| HLEDGER_IADD_VERSION=1.3.6 | ||||
| HLEDGER_INTEREST_VERSION=1.5.2 | ||||
| 
 | ||||
| # extra dependencies that aren't in stackage: | ||||
| EXTRA_DEPS="\ | ||||
| cassava-megaparsec-1.0.0 \ | ||||
| " | ||||
| 
 | ||||
| # the oldest version of stack that will work: | ||||
| STACK_VERSION=1.7.1 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| # start of (most of) get-stack.sh, https://github.com/commercialhaskell/stack/blob/master/etc/scripts/get-stack.sh | ||||
| # modified at CHANGED markers | ||||
| # CHANGED marks a few of our customisations, but not all. | ||||
| 
 | ||||
| HOME_LOCAL_BIN="$HOME/.local/bin" | ||||
| USR_LOCAL_BIN="/usr/local/bin" | ||||
| @ -645,6 +658,12 @@ has_stack() { | ||||
|   has_cmd stack | ||||
| } | ||||
| 
 | ||||
| # Check whether a new enough version of the 'stack' command exists | ||||
| has_good_stack() { | ||||
|   has_cmd stack && | ||||
|   [[ ! $(cmpver "$(cmd_version stack 2>/dev/null)" $STACK_VERSION) = 2 ]] | ||||
| } | ||||
| 
 | ||||
| # Check whether 'wget' command exists | ||||
| has_wget() { | ||||
|   has_cmd wget | ||||
| @ -735,7 +754,7 @@ check_usr_local_bin_on_path() { | ||||
| 
 | ||||
| # Check whether Stack is already installed, and print an error if it is. | ||||
| check_stack_installed() { | ||||
|   if [ "$FORCE_INSTALL_STACK" != "true" ] && has_stack ; then | ||||
|   if [ "$FORCE_INSTALL_STACK" != "true" ] && has_good_stack ; then | ||||
|     die "Stack $(stack_version) already appears to be installed at: | ||||
|   $(stack_location) | ||||
| Use 'stack upgrade' or your OS's package manager to upgrade, | ||||
| @ -749,9 +768,11 @@ trap cleanup_temp_dir EXIT | ||||
| 
 | ||||
| # hledger routines | ||||
| 
 | ||||
| # install stack if needed, or always with --force-install-stack, in $HOME/.local/bin | ||||
| # install stack or a newer version of stack if needed,  | ||||
| # or always with --force-install-stack,  | ||||
| # in $HOME/.local/bin | ||||
| ensure_stack() { | ||||
|   if ! has_stack || [[ "$FORCE_INSTALL_STACK" == "true" ]] ; then | ||||
|   if ! has_good_stack || [[ "$FORCE_INSTALL_STACK" == "true" ]] ; then | ||||
|     echo "Installing stack" | ||||
|     do_os | ||||
|   fi | ||||
| @ -786,13 +807,13 @@ print_cmd_version() { | ||||
|   if [[ $(cmd_location "$1") ]]; then | ||||
|     echo "$1" $(cmd_version "$1") is installed at $(cmd_location "$1") | ||||
|   else | ||||
|     echo "$1 not found" | ||||
|     echo "$1 is not found" | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| # Show the installation status of the $HLEDGER_MAIN_TOOLS and $HLEDGER_OTHER_TOOLS. | ||||
| print_hledger_versions() { | ||||
|   for cmd in $HLEDGER_MAIN_TOOLS $HLEDGER_OTHER_TOOLS $HLEDGER_INSTALL_TOOL ; do print_cmd_version "$cmd"; done | ||||
| # Show the current installation status of the hledger packages and install tools. | ||||
| print_installed_versions() { | ||||
|   for cmd in $HLEDGER_MAIN_TOOLS $HLEDGER_OTHER_TOOLS $HLEDGER_INSTALL_TOOL stack cabal ; do print_cmd_version "$cmd"; done | ||||
| } | ||||
| 
 | ||||
| # Run a command, but first log it with "Trying" prepended. | ||||
| @ -814,14 +835,20 @@ quietly_run() { | ||||
| # For the stack method, it's necessary to provide not only the package(s) you want to | ||||
| # install but also all dependencies which are not in the specified stackage $RESOLVER. | ||||
| try_install() { | ||||
|   (cd  # avoid any project-specific stack/cabal config, install at user level | ||||
|    (! has_cmd stack && has_cmd cabal && echo "using $(cabal --version)" && try_info cabal install "$@" --verbose="$CABAL_VERBOSITY" ) || | ||||
|   (cd  # ensure we install at user level, not in some project's stack/cabal setup | ||||
|    # cabal and not stack installed ? use cabal | ||||
|    (! has_cmd stack && has_cmd cabal && ( | ||||
|     echo "no stack installed, cabal $(cabal --numeric-version) installed; trying cabal install" &&  # cf cabal update step | ||||
|     try_info cabal install "$@" --verbose="$CABAL_VERBOSITY" ) | ||||
|     ) || | ||||
|    # use stack, installing it if missing or too old | ||||
|    (ensure_stack && ( | ||||
|     #(try_info stack install --install-ghc "$@" --verbosity=$STACK_VERBOSITY ) ||        # existing resolver | ||||
|     (try_info stack install --install-ghc $RESOLVER "$@" --verbosity="$STACK_VERBOSITY" )  # specific resolver | ||||
|     ) | ||||
|    ) || | ||||
|    echo Failed to install "$@" | ||||
|    # or give up | ||||
|    echo "Failed to install $@" | ||||
|   ) | ||||
| } | ||||
| 
 | ||||
| @ -900,15 +927,18 @@ quietly_run uname -rsv | ||||
| quietly_run lsb_release -a | ||||
| 
 | ||||
| # show current installed hledger packages | ||||
| echo "Install status:" | ||||
| print_hledger_versions | ||||
| echo "Install status before:" | ||||
| print_installed_versions | ||||
| 
 | ||||
| if [[ $STATUSFLAG ]] ; then | ||||
|   exit 0 | ||||
| fi | ||||
| 
 | ||||
| # if we'll be using cabal, run cabal update once at the start | ||||
| (! has_cmd stack && has_cmd cabal && try_info cabal update ) | ||||
| (! has_cmd stack && has_cmd cabal && | ||||
|   echo "no stack installed, cabal $(cabal --numeric-version) installed; trying cabal update" &&  # cf try-install() | ||||
|   try_info cabal update | ||||
| ) | ||||
| 
 | ||||
| # Compare dotted number version strings, based on https://stackoverflow.com/a/4025065/84401. | ||||
| # cmpver A B's exit status *and* output is | ||||
| @ -951,60 +981,54 @@ echo ---------- | ||||
| 
 | ||||
| if [[ $(cmpver "$(cmd_version hledger 2>/dev/null)" $HLEDGER_VERSION) = 2 ]]; then | ||||
|   echo Installing hledger | ||||
|   try_install hledger-$HLEDGER_VERSION hledger-lib-$HLEDGER_LIB_VERSION | ||||
|   try_install hledger-$HLEDGER_VERSION hledger-lib-$HLEDGER_LIB_VERSION $EXTRA_DEPS | ||||
|   echo | ||||
| fi | ||||
| 
 | ||||
| if [[ $(cmpver "$(cmd_version hledger-ui 2>/dev/null)" $HLEDGER_UI_VERSION) = 2 ]]; then | ||||
|   echo Installing hledger-ui | ||||
|   try_install hledger-ui-$HLEDGER_UI_VERSION hledger-$HLEDGER_VERSION hledger-lib-$HLEDGER_LIB_VERSION \ | ||||
|     fsnotify-0.3.0.1 | ||||
|     # brick-0.19 data-clist-0.1.2.0 | ||||
|     # ^ when hledger-iadd requires a non-stack brick, use the same version here to avoid rebuilding | ||||
|   try_install hledger-ui-$HLEDGER_UI_VERSION hledger-$HLEDGER_VERSION hledger-lib-$HLEDGER_LIB_VERSION $EXTRA_DEPS \ | ||||
|     # brick-X.Y   # when hledger-iadd requires a special brick, use the same here to reduce rebuilding | ||||
|   echo | ||||
| fi | ||||
| 
 | ||||
| if [[ $(cmpver "$(cmd_version hledger-web 2>/dev/null)" $HLEDGER_WEB_VERSION) = 2 ]]; then | ||||
|   echo Installing hledger-web | ||||
|   try_install hledger-web-$HLEDGER_WEB_VERSION hledger-$HLEDGER_VERSION hledger-lib-$HLEDGER_LIB_VERSION | ||||
|   try_install hledger-web-$HLEDGER_WEB_VERSION hledger-$HLEDGER_VERSION hledger-lib-$HLEDGER_LIB_VERSION $EXTRA_DEPS | ||||
|   echo | ||||
| fi | ||||
| 
 | ||||
| if [[ $(cmpver "$(cmd_version hledger-api 2>/dev/null)" $HLEDGER_API_VERSION) = 2 ]]; then | ||||
|   echo Installing hledger-api | ||||
|   try_install hledger-api-$HLEDGER_API_VERSION hledger-$HLEDGER_VERSION hledger-lib-$HLEDGER_LIB_VERSION | ||||
|   try_install hledger-api-$HLEDGER_API_VERSION hledger-$HLEDGER_VERSION hledger-lib-$HLEDGER_LIB_VERSION $EXTRA_DEPS | ||||
|   echo | ||||
| fi | ||||
| 
 | ||||
| # Third-party addons. We allow these to use an older version of | ||||
| # hledger-lib, in case their bounds have not been updated yet. | ||||
| exit | ||||
| # Third-party addons. We sometimes build these with an older version | ||||
| # of hledger[-lib], if their bounds have not been updated yet. | ||||
| if [[ $(cmpver "$(cmd_version hledger-diff 2>/dev/null)" $HLEDGER_DIFF_VERSION) = 2 ]]; then | ||||
|   echo Installing hledger-diff | ||||
|   try_install hledger-diff-$HLEDGER_DIFF_VERSION hledger-lib-$HLEDGER_LIB_VERSION | ||||
|   try_install hledger-diff-$HLEDGER_DIFF_VERSION hledger-lib-$HLEDGER_LIB_VERSION $EXTRA_DEPS | ||||
|   echo | ||||
| fi | ||||
| 
 | ||||
| if [[ $(cmpver "$(cmd_version hledger-iadd 2>/dev/null)" $HLEDGER_IADD_VERSION) = 2 ]]; then | ||||
|   echo Installing hledger-iadd | ||||
|   try_install hledger-iadd-$HLEDGER_IADD_VERSION hledger-lib-$HLEDGER_LIB_VERSION | ||||
|   try_install hledger-iadd-$HLEDGER_IADD_VERSION hledger-lib-$HLEDGER_LIB_VERSION $EXTRA_DEPS | ||||
|   echo | ||||
| fi | ||||
| 
 | ||||
| if [[ $(cmpver "$(cmd_version hledger-interest 2>/dev/null)" $HLEDGER_INTEREST_VERSION) = 2 ]]; then | ||||
|   echo Installing hledger-interest | ||||
|   try_install hledger-interest-$HLEDGER_INTEREST_VERSION hledger-lib-$HLEDGER_LIB_VERSION | ||||
|   try_install hledger-interest-$HLEDGER_INTEREST_VERSION hledger-lib-$HLEDGER_LIB_VERSION $EXTRA_DEPS | ||||
|   echo | ||||
| fi | ||||
| 
 | ||||
| if [[ $(cmpver "$(cmd_version hledger-irr 2>/dev/null)" $HLEDGER_IRR_VERSION) = 2 ]]; then | ||||
|   echo Installing hledger-irr | ||||
|   try_install hledger-irr-$HLEDGER_IRR_VERSION hledger-lib-$HLEDGER_LIB_VERSION | ||||
|   echo | ||||
| fi | ||||
| echo ---------- | ||||
| 
 | ||||
| # show new installation status | ||||
| print_hledger_versions | ||||
| echo "Install status after:" | ||||
| print_installed_versions | ||||
| 
 | ||||
| # warn if $HOME/.local/bin isn't in $PATH | ||||
| check_home_local_bin_on_path | ||||
|  | ||||
| @ -2,6 +2,79 @@ API-ish changes in the hledger-lib package. | ||||
| Most user-visible changes are noted in the hledger changelog, instead. | ||||
| 
 | ||||
| 
 | ||||
| # 1.11 (2018/9/30) | ||||
| 
 | ||||
| * compilation now works when locale is unset (#849) | ||||
| 
 | ||||
| * all unit tests have been converted from HUnit+test-framework to easytest | ||||
| 
 | ||||
| * doctests now run quicker by default, by skipping reloading between tests.  | ||||
|   This can be disabled by passing --slow to the doctests test suite | ||||
|   executable. | ||||
| 
 | ||||
| * doctests test suite executable now supports --verbose, which shows | ||||
|   progress output as tests are run if doctest 0.16.0+ is installed | ||||
|   (and hopefully is harmless otherwise). | ||||
| 
 | ||||
| * doctests now support file pattern arguments, provide more informative output. | ||||
|   Limiting to just the file(s) you're interested can make doctest start | ||||
|   much quicker. With one big caveat: you can limit the starting files, | ||||
|   but it always imports and tests all other local files those import. | ||||
| 
 | ||||
| * a bunch of custom Show instances have been replaced with defaults, | ||||
|   for easier troubleshooting.  These were sometimes obscuring | ||||
|   important details, eg in test failure output. Our new policy is: | ||||
|   stick with default derived Show instances as far as possible, but | ||||
|   when necessary adjust them to valid haskell syntax so pretty-show | ||||
|   can pretty-print them (eg when they contain Day values, cf | ||||
|   https://github.com/haskell/time/issues/101).  By convention, when | ||||
|   fields are shown in less than full detail, and/or in double-quoted | ||||
|   pseudo syntax, we show a double period (..) in the output. | ||||
| 
 | ||||
| * Amount has a new Show instance.  Amount's show instance hid | ||||
|   important details by default, and showing more details required | ||||
|   increasing the debug level, which was inconvenient.  Now it has a | ||||
|   single show instance which shows more information, is fairly | ||||
|   compact, and is pretty-printable. | ||||
| 
 | ||||
|   ghci> usd 1 | ||||
|   OLD: | ||||
|   Amount {acommodity="$", aquantity=1.00, ..} | ||||
|   NEW: | ||||
|   Amount {acommodity = "$", aquantity = 1.00, aprice = NoPrice, astyle = AmountStyle "L False 2 Just '.' Nothing..", amultiplier = False} | ||||
| 
 | ||||
|   MixedAmount's show instance is unchanged, but showMixedAmountDebug | ||||
|   is affected by this change: | ||||
| 
 | ||||
|   ghci> putStrLn $ showMixedAmountDebug $ Mixed [usd 1] | ||||
|   OLD: | ||||
|   Mixed [Amount {acommodity="$", aquantity=1.00, aprice=, astyle=AmountStyle {ascommodityside = L, ascommodityspaced = False, asprecision = 2, asdecimalpoint = Just '.', asdigitgroups = Nothing}}] | ||||
|   NEW: | ||||
|   Mixed [Amount {acommodity="$", aquantity=1.00, aprice=, astyle=AmountStyle "L False 2 Just '.' Nothing.."}] | ||||
| 
 | ||||
| * Same-line & next-line comments of transactions, postings, etc. | ||||
|   are now parsed a bit more precisely (followingcommentp).  | ||||
|   Previously, parsing no comment gave the same result as an empty | ||||
|   comment (a single newline); now it gives an empty string.   | ||||
|   Also, and perhaps as a consequence of the above, when there's no | ||||
|   same-line comment but there is a next-line comment, we'll insert an | ||||
|   empty first line, since otherwise next-line comments would get moved | ||||
|   up to the same line when rendered. | ||||
| 
 | ||||
| * Hledger.Utils.Test exports HasCallStack | ||||
| 
 | ||||
| * queryDateSpan, queryDateSpan' now intersect date AND'ed date spans | ||||
|   instead of unioning them, and docs are clearer. | ||||
| 
 | ||||
| * pushAccount -> pushDeclaredAccount | ||||
| 
 | ||||
| * jaccounts -> jdeclaredaccounts | ||||
| 
 | ||||
| * AutoTransaction.hs -> PeriodicTransaction.hs & TransactionModifier.hs | ||||
| 
 | ||||
| * Hledger.Utils.Debug helpers have been renamed/cleaned up | ||||
| 
 | ||||
| 
 | ||||
| # 1.10 (2018/6/30) | ||||
| 
 | ||||
| * build cleanly with all supported GHC versions again (7.10 to 8.4) | ||||
|  | ||||
| @ -2,10 +2,10 @@ | ||||
| -- | ||||
| -- see: https://github.com/sol/hpack | ||||
| -- | ||||
| -- hash: 54632c4329f85aa921fb91abbed9c0871465e0cfb4cdfa05a390447c6d796b83 | ||||
| -- hash: f3cc307bb564ecec4c16143a1d254c4cbbbee1483eb7860c711e3c4c5ed46431 | ||||
| 
 | ||||
| name:           hledger-lib | ||||
| version:        1.10.99 | ||||
| version:        1.11 | ||||
| synopsis:       Core data types, parsers and functionality for the hledger accounting tools | ||||
| description:    This is a reusable library containing hledger's core functionality. | ||||
|                 . | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| 
 | ||||
| .TH "hledger_csv" "5" "July 2018" "hledger 1.10.99" "hledger User Manuals" | ||||
| .TH "hledger_csv" "5" "September 2018" "hledger 1.10.99" "hledger User Manuals" | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -249,4 +249,4 @@ SEE ALSO | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| hledger 1.10.99                    July 2018                    hledger_csv(5) | ||||
| hledger 1.10.99                 September 2018                  hledger_csv(5) | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| .\"t | ||||
| 
 | ||||
| .TH "hledger_journal" "5" "July 2018" "hledger 1.10.99" "hledger User Manuals" | ||||
| .TH "hledger_journal" "5" "September 2018" "hledger 1.10.99" "hledger User Manuals" | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| @ -1159,54 +1159,84 @@ hledger add, hledger\-iadd, hledger\-web, and ledger\-mode. | ||||
| .PD | ||||
| In future it will also help detect misspelled accounts. | ||||
| .PP | ||||
| Account names can be followed by a numeric account code: | ||||
| .IP | ||||
| .nf | ||||
| \f[C] | ||||
| account\ assets\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 1000 | ||||
| account\ assets:bank:checking\ \ \ \ 1110 | ||||
| account\ liabilities\ \ \ \ \ \ \ \ \ \ \ \ \ 2000 | ||||
| account\ revenues\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 4000 | ||||
| account\ expenses\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 6000 | ||||
| \f[] | ||||
| .fi | ||||
| .PP | ||||
| This affects how accounts are sorted in account and balance reports: | ||||
| accounts with codes are listed before accounts without codes, and in | ||||
| increasing code order (instead of listing all accounts alphabetically). | ||||
| Warning, this feature is incomplete; account codes do not yet affect | ||||
| sort order in | ||||
| .IP \[bu] 2 | ||||
| the \f[C]accounts\f[] command | ||||
| .IP \[bu] 2 | ||||
| the \f[C]balance\f[] command's single\-column mode | ||||
| .IP \[bu] 2 | ||||
| flat mode balance reports (to work around this, declare account codes on | ||||
| the subaccounts as well). | ||||
| .IP \[bu] 2 | ||||
| hledger\-web's sidebar | ||||
| .PP | ||||
| Account codes should be all numeric digits, unique, and separated from | ||||
| the account name by at least two spaces (since account names may contain | ||||
| single spaces). | ||||
| By convention, often the first digit indicates the type of account, as | ||||
| in this numbering scheme and the example above. | ||||
| In future, we might use this to recognize account types. | ||||
| .PP | ||||
| An account directive can also have indented subdirectives following it, | ||||
| which are currently ignored. | ||||
| Here is the full syntax: | ||||
| .IP | ||||
| .nf | ||||
| \f[C] | ||||
| ;\ account\ ACCTNAME\ \ [OPTIONALCODE] | ||||
| ;\ account\ ACCTNAME | ||||
| ;\ \ \ [OPTIONALSUBDIRECTIVES] | ||||
| 
 | ||||
| account\ assets:bank:checking\ \ \ 1110 | ||||
| account\ assets:bank:checking | ||||
| \ \ a\ comment | ||||
| \ \ some\-tag:12345 | ||||
| \f[] | ||||
| .fi | ||||
| .SS Account display order | ||||
| .PP | ||||
| Account directives have another purpose: they set the order in which | ||||
| accounts are displayed, in hledger reports, hledger\-ui accounts screen, | ||||
| hledger\-web sidebar etc. | ||||
| For example, say you have these top\-level accounts: | ||||
| .IP | ||||
| .nf | ||||
| \f[C] | ||||
| $\ accounts\ \-1 | ||||
| assets | ||||
| equity | ||||
| expenses | ||||
| liabilities | ||||
| misc | ||||
| other | ||||
| revenues | ||||
| \f[] | ||||
| .fi | ||||
| .PP | ||||
| By default, they are displayed in alphabetical order. | ||||
| But if you add the following account directives to the journal: | ||||
| .IP | ||||
| .nf | ||||
| \f[C] | ||||
| account\ assets | ||||
| account\ liabilities | ||||
| account\ equity | ||||
| account\ revenues | ||||
| account\ expenses | ||||
| \f[] | ||||
| .fi | ||||
| .PP | ||||
| the display order changes to: | ||||
| .IP | ||||
| .nf | ||||
| \f[C] | ||||
| $\ accounts\ \-1 | ||||
| assets | ||||
| liabilities | ||||
| equity | ||||
| revenues | ||||
| expenses | ||||
| misc | ||||
| other | ||||
| \f[] | ||||
| .fi | ||||
| .PP | ||||
| Ie, declared accounts first, in the order they were declared, followed | ||||
| by any undeclared accounts in alphabetic order. | ||||
| .PP | ||||
| Note that sorting is done at each level of the account tree (within each | ||||
| group of sibling accounts under the same parent). | ||||
| This directive: | ||||
| .IP | ||||
| .nf | ||||
| \f[C] | ||||
| account\ other:zoo | ||||
| \f[] | ||||
| .fi | ||||
| .PP | ||||
| would influence the position of \f[C]zoo\f[] among \f[C]other\f[]'s | ||||
| subaccounts, but not the position of \f[C]other\f[] among the top\-level | ||||
| accounts. | ||||
| .SS Rewriting accounts | ||||
| .PP | ||||
| You can define account alias rules which rewrite your account names, or | ||||
|  | ||||
| @ -853,6 +853,7 @@ times though. | ||||
| * Default commodity:: | ||||
| * Market prices:: | ||||
| * Declaring accounts:: | ||||
| * Account display order:: | ||||
| * Rewriting accounts:: | ||||
| * Default parent account:: | ||||
| 
 | ||||
| @ -1002,7 +1003,7 @@ P 2010/1/1 € $1.40 | ||||
| another commodity using these prices. | ||||
| 
 | ||||
|  | ||||
| File: hledger_journal.info,  Node: Declaring accounts,  Next: Rewriting accounts,  Prev: Market prices,  Up: Directives | ||||
| File: hledger_journal.info,  Node: Declaring accounts,  Next: Account display order,  Prev: Market prices,  Up: Directives | ||||
| 
 | ||||
| 1.14.7 Declaring accounts | ||||
| ------------------------- | ||||
| @ -1016,46 +1017,71 @@ account assets:bank:checking | ||||
| hledger add, hledger-iadd, hledger-web, and ledger-mode. | ||||
| In future it will also help detect misspelled accounts. | ||||
| 
 | ||||
|    Account names can be followed by a numeric account code: | ||||
| 
 | ||||
| account assets                  1000 | ||||
| account assets:bank:checking    1110 | ||||
| account liabilities             2000 | ||||
| account revenues                4000 | ||||
| account expenses                6000 | ||||
| 
 | ||||
|    This affects how accounts are sorted in account and balance reports: | ||||
| accounts with codes are listed before accounts without codes, and in | ||||
| increasing code order (instead of listing all accounts alphabetically). | ||||
| Warning, this feature is incomplete; account codes do not yet affect | ||||
| sort order in | ||||
| 
 | ||||
|    * the 'accounts' command | ||||
|    * the 'balance' command's single-column mode | ||||
|    * flat mode balance reports (to work around this, declare account | ||||
|      codes on the subaccounts as well). | ||||
|    * hledger-web's sidebar | ||||
| 
 | ||||
|    Account codes should be all numeric digits, unique, and separated | ||||
| from the account name by at least two spaces (since account names may | ||||
| contain single spaces).  By convention, often the first digit indicates | ||||
| the type of account, as in this numbering scheme and the example above. | ||||
| In future, we might use this to recognize account types. | ||||
| 
 | ||||
|    An account directive can also have indented subdirectives following | ||||
| it, which are currently ignored.  Here is the full syntax: | ||||
| 
 | ||||
| ; account ACCTNAME  [OPTIONALCODE] | ||||
| ; account ACCTNAME | ||||
| ;   [OPTIONALSUBDIRECTIVES] | ||||
| 
 | ||||
| account assets:bank:checking   1110 | ||||
| account assets:bank:checking | ||||
|   a comment | ||||
|   some-tag:12345 | ||||
| 
 | ||||
|  | ||||
| File: hledger_journal.info,  Node: Rewriting accounts,  Next: Default parent account,  Prev: Declaring accounts,  Up: Directives | ||||
| File: hledger_journal.info,  Node: Account display order,  Next: Rewriting accounts,  Prev: Declaring accounts,  Up: Directives | ||||
| 
 | ||||
| 1.14.8 Rewriting accounts | ||||
| 1.14.8 Account display order | ||||
| ---------------------------- | ||||
| 
 | ||||
| Account directives have another purpose: they set the order in which | ||||
| accounts are displayed, in hledger reports, hledger-ui accounts screen, | ||||
| hledger-web sidebar etc.  For example, say you have these top-level | ||||
| accounts: | ||||
| 
 | ||||
| $ accounts -1 | ||||
| assets | ||||
| equity | ||||
| expenses | ||||
| liabilities | ||||
| misc | ||||
| other | ||||
| revenues | ||||
| 
 | ||||
|    By default, they are displayed in alphabetical order.  But if you add | ||||
| the following account directives to the journal: | ||||
| 
 | ||||
| account assets | ||||
| account liabilities | ||||
| account equity | ||||
| account revenues | ||||
| account expenses | ||||
| 
 | ||||
|    the display order changes to: | ||||
| 
 | ||||
| $ accounts -1 | ||||
| assets | ||||
| liabilities | ||||
| equity | ||||
| revenues | ||||
| expenses | ||||
| misc | ||||
| other | ||||
| 
 | ||||
|    Ie, declared accounts first, in the order they were declared, | ||||
| followed by any undeclared accounts in alphabetic order. | ||||
| 
 | ||||
|    Note that sorting is done at each level of the account tree (within | ||||
| each group of sibling accounts under the same parent).  This directive: | ||||
| 
 | ||||
| account other:zoo | ||||
| 
 | ||||
|    would influence the position of 'zoo' among 'other''s subaccounts, | ||||
| but not the position of 'other' among the top-level accounts. | ||||
| 
 | ||||
|  | ||||
| File: hledger_journal.info,  Node: Rewriting accounts,  Next: Default parent account,  Prev: Account display order,  Up: Directives | ||||
| 
 | ||||
| 1.14.9 Rewriting accounts | ||||
| ------------------------- | ||||
| 
 | ||||
| You can define account alias rules which rewrite your account names, or | ||||
| @ -1083,7 +1109,7 @@ hledger-web. | ||||
|  | ||||
| File: hledger_journal.info,  Node: Basic aliases,  Next: Regex aliases,  Up: Rewriting accounts | ||||
| 
 | ||||
| 1.14.8.1 Basic aliases | ||||
| 1.14.9.1 Basic aliases | ||||
| ...................... | ||||
| 
 | ||||
| To set an account alias, use the 'alias' directive in your journal file. | ||||
| @ -1106,7 +1132,7 @@ alias checking = assets:bank:wells fargo:checking | ||||
|  | ||||
| File: hledger_journal.info,  Node: Regex aliases,  Next: Multiple aliases,  Prev: Basic aliases,  Up: Rewriting accounts | ||||
| 
 | ||||
| 1.14.8.2 Regex aliases | ||||
| 1.14.9.2 Regex aliases | ||||
| ...................... | ||||
| 
 | ||||
| There is also a more powerful variant that uses a regular expression, | ||||
| @ -1131,7 +1157,7 @@ whitespace. | ||||
|  | ||||
| File: hledger_journal.info,  Node: Multiple aliases,  Next: end aliases,  Prev: Regex aliases,  Up: Rewriting accounts | ||||
| 
 | ||||
| 1.14.8.3 Multiple aliases | ||||
| 1.14.9.3 Multiple aliases | ||||
| ......................... | ||||
| 
 | ||||
| You can define as many aliases as you like using directives or | ||||
| @ -1147,7 +1173,7 @@ following order: | ||||
|  | ||||
| File: hledger_journal.info,  Node: end aliases,  Prev: Multiple aliases,  Up: Rewriting accounts | ||||
| 
 | ||||
| 1.14.8.4 'end aliases' | ||||
| 1.14.9.4 'end aliases' | ||||
| ...................... | ||||
| 
 | ||||
| You can clear (forget) all currently defined aliases with the 'end | ||||
| @ -1158,8 +1184,8 @@ end aliases | ||||
|  | ||||
| File: hledger_journal.info,  Node: Default parent account,  Prev: Rewriting accounts,  Up: Directives | ||||
| 
 | ||||
| 1.14.9 Default parent account | ||||
| ----------------------------- | ||||
| 1.14.10 Default parent account | ||||
| ------------------------------ | ||||
| 
 | ||||
| You can specify a parent account which will be prepended to all accounts | ||||
| within a section of the journal.  Use the 'apply account' and 'end apply | ||||
| @ -1417,41 +1443,43 @@ Node: Tags26403 | ||||
| Ref: #tags26521 | ||||
| Node: Directives27923 | ||||
| Ref: #directives28066 | ||||
| Node: Comment blocks33922 | ||||
| Ref: #comment-blocks34067 | ||||
| Node: Including other files34243 | ||||
| Ref: #including-other-files34423 | ||||
| Node: Default year34831 | ||||
| Ref: #default-year35000 | ||||
| Node: Declaring commodities35423 | ||||
| Ref: #declaring-commodities35606 | ||||
| Node: Default commodity36833 | ||||
| Ref: #default-commodity37009 | ||||
| Node: Market prices37645 | ||||
| Ref: #market-prices37810 | ||||
| Node: Declaring accounts38651 | ||||
| Ref: #declaring-accounts38827 | ||||
| Node: Rewriting accounts40498 | ||||
| Ref: #rewriting-accounts40683 | ||||
| Node: Basic aliases41417 | ||||
| Ref: #basic-aliases41563 | ||||
| Node: Regex aliases42267 | ||||
| Ref: #regex-aliases42438 | ||||
| Node: Multiple aliases43156 | ||||
| Ref: #multiple-aliases43331 | ||||
| Node: end aliases43829 | ||||
| Ref: #end-aliases43976 | ||||
| Node: Default parent account44077 | ||||
| Ref: #default-parent-account44243 | ||||
| Node: Periodic transactions45127 | ||||
| Ref: #periodic-transactions45309 | ||||
| Node: Forecasting with periodic transactions46520 | ||||
| Ref: #forecasting-with-periodic-transactions46763 | ||||
| Node: Budgeting with periodic transactions48450 | ||||
| Ref: #budgeting-with-periodic-transactions48689 | ||||
| Node: Transaction Modifiers49148 | ||||
| Ref: #transaction-modifiers49311 | ||||
| Node: EDITOR SUPPORT50567 | ||||
| Ref: #editor-support50685 | ||||
| Node: Comment blocks33948 | ||||
| Ref: #comment-blocks34093 | ||||
| Node: Including other files34269 | ||||
| Ref: #including-other-files34449 | ||||
| Node: Default year34857 | ||||
| Ref: #default-year35026 | ||||
| Node: Declaring commodities35449 | ||||
| Ref: #declaring-commodities35632 | ||||
| Node: Default commodity36859 | ||||
| Ref: #default-commodity37035 | ||||
| Node: Market prices37671 | ||||
| Ref: #market-prices37836 | ||||
| Node: Declaring accounts38677 | ||||
| Ref: #declaring-accounts38856 | ||||
| Node: Account display order39406 | ||||
| Ref: #account-display-order39596 | ||||
| Node: Rewriting accounts40617 | ||||
| Ref: #rewriting-accounts40805 | ||||
| Node: Basic aliases41539 | ||||
| Ref: #basic-aliases41685 | ||||
| Node: Regex aliases42389 | ||||
| Ref: #regex-aliases42560 | ||||
| Node: Multiple aliases43278 | ||||
| Ref: #multiple-aliases43453 | ||||
| Node: end aliases43951 | ||||
| Ref: #end-aliases44098 | ||||
| Node: Default parent account44199 | ||||
| Ref: #default-parent-account44367 | ||||
| Node: Periodic transactions45251 | ||||
| Ref: #periodic-transactions45433 | ||||
| Node: Forecasting with periodic transactions46644 | ||||
| Ref: #forecasting-with-periodic-transactions46887 | ||||
| Node: Budgeting with periodic transactions48574 | ||||
| Ref: #budgeting-with-periodic-transactions48813 | ||||
| Node: Transaction Modifiers49272 | ||||
| Ref: #transaction-modifiers49435 | ||||
| Node: EDITOR SUPPORT50691 | ||||
| Ref: #editor-support50809 | ||||
|  | ||||
| End Tag Table | ||||
|  | ||||
| @ -819,45 +819,62 @@ FILE FORMAT | ||||
|        hledger add, hledger-iadd, hledger-web, and ledger-mode. | ||||
|        In future it will also help detect misspelled accounts. | ||||
| 
 | ||||
|        Account names can be followed by a numeric account code: | ||||
| 
 | ||||
|               account assets                  1000 | ||||
|               account assets:bank:checking    1110 | ||||
|               account liabilities             2000 | ||||
|               account revenues                4000 | ||||
|               account expenses                6000 | ||||
| 
 | ||||
|        This  affects  how  accounts are sorted in account and balance reports: | ||||
|        accounts with codes are listed before accounts without  codes,  and  in | ||||
|        increasing code order (instead of listing all accounts alphabetically). | ||||
|        Warning, this feature is incomplete; account codes do  not  yet  affect | ||||
|        sort order in | ||||
| 
 | ||||
|        o the accounts command | ||||
| 
 | ||||
|        o the balance command's single-column mode | ||||
| 
 | ||||
|        o flat mode balance reports (to work around this, declare account codes | ||||
|          on the subaccounts as well). | ||||
| 
 | ||||
|        o hledger-web's sidebar | ||||
| 
 | ||||
|        Account codes should be all numeric digits, unique, and separated  from | ||||
|        the  account  name by at least two spaces (since account names may con- | ||||
|        tain single spaces).  By convention, often the  first  digit  indicates | ||||
|        the type of account, as in this numbering scheme and the example above. | ||||
|        In future, we might use this to recognize account types. | ||||
| 
 | ||||
|        An account directive can also have indented subdirectives following it, | ||||
|        which are currently ignored.  Here is the full syntax: | ||||
| 
 | ||||
|               ; account ACCTNAME  [OPTIONALCODE] | ||||
|               ; account ACCTNAME | ||||
|               ;   [OPTIONALSUBDIRECTIVES] | ||||
| 
 | ||||
|               account assets:bank:checking   1110 | ||||
|               account assets:bank:checking | ||||
|                 a comment | ||||
|                 some-tag:12345 | ||||
| 
 | ||||
|    Account display order | ||||
|        Account directives have another purpose: they set the  order  in  which | ||||
|        accounts are displayed, in hledger reports, hledger-ui accounts screen, | ||||
|        hledger-web sidebar etc.  For example, say  you  have  these  top-level | ||||
|        accounts: | ||||
| 
 | ||||
|               $ accounts -1 | ||||
|               assets | ||||
|               equity | ||||
|               expenses | ||||
|               liabilities | ||||
|               misc | ||||
|               other | ||||
|               revenues | ||||
| 
 | ||||
|        By  default,  they are displayed in alphabetical order.  But if you add | ||||
|        the following account directives to the journal: | ||||
| 
 | ||||
|               account assets | ||||
|               account liabilities | ||||
|               account equity | ||||
|               account revenues | ||||
|               account expenses | ||||
| 
 | ||||
|        the display order changes to: | ||||
| 
 | ||||
|               $ accounts -1 | ||||
|               assets | ||||
|               liabilities | ||||
|               equity | ||||
|               revenues | ||||
|               expenses | ||||
|               misc | ||||
|               other | ||||
| 
 | ||||
|        Ie, declared accounts first, in the order they were declared,  followed | ||||
|        by any undeclared accounts in alphabetic order. | ||||
| 
 | ||||
|        Note  that  sorting  is  done at each level of the account tree (within | ||||
|        each group of sibling accounts under the same parent).  This directive: | ||||
| 
 | ||||
|               account other:zoo | ||||
| 
 | ||||
|        would  influence the position of zoo among other's subaccounts, but not | ||||
|        the position of other among the top-level accounts. | ||||
| 
 | ||||
|    Rewriting accounts | ||||
|        You can define account alias rules which rewrite your account names, or | ||||
|        parts of them, before generating reports.  This can be useful for: | ||||
| @ -873,14 +890,14 @@ FILE FORMAT | ||||
|        o customising reports | ||||
| 
 | ||||
|        Account aliases also rewrite account names in account directives.  They | ||||
|        do   not  affect  account  names  being  entered  via  hledger  add  or | ||||
|        do  not  affect  account  names  being  entered  via  hledger  add   or | ||||
|        hledger-web. | ||||
| 
 | ||||
|        See also Cookbook: Rewrite account names. | ||||
| 
 | ||||
|    Basic aliases | ||||
|        To set an account alias, use the alias directive in your journal  file. | ||||
|        This  affects all subsequent journal entries in the current file or its | ||||
|        To  set an account alias, use the alias directive in your journal file. | ||||
|        This affects all subsequent journal entries in the current file or  its | ||||
|        included files.  The spaces around the = are optional: | ||||
| 
 | ||||
|               alias OLD = NEW | ||||
| @ -888,54 +905,54 @@ FILE FORMAT | ||||
|        Or, you can use the --alias 'OLD=NEW' option on the command line.  This | ||||
|        affects all entries.  It's useful for trying out aliases interactively. | ||||
| 
 | ||||
|        OLD and NEW are  case  sensitive  full  account  names.   hledger  will | ||||
|        replace  any occurrence of the old account name with the new one.  Sub- | ||||
|        OLD  and  NEW  are  case  sensitive  full  account names.  hledger will | ||||
|        replace any occurrence of the old account name with the new one.   Sub- | ||||
|        accounts are also affected.  Eg: | ||||
| 
 | ||||
|               alias checking = assets:bank:wells fargo:checking | ||||
|               # rewrites "checking" to "assets:bank:wells fargo:checking", or "checking:a" to "assets:bank:wells fargo:checking:a" | ||||
| 
 | ||||
|    Regex aliases | ||||
|        There is also a more powerful variant that uses a  regular  expression, | ||||
|        There  is  also a more powerful variant that uses a regular expression, | ||||
|        indicated by the forward slashes: | ||||
| 
 | ||||
|               alias /REGEX/ = REPLACEMENT | ||||
| 
 | ||||
|        or --alias '/REGEX/=REPLACEMENT'. | ||||
| 
 | ||||
|        REGEX  is  a  case-insensitive regular expression.  Anywhere it matches | ||||
|        inside an account name, the matched part will be replaced  by  REPLACE- | ||||
|        MENT.   If REGEX contains parenthesised match groups, these can be ref- | ||||
|        REGEX is a case-insensitive regular expression.   Anywhere  it  matches | ||||
|        inside  an  account name, the matched part will be replaced by REPLACE- | ||||
|        MENT.  If REGEX contains parenthesised match groups, these can be  ref- | ||||
|        erenced by the usual numeric backreferences in REPLACEMENT.  Eg: | ||||
| 
 | ||||
|               alias /^(.+):bank:([^:]+)(.*)/ = \1:\2 \3 | ||||
|               # rewrites "assets:bank:wells fargo:checking" to  "assets:wells fargo checking" | ||||
| 
 | ||||
|        Also note that REPLACEMENT continues to the end of line (or on  command | ||||
|        line,  to  end  of  option argument), so it can contain trailing white- | ||||
|        Also  note that REPLACEMENT continues to the end of line (or on command | ||||
|        line, to end of option argument), so it  can  contain  trailing  white- | ||||
|        space. | ||||
| 
 | ||||
|    Multiple aliases | ||||
|        You can define as many aliases as you like  using  directives  or  com- | ||||
|        mand-line  options.  Aliases are recursive - each alias sees the result | ||||
|        of applying previous ones.   (This  is  different  from  Ledger,  where | ||||
|        You  can  define  as  many aliases as you like using directives or com- | ||||
|        mand-line options.  Aliases are recursive - each alias sees the  result | ||||
|        of  applying  previous  ones.   (This  is  different from Ledger, where | ||||
|        aliases are non-recursive by default).  Aliases are applied in the fol- | ||||
|        lowing order: | ||||
| 
 | ||||
|        1. alias directives, most recently seen first (recent  directives  take | ||||
|        1. alias  directives,  most recently seen first (recent directives take | ||||
|           precedence over earlier ones; directives not yet seen are ignored) | ||||
| 
 | ||||
|        2. alias options, in the order they appear on the command line | ||||
| 
 | ||||
|    end aliases | ||||
|        You   can  clear  (forget)  all  currently  defined  aliases  with  the | ||||
|        You  can  clear  (forget)  all  currently  defined  aliases  with   the | ||||
|        end aliases directive: | ||||
| 
 | ||||
|               end aliases | ||||
| 
 | ||||
|    Default parent account | ||||
|        You can specify a  parent  account  which  will  be  prepended  to  all | ||||
|        accounts  within  a  section of the journal.  Use the apply account and | ||||
|        You  can  specify  a  parent  account  which  will  be prepended to all | ||||
|        accounts within a section of the journal.  Use  the  apply account  and | ||||
|        end apply account directives like so: | ||||
| 
 | ||||
|               apply account home | ||||
| @ -952,7 +969,7 @@ FILE FORMAT | ||||
|                   home:food           $10 | ||||
|                   home:cash          $-10 | ||||
| 
 | ||||
|        If end apply account is omitted, the effect lasts to  the  end  of  the | ||||
|        If  end apply account  is  omitted,  the effect lasts to the end of the | ||||
|        file.  Included files are also affected, eg: | ||||
| 
 | ||||
|               apply account business | ||||
| @ -961,18 +978,18 @@ FILE FORMAT | ||||
|               apply account personal | ||||
|               include personal.journal | ||||
| 
 | ||||
|        Prior  to  hledger 1.0, legacy account and end spellings were also sup- | ||||
|        Prior to hledger 1.0, legacy account and end spellings were  also  sup- | ||||
|        ported. | ||||
| 
 | ||||
|        A default parent account also affects account directives.  It does  not | ||||
|        affect  account names being entered via hledger add or hledger-web.  If | ||||
|        account aliases are present, they are applied after the default  parent | ||||
|        A  default parent account also affects account directives.  It does not | ||||
|        affect account names being entered via hledger add or hledger-web.   If | ||||
|        account  aliases are present, they are applied after the default parent | ||||
|        account. | ||||
| 
 | ||||
|    Periodic transactions | ||||
|        Periodic  transaction  rules  describe  transactions  that recur.  They | ||||
|        Periodic transaction rules  describe  transactions  that  recur.   They | ||||
|        allow you to generate future transactions for forecasting, without hav- | ||||
|        ing  to  write  them  out  explicitly in the journal (with --forecast). | ||||
|        ing to write them out explicitly  in  the  journal  (with  --forecast). | ||||
|        Secondly, they also can be used to define budget goals (with --budget). | ||||
| 
 | ||||
|        A periodic transaction rule looks like a normal journal entry, with the | ||||
| @ -983,8 +1000,8 @@ FILE FORMAT | ||||
|                   expenses:rent          $2000 | ||||
|                   assets:bank:checking | ||||
| 
 | ||||
|        There  is  an additional constraint on the period expression: the start | ||||
|        date  must  fall  on  a  natural  boundary   of   the   interval.    Eg | ||||
|        There is an additional constraint on the period expression:  the  start | ||||
|        date   must   fall   on   a  natural  boundary  of  the  interval.   Eg | ||||
|        monthly from 2018/1/1 is valid, but monthly from 2018/1/15 is not. | ||||
| 
 | ||||
|        If you write a transaction description or same-line comment, it must be | ||||
| @ -998,77 +1015,77 @@ FILE FORMAT | ||||
|                   income:acme inc | ||||
| 
 | ||||
|    Forecasting with periodic transactions | ||||
|        With the --forecast flag,  each  periodic  transaction  rule  generates | ||||
|        With  the  --forecast  flag,  each  periodic transaction rule generates | ||||
|        future transactions recurring at the specified interval.  These are not | ||||
|        saved in the journal, but appear in all reports.  They will  look  like | ||||
|        normal  transactions, but with an extra tag named recur, whose value is | ||||
|        saved  in  the journal, but appear in all reports.  They will look like | ||||
|        normal transactions, but with an extra tag named recur, whose value  is | ||||
|        the generating period expression. | ||||
| 
 | ||||
|        Forecast transactions start on the first occurrence,  and  end  on  the | ||||
|        last  occurrence,  of  their  interval within the forecast period.  The | ||||
|        Forecast  transactions  start  on  the first occurrence, and end on the | ||||
|        last occurrence, of their interval within  the  forecast  period.   The | ||||
|        forecast period: | ||||
| 
 | ||||
|        o begins on the later of | ||||
| 
 | ||||
|          o the report start date if specified with -b/-p/date: | ||||
| 
 | ||||
|          o the day after the latest normal (non-periodic) transaction  in  the | ||||
|          o the  day  after the latest normal (non-periodic) transaction in the | ||||
|            journal, or today if there are no normal transactions. | ||||
| 
 | ||||
|        o ends  on  the  report  end date if specified with -e/-p/date:, or 180 | ||||
|        o ends on the report end date if specified  with  -e/-p/date:,  or  180 | ||||
|          days from today. | ||||
| 
 | ||||
|        where "today" means the current date at report time.   The  "later  of" | ||||
|        rule  ensures that forecast transactions do not overlap normal transac- | ||||
|        where  "today"  means  the current date at report time.  The "later of" | ||||
|        rule ensures that forecast transactions do not overlap normal  transac- | ||||
|        tions in time; they will begin only after normal transactions end. | ||||
| 
 | ||||
|        Forecasting can be useful for estimating balances into the future,  and | ||||
|        experimenting  with  different  scenarios.   Note  the start date logic | ||||
|        Forecasting  can be useful for estimating balances into the future, and | ||||
|        experimenting with different scenarios.   Note  the  start  date  logic | ||||
|        means that forecasted transactions are automatically replaced by normal | ||||
|        transactions as you add those. | ||||
| 
 | ||||
|        Forecasting can also help with data entry: describe most of your trans- | ||||
|        actions with periodic rules, and every so  often  copy  the  output  of | ||||
|        actions  with  periodic  rules,  and  every so often copy the output of | ||||
|        print --forecast to the journal. | ||||
| 
 | ||||
|        You can generate one-time transactions too: just write a period expres- | ||||
|        sion specifying a date with no report interval.  (You could also  write | ||||
|        a  normal  transaction  with  a future date, but remember this disables | ||||
|        sion  specifying a date with no report interval.  (You could also write | ||||
|        a normal transaction with a future date,  but  remember  this  disables | ||||
|        forecast transactions on previous dates.) | ||||
| 
 | ||||
|    Budgeting with periodic transactions | ||||
|        With the --budget flag, currently supported  by  the  balance  command, | ||||
|        each  periodic transaction rule declares recurring budget goals for the | ||||
|        specified accounts.  Eg the first example  above  declares  a  goal  of | ||||
|        spending  $2000  on  rent  (and  also,  a goal of depositing $2000 into | ||||
|        checking) every month.  Goals and actual performance can then  be  com- | ||||
|        With  the  --budget  flag,  currently supported by the balance command, | ||||
|        each periodic transaction rule declares recurring budget goals for  the | ||||
|        specified  accounts.   Eg  the  first  example above declares a goal of | ||||
|        spending $2000 on rent (and also,  a  goal  of  depositing  $2000  into | ||||
|        checking)  every  month.  Goals and actual performance can then be com- | ||||
|        pared in budget reports. | ||||
| 
 | ||||
|        For  more  details, see: balance: Budget report and Cookbook: Budgeting | ||||
|        For more details, see: balance: Budget report and  Cookbook:  Budgeting | ||||
|        and Forecasting. | ||||
| 
 | ||||
| 
 | ||||
|    Transaction Modifiers | ||||
|        Transaction modifier rules describe  changes  that  should  be  applied | ||||
|        automatically  to  certain  transactions.  Currently, this means adding | ||||
|        Transaction  modifier  rules  describe  changes  that should be applied | ||||
|        automatically to certain transactions.  Currently,  this  means  adding | ||||
|        extra postings (also known as "automated postings").  Transaction modi- | ||||
|        fiers are enabled by the --auto flag. | ||||
| 
 | ||||
|        A  transaction  modifier  rule looks a bit like a normal journal entry, | ||||
|        except the first line  is  an  equal  sign  (=)  followed  by  a  query | ||||
|        A transaction modifier rule looks a bit like a  normal  journal  entry, | ||||
|        except  the  first  line  is  an  equal  sign  (=)  followed by a query | ||||
|        (mnemonic: = suggests matching something.): | ||||
| 
 | ||||
|               = expenses:gifts | ||||
|                   budget:gifts  *-1 | ||||
|                   assets:budget  *1 | ||||
| 
 | ||||
|        The  posting  amounts can be of the form *N, which means "the amount of | ||||
|        the matched transaction's first posting, multiplied by  N".   They  can | ||||
|        The posting amounts can be of the form *N, which means "the  amount  of | ||||
|        the  matched  transaction's  first posting, multiplied by N".  They can | ||||
|        also be ordinary fixed amounts.  Fixed amounts with no commodity symbol | ||||
|        will be given the same commodity as  the  matched  transaction's  first | ||||
|        will  be  given  the  same commodity as the matched transaction's first | ||||
|        posting. | ||||
| 
 | ||||
|        This  example adds a corresponding (unbalanced) budget posting to every | ||||
|        This example adds a corresponding (unbalanced) budget posting to  every | ||||
|        transaction involving the expenses:gifts account: | ||||
| 
 | ||||
|               = expenses:gifts | ||||
| @ -1084,16 +1101,16 @@ FILE FORMAT | ||||
|                   (budget:gifts)            $-20 | ||||
|                   assets | ||||
| 
 | ||||
|        Like postings recorded  by  hand,  automated  postings  participate  in | ||||
|        Like  postings  recorded  by  hand,  automated  postings participate in | ||||
|        transaction balancing, missing amount inference and balance assertions. | ||||
| 
 | ||||
| EDITOR SUPPORT | ||||
|        Add-on modes exist for various text editors, to make working with jour- | ||||
|        nal  files  easier.   They add colour, navigation aids and helpful com- | ||||
|        mands.  For hledger users who  edit  the  journal  file  directly  (the | ||||
|        nal files easier.  They add colour, navigation aids  and  helpful  com- | ||||
|        mands.   For  hledger  users  who  edit  the journal file directly (the | ||||
|        majority), using one of these modes is quite recommended. | ||||
| 
 | ||||
|        These  were  written  with  Ledger  in mind, but also work with hledger | ||||
|        These were written with Ledger in mind,  but  also  work  with  hledger | ||||
|        files: | ||||
| 
 | ||||
| 
 | ||||
| @ -1112,7 +1129,7 @@ EDITOR SUPPORT | ||||
| 
 | ||||
| 
 | ||||
| REPORTING BUGS | ||||
|        Report bugs at http://bugs.hledger.org (or on the #hledger IRC  channel | ||||
|        Report  bugs at http://bugs.hledger.org (or on the #hledger IRC channel | ||||
|        or hledger mail list) | ||||
| 
 | ||||
| 
 | ||||
| @ -1126,7 +1143,7 @@ COPYRIGHT | ||||
| 
 | ||||
| 
 | ||||
| SEE ALSO | ||||
|        hledger(1),      hledger-ui(1),     hledger-web(1),     hledger-api(1), | ||||
|        hledger(1),     hledger-ui(1),     hledger-web(1),      hledger-api(1), | ||||
|        hledger_csv(5), hledger_journal(5), hledger_timeclock(5), hledger_time- | ||||
|        dot(5), ledger(1) | ||||
| 
 | ||||
| @ -1134,4 +1151,4 @@ SEE ALSO | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| hledger 1.10.99                    July 2018                hledger_journal(5) | ||||
| hledger 1.10.99                 September 2018              hledger_journal(5) | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| 
 | ||||
| .TH "hledger_timeclock" "5" "July 2018" "hledger 1.10.99" "hledger User Manuals" | ||||
| .TH "hledger_timeclock" "5" "September 2018" "hledger 1.10.99" "hledger User Manuals" | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -77,4 +77,4 @@ SEE ALSO | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| hledger 1.10.99                    July 2018              hledger_timeclock(5) | ||||
| hledger 1.10.99                 September 2018            hledger_timeclock(5) | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| 
 | ||||
| .TH "hledger_timedot" "5" "July 2018" "hledger 1.10.99" "hledger User Manuals" | ||||
| .TH "hledger_timedot" "5" "September 2018" "hledger 1.10.99" "hledger User Manuals" | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -124,4 +124,4 @@ SEE ALSO | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| hledger 1.10.99                    July 2018                hledger_timedot(5) | ||||
| hledger 1.10.99                 September 2018              hledger_timedot(5) | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| name: hledger-lib | ||||
| version: '1.10.99' | ||||
| version: '1.11' | ||||
| synopsis: Core data types, parsers and functionality for the hledger accounting tools | ||||
| description: | | ||||
|   This is a reusable library containing hledger's core functionality. | ||||
|  | ||||
| @ -1,6 +1,11 @@ | ||||
| User-visible changes in hledger-ui. See also hledger, hledger-lib. | ||||
| 
 | ||||
| 
 | ||||
| # 1.11 (2018/9/30) | ||||
| 
 | ||||
| * use hledger 1.11 | ||||
| 
 | ||||
| 
 | ||||
| # 1.10.1 (2018/7/3) | ||||
| 
 | ||||
| * restore support for fsnotify 0.2.1.2, as well as 0.3.x (#833) | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| 
 | ||||
| .TH "hledger\-ui" "1" "July 2018" "hledger\-ui 1.10.99" "hledger User Manuals" | ||||
| .TH "hledger\-ui" "1" "September 2018" "hledger\-ui 1.10.99" "hledger User Manuals" | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -2,10 +2,10 @@ | ||||
| -- | ||||
| -- see: https://github.com/sol/hpack | ||||
| -- | ||||
| -- hash: 88116009cafa64bb3351a332b88f9848d895f7bc4e614a8647f9c26c6405ba35 | ||||
| -- hash: d2925ba85674c61c233d118134f8b3cd090ca0900953652b4253755bb8840c9c | ||||
| 
 | ||||
| name:           hledger-ui | ||||
| version:        1.10.99 | ||||
| version:        1.11 | ||||
| synopsis:       Curses-style user interface for the hledger accounting tool | ||||
| description:    This is hledger's curses-style interface. | ||||
|                 It is simpler and more convenient for browsing data than the command-line interface, | ||||
| @ -63,7 +63,7 @@ executable hledger-ui | ||||
|   hs-source-dirs: | ||||
|       ./. | ||||
|   ghc-options: -Wall -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures -fno-warn-type-defaults -fno-warn-orphans | ||||
|   cpp-options: -DVERSION="1.10.99" | ||||
|   cpp-options: -DVERSION="1.11" | ||||
|   build-depends: | ||||
|       ansi-terminal >=0.6.2.3 | ||||
|     , async | ||||
| @ -75,8 +75,8 @@ executable hledger-ui | ||||
|     , directory | ||||
|     , filepath | ||||
|     , fsnotify >=0.2.1.2 && <0.4 | ||||
|     , hledger >=1.10.99 && <1.11 | ||||
|     , hledger-lib >=1.10.99 && <1.11 | ||||
|     , hledger >=1.11 && <1.12 | ||||
|     , hledger-lib >=1.11 && <1.12 | ||||
|     , megaparsec >=6.4.1 | ||||
|     , microlens >=0.4 | ||||
|     , microlens-platform >=0.2.3.1 | ||||
|  | ||||
| @ -387,4 +387,4 @@ SEE ALSO | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| hledger-ui 1.10.99                 July 2018                     hledger-ui(1) | ||||
| hledger-ui 1.10.99              September 2018                   hledger-ui(1) | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| name        : hledger-ui | ||||
| version     : '1.10.99' | ||||
| version     : '1.11' | ||||
| synopsis    : Curses-style user interface for the hledger accounting tool | ||||
| description : | | ||||
|   This is hledger's curses-style interface. | ||||
| @ -37,11 +37,11 @@ flags: | ||||
|     manual: false | ||||
|     default: true | ||||
| 
 | ||||
| cpp-options: -DVERSION="1.10.99" | ||||
| cpp-options: -DVERSION="1.11" | ||||
| 
 | ||||
| dependencies: | ||||
| - hledger >=1.10.99 && <1.11 | ||||
| - hledger-lib >=1.10.99 && <1.11 | ||||
| - hledger >=1.11 && <1.12 | ||||
| - hledger-lib >=1.11 && <1.12 | ||||
| - ansi-terminal >=0.6.2.3 | ||||
| - async | ||||
| - base >=4.8 && <4.12 | ||||
|  | ||||
| @ -1,6 +1,11 @@ | ||||
| User-visible changes in hledger-web. See also hledger, hledger-lib. | ||||
| 
 | ||||
| 
 | ||||
| # 1.11 (2018/9/30) | ||||
| 
 | ||||
| * use hledger 1.11 | ||||
| 
 | ||||
| 
 | ||||
| # 1.10 (2018/6/30) | ||||
| 
 | ||||
| * multiple -f options, and --auto, work again | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| 
 | ||||
| .TH "hledger\-web" "1" "July 2018" "hledger\-web 1.10.99" "hledger User Manuals" | ||||
| .TH "hledger\-web" "1" "September 2018" "hledger\-web 1.10.99" "hledger User Manuals" | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -2,10 +2,10 @@ | ||||
| -- | ||||
| -- see: https://github.com/sol/hpack | ||||
| -- | ||||
| -- hash: b77366b5a138b9d5a3b4c4541bfb875642f06b621bd690712d022f53ab1afbf6 | ||||
| -- hash: a990f6fed36d14942e007240e0b37a9ff1147902b74cadc426403828ce3950a6 | ||||
| 
 | ||||
| name:           hledger-web | ||||
| version:        1.10.99 | ||||
| version:        1.11 | ||||
| synopsis:       Web interface for the hledger accounting tool | ||||
| description:    This is hledger's web interface. | ||||
|                 It provides a more user-friendly and collaborative UI than the | ||||
| @ -149,7 +149,7 @@ library | ||||
|   other-modules: | ||||
|       Paths_hledger_web | ||||
|   ghc-options: -Wall -fwarn-tabs | ||||
|   cpp-options: -DVERSION="1.10.99" | ||||
|   cpp-options: -DVERSION="1.11" | ||||
|   build-depends: | ||||
|       base >=4.8 && <4.12 | ||||
|     , blaze-html | ||||
| @ -164,8 +164,8 @@ library | ||||
|     , directory | ||||
|     , filepath | ||||
|     , hjsmin | ||||
|     , hledger >=1.10.99 && <1.11 | ||||
|     , hledger-lib >=1.10.99 && <1.11 | ||||
|     , hledger >=1.11 && <1.12 | ||||
|     , hledger-lib >=1.11 && <1.12 | ||||
|     , http-client | ||||
|     , http-conduit | ||||
|     , json | ||||
| @ -201,7 +201,7 @@ executable hledger-web | ||||
|   hs-source-dirs: | ||||
|       app | ||||
|   ghc-options: -Wall -fwarn-tabs | ||||
|   cpp-options: -DVERSION="1.10.99" | ||||
|   cpp-options: -DVERSION="1.11" | ||||
|   build-depends: | ||||
|       base | ||||
|     , hledger-web | ||||
|  | ||||
| @ -251,4 +251,4 @@ SEE ALSO | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| hledger-web 1.10.99                July 2018                    hledger-web(1) | ||||
| hledger-web 1.10.99             September 2018                  hledger-web(1) | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| name: hledger-web | ||||
| version: '1.10.99' | ||||
| version: '1.11' | ||||
| synopsis: Web interface for the hledger accounting tool | ||||
| description: | | ||||
|   This is hledger's web interface. | ||||
| @ -77,7 +77,7 @@ when: | ||||
| 
 | ||||
| library: | ||||
|   source-dirs: . | ||||
|   cpp-options: -DVERSION="1.10.99" | ||||
|   cpp-options: -DVERSION="1.11" | ||||
|   exposed-modules: | ||||
|   - Hledger.Web | ||||
|   - Hledger.Web.Application | ||||
| @ -96,8 +96,8 @@ library: | ||||
|   - Hledger.Web.Widget.AddForm | ||||
|   - Hledger.Web.Widget.Common | ||||
|   dependencies: | ||||
|   - hledger-lib >=1.10.99 && <1.11 | ||||
|   - hledger >=1.10.99 && <1.11 | ||||
|   - hledger-lib >=1.11 && <1.12 | ||||
|   - hledger >=1.11 && <1.12 | ||||
|   - base >=4.8 && <4.12 | ||||
|   - blaze-html | ||||
|   - blaze-markup | ||||
| @ -143,7 +143,7 @@ executables: | ||||
|   hledger-web: | ||||
|     source-dirs: app | ||||
|     main: main.hs | ||||
|     cpp-options: -DVERSION="1.10.99" | ||||
|     cpp-options: -DVERSION="1.11" | ||||
|     dependencies: | ||||
|     - base | ||||
|     - hledger-web | ||||
| @ -161,7 +161,7 @@ executables: | ||||
| #   test: | ||||
| #     source-dirs: tests | ||||
| #     main: main.hs | ||||
| #     cpp-options: -DVERSION="1.10.99" | ||||
| #     cpp-options: -DVERSION="1.11" | ||||
| #     dependencies: | ||||
| #     - base | ||||
| #     - hledger-web | ||||
|  | ||||
| @ -1,6 +1,61 @@ | ||||
| User-visible changes in the hledger command line tool. | ||||
| 
 | ||||
| 
 | ||||
| # 1.11 (2018/9/30) | ||||
| 
 | ||||
| * The default display order of accounts is now influenced by | ||||
|   the order of account directives. Accounts declared by account | ||||
|   directives are displayed first (top-most), in declaration order, | ||||
|   followed by undeclared accounts in alphabetical order. Numeric | ||||
|   account codes are no longer used, and are ignored and considered | ||||
|   deprecated. | ||||
| 
 | ||||
|   So if your accounts are displaying in a weird order after upgrading, | ||||
|   and you want them alphabetical like before, just sort your account | ||||
|   directives alphabetically. | ||||
| 
 | ||||
| * Account sorting (by name, by declaration, by amount) is now more | ||||
|   robust and supported consistently by all commands (accounts, | ||||
|   balance, bs..) in all modes (tree & flat, tabular & non-tabular). | ||||
| 
 | ||||
| * close: new --opening/--closing flags to print only the opening or | ||||
|   closing transaction | ||||
| 
 | ||||
| * files: a new command to list included files | ||||
| 
 | ||||
| * prices: query arguments are now supported. Prices can be filtered by | ||||
|   date, and postings providing transaction prices can also be filtered. | ||||
| 
 | ||||
| * rewrite: help clarifies relation to print --auto (#745) | ||||
| 
 | ||||
| * roi: a new command to compute return on investment, based on hledger-irr | ||||
| 
 | ||||
| * test: has more verbose output, more informative failure messages, | ||||
|   and no longer tries to read the journal | ||||
| 
 | ||||
| * csv: We use a more robust CSV lib (cassava) and now support | ||||
|   non-comma separators, eg --separator ';' (experimental, this flag | ||||
|   will probably become a CSV rule) (#829) | ||||
| 
 | ||||
| * csv: interpolated field names in values are now properly case insensitive, so | ||||
|   this works: | ||||
| 
 | ||||
|   fields  ...,Transaction_Date,... | ||||
|   date %Transaction_Date | ||||
| 
 | ||||
| * journal: D (default commodity) directives no longer break multiplier | ||||
|   amounts in transaction modifiers (AKA automated postings) (#860) | ||||
| 
 | ||||
| * journal: "Automated Postings" have been renamed to "Transaction Modifiers". | ||||
| 
 | ||||
| * journal: transaction comments in transaction modifier rules are now parsed correctly. (#745) | ||||
| 
 | ||||
| * journal: when include files form a cycle, we give an error instead | ||||
|   of hanging. | ||||
| 
 | ||||
| * upper-case day/month names in period expressions no longer give an error (#847, #852) | ||||
| 
 | ||||
| 
 | ||||
| # 1.10 (2018/6/30) | ||||
| 
 | ||||
| * journal: many parse error messages have become more informative, and | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| .\"t | ||||
| 
 | ||||
| .TH "hledger" "1" "July 2018" "hledger 1.10.99" "hledger User Manuals" | ||||
| .TH "hledger" "1" "September 2018" "hledger 1.10.99" "hledger User Manuals" | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| @ -2246,6 +2246,11 @@ boundaries, or for closing out income/expenses for a period. | ||||
| This was formerly called \[lq]equity\[rq], as in Ledger, and that alias | ||||
| is also accepted. | ||||
| See close \[en]help for more. | ||||
| .SS files | ||||
| .PP | ||||
| List all files included in the journal. | ||||
| With a REGEX argument, only file names matching the regular expression | ||||
| (case sensitive) are shown. | ||||
| .SS help | ||||
| .PP | ||||
| Show any of the hledger manuals. | ||||
| @ -2769,6 +2774,11 @@ Helps ledger\-autosync detect already\-seen transactions when importing. | ||||
| .SS rewrite | ||||
| .PP | ||||
| Print all transactions, adding custom postings to the matched ones. | ||||
| .SS roi | ||||
| .PP | ||||
| Shows time\-weighted (TWR) and money\-weighted (IRR) rate of return on | ||||
| your investments. | ||||
| See \f[C]roi\ \-\-help\f[] for more. | ||||
| .SS stats | ||||
| .PP | ||||
| Show some journal statistics. | ||||
|  | ||||
| @ -2,10 +2,10 @@ | ||||
| -- | ||||
| -- see: https://github.com/sol/hpack | ||||
| -- | ||||
| -- hash: eeed47cc18e00b190b0dd220f044f4f63c60442fa26ee301c44454b5f66e09ca | ||||
| -- hash: a53ed723ef2c43c6425e4bf2d40ae7a37b9816dcdbd49795a7a7972b4b4ca203 | ||||
| 
 | ||||
| name:           hledger | ||||
| version:        1.10.99 | ||||
| version:        1.11 | ||||
| synopsis:       Command-line interface for the hledger accounting tool | ||||
| description:    This is hledger's command-line interface. | ||||
|                 Its basic function is to read a plain text file describing | ||||
| @ -111,7 +111,7 @@ library | ||||
|   other-modules: | ||||
|       Paths_hledger | ||||
|   ghc-options: -Wall -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures -fno-warn-type-defaults -fno-warn-orphans -optP-Wno-nonportable-include-path | ||||
|   cpp-options: -DVERSION="1.10.99" | ||||
|   cpp-options: -DVERSION="1.11" | ||||
|   build-depends: | ||||
|       Decimal | ||||
|     , Diff | ||||
| @ -129,7 +129,7 @@ library | ||||
|     , hashable >=1.2.4 | ||||
|     , haskeline >=0.6 | ||||
|     , here | ||||
|     , hledger-lib >=1.10.99 && <1.11 | ||||
|     , hledger-lib >=1.11 && <1.12 | ||||
|     , lucid | ||||
|     , megaparsec >=6.4.1 | ||||
|     , mtl | ||||
| @ -164,7 +164,7 @@ executable hledger | ||||
|   hs-source-dirs: | ||||
|       app | ||||
|   ghc-options: -Wall -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures -fno-warn-type-defaults -fno-warn-orphans -optP-Wno-nonportable-include-path | ||||
|   cpp-options: -DVERSION="1.10.99" | ||||
|   cpp-options: -DVERSION="1.11" | ||||
|   build-depends: | ||||
|       Decimal | ||||
|     , ansi-terminal >=0.6.2.3 | ||||
| @ -181,7 +181,7 @@ executable hledger | ||||
|     , haskeline >=0.6 | ||||
|     , here | ||||
|     , hledger | ||||
|     , hledger-lib >=1.10.99 && <1.11 | ||||
|     , hledger-lib >=1.11 && <1.12 | ||||
|     , megaparsec >=6.4.1 | ||||
|     , mtl | ||||
|     , mtl-compat | ||||
| @ -218,7 +218,7 @@ test-suite test | ||||
|   hs-source-dirs: | ||||
|       test | ||||
|   ghc-options: -Wall -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures -fno-warn-type-defaults -fno-warn-orphans -optP-Wno-nonportable-include-path | ||||
|   cpp-options: -DVERSION="1.10.99" | ||||
|   cpp-options: -DVERSION="1.11" | ||||
|   build-depends: | ||||
|       Decimal | ||||
|     , ansi-terminal >=0.6.2.3 | ||||
| @ -235,7 +235,7 @@ test-suite test | ||||
|     , haskeline >=0.6 | ||||
|     , here | ||||
|     , hledger | ||||
|     , hledger-lib >=1.10.99 && <1.11 | ||||
|     , hledger-lib >=1.11 && <1.12 | ||||
|     , megaparsec >=6.4.1 | ||||
|     , mtl | ||||
|     , mtl-compat | ||||
| @ -289,7 +289,7 @@ benchmark bench | ||||
|     , haskeline >=0.6 | ||||
|     , here | ||||
|     , hledger | ||||
|     , hledger-lib >=1.10.99 && <1.11 | ||||
|     , hledger-lib >=1.11 && <1.12 | ||||
|     , html | ||||
|     , megaparsec >=6.4.1 | ||||
|     , mtl | ||||
|  | ||||
| @ -912,6 +912,7 @@ detailed command help. | ||||
| * check-dates:: | ||||
| * check-dupes:: | ||||
| * close:: | ||||
| * files:: | ||||
| * help:: | ||||
| * import:: | ||||
| * incomestatement:: | ||||
| @ -921,6 +922,7 @@ detailed command help. | ||||
| * register:: | ||||
| * register-match:: | ||||
| * rewrite:: | ||||
| * roi:: | ||||
| * stats:: | ||||
| * tags:: | ||||
| * test:: | ||||
| @ -1757,7 +1759,7 @@ Report account names having the same leaf but different prefixes.  An | ||||
| example: http://stefanorodighiero.net/software/hledger-dupes.html | ||||
| 
 | ||||
|  | ||||
| File: hledger.info,  Node: close,  Next: help,  Prev: check-dupes,  Up: COMMANDS | ||||
| File: hledger.info,  Node: close,  Next: files,  Prev: check-dupes,  Up: COMMANDS | ||||
| 
 | ||||
| 4.10 close | ||||
| ========== | ||||
| @ -1769,9 +1771,18 @@ a period.  This was formerly called "equity", as in Ledger, and that | ||||
| alias is also accepted.  See close -help for more. | ||||
| 
 | ||||
|  | ||||
| File: hledger.info,  Node: help,  Next: import,  Prev: close,  Up: COMMANDS | ||||
| File: hledger.info,  Node: files,  Next: help,  Prev: close,  Up: COMMANDS | ||||
| 
 | ||||
| 4.11 help | ||||
| 4.11 files | ||||
| ========== | ||||
| 
 | ||||
| List all files included in the journal.  With a REGEX argument, only | ||||
| file names matching the regular expression (case sensitive) are shown. | ||||
| 
 | ||||
|  | ||||
| File: hledger.info,  Node: help,  Next: import,  Prev: files,  Up: COMMANDS | ||||
| 
 | ||||
| 4.12 help | ||||
| ========= | ||||
| 
 | ||||
| Show any of the hledger manuals. | ||||
| @ -1808,7 +1819,7 @@ DESCRIPTION | ||||
|  | ||||
| File: hledger.info,  Node: import,  Next: incomestatement,  Prev: help,  Up: COMMANDS | ||||
| 
 | ||||
| 4.12 import | ||||
| 4.13 import | ||||
| =========== | ||||
| 
 | ||||
| Read new transactions added to each FILE since last run, and add them to | ||||
| @ -1834,7 +1845,7 @@ $ hledger import --dry ... | hledger -f- print unknown --ignore-assertions | ||||
|  | ||||
| File: hledger.info,  Node: incomestatement,  Next: prices,  Prev: import,  Up: COMMANDS | ||||
| 
 | ||||
| 4.13 incomestatement | ||||
| 4.14 incomestatement | ||||
| ==================== | ||||
| 
 | ||||
| This command displays a simple income statement, showing revenues and | ||||
| @ -1921,7 +1932,7 @@ selection. | ||||
|  | ||||
| File: hledger.info,  Node: prices,  Next: print,  Prev: incomestatement,  Up: COMMANDS | ||||
| 
 | ||||
| 4.14 prices | ||||
| 4.15 prices | ||||
| =========== | ||||
| 
 | ||||
| Print market price directives from the journal.  With -costs, also print | ||||
| @ -1932,7 +1943,7 @@ Prices (and postings providing prices) can be filtered by a query. | ||||
|  | ||||
| File: hledger.info,  Node: print,  Next: print-unique,  Prev: prices,  Up: COMMANDS | ||||
| 
 | ||||
| 4.15 print | ||||
| 4.16 print | ||||
| ========== | ||||
| 
 | ||||
| Show transactions from the journal.  Aliases: p, txns. | ||||
| @ -2049,7 +2060,7 @@ $ hledger print -Ocsv | ||||
|  | ||||
| File: hledger.info,  Node: print-unique,  Next: register,  Prev: print,  Up: COMMANDS | ||||
| 
 | ||||
| 4.16 print-unique | ||||
| 4.17 print-unique | ||||
| ================= | ||||
| 
 | ||||
| Print transactions which do not reuse an already-seen description. | ||||
| @ -2057,7 +2068,7 @@ Print transactions which do not reuse an already-seen description. | ||||
|  | ||||
| File: hledger.info,  Node: register,  Next: register-match,  Prev: print-unique,  Up: COMMANDS | ||||
| 
 | ||||
| 4.17 register | ||||
| 4.18 register | ||||
| ============= | ||||
| 
 | ||||
| Show postings and their running total.  Aliases: r, reg. | ||||
| @ -2162,7 +2173,7 @@ length and comparable to the others in the report. | ||||
|  | ||||
| File: hledger.info,  Node: Custom register output,  Up: register | ||||
| 
 | ||||
| 4.17.1 Custom register output | ||||
| 4.18.1 Custom register output | ||||
| ----------------------------- | ||||
| 
 | ||||
| register uses the full terminal width by default, except on windows. | ||||
| @ -2193,7 +2204,7 @@ selection. | ||||
|  | ||||
| File: hledger.info,  Node: register-match,  Next: rewrite,  Prev: register,  Up: COMMANDS | ||||
| 
 | ||||
| 4.18 register-match | ||||
| 4.19 register-match | ||||
| =================== | ||||
| 
 | ||||
| Print the one posting whose transaction description is closest to DESC, | ||||
| @ -2201,17 +2212,26 @@ in the style of the register command.  Helps ledger-autosync detect | ||||
| already-seen transactions when importing. | ||||
| 
 | ||||
|  | ||||
| File: hledger.info,  Node: rewrite,  Next: stats,  Prev: register-match,  Up: COMMANDS | ||||
| File: hledger.info,  Node: rewrite,  Next: roi,  Prev: register-match,  Up: COMMANDS | ||||
| 
 | ||||
| 4.19 rewrite | ||||
| 4.20 rewrite | ||||
| ============ | ||||
| 
 | ||||
| Print all transactions, adding custom postings to the matched ones. | ||||
| 
 | ||||
|  | ||||
| File: hledger.info,  Node: stats,  Next: tags,  Prev: rewrite,  Up: COMMANDS | ||||
| File: hledger.info,  Node: roi,  Next: stats,  Prev: rewrite,  Up: COMMANDS | ||||
| 
 | ||||
| 4.20 stats | ||||
| 4.21 roi | ||||
| ======== | ||||
| 
 | ||||
| Shows time-weighted (TWR) and money-weighted (IRR) rate of return on | ||||
| your investments.  See 'roi --help' for more. | ||||
| 
 | ||||
|  | ||||
| File: hledger.info,  Node: stats,  Next: tags,  Prev: roi,  Up: COMMANDS | ||||
| 
 | ||||
| 4.22 stats | ||||
| ========== | ||||
| 
 | ||||
| Show some journal statistics. | ||||
| @ -2243,7 +2263,7 @@ selection. | ||||
|  | ||||
| File: hledger.info,  Node: tags,  Next: test,  Prev: stats,  Up: COMMANDS | ||||
| 
 | ||||
| 4.21 tags | ||||
| 4.23 tags | ||||
| ========= | ||||
| 
 | ||||
| List all the tag names used in the journal.  With a TAGREGEX argument, | ||||
| @ -2254,7 +2274,7 @@ query are considered. | ||||
|  | ||||
| File: hledger.info,  Node: test,  Prev: tags,  Up: COMMANDS | ||||
| 
 | ||||
| 4.22 test | ||||
| 4.24 test | ||||
| ========= | ||||
| 
 | ||||
| Run built-in unit tests. | ||||
| @ -2491,94 +2511,98 @@ Node: QUERIES26089 | ||||
| Ref: #queries26191 | ||||
| Node: COMMANDS30153 | ||||
| Ref: #commands30265 | ||||
| Node: accounts31247 | ||||
| Ref: #accounts31345 | ||||
| Node: activity32591 | ||||
| Ref: #activity32701 | ||||
| Node: add33061 | ||||
| Ref: #add33160 | ||||
| Node: balance35821 | ||||
| Ref: #balance35932 | ||||
| Node: Classic balance report39015 | ||||
| Ref: #classic-balance-report39188 | ||||
| Node: Customising the classic balance report40557 | ||||
| Ref: #customising-the-classic-balance-report40785 | ||||
| Node: Colour support42859 | ||||
| Ref: #colour-support43026 | ||||
| Node: Flat mode43199 | ||||
| Ref: #flat-mode43347 | ||||
| Node: Depth limited balance reports43760 | ||||
| Ref: #depth-limited-balance-reports43960 | ||||
| Node: Multicolumn balance report44416 | ||||
| Ref: #multicolumn-balance-report44614 | ||||
| Node: Budget report49794 | ||||
| Ref: #budget-report49937 | ||||
| Ref: #output-format-152971 | ||||
| Node: balancesheet53049 | ||||
| Ref: #balancesheet53185 | ||||
| Node: balancesheetequity55496 | ||||
| Ref: #balancesheetequity55645 | ||||
| Node: cashflow56182 | ||||
| Ref: #cashflow56310 | ||||
| Node: check-dates58433 | ||||
| Ref: #check-dates58560 | ||||
| Node: check-dupes58677 | ||||
| Ref: #check-dupes58801 | ||||
| Node: close58938 | ||||
| Ref: #close59045 | ||||
| Node: help59375 | ||||
| Ref: #help59475 | ||||
| Node: import60549 | ||||
| Ref: #import60663 | ||||
| Node: incomestatement61393 | ||||
| Ref: #incomestatement61527 | ||||
| Node: prices63931 | ||||
| Ref: #prices64046 | ||||
| Node: print64318 | ||||
| Ref: #print64428 | ||||
| Node: print-unique69322 | ||||
| Ref: #print-unique69448 | ||||
| Node: register69516 | ||||
| Ref: #register69643 | ||||
| Node: Custom register output74144 | ||||
| Ref: #custom-register-output74273 | ||||
| Node: register-match75503 | ||||
| Ref: #register-match75637 | ||||
| Node: rewrite75820 | ||||
| Ref: #rewrite75937 | ||||
| Node: stats76006 | ||||
| Ref: #stats76109 | ||||
| Node: tags76979 | ||||
| Ref: #tags77077 | ||||
| Node: test77313 | ||||
| Ref: #test77397 | ||||
| Node: ADD-ON COMMANDS78105 | ||||
| Ref: #add-on-commands78215 | ||||
| Node: Official add-ons79502 | ||||
| Ref: #official-add-ons79642 | ||||
| Node: api79729 | ||||
| Ref: #api79818 | ||||
| Node: ui79870 | ||||
| Ref: #ui79969 | ||||
| Node: web80027 | ||||
| Ref: #web80116 | ||||
| Node: Third party add-ons80162 | ||||
| Ref: #third-party-add-ons80337 | ||||
| Node: diff80472 | ||||
| Ref: #diff80569 | ||||
| Node: iadd80668 | ||||
| Ref: #iadd80782 | ||||
| Node: interest80865 | ||||
| Ref: #interest80986 | ||||
| Node: irr81081 | ||||
| Ref: #irr81179 | ||||
| Node: Experimental add-ons81257 | ||||
| Ref: #experimental-add-ons81409 | ||||
| Node: autosync81689 | ||||
| Ref: #autosync81800 | ||||
| Node: chart82039 | ||||
| Ref: #chart82158 | ||||
| Node: check82229 | ||||
| Ref: #check82331 | ||||
| Node: accounts31265 | ||||
| Ref: #accounts31363 | ||||
| Node: activity32609 | ||||
| Ref: #activity32719 | ||||
| Node: add33079 | ||||
| Ref: #add33178 | ||||
| Node: balance35839 | ||||
| Ref: #balance35950 | ||||
| Node: Classic balance report39033 | ||||
| Ref: #classic-balance-report39206 | ||||
| Node: Customising the classic balance report40575 | ||||
| Ref: #customising-the-classic-balance-report40803 | ||||
| Node: Colour support42877 | ||||
| Ref: #colour-support43044 | ||||
| Node: Flat mode43217 | ||||
| Ref: #flat-mode43365 | ||||
| Node: Depth limited balance reports43778 | ||||
| Ref: #depth-limited-balance-reports43978 | ||||
| Node: Multicolumn balance report44434 | ||||
| Ref: #multicolumn-balance-report44632 | ||||
| Node: Budget report49812 | ||||
| Ref: #budget-report49955 | ||||
| Ref: #output-format-152989 | ||||
| Node: balancesheet53067 | ||||
| Ref: #balancesheet53203 | ||||
| Node: balancesheetequity55514 | ||||
| Ref: #balancesheetequity55663 | ||||
| Node: cashflow56200 | ||||
| Ref: #cashflow56328 | ||||
| Node: check-dates58451 | ||||
| Ref: #check-dates58578 | ||||
| Node: check-dupes58695 | ||||
| Ref: #check-dupes58819 | ||||
| Node: close58956 | ||||
| Ref: #close59064 | ||||
| Node: files59394 | ||||
| Ref: #files59495 | ||||
| Node: help59636 | ||||
| Ref: #help59736 | ||||
| Node: import60810 | ||||
| Ref: #import60924 | ||||
| Node: incomestatement61654 | ||||
| Ref: #incomestatement61788 | ||||
| Node: prices64192 | ||||
| Ref: #prices64307 | ||||
| Node: print64579 | ||||
| Ref: #print64689 | ||||
| Node: print-unique69583 | ||||
| Ref: #print-unique69709 | ||||
| Node: register69777 | ||||
| Ref: #register69904 | ||||
| Node: Custom register output74405 | ||||
| Ref: #custom-register-output74534 | ||||
| Node: register-match75764 | ||||
| Ref: #register-match75898 | ||||
| Node: rewrite76081 | ||||
| Ref: #rewrite76196 | ||||
| Node: roi76265 | ||||
| Ref: #roi76363 | ||||
| Node: stats76479 | ||||
| Ref: #stats76578 | ||||
| Node: tags77448 | ||||
| Ref: #tags77546 | ||||
| Node: test77782 | ||||
| Ref: #test77866 | ||||
| Node: ADD-ON COMMANDS78574 | ||||
| Ref: #add-on-commands78684 | ||||
| Node: Official add-ons79971 | ||||
| Ref: #official-add-ons80111 | ||||
| Node: api80198 | ||||
| Ref: #api80287 | ||||
| Node: ui80339 | ||||
| Ref: #ui80438 | ||||
| Node: web80496 | ||||
| Ref: #web80585 | ||||
| Node: Third party add-ons80631 | ||||
| Ref: #third-party-add-ons80806 | ||||
| Node: diff80941 | ||||
| Ref: #diff81038 | ||||
| Node: iadd81137 | ||||
| Ref: #iadd81251 | ||||
| Node: interest81334 | ||||
| Ref: #interest81455 | ||||
| Node: irr81550 | ||||
| Ref: #irr81648 | ||||
| Node: Experimental add-ons81726 | ||||
| Ref: #experimental-add-ons81878 | ||||
| Node: autosync82158 | ||||
| Ref: #autosync82269 | ||||
| Node: chart82508 | ||||
| Ref: #chart82627 | ||||
| Node: check82698 | ||||
| Ref: #check82800 | ||||
|  | ||||
| End Tag Table | ||||
|  | ||||
| @ -1596,6 +1596,10 @@ COMMANDS | ||||
|        a  period.   This  was formerly called "equity", as in Ledger, and that | ||||
|        alias is also accepted.  See close -help for more. | ||||
| 
 | ||||
|    files | ||||
|        List all files included in the journal.  With a  REGEX  argument,  only | ||||
|        file  names matching the regular expression (case sensitive) are shown. | ||||
| 
 | ||||
|    help | ||||
|        Show any of the hledger manuals. | ||||
| 
 | ||||
| @ -1978,11 +1982,15 @@ COMMANDS | ||||
|    rewrite | ||||
|        Print all transactions, adding custom postings to the matched ones. | ||||
| 
 | ||||
|    roi | ||||
|        Shows  time-weighted  (TWR)  and money-weighted (IRR) rate of return on | ||||
|        your investments.  See roi --help for more. | ||||
| 
 | ||||
|    stats | ||||
|        Show some journal statistics. | ||||
| 
 | ||||
|        -o FILE --output-file=FILE | ||||
|               write  output  to  FILE.   A  file extension matching one of the | ||||
|               write output to FILE.  A file  extension  matching  one  of  the | ||||
|               above formats selects that format. | ||||
| 
 | ||||
|               $ hledger stats | ||||
| @ -1997,61 +2005,61 @@ COMMANDS | ||||
|               Accounts                 : 8 (depth 3) | ||||
|               Commodities              : 1 ($) | ||||
| 
 | ||||
|        The stats command displays summary information for the  whole  journal, | ||||
|        or  a matched part of it.  With a reporting interval, it shows a report | ||||
|        The  stats  command displays summary information for the whole journal, | ||||
|        or a matched part of it.  With a reporting interval, it shows a  report | ||||
|        for each report period. | ||||
| 
 | ||||
|        This command also supports output destination and output format  selec- | ||||
|        This  command also supports output destination and output format selec- | ||||
|        tion. | ||||
| 
 | ||||
|    tags | ||||
|        List  all the tag names used in the journal.  With a TAGREGEX argument, | ||||
|        only tag names matching the regular expression (case  insensitive)  are | ||||
|        List all the tag names used in the journal.  With a TAGREGEX  argument, | ||||
|        only  tag  names matching the regular expression (case insensitive) are | ||||
|        shown.  With additional QUERY arguments, only transactions matching the | ||||
|        query are considered. | ||||
| 
 | ||||
|    test | ||||
|        Run built-in unit tests. | ||||
| 
 | ||||
|        Prints test names and their results on stdout.  If any  test  fails  or | ||||
|        Prints  test  names  and their results on stdout.  If any test fails or | ||||
|        gives an error, the exit code will be non-zero. | ||||
| 
 | ||||
|        Test  names include a group prefix.  If a (exact, case sensitive) group | ||||
|        prefix, or a full test name is provided as  the  first  argument,  only | ||||
|        Test names include a group prefix.  If a (exact, case sensitive)  group | ||||
|        prefix,  or  a  full  test name is provided as the first argument, only | ||||
|        that group or test is run. | ||||
| 
 | ||||
|        If  a  numeric  second argument is provided, it will set the randomness | ||||
|        seed, for repeatable results from  tests  using  randomness  (currently | ||||
|        If a numeric second argument is provided, it will  set  the  randomness | ||||
|        seed,  for  repeatable  results  from tests using randomness (currently | ||||
|        none of them). | ||||
| 
 | ||||
|        This  is  mainly  used  by developers, but it's nice to be able to san- | ||||
|        This is mainly used by developers, but it's nice to  be  able  to  san- | ||||
|        ity-check your installed hledger executable at any time.  All tests are | ||||
|        expected to pass - if you ever see otherwise, something has gone wrong, | ||||
|        please report a bug! | ||||
| 
 | ||||
| ADD-ON COMMANDS | ||||
|        hledger also searches for external add-on commands,  and  will  include | ||||
|        hledger  also  searches  for external add-on commands, and will include | ||||
|        these in the commands list.  These are programs or scripts in your PATH | ||||
|        whose name starts with hledger- and ends with a recognised file  exten- | ||||
|        whose  name starts with hledger- and ends with a recognised file exten- | ||||
|        sion (currently: no extension, bat,com,exe, hs,lhs,pl,py,rb,rkt,sh). | ||||
| 
 | ||||
|        Add-ons  can  be  invoked like any hledger command, but there are a few | ||||
|        Add-ons can be invoked like any hledger command, but there  are  a  few | ||||
|        things to be aware of.  Eg if the hledger-web add-on is installed, | ||||
| 
 | ||||
|        o hledger -h web  shows  hledger's  help,  while  hledger web -h  shows | ||||
|          hledger-web's help. | ||||
| 
 | ||||
|        o Flags  specific  to  the add-on must have a preceding -- to hide them | ||||
|          from hledger.  So hledger web --serve --port 9000 will  be  rejected; | ||||
|        o Flags specific to the add-on must have a preceding --  to  hide  them | ||||
|          from  hledger.   So hledger web --serve --port 9000 will be rejected; | ||||
|          you must use hledger web -- --serve --port 9000. | ||||
| 
 | ||||
|        o You    can    always    run    add-ons    directly    if   preferred: | ||||
|        o You   can    always    run    add-ons    directly    if    preferred: | ||||
|          hledger-web --serve --port 9000. | ||||
| 
 | ||||
|        Add-ons are a relatively easy way to add local features  or  experiment | ||||
|        with  new  ideas.   They  can  be  written in any language, but haskell | ||||
|        scripts have a big advantage:  they  can  use  the  same  hledger  (and | ||||
|        haskell)  library functions that built-in commands do, for command-line | ||||
|        Add-ons  are  a relatively easy way to add local features or experiment | ||||
|        with new ideas.  They can be  written  in  any  language,  but  haskell | ||||
|        scripts  have  a  big  advantage:  they  can  use the same hledger (and | ||||
|        haskell) library functions that built-in commands do, for  command-line | ||||
|        options, journal parsing, reporting, etc. | ||||
| 
 | ||||
|        Here are some hledger add-ons available: | ||||
| @ -2069,7 +2077,7 @@ ADD-ON COMMANDS | ||||
|        hledger-web provides a simple web interface. | ||||
| 
 | ||||
|    Third party add-ons | ||||
|        These are maintained separately, and usually updated  shortly  after  a | ||||
|        These  are  maintained  separately, and usually updated shortly after a | ||||
|        hledger release. | ||||
| 
 | ||||
|    diff | ||||
| @ -2077,7 +2085,7 @@ ADD-ON COMMANDS | ||||
|        journal file and another. | ||||
| 
 | ||||
|    iadd | ||||
|        hledger-iadd is a curses-style, more interactive  replacement  for  the | ||||
|        hledger-iadd  is  a  curses-style, more interactive replacement for the | ||||
|        add command. | ||||
| 
 | ||||
|    interest | ||||
| @ -2085,19 +2093,19 @@ ADD-ON COMMANDS | ||||
|        ing to various schemes. | ||||
| 
 | ||||
|    irr | ||||
|        hledger-irr calculates the internal rate of  return  of  an  investment | ||||
|        hledger-irr  calculates  the  internal  rate of return of an investment | ||||
|        account. | ||||
| 
 | ||||
|    Experimental add-ons | ||||
|        These  are  available  in source form in the hledger repo's bin/ direc- | ||||
|        These are available in source form in the hledger  repo's  bin/  direc- | ||||
|        tory; installing them is pretty easy.  They may be less mature and doc- | ||||
|        umented  than  built-in commands.  Reading and tweaking these is a good | ||||
|        umented than built-in commands.  Reading and tweaking these is  a  good | ||||
|        way to start making your own! | ||||
| 
 | ||||
|    autosync | ||||
|        hledger-autosync is a symbolic link for easily running ledger-autosync, | ||||
|        if  installed.   ledger-autosync  does  deduplicating conversion of OFX | ||||
|        data and some CSV formats, and can also download the data if your  bank | ||||
|        if installed.  ledger-autosync does  deduplicating  conversion  of  OFX | ||||
|        data  and some CSV formats, and can also download the data if your bank | ||||
|        offers OFX Direct Connect. | ||||
| 
 | ||||
|    chart | ||||
| @ -2107,21 +2115,21 @@ ADD-ON COMMANDS | ||||
|        hledger-check.hs checks more powerful account balance assertions. | ||||
| 
 | ||||
| ENVIRONMENT | ||||
|        COLUMNS  The  screen  width used by the register command.  Default: the | ||||
|        COLUMNS The screen width used by the register  command.   Default:  the | ||||
|        full terminal width. | ||||
| 
 | ||||
|        LEDGER_FILE The journal file path when not specified with -f.  Default: | ||||
|        ~/.hledger.journal  (on  windows,  perhaps C:/Users/USER/.hledger.jour- | ||||
|        ~/.hledger.journal (on  windows,  perhaps  C:/Users/USER/.hledger.jour- | ||||
|        nal). | ||||
| 
 | ||||
| FILES | ||||
|        Reads data from one or more files in hledger journal, timeclock,  time- | ||||
|        dot,   or   CSV   format   specified   with  -f,  or  $LEDGER_FILE,  or | ||||
|        $HOME/.hledger.journal          (on          windows,           perhaps | ||||
|        Reads  data from one or more files in hledger journal, timeclock, time- | ||||
|        dot,  or  CSV  format  specified   with   -f,   or   $LEDGER_FILE,   or | ||||
|        $HOME/.hledger.journal           (on          windows,          perhaps | ||||
|        C:/Users/USER/.hledger.journal). | ||||
| 
 | ||||
| BUGS | ||||
|        The  need  to  precede  addon command options with -- when invoked from | ||||
|        The need to precede addon command options with  --  when  invoked  from | ||||
|        hledger is awkward. | ||||
| 
 | ||||
|        When input data contains non-ascii characters, a suitable system locale | ||||
| @ -2134,33 +2142,33 @@ BUGS | ||||
|        In a Cygwin/MSYS/Mintty window, the tab key is not supported in hledger | ||||
|        add. | ||||
| 
 | ||||
|        Not all of Ledger's journal file syntax is supported.  See file  format | ||||
|        Not  all of Ledger's journal file syntax is supported.  See file format | ||||
|        differences. | ||||
| 
 | ||||
|        On  large  data  files,  hledger  is  slower  and uses more memory than | ||||
|        On large data files, hledger  is  slower  and  uses  more  memory  than | ||||
|        Ledger. | ||||
| 
 | ||||
| TROUBLESHOOTING | ||||
|        Here are some issues you might encounter  when  you  run  hledger  (and | ||||
|        remember  you can also seek help from the IRC channel, mail list or bug | ||||
|        Here  are  some  issues  you  might encounter when you run hledger (and | ||||
|        remember you can also seek help from the IRC channel, mail list or  bug | ||||
|        tracker): | ||||
| 
 | ||||
|        Successfully installed, but "No command `hledger' found" | ||||
|        stack and cabal install binaries into a special directory, which should | ||||
|        be  added  to your PATH environment variable.  Eg on unix-like systems, | ||||
|        be added to your PATH environment variable.  Eg on  unix-like  systems, | ||||
|        that is ~/.local/bin and ~/.cabal/bin respectively. | ||||
| 
 | ||||
|        I set a custom LEDGER_FILE, but hledger is still using the default file | ||||
|        LEDGER_FILE  should  be  a  real environment variable, not just a shell | ||||
|        variable.  The command env | grep LEDGER_FILE should show it.  You  may | ||||
|        LEDGER_FILE should be a real environment variable,  not  just  a  shell | ||||
|        variable.   The command env | grep LEDGER_FILE should show it.  You may | ||||
|        need to use export.  Here's an explanation. | ||||
| 
 | ||||
|        "Illegal  byte  sequence"  or  "Invalid or incomplete multibyte or wide | ||||
|        "Illegal byte sequence" or "Invalid or  incomplete  multibyte  or  wide | ||||
|        character" errors | ||||
|        In order to handle non-ascii letters and symbols (like ), hledger needs | ||||
|        an appropriate locale.  This is usually configured system-wide; you can | ||||
|        also configure it temporarily.  The locale may need to be one that sup- | ||||
|        ports  UTF-8,  if you built hledger with GHC < 7.2 (or possibly always, | ||||
|        ports UTF-8, if you built hledger with GHC < 7.2 (or  possibly  always, | ||||
|        I'm not sure yet). | ||||
| 
 | ||||
|        Here's  an  example  of  setting  the  locale  temporarily,  on  ubuntu | ||||
| @ -2179,7 +2187,7 @@ TROUBLESHOOTING | ||||
|               $ echo "export LANG=en_US.UTF-8" >>~/.bash_profile | ||||
|               $ bash --login | ||||
| 
 | ||||
|        If  we  preferred  to  use eg fr_FR.utf8, we might have to install that | ||||
|        If we preferred to use eg fr_FR.utf8, we might  have  to  install  that | ||||
|        first: | ||||
| 
 | ||||
|               $ apt-get install language-pack-fr | ||||
| @ -2200,7 +2208,7 @@ TROUBLESHOOTING | ||||
| 
 | ||||
| 
 | ||||
| REPORTING BUGS | ||||
|        Report  bugs at http://bugs.hledger.org (or on the #hledger IRC channel | ||||
|        Report bugs at http://bugs.hledger.org (or on the #hledger IRC  channel | ||||
|        or hledger mail list) | ||||
| 
 | ||||
| 
 | ||||
| @ -2214,7 +2222,7 @@ COPYRIGHT | ||||
| 
 | ||||
| 
 | ||||
| SEE ALSO | ||||
|        hledger(1),     hledger-ui(1),     hledger-web(1),      hledger-api(1), | ||||
|        hledger(1),      hledger-ui(1),     hledger-web(1),     hledger-api(1), | ||||
|        hledger_csv(5), hledger_journal(5), hledger_timeclock(5), hledger_time- | ||||
|        dot(5), ledger(1) | ||||
| 
 | ||||
| @ -2222,4 +2230,4 @@ SEE ALSO | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| hledger 1.10.99                    July 2018                        hledger(1) | ||||
| hledger 1.10.99                 September 2018                      hledger(1) | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| name: hledger | ||||
| version: '1.10.99' | ||||
| version: '1.11' | ||||
| synopsis: Command-line interface for the hledger accounting tool | ||||
| description: | | ||||
|   This is hledger's command-line interface. | ||||
| @ -78,7 +78,7 @@ ghc-options: | ||||
| - -optP-Wno-nonportable-include-path | ||||
| 
 | ||||
| dependencies: | ||||
| - hledger-lib >=1.10.99 && <1.11 | ||||
| - hledger-lib >=1.11 && <1.12 | ||||
| - ansi-terminal >=0.6.2.3 | ||||
| - base >=4.8 && <4.12 | ||||
| - base-compat-batteries >=0.10.1 && <0.11 | ||||
| @ -121,7 +121,7 @@ when: | ||||
|   - terminfo | ||||
| 
 | ||||
| library: | ||||
|   cpp-options: -DVERSION="1.10.99" | ||||
|   cpp-options: -DVERSION="1.11" | ||||
|   exposed-modules: | ||||
|   - Hledger.Cli | ||||
|   - Hledger.Cli.Main | ||||
| @ -163,7 +163,7 @@ executables: | ||||
|   hledger: | ||||
|     source-dirs: app | ||||
|     main: hledger-cli.hs | ||||
|     cpp-options: -DVERSION="1.10.99" | ||||
|     cpp-options: -DVERSION="1.11" | ||||
|     when: | ||||
|     - condition: flag(threaded) | ||||
|       ghc-options: -threaded | ||||
| @ -174,7 +174,7 @@ tests: | ||||
|   test: | ||||
|     source-dirs: test | ||||
|     main: test.hs | ||||
|     cpp-options: -DVERSION="1.10.99" | ||||
|     cpp-options: -DVERSION="1.11" | ||||
|     dependencies: | ||||
|     - hledger | ||||
|     - test-framework | ||||
|  | ||||
							
								
								
									
										0
									
								
								site/doc/1.11/.snapshot
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										274
									
								
								site/doc/1.11/csv.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,274 @@ | ||||
| # csv format | ||||
| 
 | ||||
| This doc is for version **1.10.99** (dev). []{.docversions} | ||||
| 
 | ||||
| \$toc\$ | ||||
| 
 | ||||
| ## NAME | ||||
| 
 | ||||
| CSV - how hledger reads CSV data, and the CSV rules file format | ||||
| 
 | ||||
| ## DESCRIPTION | ||||
| 
 | ||||
| hledger can read | ||||
| [CSV](http://en.wikipedia.org/wiki/Comma-separated_values) | ||||
| (comma-separated value) files as if they were journal files, | ||||
| automatically converting each CSV record into a transaction. (To learn | ||||
| about *writing* CSV, see [CSV output](hledger.html#csv-output).) | ||||
| 
 | ||||
| Converting CSV to transactions requires some special conversion rules. | ||||
| These do several things: | ||||
| 
 | ||||
| -   they describe the layout and format of the CSV data | ||||
| -   they can customize the generated journal entries using a simple | ||||
|     templating language | ||||
| -   they can add refinements based on patterns in the CSV data, eg | ||||
|     categorizing transactions with more detailed account names. | ||||
| 
 | ||||
| When reading a CSV file named `FILE.csv`, hledger looks for a conversion | ||||
| rules file named `FILE.csv.rules` in the same directory. You can | ||||
| override this with the `--rules-file` option. If the rules file does not | ||||
| exist, hledger will auto-create one with some example rules, which | ||||
| you'll need to adjust. | ||||
| 
 | ||||
| At minimum, the rules file must identify the `date` and `amount` fields. | ||||
| It may also be necessary to specify the date format, and the number of | ||||
| header lines to skip. Eg: | ||||
| 
 | ||||
|     fields date, _, _, amount | ||||
|     date-format  %d/%m/%Y | ||||
|     skip 1 | ||||
| 
 | ||||
| A more complete example: | ||||
| 
 | ||||
|     # hledger CSV rules for amazon.com order history | ||||
| 
 | ||||
|     # sample: | ||||
|     # "Date","Type","To/From","Name","Status","Amount","Fees","Transaction ID" | ||||
|     # "Jul 29, 2012","Payment","To","Adapteva, Inc.","Completed","$25.00","$0.00","17LA58JSK6PRD4HDGLNJQPI1PB9N8DKPVHL" | ||||
| 
 | ||||
|     # skip one header line | ||||
|     skip 1 | ||||
| 
 | ||||
|     # name the csv fields (and assign the transaction's date, amount and code) | ||||
|     fields date, _, toorfrom, name, amzstatus, amount, fees, code | ||||
| 
 | ||||
|     # how to parse the date | ||||
|     date-format %b %-d, %Y | ||||
| 
 | ||||
|     # combine two fields to make the description | ||||
|     description %toorfrom %name | ||||
| 
 | ||||
|     # save these fields as tags | ||||
|     comment     status:%amzstatus, fees:%fees | ||||
| 
 | ||||
|     # set the base account for all transactions | ||||
|     account1    assets:amazon | ||||
| 
 | ||||
|     # flip the sign on the amount | ||||
|     amount      -%amount | ||||
| 
 | ||||
| For more examples, see [Convert CSV | ||||
| files](https://github.com/simonmichael/hledger/wiki/Convert-CSV-files). | ||||
| 
 | ||||
| ## CSV RULES | ||||
| 
 | ||||
| The following seven kinds of rule can appear in the rules file, in any | ||||
| order. Blank lines and lines beginning with `#` or `;` are ignored. | ||||
| 
 | ||||
| ### skip | ||||
| 
 | ||||
| `skip`*`N`* | ||||
| 
 | ||||
| Skip this number of CSV records at the beginning. You'll need this | ||||
| whenever your CSV data contains header lines. Eg: <!-- XXX --> | ||||
| <!-- hledger tries to skip initial CSV header lines automatically. --> | ||||
| <!-- If it guesses wrong, use this directive to skip exactly N lines. --> | ||||
| <!-- This can also be used in a conditional block to ignore certain CSV records. --> | ||||
| 
 | ||||
| ``` {.rules} | ||||
| # ignore the first CSV line | ||||
| skip 1 | ||||
| ``` | ||||
| 
 | ||||
| ### date-format | ||||
| 
 | ||||
| `date-format`*`DATEFMT`* | ||||
| 
 | ||||
| When your CSV date fields are not formatted like `YYYY/MM/DD` (or | ||||
| `YYYY-MM-DD` or `YYYY.MM.DD`), you'll need to specify the format. | ||||
| DATEFMT is a [strptime-like date parsing | ||||
| pattern](http://hackage.haskell.org/packages/archive/time/latest/doc/html/Data-Time-Format.html#v:formatTime), | ||||
| which must parse the date field values completely. Examples: | ||||
| 
 | ||||
| ``` {.rules .display-table} | ||||
| # for dates like "6/11/2013": | ||||
| date-format %-d/%-m/%Y | ||||
| ``` | ||||
| 
 | ||||
| ``` {.rules .display-table} | ||||
| # for dates like "11/06/2013": | ||||
| date-format %m/%d/%Y | ||||
| ``` | ||||
| 
 | ||||
| ``` {.rules .display-table} | ||||
| # for dates like "2013-Nov-06": | ||||
| date-format %Y-%h-%d | ||||
| ``` | ||||
| 
 | ||||
| ``` {.rules .display-table} | ||||
| # for dates like "11/6/2013 11:32 PM": | ||||
| date-format %-m/%-d/%Y %l:%M %p | ||||
| ``` | ||||
| 
 | ||||
| ### field list | ||||
| 
 | ||||
| `fields`*`FIELDNAME1`*, *`FIELDNAME2`*... | ||||
| 
 | ||||
| This (a) names the CSV fields, in order (names may not contain | ||||
| whitespace; uninteresting names may be left blank), and (b) assigns them | ||||
| to journal entry fields if you use any of these standard field names: | ||||
| `date`, `date2`, `status`, `code`, `description`, `comment`, `account1`, | ||||
| `account2`, `amount`, `amount-in`, `amount-out`, `currency`, `balance`. | ||||
| Eg: | ||||
| 
 | ||||
| ``` {.rules} | ||||
| # use the 1st, 2nd and 4th CSV fields as the entry's date, description and amount, | ||||
| # and give the 7th and 8th fields meaningful names for later reference: | ||||
| # | ||||
| # CSV field: | ||||
| #      1     2            3 4       5 6 7          8 | ||||
| # entry field: | ||||
| fields date, description, , amount, , , somefield, anotherfield | ||||
| ``` | ||||
| 
 | ||||
| ### field assignment | ||||
| 
 | ||||
| *`ENTRYFIELDNAME`* *`FIELDVALUE`* | ||||
| 
 | ||||
| This sets a journal entry field (one of the standard names above) to the | ||||
| given text value, which can include CSV field values interpolated by | ||||
| name (`%CSVFIELDNAME`) or 1-based position (`%N`). | ||||
| <!-- Whitespace before or after the value is ignored. --> Eg: | ||||
| 
 | ||||
| ``` {.rules .display-table} | ||||
| # set the amount to the 4th CSV field with "USD " prepended | ||||
| amount USD %4 | ||||
| ``` | ||||
| 
 | ||||
| ``` {.rules .display-table} | ||||
| # combine three fields to make a comment (containing two tags) | ||||
| comment note: %somefield - %anotherfield, date: %1 | ||||
| ``` | ||||
| 
 | ||||
| Field assignments can be used instead of or in addition to a field list. | ||||
| 
 | ||||
| ### conditional block | ||||
| 
 | ||||
| `if` *`PATTERN`*\ | ||||
|     *`FIELDASSIGNMENTS`*... | ||||
| 
 | ||||
| `if`\ | ||||
| *`PATTERN`*\ | ||||
| *`PATTERN`*...\ | ||||
|     *`FIELDASSIGNMENTS`*... | ||||
| 
 | ||||
| This applies one or more field assignments, only to those CSV records | ||||
| matched by one of the PATTERNs. The patterns are case-insensitive | ||||
| regular expressions which match anywhere within the whole CSV record | ||||
| (it's not yet possible to match within a specific field). When there are | ||||
| multiple patterns they can be written on separate lines, unindented. The | ||||
| field assignments are on separate lines indented by at least one space. | ||||
| Examples: | ||||
| 
 | ||||
| ``` {.rules .display-table} | ||||
| # if the CSV record contains "groceries", set account2 to "expenses:groceries" | ||||
| if groceries | ||||
|  account2 expenses:groceries | ||||
| ``` | ||||
| 
 | ||||
| ``` {.rules .display-table} | ||||
| # if the CSV record contains any of these patterns, set account2 and comment as shown | ||||
| if | ||||
| monthly service fee | ||||
| atm transaction fee | ||||
| banking thru software | ||||
|  account2 expenses:business:banking | ||||
|  comment  XXX deductible ? check it | ||||
| ``` | ||||
| 
 | ||||
| ### include | ||||
| 
 | ||||
| `include`*`RULESFILE`* | ||||
| 
 | ||||
| Include another rules file at this point. `RULESFILE` is either an | ||||
| absolute file path or a path relative to the current file's directory. | ||||
| Eg: | ||||
| 
 | ||||
| ``` {.rules} | ||||
| # rules reused with several CSV files | ||||
| include common.rules | ||||
| ``` | ||||
| 
 | ||||
| ### newest-first | ||||
| 
 | ||||
| `newest-first` | ||||
| 
 | ||||
| Consider adding this rule if all of the following are true: you might be | ||||
| processing just one day of data, your CSV records are in reverse | ||||
| chronological order (newest first), and you care about preserving the | ||||
| order of same-day transactions. It usually isn't needed, because hledger | ||||
| autodetects the CSV order, but when all CSV records have the same date | ||||
| it will assume they are oldest first. | ||||
| 
 | ||||
| ## CSV TIPS | ||||
| 
 | ||||
| ### CSV ordering | ||||
| 
 | ||||
| The generated [journal entries](/journal.html#transactions) will be | ||||
| sorted by date. The order of same-day entries will be preserved (except | ||||
| in the special case where you might need | ||||
| [`newest-first`](#newest-first), see above). | ||||
| 
 | ||||
| ### CSV accounts | ||||
| 
 | ||||
| Each journal entry will have two [postings](/journal.html#postings), to | ||||
| `account1` and `account2` respectively. It's not yet possible to | ||||
| generate entries with more than two postings. It's conventional and | ||||
| recommended to use `account1` for the account whose CSV we are reading. | ||||
| 
 | ||||
| ### CSV amounts | ||||
| 
 | ||||
| The `amount` field sets the [amount](/journal.html#amounts) of the | ||||
| `account1` posting. | ||||
| 
 | ||||
| If the CSV has debit/credit amounts in separate fields, assign to the | ||||
| `amount-in` and `amount-out` pseudo fields instead. (Whichever one has a | ||||
| value will be used, with appropriate sign. If both contain a value, it | ||||
| may not work so well.) | ||||
| 
 | ||||
| If an amount value is parenthesised, it will be de-parenthesised and | ||||
| sign-flipped. | ||||
| 
 | ||||
| If an amount value begins with a double minus sign, those will cancel | ||||
| out and be removed. | ||||
| 
 | ||||
| If the CSV has the currency symbol in a separate field, assign that to | ||||
| the `currency` pseudo field to have it prepended to the amount. Or, you | ||||
| can use a [field assignment](#field-assignment) to `amount` that | ||||
| interpolates both CSV fields (giving more control, eg to put the | ||||
| currency symbol on the right). | ||||
| 
 | ||||
| ### CSV balance assertions | ||||
| 
 | ||||
| If the CSV includes a running balance, you can assign that to the | ||||
| `balance` pseudo field; whenever the running balance value is non-empty, | ||||
| it will be [asserted](/journal.html#balance-assertions) as the balance | ||||
| after the `account1` posting. | ||||
| 
 | ||||
| ### Reading multiple CSV files | ||||
| 
 | ||||
| You can read multiple CSV files at once using multiple `-f` arguments on | ||||
| the command line, and hledger will look for a correspondingly-named | ||||
| rules file for each. Note if you use the `--rules-file` option, this one | ||||
| rules file will be used for all the CSV files being read. | ||||
							
								
								
									
										102
									
								
								site/doc/1.11/hledger-api.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,102 @@ | ||||
| # hledger-api | ||||
| 
 | ||||
| This doc is for version **1.10.99** (dev). []{.docversions} | ||||
| 
 | ||||
| \$toc\$ | ||||
| 
 | ||||
| ## NAME | ||||
| 
 | ||||
| hledger-api - web API server for the hledger accounting tool | ||||
| 
 | ||||
| ## SYNOPSIS | ||||
| 
 | ||||
| `hledger-api [OPTIONS]`\ | ||||
| `hledger api -- [OPTIONS]` | ||||
| 
 | ||||
| ## DESCRIPTION | ||||
| 
 | ||||
| hledger is a cross-platform program for tracking money, time, or any | ||||
| other commodity, using double-entry accounting and a simple, editable | ||||
| file format. hledger is inspired by and largely compatible with | ||||
| ledger(1). | ||||
| 
 | ||||
| hledger-api is a simple web API server, intended to support client-side | ||||
| web apps operating on hledger data. It comes with a series of simple | ||||
| client-side app examples, which drive its evolution. | ||||
| 
 | ||||
| Like hledger, it reads data from one or more files in hledger journal, | ||||
| timeclock, timedot, or CSV format specified with `-f`, or | ||||
| `$LEDGER_FILE`, or `$HOME/.hledger.journal` (on windows, perhaps | ||||
| `C:/Users/USER/.hledger.journal`). For more about this see hledger(1), | ||||
| hledger\_journal(5) etc. | ||||
| 
 | ||||
| The server listens on IP address 127.0.0.1, accessible only to local | ||||
| requests, by default. You can change this with `--host`, eg | ||||
| `--host 0.0.0.0` to listen on all addresses. Note there is no other | ||||
| access control, and hledger-api allows file browsing, so on shared | ||||
| machines you will certainly need to put it behind an authenticating | ||||
| proxy to restrict access. | ||||
| 
 | ||||
| You can change the TCP port it listens on (default: 8001) with | ||||
| `-p PORT`. | ||||
| 
 | ||||
| API methods look like: | ||||
| 
 | ||||
|     /api/v1/accountnames | ||||
|     /api/v1/transactions | ||||
|     /api/v1/prices | ||||
|     /api/v1/commodities | ||||
|     /api/v1/accounts | ||||
|     /api/v1/accounts/ACCTNAME | ||||
| 
 | ||||
| See `/api/swagger.json` for a full list in Swagger 2.0 format. (Or you | ||||
| can run `hledger-api --swagger` to print this in the console.) | ||||
| 
 | ||||
| hledger-api also serves files, from the current directory by default, | ||||
| and the `/` path will also show a directory listing. This is convenient | ||||
| for serving client-side web code, in addition to the server-side api. | ||||
| 
 | ||||
| ## OPTIONS | ||||
| 
 | ||||
| Note: if invoking hledger-api as a hledger subcommand, write `--` before | ||||
| options as shown above. | ||||
| 
 | ||||
| `-f --file=FILE` | ||||
| :   use a different input file. For stdin, use - (default: | ||||
|     `$LEDGER_FILE` or `$HOME/.hledger.journal`) | ||||
| 
 | ||||
| `-d --static-dir=DIR` | ||||
| :   serve files from a different directory (default: `.`) | ||||
| 
 | ||||
| `--host=IPADDR` | ||||
| :   listen on this IP address (default: 127.0.0.1) | ||||
| 
 | ||||
| `-p --port=PORT` | ||||
| :   listen on this TCP port (default: 8001) | ||||
| 
 | ||||
| `--swagger` | ||||
| :   print API docs in Swagger 2.0 format, and exit | ||||
| 
 | ||||
| `--version` | ||||
| :   show version | ||||
| 
 | ||||
| `-h --help` | ||||
| :   show usage | ||||
| 
 | ||||
| ## ENVIRONMENT | ||||
| 
 | ||||
| **LEDGER\_FILE** The journal file path when not specified with `-f`. | ||||
| Default: `~/.hledger.journal` (on windows, perhaps | ||||
| `C:/Users/USER/.hledger.journal`). | ||||
| 
 | ||||
| ## FILES | ||||
| 
 | ||||
| Reads data from one or more files in hledger journal, timeclock, | ||||
| timedot, or CSV format specified with `-f`, or `$LEDGER_FILE`, or | ||||
| `$HOME/.hledger.journal` (on windows, perhaps | ||||
| `C:/Users/USER/.hledger.journal`). | ||||
| 
 | ||||
| ## BUGS | ||||
| 
 | ||||
| The need to precede options with `--` when invoked from hledger is | ||||
| awkward. | ||||
							
								
								
									
										412
									
								
								site/doc/1.11/hledger-ui.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,412 @@ | ||||
| # hledger-ui | ||||
| 
 | ||||
| This doc is for version **1.10.99** (dev). []{.docversions} | ||||
| 
 | ||||
| \$toc\$ | ||||
| 
 | ||||
| ## NAME | ||||
| 
 | ||||
| hledger-ui - curses-style interface for the hledger accounting tool | ||||
| 
 | ||||
| ## SYNOPSIS | ||||
| 
 | ||||
| `hledger-ui [OPTIONS] [QUERYARGS]`\ | ||||
| `hledger ui -- [OPTIONS] [QUERYARGS]` | ||||
| 
 | ||||
| ## DESCRIPTION | ||||
| 
 | ||||
| hledger is a cross-platform program for tracking money, time, or any | ||||
| other commodity, using double-entry accounting and a simple, editable | ||||
| file format. hledger is inspired by and largely compatible with | ||||
| ledger(1). | ||||
| 
 | ||||
| <style> | ||||
| .highslide img {max-width:200px; border:0;} | ||||
| .highslide-caption {color:white; background-color:black;} | ||||
| </style> | ||||
| <div style="float:right; max-width:200px; text-align:right;"> | ||||
| 
 | ||||
| <a href="images/hledger-ui/hledger-ui-sample-acc2.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-ui/hledger-ui-sample-acc2.png" title="Accounts screen with query and depth limit" /></a> | ||||
| <a href="images/hledger-ui/hledger-ui-sample-acc.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-ui/hledger-ui-sample-acc.png" title="Accounts screen" /></a> | ||||
| <a href="images/hledger-ui/hledger-ui-sample-acc-greenterm.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-ui/hledger-ui-sample-acc-greenterm.png" title="Accounts screen with greenterm theme" /></a> | ||||
| <a href="images/hledger-ui/hledger-ui-sample-txn.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-ui/hledger-ui-sample-txn.png" title="Transaction screen" /></a> | ||||
| <a href="images/hledger-ui/hledger-ui-sample-reg.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-ui/hledger-ui-sample-reg.png" title="Register screen" /></a> | ||||
| <!-- <br clear=all> --> | ||||
| <a href="images/hledger-ui/hledger-ui-bcexample-acc.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-ui/hledger-ui-bcexample-acc.png" title="beancount example accounts" /></a> | ||||
| <a href="images/hledger-ui/hledger-ui-bcexample-acc-etrade-cash.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-ui/hledger-ui-bcexample-acc-etrade-cash.png" title="beancount example's etrade cash subaccount" /></a> | ||||
| <a href="images/hledger-ui/hledger-ui-bcexample-acc-etrade.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-ui/hledger-ui-bcexample-acc-etrade.png" title="beancount example's etrade investments, all commoditiess" /></a> | ||||
| 
 | ||||
| </div> | ||||
| 
 | ||||
| hledger-ui is hledger's curses-style interface, providing an efficient | ||||
| full-window text UI for viewing accounts and transactions, and some | ||||
| limited data entry capability. It is easier than hledger's command-line | ||||
| interface, and sometimes quicker and more convenient than the web | ||||
| interface. | ||||
| 
 | ||||
| Like hledger, it reads data from one or more files in hledger journal, | ||||
| timeclock, timedot, or CSV format specified with `-f`, or | ||||
| `$LEDGER_FILE`, or `$HOME/.hledger.journal` (on windows, perhaps | ||||
| `C:/Users/USER/.hledger.journal`). For more about this see hledger(1), | ||||
| hledger\_journal(5) etc. | ||||
| 
 | ||||
| ## OPTIONS | ||||
| 
 | ||||
| Note: if invoking hledger-ui as a hledger subcommand, write `--` before | ||||
| options as shown above. | ||||
| 
 | ||||
| Any QUERYARGS are interpreted as a hledger search query which filters | ||||
| the data. | ||||
| 
 | ||||
| `--watch` | ||||
| :   watch for data and date changes and reload automatically | ||||
| 
 | ||||
| `--theme=default|terminal|greenterm` | ||||
| :   use this custom display theme | ||||
| 
 | ||||
| `--register=ACCTREGEX` | ||||
| :   start in the (first) matched account's register screen | ||||
| 
 | ||||
| `--change` | ||||
| :   show period balances (changes) at startup instead of historical | ||||
|     balances | ||||
| 
 | ||||
| `--flat` | ||||
| :   show full account names, unindented | ||||
| 
 | ||||
| hledger input options: | ||||
| 
 | ||||
| `-f FILE --file=FILE` | ||||
| :   use a different input file. For stdin, use - (default: | ||||
|     `$LEDGER_FILE` or `$HOME/.hledger.journal`) | ||||
| 
 | ||||
| `--rules-file=RULESFILE` | ||||
| :   Conversion rules file to use when reading CSV (default: FILE.rules) | ||||
| 
 | ||||
| `--separator=CHAR` | ||||
| :   Field separator to expect when reading CSV (default: ',') | ||||
| 
 | ||||
| `--alias=OLD=NEW` | ||||
| :   rename accounts named OLD to NEW | ||||
| 
 | ||||
| `--anon` | ||||
| :   anonymize accounts and payees | ||||
| 
 | ||||
| `--pivot FIELDNAME` | ||||
| :   use some other field or tag for the account name | ||||
| 
 | ||||
| `-I --ignore-assertions` | ||||
| :   ignore any failing balance assertions | ||||
| 
 | ||||
| hledger reporting options: | ||||
| 
 | ||||
| `-b --begin=DATE` | ||||
| :   include postings/txns on or after this date | ||||
| 
 | ||||
| `-e --end=DATE` | ||||
| :   include postings/txns before this date | ||||
| 
 | ||||
| `-D --daily` | ||||
| :   multiperiod/multicolumn report by day | ||||
| 
 | ||||
| `-W --weekly` | ||||
| :   multiperiod/multicolumn report by week | ||||
| 
 | ||||
| `-M --monthly` | ||||
| :   multiperiod/multicolumn report by month | ||||
| 
 | ||||
| `-Q --quarterly` | ||||
| :   multiperiod/multicolumn report by quarter | ||||
| 
 | ||||
| `-Y --yearly` | ||||
| :   multiperiod/multicolumn report by year | ||||
| 
 | ||||
| `-p --period=PERIODEXP` | ||||
| :   set start date, end date, and/or reporting interval all at once | ||||
|     using [period expressions](manual.html#period-expressions) syntax | ||||
|     (overrides the flags above) | ||||
| 
 | ||||
| `--date2` | ||||
| :   match the secondary date instead (see command help for other | ||||
|     effects) | ||||
| 
 | ||||
| `-U --unmarked` | ||||
| :   include only unmarked postings/txns (can combine with -P or -C) | ||||
| 
 | ||||
| `-P --pending` | ||||
| :   include only pending postings/txns | ||||
| 
 | ||||
| `-C --cleared` | ||||
| :   include only cleared postings/txns | ||||
| 
 | ||||
| `-R --real` | ||||
| :   include only non-virtual postings | ||||
| 
 | ||||
| `-NUM --depth=NUM` | ||||
| :   hide/aggregate accounts or postings more than NUM levels deep | ||||
| 
 | ||||
| `-E --empty` | ||||
| :   show items with zero amount, normally hidden (and vice-versa in | ||||
|     hledger-ui/hledger-web) | ||||
| 
 | ||||
| `-B --cost` | ||||
| :   convert amounts to their cost at transaction time (using the | ||||
|     [transaction price](journal.html#transaction-prices), if any) | ||||
| 
 | ||||
| `-V --value` | ||||
| :   convert amounts to their market value on the report end date (using | ||||
|     the most recent applicable [market | ||||
|     price](journal.html#market-prices), if any) | ||||
| 
 | ||||
| `--auto` | ||||
| :   apply [automated posting | ||||
|     rules](journal.html#automated-posting-rules) to modify transactions. | ||||
| 
 | ||||
| `--forecast` | ||||
| :   apply [periodic transaction](journal.html#periodic-transactions) | ||||
|     rules to generate future transactions, to 6 months from now or | ||||
|     report end date. | ||||
| 
 | ||||
| When a reporting option appears more than once in the command line, the | ||||
| last one takes precedence. | ||||
| 
 | ||||
| Some reporting options can also be written as [query | ||||
| arguments](#queries). | ||||
| 
 | ||||
| hledger help options: | ||||
| 
 | ||||
| `-h --help` | ||||
| :   show general usage (or after COMMAND, command usage) | ||||
| 
 | ||||
| `--version` | ||||
| :   show version | ||||
| 
 | ||||
| `--debug[=N]` | ||||
| :   show debug output (levels 1-9, default: 1) | ||||
| 
 | ||||
| A @FILE argument will be expanded to the contents of FILE, which should | ||||
| contain one command line option/argument per line. (To prevent this, | ||||
| insert a `--` argument before.) | ||||
| 
 | ||||
| ## KEYS | ||||
| 
 | ||||
| `?` shows a help dialog listing all keys. (Some of these also appear in | ||||
| the quick help at the bottom of each screen.) Press `?` again (or | ||||
| `ESCAPE`, or `LEFT`) to close it. The following keys work on most | ||||
| screens: | ||||
| 
 | ||||
| The cursor keys navigate: `right` (or `enter`) goes deeper, `left` | ||||
| returns to the previous screen, | ||||
| `up`/`down`/`page up`/`page down`/`home`/`end` move up and down through | ||||
| lists. Vi-style (`h`/`j`/`k`/`l`) and Emacs-style | ||||
| (`CTRL-p`/`CTRL-n`/`CTRL-f`/`CTRL-b`) movement keys are also supported. | ||||
| A tip: movement speed is limited by your keyboard repeat rate, to move | ||||
| faster you may want to adjust it. (If you're on a mac, the Karabiner app | ||||
| is one way to do that.) | ||||
| 
 | ||||
| With shift pressed, the cursor keys adjust the report period, limiting | ||||
| the transactions to be shown (by default, all are shown). | ||||
| `shift-down/up` steps downward and upward through these standard report | ||||
| period durations: year, quarter, month, week, day. Then, | ||||
| `shift-left/right` moves to the previous/next period. `t` sets the | ||||
| report period to today. With the `--watch` option, when viewing a | ||||
| "current" period (the current day, week, month, quarter, or year), the | ||||
| period will move automatically to track the current date. To set a | ||||
| non-standard period, you can use `/` and a `date:` query. | ||||
| 
 | ||||
| `/` lets you set a general filter query limiting the data shown, using | ||||
| the same [query terms](/hledger.html#queries) as in hledger and | ||||
| hledger-web. While editing the query, you can use [CTRL-a/e/d/k, BS, | ||||
| cursor | ||||
| keys](http://hackage.haskell.org/package/brick-0.7/docs/Brick-Widgets-Edit.html#t:Editor); | ||||
| press `ENTER` to set it, or `ESCAPE`to cancel. There are also keys for | ||||
| quickly adjusting some common filters like account depth and transaction | ||||
| status (see below). `BACKSPACE` or `DELETE` removes all filters, showing | ||||
| all transactions. | ||||
| 
 | ||||
| `ESCAPE` removes all filters and jumps back to the top screen. Or, it | ||||
| cancels a minibuffer edit or help dialog in progress. | ||||
| 
 | ||||
| `CTRL-l` redraws the screen and centers the selection if possible | ||||
| (selections near the top won't be centered, since we don't scroll above | ||||
| the top). | ||||
| 
 | ||||
| `g` reloads from the data file(s) and updates the current screen and any | ||||
| previous screens. (With large files, this could cause a noticeable | ||||
| pause.) | ||||
| 
 | ||||
| `I` toggles balance assertion checking. Disabling balance assertions | ||||
| temporarily can be useful for troubleshooting. | ||||
| 
 | ||||
| `a` runs command-line hledger's add command, and reloads the updated | ||||
| file. This allows some basic data entry. | ||||
| 
 | ||||
| `A` is like `a`, but runs the | ||||
| [hledger-iadd](http://hackage.haskell.org/package/hledger-iadd) tool, | ||||
| which provides a curses-style interface. This key will be available if | ||||
| `hledger-iadd` is installed in \$PATH. | ||||
| 
 | ||||
| `E` runs \$HLEDGER\_UI\_EDITOR, or \$EDITOR, or a default | ||||
| (`emacsclient -a "" -nw`) on the journal file. With some editors (emacs, | ||||
| vi), the cursor will be positioned at the current transaction when | ||||
| invoked from the register and transaction screens, and at the error | ||||
| location (if possible) when invoked from the error screen. | ||||
| 
 | ||||
| `q` quits the application. | ||||
| 
 | ||||
| Additional screen-specific keys are described below. | ||||
| 
 | ||||
| ## SCREENS | ||||
| 
 | ||||
| ### Accounts screen | ||||
| 
 | ||||
| This is normally the first screen displayed. It lists accounts and their | ||||
| balances, like hledger's balance command. By default, it shows all | ||||
| accounts and their latest ending balances (including the balances of | ||||
| subaccounts). if you specify a query on the command line, it shows just | ||||
| the matched accounts and the balances from matched transactions. | ||||
| 
 | ||||
| Account names are normally indented to show the hierarchy (tree mode). | ||||
| To see less detail, set a depth limit by pressing a number key, `1` to | ||||
| `9`. `0` shows even less detail, collapsing all accounts to a single | ||||
| total. `-` and `+` (or `=`) decrease and increase the depth limit. To | ||||
| remove the depth limit, set it higher than the maximum account depth, or | ||||
| press `ESCAPE`. | ||||
| 
 | ||||
| `F` toggles flat mode, in which accounts are shown as a flat list, with | ||||
| their full names. In this mode, account balances exclude subaccounts, | ||||
| except for accounts at the depth limit (as with hledger's balance | ||||
| command). | ||||
| 
 | ||||
| `H` toggles between showing historical balances or period balances. | ||||
| Historical balances (the default) are ending balances at the end of the | ||||
| report period, taking into account all transactions before that date | ||||
| (filtered by the filter query if any), including transactions before the | ||||
| start of the report period. In other words, historical balances are what | ||||
| you would see on a bank statement for that account (unless disturbed by | ||||
| a filter query). Period balances ignore transactions before the report | ||||
| start date, so they show the change in balance during the report period. | ||||
| They are more useful eg when viewing a time log. | ||||
| 
 | ||||
| `U` toggles filtering by [unmarked status](/journal.html#status), | ||||
| including or excluding unmarked postings in the balances. Similarly, `P` | ||||
| toggles pending postings, and `C` toggles cleared postings. (By default, | ||||
| balances include all postings; if you activate one or two status | ||||
| filters, only those postings are included; and if you activate all | ||||
| three, the filter is removed.) | ||||
| 
 | ||||
| `R` toggles real mode, in which [virtual | ||||
| postings](/journal.html#virtual-postings) are ignored. | ||||
| 
 | ||||
| `Z` toggles nonzero mode, in which only accounts with nonzero balances | ||||
| are shown (hledger-ui shows zero items by default, unlike command-line | ||||
| hledger). | ||||
| 
 | ||||
| Press `right` or `enter` to view an account's transactions register. | ||||
| 
 | ||||
| ### Register screen | ||||
| 
 | ||||
| This screen shows the transactions affecting a particular account, like | ||||
| a check register. Each line represents one transaction and shows: | ||||
| 
 | ||||
| -   the other account(s) involved, in abbreviated form. (If there are | ||||
|     both real and virtual postings, it shows only the accounts affected | ||||
|     by real postings.) | ||||
| 
 | ||||
| -   the overall change to the current account's balance; positive for an | ||||
|     inflow to this account, negative for an outflow. | ||||
| 
 | ||||
| -   the running historical total or period total for the current | ||||
|     account, after the transaction. This can be toggled with `H`. | ||||
|     Similar to the accounts screen, the historical total is affected by | ||||
|     transactions (filtered by the filter query) before the report start | ||||
|     date, while the period total is not. If the historical total is not | ||||
|     disturbed by a filter query, it will be the running historical | ||||
|     balance you would see on a bank register for the current account. | ||||
| 
 | ||||
| If the accounts screen was in tree mode, the register screen will | ||||
| include transactions from both the current account and its subaccounts. | ||||
| If the accounts screen was in flat mode, and a non-depth-clipped account | ||||
| was selected, the register screen will exclude transactions from | ||||
| subaccounts. In other words, the register always shows the transactions | ||||
| responsible for the period balance shown on the accounts screen. As on | ||||
| the accounts screen, this can be toggled with `F`. | ||||
| 
 | ||||
| `U` toggles filtering by [unmarked status](/journal.html#status), | ||||
| showing or hiding unmarked transactions. Similarly, `P` toggles pending | ||||
| transactions, and `C` toggles cleared transactions. (By default, | ||||
| transactions with all statuses are shown; if you activate one or two | ||||
| status filters, only those transactions are shown; and if you activate | ||||
| all three, the filter is removed.)q | ||||
| 
 | ||||
| `R` toggles real mode, in which [virtual | ||||
| postings](/journal.html#virtual-postings) are ignored. | ||||
| 
 | ||||
| `Z` toggles nonzero mode, in which only transactions posting a nonzero | ||||
| change are shown (hledger-ui shows zero items by default, unlike | ||||
| command-line hledger). | ||||
| 
 | ||||
| Press `right` (or `enter`) to view the selected transaction in detail. | ||||
| 
 | ||||
| ### Transaction screen | ||||
| 
 | ||||
| This screen shows a single transaction, as a general journal entry, | ||||
| similar to hledger's print command and journal format | ||||
| (hledger\_journal(5)). | ||||
| 
 | ||||
| The transaction's date(s) and any cleared flag, transaction code, | ||||
| description, comments, along with all of its account postings are shown. | ||||
| Simple transactions have two postings, but there can be more (or in | ||||
| certain cases, fewer). | ||||
| 
 | ||||
| `up` and `down` will step through all transactions listed in the | ||||
| previous account register screen. In the title bar, the numbers in | ||||
| parentheses show your position within that account register. They will | ||||
| vary depending on which account register you came from (remember most | ||||
| transactions appear in multiple account registers). The \#N number | ||||
| preceding them is the transaction's position within the complete | ||||
| unfiltered journal, which is a more stable id (at least until the next | ||||
| reload). | ||||
| 
 | ||||
| ### Error screen | ||||
| 
 | ||||
| This screen will appear if there is a problem, such as a parse error, | ||||
| when you press g to reload. Once you have fixed the problem, press g | ||||
| again to reload and resume normal operation. (Or, you can press escape | ||||
| to cancel the reload attempt.) | ||||
| 
 | ||||
| ## ENVIRONMENT | ||||
| 
 | ||||
| **COLUMNS** The screen width to use. Default: the full terminal width. | ||||
| 
 | ||||
| **LEDGER\_FILE** The journal file path when not specified with `-f`. | ||||
| Default: `~/.hledger.journal` (on windows, perhaps | ||||
| `C:/Users/USER/.hledger.journal`). | ||||
| 
 | ||||
| ## FILES | ||||
| 
 | ||||
| Reads data from one or more files in hledger journal, timeclock, | ||||
| timedot, or CSV format specified with `-f`, or `$LEDGER_FILE`, or | ||||
| `$HOME/.hledger.journal` (on windows, perhaps | ||||
| `C:/Users/USER/.hledger.journal`). | ||||
| 
 | ||||
| ## BUGS | ||||
| 
 | ||||
| The need to precede options with `--` when invoked from hledger is | ||||
| awkward. | ||||
| 
 | ||||
| `-f-` doesn't work (hledger-ui can't read from stdin). | ||||
| 
 | ||||
| `-V` affects only the accounts screen. | ||||
| 
 | ||||
| When you press `g`, the current and all previous screens are | ||||
| regenerated, which may cause a noticeable pause with large files. Also | ||||
| there is no visual indication that this is in progress. | ||||
| 
 | ||||
| `--watch` is not yet fully robust. It works well for normal usage, but | ||||
| many file changes in a short time (eg saving the file thousands of times | ||||
| with an editor macro) can cause problems at least on OSX. Symptoms | ||||
| include: unresponsive UI, periodic resetting of the cursor position, | ||||
| momentary display of parse errors, high CPU usage eventually subsiding, | ||||
| and possibly a small but persistent build-up of CPU usage until the | ||||
| program is restarted. | ||||
							
								
								
									
										253
									
								
								site/doc/1.11/hledger-web.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,253 @@ | ||||
| # hledger-web | ||||
| 
 | ||||
| This doc is for version **1.10.99** (dev). []{.docversions} | ||||
| 
 | ||||
| \$toc\$ | ||||
| 
 | ||||
| ## NAME | ||||
| 
 | ||||
| hledger-web - web interface for the hledger accounting tool | ||||
| 
 | ||||
| ## SYNOPSIS | ||||
| 
 | ||||
| `hledger-web [OPTIONS]`\ | ||||
| `hledger web -- [OPTIONS]` | ||||
| 
 | ||||
| ## DESCRIPTION | ||||
| 
 | ||||
| hledger is a cross-platform program for tracking money, time, or any | ||||
| other commodity, using double-entry accounting and a simple, editable | ||||
| file format. hledger is inspired by and largely compatible with | ||||
| ledger(1). | ||||
| 
 | ||||
| <style> | ||||
| .highslide img {max-width:200px; border:thin grey solid; margin:0 0 1em 1em; } | ||||
| .highslide-caption {color:white; background-color:black;} | ||||
| </style> | ||||
| <div style="float:right; max-width:200px; text-align:right;"> | ||||
| 
 | ||||
| <a href="images/hledger-web/normal/register.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-web/normal/register.png" title="Account register view with accounts sidebar" /></a> | ||||
| <a href="images/hledger-web/normal/journal.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-web/normal/journal.png" title="Journal view" /></a> | ||||
| <a href="images/hledger-web/normal/help.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-web/normal/help.png" title="Help dialog" /></a> | ||||
| <a href="images/hledger-web/normal/add.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-web/normal/add.png" title="Add form" /></a> | ||||
| 
 | ||||
| </div> | ||||
| 
 | ||||
| hledger-web is hledger's web interface. It starts a simple web | ||||
| application for browsing and adding transactions, and optionally opens | ||||
| it in a web browser window if possible. It provides a more user-friendly | ||||
| UI than the hledger CLI or hledger-ui interface, showing more at once | ||||
| (accounts, the current account register, balance charts) and allowing | ||||
| history-aware data entry, interactive searching, and bookmarking. | ||||
| 
 | ||||
| hledger-web also lets you share a ledger with multiple users, or even | ||||
| the public web. There is no access control, so if you need that you | ||||
| should put it behind a suitable web proxy. As a small protection against | ||||
| data loss when running an unprotected instance, it writes a numbered | ||||
| backup of the main journal file (only ?) on every edit. | ||||
| 
 | ||||
| Like hledger, it reads data from one or more files in hledger journal, | ||||
| timeclock, timedot, or CSV format specified with `-f`, or | ||||
| `$LEDGER_FILE`, or `$HOME/.hledger.journal` (on windows, perhaps | ||||
| `C:/Users/USER/.hledger.journal`). For more about this see hledger(1), | ||||
| hledger\_journal(5) etc. | ||||
| 
 | ||||
| By default, hledger-web starts the web app in "transient mode" and also | ||||
| opens it in your default web browser if possible. In this mode the web | ||||
| app will keep running for as long as you have it open in a browser | ||||
| window, and will exit after two minutes of inactivity (no requests and | ||||
| no browser windows viewing it). With `--serve`, it just runs the web app | ||||
| without exiting, and logs requests to the console. | ||||
| 
 | ||||
| By default the server listens on IP address 127.0.0.1, accessible only | ||||
| to local requests. You can use `--host` to change this, eg | ||||
| `--host 0.0.0.0` to listen on all configured addresses. | ||||
| 
 | ||||
| Similarly, use `--port` to set a TCP port other than 5000, eg if you are | ||||
| running multiple hledger-web instances. | ||||
| 
 | ||||
| You can use `--base-url` to change the protocol, hostname, port and path | ||||
| that appear in hyperlinks, useful eg for integrating hledger-web within | ||||
| a larger website. The default is `http://HOST:PORT/` using the server's | ||||
| configured host address and TCP port (or `http://HOST` if PORT is 80). | ||||
| 
 | ||||
| With `--file-url` you can set a different base url for static files, eg | ||||
| for better caching or cookie-less serving on high performance websites. | ||||
| 
 | ||||
| Note there is no built-in access control (aside from listening on | ||||
| 127.0.0.1 by default). So you will need to hide hledger-web behind an | ||||
| authenticating proxy (such as apache or nginx) if you want to restrict | ||||
| who can see and add entries to your journal. | ||||
| 
 | ||||
| Command-line options and arguments may be used to set an initial filter | ||||
| on the data. This is not shown in the web UI, but it will be applied in | ||||
| addition to any search query entered there. | ||||
| 
 | ||||
| With journal and timeclock files (but not CSV files, currently) the web | ||||
| app detects changes made by other means and will show the new data on | ||||
| the next request. If a change makes the file unparseable, hledger-web | ||||
| will show an error until the file has been fixed. | ||||
| 
 | ||||
| ## OPTIONS | ||||
| 
 | ||||
| Note: if invoking hledger-web as a hledger subcommand, write `--` before | ||||
| options as shown above. | ||||
| 
 | ||||
| `--serve` | ||||
| :   serve and log requests, don't browse or auto-exit | ||||
| 
 | ||||
| `--host=IPADDR` | ||||
| :   listen on this IP address (default: 127.0.0.1) | ||||
| 
 | ||||
| `--port=PORT` | ||||
| :   listen on this TCP port (default: 5000) | ||||
| 
 | ||||
| `--base-url=URL` | ||||
| :   set the base url (default: http://IPADDR:PORT). You would change | ||||
|     this when sharing over the network, or integrating within a larger | ||||
|     website. | ||||
| 
 | ||||
| `--file-url=URL` | ||||
| :   set the static files url (default: BASEURL/static). hledger-web | ||||
|     normally serves static files itself, but if you wanted to serve them | ||||
|     from another server for efficiency, you would set the url with this. | ||||
| 
 | ||||
| hledger input options: | ||||
| 
 | ||||
| `-f FILE --file=FILE` | ||||
| :   use a different input file. For stdin, use - (default: | ||||
|     `$LEDGER_FILE` or `$HOME/.hledger.journal`) | ||||
| 
 | ||||
| `--rules-file=RULESFILE` | ||||
| :   Conversion rules file to use when reading CSV (default: FILE.rules) | ||||
| 
 | ||||
| `--separator=CHAR` | ||||
| :   Field separator to expect when reading CSV (default: ',') | ||||
| 
 | ||||
| `--alias=OLD=NEW` | ||||
| :   rename accounts named OLD to NEW | ||||
| 
 | ||||
| `--anon` | ||||
| :   anonymize accounts and payees | ||||
| 
 | ||||
| `--pivot FIELDNAME` | ||||
| :   use some other field or tag for the account name | ||||
| 
 | ||||
| `-I --ignore-assertions` | ||||
| :   ignore any failing balance assertions | ||||
| 
 | ||||
| hledger reporting options: | ||||
| 
 | ||||
| `-b --begin=DATE` | ||||
| :   include postings/txns on or after this date | ||||
| 
 | ||||
| `-e --end=DATE` | ||||
| :   include postings/txns before this date | ||||
| 
 | ||||
| `-D --daily` | ||||
| :   multiperiod/multicolumn report by day | ||||
| 
 | ||||
| `-W --weekly` | ||||
| :   multiperiod/multicolumn report by week | ||||
| 
 | ||||
| `-M --monthly` | ||||
| :   multiperiod/multicolumn report by month | ||||
| 
 | ||||
| `-Q --quarterly` | ||||
| :   multiperiod/multicolumn report by quarter | ||||
| 
 | ||||
| `-Y --yearly` | ||||
| :   multiperiod/multicolumn report by year | ||||
| 
 | ||||
| `-p --period=PERIODEXP` | ||||
| :   set start date, end date, and/or reporting interval all at once | ||||
|     using [period expressions](manual.html#period-expressions) syntax | ||||
|     (overrides the flags above) | ||||
| 
 | ||||
| `--date2` | ||||
| :   match the secondary date instead (see command help for other | ||||
|     effects) | ||||
| 
 | ||||
| `-U --unmarked` | ||||
| :   include only unmarked postings/txns (can combine with -P or -C) | ||||
| 
 | ||||
| `-P --pending` | ||||
| :   include only pending postings/txns | ||||
| 
 | ||||
| `-C --cleared` | ||||
| :   include only cleared postings/txns | ||||
| 
 | ||||
| `-R --real` | ||||
| :   include only non-virtual postings | ||||
| 
 | ||||
| `-NUM --depth=NUM` | ||||
| :   hide/aggregate accounts or postings more than NUM levels deep | ||||
| 
 | ||||
| `-E --empty` | ||||
| :   show items with zero amount, normally hidden (and vice-versa in | ||||
|     hledger-ui/hledger-web) | ||||
| 
 | ||||
| `-B --cost` | ||||
| :   convert amounts to their cost at transaction time (using the | ||||
|     [transaction price](journal.html#transaction-prices), if any) | ||||
| 
 | ||||
| `-V --value` | ||||
| :   convert amounts to their market value on the report end date (using | ||||
|     the most recent applicable [market | ||||
|     price](journal.html#market-prices), if any) | ||||
| 
 | ||||
| `--auto` | ||||
| :   apply [automated posting | ||||
|     rules](journal.html#automated-posting-rules) to modify transactions. | ||||
| 
 | ||||
| `--forecast` | ||||
| :   apply [periodic transaction](journal.html#periodic-transactions) | ||||
|     rules to generate future transactions, to 6 months from now or | ||||
|     report end date. | ||||
| 
 | ||||
| When a reporting option appears more than once in the command line, the | ||||
| last one takes precedence. | ||||
| 
 | ||||
| Some reporting options can also be written as [query | ||||
| arguments](#queries). | ||||
| 
 | ||||
| hledger help options: | ||||
| 
 | ||||
| `-h --help` | ||||
| :   show general usage (or after COMMAND, command usage) | ||||
| 
 | ||||
| `--version` | ||||
| :   show version | ||||
| 
 | ||||
| `--debug[=N]` | ||||
| :   show debug output (levels 1-9, default: 1) | ||||
| 
 | ||||
| A @FILE argument will be expanded to the contents of FILE, which should | ||||
| contain one command line option/argument per line. (To prevent this, | ||||
| insert a `--` argument before.) | ||||
| 
 | ||||
| ## ENVIRONMENT | ||||
| 
 | ||||
| **LEDGER\_FILE** The journal file path when not specified with `-f`. | ||||
| Default: `~/.hledger.journal` (on windows, perhaps | ||||
| `C:/Users/USER/.hledger.journal`). | ||||
| 
 | ||||
| ## FILES | ||||
| 
 | ||||
| Reads data from one or more files in hledger journal, timeclock, | ||||
| timedot, or CSV format specified with `-f`, or `$LEDGER_FILE`, or | ||||
| `$HOME/.hledger.journal` (on windows, perhaps | ||||
| `C:/Users/USER/.hledger.journal`). | ||||
| 
 | ||||
| ## BUGS | ||||
| 
 | ||||
| The need to precede options with `--` when invoked from hledger is | ||||
| awkward. | ||||
| 
 | ||||
| `-f-` doesn't work (hledger-web can't read from stdin). | ||||
| 
 | ||||
| Query arguments and some hledger options are ignored. | ||||
| 
 | ||||
| Does not work in text-mode browsers. | ||||
| 
 | ||||
| Does not work well on small screens. | ||||
							
								
								
									
										2432
									
								
								site/doc/1.11/hledger.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/.DS_Store
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/balance-q-inc.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 56 KiB | 
							
								
								
									
										4992
									
								
								site/doc/1.11/images/coins.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 318 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/coins2-248.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 63 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/coins2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 127 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/data-model.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 54 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-charts-2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 219 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-lib-api.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 187 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-screen-1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 31 KiB | 
| After Width: | Height: | Size: 158 KiB | 
| After Width: | Height: | Size: 185 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-ui/hledger-ui-bcexample-acc.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 103 KiB | 
| After Width: | Height: | Size: 48 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-ui/hledger-ui-sample-acc.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 41 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-ui/hledger-ui-sample-acc2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 39 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-ui/hledger-ui-sample-reg.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 42 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-ui/hledger-ui-sample-txn.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 38 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web-journal.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 65 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web/.DS_Store
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web/normal/add.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 42 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web/normal/help.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 204 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web/normal/help2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 92 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web/normal/journal-sidebar.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 88 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web/normal/journal.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 56 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web/normal/journal2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 42 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web/normal/register.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 101 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web/small/add.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 30 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web/small/help.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 128 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web/small/help2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 56 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web/small/journal-sidebar.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 68 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web/small/journal-sidebar2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 57 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web/small/journal.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 49 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web/small/journal2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 32 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web/small/register.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 68 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/hledger-web/small/register2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 58 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/linux.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 3.5 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/mac.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 4.8 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/manual.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 144 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/sshot.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 26 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/watchhours.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 84 KiB | 
							
								
								
									
										
											BIN
										
									
								
								site/doc/1.11/images/windows.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.2 KiB | 
							
								
								
									
										1307
									
								
								site/doc/1.11/journal.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										4980
									
								
								site/doc/1.11/manual.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										69
									
								
								site/doc/1.11/timeclock.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,69 @@ | ||||
| # timeclock format | ||||
| 
 | ||||
| This doc is for version **1.10.99** (dev). []{.docversions} | ||||
| 
 | ||||
| \$toc\$ | ||||
| 
 | ||||
| ## NAME | ||||
| 
 | ||||
| Timeclock - the time logging format of timeclock.el, as read by hledger | ||||
| 
 | ||||
| ## DESCRIPTION | ||||
| 
 | ||||
| hledger can read timeclock files. [As with | ||||
| Ledger](http://ledger-cli.org/3.0/doc/ledger3.html#Time-Keeping), these | ||||
| are (a subset of) | ||||
| [timeclock.el](http://www.emacswiki.org/emacs/TimeClock)'s format, | ||||
| containing clock-in and clock-out entries as in the example below. The | ||||
| date is a [simple date](#simple-dates). The time format is | ||||
| HH:MM\[:SS\]\[+-ZZZZ\]. Seconds and timezone are optional. The timezone, | ||||
| if present, must be four digits and is ignored (currently the time is | ||||
| always interpreted as a local time). | ||||
| 
 | ||||
| ``` {.timeclock} | ||||
| i 2015/03/30 09:00:00 some:account name  optional description after two spaces | ||||
| o 2015/03/30 09:20:00 | ||||
| i 2015/03/31 22:21:45 another account | ||||
| o 2015/04/01 02:00:34 | ||||
| ``` | ||||
| 
 | ||||
| hledger treats each clock-in/clock-out pair as a transaction posting | ||||
| some number of hours to an account. Or if the session spans more than | ||||
| one day, it is split into several transactions, one for each day. For | ||||
| the above time log, `hledger print` generates these journal entries: | ||||
| 
 | ||||
| ``` {.shell} | ||||
| $ hledger -f t.timeclock print | ||||
| 2015/03/30 * optional description after two spaces | ||||
|     (some:account name)         0.33h | ||||
| 
 | ||||
| 2015/03/31 * 22:21-23:59 | ||||
|     (another account)         1.64h | ||||
| 
 | ||||
| 2015/04/01 * 00:00-02:00 | ||||
|     (another account)         2.01h | ||||
| ``` | ||||
| 
 | ||||
| Here is a | ||||
| [sample.timeclock](https://raw.github.com/simonmichael/hledger/master/examples/sample.timeclock) | ||||
| to download and some queries to try: | ||||
| 
 | ||||
| ``` {.shell} | ||||
| $ hledger -f sample.timeclock balance                               # current time balances | ||||
| $ hledger -f sample.timeclock register -p 2009/3                    # sessions in march 2009 | ||||
| $ hledger -f sample.timeclock register -p weekly --depth 1 --empty  # time summary by week | ||||
| ``` | ||||
| 
 | ||||
| To generate time logs, ie to clock in and clock out, you could: | ||||
| 
 | ||||
| -   use emacs and the built-in timeclock.el, or the extended | ||||
|     [timeclock-x.el](http://www.emacswiki.org/emacs/timeclock-x.el) and | ||||
|     perhaps the extras in | ||||
|     [ledgerutils.el](http://hub.darcs.net/simon/ledgertools/ledgerutils.el) | ||||
| 
 | ||||
| -   at the command line, use these bash aliases: | ||||
|     `` shell   alias ti="echo i `date '+%Y-%m-%d %H:%M:%S'` \$* >>$TIMELOG"   alias to="echo o `date '+%Y-%m-%d %H:%M:%S'` >>$TIMELOG" `` | ||||
| -   or use the old `ti` and `to` scripts in the [ledger 2.x | ||||
|     repository](https://github.com/ledger/ledger/tree/maint/scripts). | ||||
|     These rely on a "timeclock" executable which I think is just the | ||||
|     ledger 2 executable renamed. | ||||
							
								
								
									
										124
									
								
								site/doc/1.11/timedot.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,124 @@ | ||||
| # timedot format | ||||
| 
 | ||||
| This doc is for version **1.10.99** (dev). []{.docversions} | ||||
| 
 | ||||
| \$toc\$ | ||||
| 
 | ||||
| ## NAME | ||||
| 
 | ||||
| Timedot - hledger's human-friendly time logging format | ||||
| 
 | ||||
| ## DESCRIPTION | ||||
| 
 | ||||
| Timedot is a plain text format for logging dated, categorised quantities | ||||
| (of time, usually), supported by hledger. It is convenient for | ||||
| approximate and retroactive time logging, eg when the real-time | ||||
| clock-in/out required with a timeclock file is too precise or too | ||||
| interruptive. It can be formatted like a bar chart, making clear at a | ||||
| glance where time was spent. | ||||
| 
 | ||||
| Though called "timedot", this format is read by hledger as commodityless | ||||
| quantities, so it could be used to represent dated quantities other than | ||||
| time. In the docs below we'll assume it's time. | ||||
| 
 | ||||
| ## FILE FORMAT | ||||
| 
 | ||||
| A timedot file contains a series of day entries. A day entry begins with | ||||
| a date, and is followed by category/quantity pairs, one per line. Dates | ||||
| are hledger-style [simple dates](/journal.html#simple-dates) (see | ||||
| hledger\_journal(5)). Categories are hledger-style account names, | ||||
| optionally indented. As in a hledger journal, there must be at least two | ||||
| spaces between the category (account name) and the quantity. | ||||
| 
 | ||||
| Quantities can be written as: | ||||
| 
 | ||||
| -   a sequence of dots (.) representing quarter hours. Spaces may | ||||
|     optionally be used for grouping and readability. Eg: .... .. | ||||
| 
 | ||||
| -   an integral or decimal number, representing hours. Eg: 1.5 | ||||
| 
 | ||||
| -   an integral or decimal number immediately followed by a unit symbol | ||||
|     `s`, `m`, `h`, `d`, `w`, `mo`, or `y`, representing seconds, | ||||
|     minutes, hours, days weeks, months or years respectively. Eg: 90m. | ||||
|     The following equivalencies are assumed, currently: 1m = 60s, 1h = | ||||
|     60m, 1d = 24h, 1w = 7d, 1mo = 30d, 1y=365d. | ||||
| 
 | ||||
| Blank lines and lines beginning with \#, ; or \* are ignored. An | ||||
| example: | ||||
| 
 | ||||
| ``` {.timedot} | ||||
| # on this day, 6h was spent on client work, 1.5h on haskell FOSS work, etc. | ||||
| 2016/2/1 | ||||
| inc:client1   .... .... .... .... .... .... | ||||
| fos:haskell   .... ..  | ||||
| biz:research  . | ||||
| 
 | ||||
| 2016/2/2 | ||||
| inc:client1   .... .... | ||||
| biz:research  . | ||||
| ``` | ||||
| 
 | ||||
| Or with numbers: | ||||
| 
 | ||||
| ``` {.timedot} | ||||
| 2016/2/3 | ||||
| inc:client1   4 | ||||
| fos:hledger   3 | ||||
| biz:research  1 | ||||
| ``` | ||||
| 
 | ||||
| Reporting: | ||||
| 
 | ||||
| ``` {.shell} | ||||
| $ hledger -f t.timedot print date:2016/2/2 | ||||
| 2016/02/02 * | ||||
|     (inc:client1)          2.00 | ||||
| 
 | ||||
| 2016/02/02 * | ||||
|     (biz:research)          0.25 | ||||
| ``` | ||||
| 
 | ||||
| ``` {.shell} | ||||
| $ hledger -f t.timedot bal --daily --tree | ||||
| Balance changes in 2016/02/01-2016/02/03: | ||||
| 
 | ||||
|             ||  2016/02/01d  2016/02/02d  2016/02/03d  | ||||
| ============++======================================== | ||||
|  biz        ||         0.25         0.25         1.00  | ||||
|    research ||         0.25         0.25         1.00  | ||||
|  fos        ||         1.50            0         3.00  | ||||
|    haskell  ||         1.50            0            0  | ||||
|    hledger  ||            0            0         3.00  | ||||
|  inc        ||         6.00         2.00         4.00  | ||||
|    client1  ||         6.00         2.00         4.00  | ||||
| ------------++---------------------------------------- | ||||
|             ||         7.75         2.25         8.00  | ||||
| ``` | ||||
| 
 | ||||
| I prefer to use period for separating account components. We can make | ||||
| this work with an [account alias](/journal.html#rewriting-accounts): | ||||
| 
 | ||||
| ``` {.timedot} | ||||
| 2016/2/4 | ||||
| fos.hledger.timedot  4 | ||||
| fos.ledger           .. | ||||
| ``` | ||||
| 
 | ||||
| ``` {.shell} | ||||
| $ hledger -f t.timedot --alias /\\./=: bal date:2016/2/4 | ||||
|                 4.50  fos | ||||
|                 4.00    hledger:timedot | ||||
|                 0.50    ledger | ||||
| -------------------- | ||||
|                 4.50 | ||||
| ``` | ||||
| 
 | ||||
| Here is a | ||||
| [sample.timedot](https://raw.github.com/simonmichael/hledger/master/examples/sample.timedot). | ||||
| <!-- to download and some queries to try: --> | ||||
| 
 | ||||
| <!-- ```shell --> | ||||
| <!-- $ hledger -f sample.timedot balance                               # current time balances --> | ||||
| <!-- $ hledger -f sample.timedot register -p 2009/3                    # sessions in march 2009 --> | ||||
| <!-- $ hledger -f sample.timedot register -p weekly --depth 1 --empty  # time summary by week --> | ||||
| <!-- ``` --> | ||||
| @ -83,11 +83,11 @@ on GNU/linux, mac and freeBSD | ||||
| 
 | ||||
| Here's the quick, non-secure way to run it: | ||||
| 
 | ||||
|  **`curl https://raw.githubusercontent.com/simonmichael/hledger/master/hledger-install/hledger-install.sh | bash`** | ||||
|  **`curl -s https://raw.githubusercontent.com/simonmichael/hledger/master/hledger-install/hledger-install.sh | bash`** | ||||
| 
 | ||||
| And here's the more responsible way: | ||||
| 
 | ||||
|  **`curl -O https://raw.githubusercontent.com/simonmichael/hledger/master/hledger-install/hledger-install.sh`**\ | ||||
|  **`curl -sO https://raw.githubusercontent.com/simonmichael/hledger/master/hledger-install/hledger-install.sh`**\ | ||||
|  **`less hledger-install.sh`**  *# do security review*\ | ||||
|  **`bash hledger-install.sh`** | ||||
| 
 | ||||
| @ -117,13 +117,13 @@ Eg, if you use bash: | ||||
| Now you should be able to run the hledger tools and see the expected versions. Eg: | ||||
| ```shell | ||||
| $ hledger --version | ||||
| hledger 1.10 | ||||
| hledger 1.11 | ||||
| $ hledger-ui --version | ||||
| hledger-ui 1.10 | ||||
| hledger-ui 1.11 | ||||
| $ hledger web --version | ||||
| hledger-web 1.10 | ||||
| hledger-web 1.11 | ||||
| $ hledger iadd --version | ||||
| This is hledger-iadd version 1.3.5 | ||||
| This is hledger-iadd version 1.3.6 | ||||
| ``` | ||||
| 
 | ||||
| #### Need help ? | ||||
| @ -149,7 +149,7 @@ If you prefer more control or if hledger-install failed, here's how to use stack | ||||
| 
 | ||||
|     On Windows, the 64-bit version of stack is [preferred](https://github.com/simonmichael/hledger/issues/275#issuecomment-123834252). | ||||
| 
 | ||||
| 2. **`stack install --resolver=lts-12 hledger-lib-1.10 hledger-1.10 hledger-ui-1.10.1 hledger-web-1.10 hledger-api-1.10`**\ | ||||
| 2. **`stack install --resolver=lts-12 cassava-megaparsec-1.0.0 hledger-lib-1.11 hledger-1.11 hledger-ui-1.11 hledger-web-1.11 hledger-api-1.11`**\ | ||||
|     This installs the main hledger packages (and dependencies) from [Stackage](https://www.stackage.org) and/or [Hackage](http://hackage.haskell.org). | ||||
|     You can save some time by omitting hledger-* packages you don't want.\ | ||||
|     <span class=warnings>([windows: hledger-ui is not available](https://github.com/jtdaugherty/vty/pull/1#issuecomment-297143444))</span> | ||||
|  | ||||
| @ -224,21 +224,3 @@ a file format for human-friendly approximate time logging | ||||
| </div> <!-- row --> | ||||
| </div> <!-- container --> | ||||
| 
 | ||||
| 
 | ||||
| <!-- TWITTER --> | ||||
| 
 | ||||
| <a name="twitter"></a> | ||||
| <div style="margin-top:4em; text-align:center; "> | ||||
| 
 | ||||
| ## [#hledger](https://twitter.com/search?q=%23hledger&src=typd&f=realtime), [#plaintextaccounting](https://twitter.com/search?q=%23plaintextaccounting&src=typd&f=realtime) on Twitter: | ||||
| 
 | ||||
| <!-- <a href="https://twitter.com/ledgertips">@LedgerTips</a> --> | ||||
| <style> | ||||
|  .twitter-timeline { | ||||
|    height: 1500px !important; | ||||
|    /* width: 70% !important; */ | ||||
|  } | ||||
| </style> | ||||
| <a class="twitter-timeline" data-chrome="noheader" data-dnt="true" href="https://twitter.com/search?q=%23hledger%20OR%20%23plaintextaccounting%20-RT%20-%23TheJoker" data-widget-id="707934052225945600">Tweets about #hledger OR #plaintextaccounting OR #ledgercli -RT -#TheJoker</a> <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script> | ||||
| 
 | ||||
| </div> | ||||
|  | ||||
| @ -12,6 +12,7 @@ function addDocVersions() { | ||||
|   var newpage = page=='manual' ? page : topic; | ||||
|   $('.docversions').html('Available versions: \ | ||||
| <a href="/'+newpage+'.html'+(page=='manual' ? newhash : '')+'">dev</a> \ | ||||
| | <a href="/doc/1.11/'+newpage+'.html'+(page=='manual' ? newhash : '')+'">1.11</a> \ | ||||
| | <a href="/doc/1.10/'+newpage+'.html'+(page=='manual' ? newhash : '')+'">1.10</a> \ | ||||
| | <a href="/doc/1.9/'+newpage+'.html'+(page=='manual' ? newhash : '')+'">1.9</a> \ | ||||
| | <a href="/doc/1.5/'+newpage+'.html'+(page=='manual' ? newhash : '')+'">1.5</a> \ | ||||
|  | ||||
| @ -8,6 +8,7 @@ h4 { margin-top:2em; } | ||||
| <ol> | ||||
| <li><a href="#hledger-install">hledger-install</a> | ||||
| <!-- <li><a href="#latest-minor-release">Latest (2018/4/30)</a> --> | ||||
| <li><a href="#hledger-1.11">hledger 1.11 (2018/9/30)</a> | ||||
| <li><a href="#hledger-1.10">hledger 1.10 (2018/6/30)</a> | ||||
| <li><a href="#hledger-1.9">hledger 1.9 (2018/3/31)</a> | ||||
| <li><a href="#hledger-1.5">hledger 1.5 (2017/12/31)</a> | ||||
| @ -67,6 +68,166 @@ is updated frequently; here are the | ||||
| --> | ||||
| 
 | ||||
| 
 | ||||
| ## 2018/9/30 hledger 1.11 | ||||
| 
 | ||||
| ***Customisable account display order, | ||||
| support for other delimiter-separated formats (eg semicolon-separated), | ||||
| new files and roi commands, | ||||
| fixes | ||||
| *** | ||||
| <!-- | ||||
| ([announcement](https://groups.google.com/forum/#!msg/hledger/)) | ||||
| --> | ||||
| 
 | ||||
|   <!-- [project](#project-wide-changes-for-1.11) --> | ||||
|   [hledger](#hledger-1.11-1) | ||||
| <!-- | [hledger-ui](#hledger-ui-1.11) --> | ||||
| <!-- | [hledger-web](#hledger-web-1.11) --> | ||||
| <!-- | [hledger-api](#hledger-api-1.11) --> | ||||
| | [hledger-lib](#hledger-lib-1.11) | ||||
| | [credits](#credits-1.11) | ||||
| 
 | ||||
| <!-- ### project-wide changes for 1.11 --> | ||||
| 
 | ||||
| 
 | ||||
| ### hledger 1.11 | ||||
| 
 | ||||
| * The default display order of accounts is now influenced by | ||||
|   the order of account directives. Accounts declared by account | ||||
|   directives are displayed first (top-most), in declaration order, | ||||
|   followed by undeclared accounts in alphabetical order. Numeric | ||||
|   account codes are no longer used, and are ignored and considered | ||||
|   deprecated. | ||||
| 
 | ||||
|   So if your accounts are displaying in a weird order after upgrading, | ||||
|   and you want them alphabetical like before, just sort your account | ||||
|   directives alphabetically. | ||||
| 
 | ||||
| * Account sorting (by name, by declaration, by amount) is now more | ||||
|   robust and supported consistently by all commands (accounts, | ||||
|   balance, bs..) in all modes (tree & flat, tabular & non-tabular). | ||||
| 
 | ||||
| * close: new --opening/--closing flags to print only the opening or | ||||
|   closing transaction | ||||
| 
 | ||||
| * files: a new command to list included files | ||||
| 
 | ||||
| * prices: query arguments are now supported. Prices can be filtered by | ||||
|   date, and postings providing transaction prices can also be filtered. | ||||
| 
 | ||||
| * rewrite: help clarifies relation to print --auto (#745) | ||||
| 
 | ||||
| * roi: a new command to compute return on investment, based on hledger-irr | ||||
| 
 | ||||
| * test: has more verbose output, more informative failure messages, | ||||
|   and no longer tries to read the journal | ||||
| 
 | ||||
| * csv: We use a more robust CSV lib (cassava) and now support | ||||
|   non-comma separators, eg --separator ';' (experimental, this flag | ||||
|   will probably become a CSV rule) (#829) | ||||
| 
 | ||||
| * csv: interpolated field names in values are now properly case insensitive, so | ||||
|   this works: | ||||
| 
 | ||||
|   fields  ...,Transaction_Date,... | ||||
|   date %Transaction_Date | ||||
| 
 | ||||
| * journal: D (default commodity) directives no longer break multiplier | ||||
|   amounts in transaction modifiers (AKA automated postings) (#860) | ||||
| 
 | ||||
| * journal: "Automated Postings" have been renamed to "Transaction Modifiers". | ||||
| 
 | ||||
| * journal: transaction comments in transaction modifier rules are now parsed correctly. (#745) | ||||
| 
 | ||||
| * journal: when include files form a cycle, we give an error instead | ||||
|   of hanging. | ||||
| 
 | ||||
| * upper-case day/month names in period expressions no longer give an error (#847, #852) | ||||
| 
 | ||||
| ### hledger-lib 1.11 | ||||
| 
 | ||||
| * compilation now works when locale is unset (#849) | ||||
| 
 | ||||
| * all unit tests have been converted from HUnit+test-framework to easytest | ||||
| 
 | ||||
| * doctests now run quicker by default, by skipping reloading between tests.  | ||||
|   This can be disabled by passing --slow to the doctests test suite | ||||
|   executable. | ||||
| 
 | ||||
| * doctests test suite executable now supports --verbose, which shows | ||||
|   progress output as tests are run if doctest 0.16.0+ is installed | ||||
|   (and hopefully is harmless otherwise). | ||||
| 
 | ||||
| * doctests now support file pattern arguments, provide more informative output. | ||||
|   Limiting to just the file(s) you're interested can make doctest start | ||||
|   much quicker. With one big caveat: you can limit the starting files, | ||||
|   but it always imports and tests all other local files those import. | ||||
| 
 | ||||
| * a bunch of custom Show instances have been replaced with defaults, | ||||
|   for easier troubleshooting.  These were sometimes obscuring | ||||
|   important details, eg in test failure output. Our new policy is: | ||||
|   stick with default derived Show instances as far as possible, but | ||||
|   when necessary adjust them to valid haskell syntax so pretty-show | ||||
|   can pretty-print them (eg when they contain Day values, cf | ||||
|   https://github.com/haskell/time/issues/101).  By convention, when | ||||
|   fields are shown in less than full detail, and/or in double-quoted | ||||
|   pseudo syntax, we show a double period (..) in the output. | ||||
| 
 | ||||
| * Amount has a new Show instance.  Amount's show instance hid | ||||
|   important details by default, and showing more details required | ||||
|   increasing the debug level, which was inconvenient.  Now it has a | ||||
|   single show instance which shows more information, is fairly | ||||
|   compact, and is pretty-printable. | ||||
| 
 | ||||
|   ghci> usd 1 | ||||
|   OLD: | ||||
|   Amount {acommodity="$", aquantity=1.00, ..} | ||||
|   NEW: | ||||
|   Amount {acommodity = "$", aquantity = 1.00, aprice = NoPrice, astyle = AmountStyle "L False 2 Just '.' Nothing..", amultiplier = False} | ||||
| 
 | ||||
|   MixedAmount's show instance is unchanged, but showMixedAmountDebug | ||||
|   is affected by this change: | ||||
| 
 | ||||
|   ghci> putStrLn $ showMixedAmountDebug $ Mixed [usd 1] | ||||
|   OLD: | ||||
|   Mixed [Amount {acommodity="$", aquantity=1.00, aprice=, astyle=AmountStyle {ascommodityside = L, ascommodityspaced = False, asprecision = 2, asdecimalpoint = Just '.', asdigitgroups = Nothing}}] | ||||
|   NEW: | ||||
|   Mixed [Amount {acommodity="$", aquantity=1.00, aprice=, astyle=AmountStyle "L False 2 Just '.' Nothing.."}] | ||||
| 
 | ||||
| * Same-line & next-line comments of transactions, postings, etc. | ||||
|   are now parsed a bit more precisely (followingcommentp).  | ||||
|   Previously, parsing no comment gave the same result as an empty | ||||
|   comment (a single newline); now it gives an empty string.   | ||||
|   Also, and perhaps as a consequence of the above, when there's no | ||||
|   same-line comment but there is a next-line comment, we'll insert an | ||||
|   empty first line, since otherwise next-line comments would get moved | ||||
|   up to the same line when rendered. | ||||
| 
 | ||||
| * Hledger.Utils.Test exports HasCallStack | ||||
| 
 | ||||
| * queryDateSpan, queryDateSpan' now intersect date AND'ed date spans | ||||
|   instead of unioning them, and docs are clearer. | ||||
| 
 | ||||
| * pushAccount -> pushDeclaredAccount | ||||
| 
 | ||||
| * jaccounts -> jdeclaredaccounts | ||||
| 
 | ||||
| * AutoTransaction.hs -> PeriodicTransaction.hs & TransactionModifier.hs | ||||
| 
 | ||||
| * Hledger.Utils.Debug helpers have been renamed/cleaned up | ||||
| 
 | ||||
| ### credits 1.11 | ||||
| 
 | ||||
| Release contributors: | ||||
| Joseph Weston, | ||||
| Dmitry Astapov, | ||||
| Gaith Hallak, | ||||
| Jakub Zárybnický, | ||||
| Luca Molteni, | ||||
| SpicyCat. | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ## 2018/6/30 hledger 1.10 | ||||
| 
 | ||||
| ***hledger-web edit/upload/download and permissions, | ||||
|  | ||||
| @ -191,7 +191,7 @@ Balance Sheet 2017/01/01 | ||||
| >>>2 | ||||
| >>>=0 | ||||
| 
 | ||||
| # 7. An empty section is does not disrupt the overall totals, #588 | ||||
| # 7. An empty section does not disrupt the overall totals, #588 | ||||
| hledger -f- balancesheet -YTA | ||||
| <<< | ||||
| 2017/1/1 | ||||
|  | ||||