Merge branch 'master' into ExceptTLayer

This commit is contained in:
Simon Michael 2018-10-04 21:04:02 -10:00 committed by GitHub
commit 2c9c4ebf79
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
93 changed files with 15871 additions and 497 deletions

View File

@ -1 +1 @@
1.10.99 1.11

View File

@ -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_define({{_webcombined_}}, m4_ifdef({{WEB && COMBINED}},{{$1}}) )m4_dnl
m4_dnl m4_dnl
m4_define({{_author_}}, {{}})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_define({{_version_}}, {{1.10.99}})m4_dnl
m4_dnl m4_dnl
m4_dnl Links to dev and recent release versions of a manual. 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 Too painful for static generation, insert from site.js instead
m4_dnl Available versions: m4_dnl Available versions:
m4_dnl <a href="/$1.html">dev</a> 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.10/$1.html">1.10</a>
m4_dnl | <a href="/doc/1.9/$1.html">1.9</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> m4_dnl | <a href="/doc/1.5/$1.html">1.5</a>

View File

@ -1,6 +1,11 @@
User-visible changes in hledger-api. See also hledger, hledger-lib. 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) # 1.10 (2018/6/30)
* use hledger-lib 1.10 * use hledger-lib 1.10

View File

@ -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"

View File

@ -2,10 +2,10 @@
-- --
-- see: https://github.com/sol/hpack -- see: https://github.com/sol/hpack
-- --
-- hash: 07d6eec88f8c0ba15f32b5bf4c9f74e54364b6da30852617699b496fbf3bf63a -- hash: 7f5a11be3e9db0d4fcebb5b663ee988461de6d815042a7785f9076e083dde205
name: hledger-api name: hledger-api
version: 1.10.99 version: 1.11
synopsis: Web API server for the hledger accounting tool synopsis: Web API server for the hledger accounting tool
description: This is a simple web API server for hledger data. description: This is a simple web API server for hledger data.
It comes with a series of simple client-side web app examples. It comes with a series of simple client-side web app examples.
@ -45,7 +45,7 @@ executable hledger-api
other-modules: other-modules:
Paths_hledger_api Paths_hledger_api
ghc-options: -threaded ghc-options: -threaded
cpp-options: -DVERSION="1.10.99" cpp-options: -DVERSION="1.11"
build-depends: build-depends:
Decimal Decimal
, aeson , aeson
@ -55,8 +55,8 @@ executable hledger-api
, data-default >=0.5 , data-default >=0.5
, docopt , docopt
, either , either
, hledger >=1.10.99 && <1.11 , hledger >=1.11 && <1.12
, hledger-lib >=1.10.99 && <1.11 , hledger-lib >=1.11 && <1.12
, microlens >=0.4 , microlens >=0.4
, microlens-platform >=0.2.3.1 , microlens-platform >=0.2.3.1
, safe , safe

View File

@ -37,12 +37,12 @@ import Text.Printf
import Hledger.Query import Hledger.Query
import Hledger.Cli hiding (Reader, version) import Hledger.Cli hiding (Reader, version)
hledgerApiVersion="1.10.99" hledgerApiVersion="1.11"
-- https://github.com/docopt/docopt.hs#readme -- https://github.com/docopt/docopt.hs#readme
doc :: Docopt doc :: Docopt
doc = [docopt| doc = [docopt|
hledger-api 1.10.99 hledger-api 1.11
Serves hledger data and reports as a JSON web API. Serves hledger data and reports as a JSON web API.

View File

@ -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)

View File

@ -1,5 +1,5 @@
name: hledger-api name: hledger-api
version: '1.10.99' version: '1.11'
synopsis: Web API server for the hledger accounting tool synopsis: Web API server for the hledger accounting tool
description: | description: |
This is a simple web API server for hledger data. This is a simple web API server for hledger data.
@ -32,8 +32,8 @@ extra-source-files:
#data-files: #data-files:
dependencies: dependencies:
- hledger-lib >=1.10.99 && <1.11 - hledger-lib >=1.11 && <1.12
- hledger >=1.10.99 && <1.11 - hledger >=1.11 && <1.12
- base >=4.8 && <4.12 - base >=4.8 && <4.12
- aeson - aeson
- bytestring - bytestring
@ -58,4 +58,4 @@ executables:
hledger-api: hledger-api:
main: hledger-api.hs main: hledger-api.hs
ghc-options: -threaded ghc-options: -threaded
cpp-options: -DVERSION="1.10.99" cpp-options: -DVERSION="1.11"

View File

@ -46,28 +46,22 @@ HERE
#Updating package index Hackage (mirrored at https://s3.amazonaws.com/hackage.fpcomplete.com/) ... #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) # /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 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=lts-12"
#RESOLVER="--resolver=nightly-2018-07-09" #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 # things to be installed
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
HLEDGER_MAIN_TOOLS="\ HLEDGER_MAIN_TOOLS="\
hledger \ hledger \
@ -80,11 +74,30 @@ HLEDGER_OTHER_TOOLS="\
hledger-diff \ hledger-diff \
hledger-iadd \ hledger-iadd \
hledger-interest \ 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 # 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" HOME_LOCAL_BIN="$HOME/.local/bin"
USR_LOCAL_BIN="/usr/local/bin" USR_LOCAL_BIN="/usr/local/bin"
@ -645,6 +658,12 @@ has_stack() {
has_cmd 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 # Check whether 'wget' command exists
has_wget() { has_wget() {
has_cmd 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 whether Stack is already installed, and print an error if it is.
check_stack_installed() { 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: die "Stack $(stack_version) already appears to be installed at:
$(stack_location) $(stack_location)
Use 'stack upgrade' or your OS's package manager to upgrade, Use 'stack upgrade' or your OS's package manager to upgrade,
@ -749,9 +768,11 @@ trap cleanup_temp_dir EXIT
# hledger routines # 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() { ensure_stack() {
if ! has_stack || [[ "$FORCE_INSTALL_STACK" == "true" ]] ; then if ! has_good_stack || [[ "$FORCE_INSTALL_STACK" == "true" ]] ; then
echo "Installing stack" echo "Installing stack"
do_os do_os
fi fi
@ -786,13 +807,13 @@ print_cmd_version() {
if [[ $(cmd_location "$1") ]]; then if [[ $(cmd_location "$1") ]]; then
echo "$1" $(cmd_version "$1") is installed at $(cmd_location "$1") echo "$1" $(cmd_version "$1") is installed at $(cmd_location "$1")
else else
echo "$1 not found" echo "$1 is not found"
fi fi
} }
# Show the installation status of the $HLEDGER_MAIN_TOOLS and $HLEDGER_OTHER_TOOLS. # Show the current installation status of the hledger packages and install tools.
print_hledger_versions() { print_installed_versions() {
for cmd in $HLEDGER_MAIN_TOOLS $HLEDGER_OTHER_TOOLS $HLEDGER_INSTALL_TOOL ; do print_cmd_version "$cmd"; done 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. # 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 # 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. # install but also all dependencies which are not in the specified stackage $RESOLVER.
try_install() { try_install() {
(cd # avoid any project-specific stack/cabal config, install at user level (cd # ensure we install at user level, not in some project's stack/cabal setup
(! has_cmd stack && has_cmd cabal && echo "using $(cabal --version)" && try_info cabal install "$@" --verbose="$CABAL_VERBOSITY" ) || # 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 && ( (ensure_stack && (
#(try_info stack install --install-ghc "$@" --verbosity=$STACK_VERBOSITY ) || # existing resolver #(try_info stack install --install-ghc "$@" --verbosity=$STACK_VERBOSITY ) || # existing resolver
(try_info stack install --install-ghc $RESOLVER "$@" --verbosity="$STACK_VERBOSITY" ) # specific 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 quietly_run lsb_release -a
# show current installed hledger packages # show current installed hledger packages
echo "Install status:" echo "Install status before:"
print_hledger_versions print_installed_versions
if [[ $STATUSFLAG ]] ; then if [[ $STATUSFLAG ]] ; then
exit 0 exit 0
fi fi
# if we'll be using cabal, run cabal update once at the start # 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. # Compare dotted number version strings, based on https://stackoverflow.com/a/4025065/84401.
# cmpver A B's exit status *and* output is # 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 if [[ $(cmpver "$(cmd_version hledger 2>/dev/null)" $HLEDGER_VERSION) = 2 ]]; then
echo Installing hledger 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 echo
fi fi
if [[ $(cmpver "$(cmd_version hledger-ui 2>/dev/null)" $HLEDGER_UI_VERSION) = 2 ]]; then if [[ $(cmpver "$(cmd_version hledger-ui 2>/dev/null)" $HLEDGER_UI_VERSION) = 2 ]]; then
echo Installing hledger-ui echo Installing hledger-ui
try_install hledger-ui-$HLEDGER_UI_VERSION hledger-$HLEDGER_VERSION hledger-lib-$HLEDGER_LIB_VERSION \ try_install hledger-ui-$HLEDGER_UI_VERSION hledger-$HLEDGER_VERSION hledger-lib-$HLEDGER_LIB_VERSION $EXTRA_DEPS \
fsnotify-0.3.0.1 # brick-X.Y # when hledger-iadd requires a special brick, use the same here to reduce rebuilding
# 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
echo echo
fi fi
if [[ $(cmpver "$(cmd_version hledger-web 2>/dev/null)" $HLEDGER_WEB_VERSION) = 2 ]]; then if [[ $(cmpver "$(cmd_version hledger-web 2>/dev/null)" $HLEDGER_WEB_VERSION) = 2 ]]; then
echo Installing hledger-web 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 echo
fi fi
if [[ $(cmpver "$(cmd_version hledger-api 2>/dev/null)" $HLEDGER_API_VERSION) = 2 ]]; then if [[ $(cmpver "$(cmd_version hledger-api 2>/dev/null)" $HLEDGER_API_VERSION) = 2 ]]; then
echo Installing hledger-api 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 echo
fi fi
exit
# Third-party addons. We allow these to use an older version of # Third-party addons. We sometimes build these with an older version
# hledger-lib, in case their bounds have not been updated yet. # 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 if [[ $(cmpver "$(cmd_version hledger-diff 2>/dev/null)" $HLEDGER_DIFF_VERSION) = 2 ]]; then
echo Installing hledger-diff 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 echo
fi fi
if [[ $(cmpver "$(cmd_version hledger-iadd 2>/dev/null)" $HLEDGER_IADD_VERSION) = 2 ]]; then if [[ $(cmpver "$(cmd_version hledger-iadd 2>/dev/null)" $HLEDGER_IADD_VERSION) = 2 ]]; then
echo Installing hledger-iadd 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 echo
fi fi
if [[ $(cmpver "$(cmd_version hledger-interest 2>/dev/null)" $HLEDGER_INTEREST_VERSION) = 2 ]]; then if [[ $(cmpver "$(cmd_version hledger-interest 2>/dev/null)" $HLEDGER_INTEREST_VERSION) = 2 ]]; then
echo Installing hledger-interest 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 echo
fi 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 ---------- echo ----------
# show new installation status # show new installation status
print_hledger_versions echo "Install status after:"
print_installed_versions
# warn if $HOME/.local/bin isn't in $PATH # warn if $HOME/.local/bin isn't in $PATH
check_home_local_bin_on_path check_home_local_bin_on_path

View File

@ -2,6 +2,79 @@ API-ish changes in the hledger-lib package.
Most user-visible changes are noted in the hledger changelog, instead. 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) # 1.10 (2018/6/30)
* build cleanly with all supported GHC versions again (7.10 to 8.4) * build cleanly with all supported GHC versions again (7.10 to 8.4)

View File

@ -2,10 +2,10 @@
-- --
-- see: https://github.com/sol/hpack -- see: https://github.com/sol/hpack
-- --
-- hash: 54632c4329f85aa921fb91abbed9c0871465e0cfb4cdfa05a390447c6d796b83 -- hash: f3cc307bb564ecec4c16143a1d254c4cbbbee1483eb7860c711e3c4c5ed46431
name: hledger-lib name: hledger-lib
version: 1.10.99 version: 1.11
synopsis: Core data types, parsers and functionality for the hledger accounting tools synopsis: Core data types, parsers and functionality for the hledger accounting tools
description: This is a reusable library containing hledger's core functionality. description: This is a reusable library containing hledger's core functionality.
. .

View File

@ -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"

View File

@ -249,4 +249,4 @@ SEE ALSO
hledger 1.10.99 July 2018 hledger_csv(5) hledger 1.10.99 September 2018 hledger_csv(5)

View File

@ -1,6 +1,6 @@
.\"t .\"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 .PD
In future it will also help detect misspelled accounts. In future it will also help detect misspelled accounts.
.PP .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, An account directive can also have indented subdirectives following it,
which are currently ignored. which are currently ignored.
Here is the full syntax: Here is the full syntax:
.IP .IP
.nf .nf
\f[C] \f[C]
;\ account\ ACCTNAME\ \ [OPTIONALCODE] ;\ account\ ACCTNAME
;\ \ \ [OPTIONALSUBDIRECTIVES] ;\ \ \ [OPTIONALSUBDIRECTIVES]
account\ assets:bank:checking\ \ \ 1110 account\ assets:bank:checking
\ \ a\ comment \ \ a\ comment
\ \ some\-tag:12345 \ \ some\-tag:12345
\f[] \f[]
.fi .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 .SS Rewriting accounts
.PP .PP
You can define account alias rules which rewrite your account names, or You can define account alias rules which rewrite your account names, or

View File

@ -853,6 +853,7 @@ times though.
* Default commodity:: * Default commodity::
* Market prices:: * Market prices::
* Declaring accounts:: * Declaring accounts::
* Account display order::
* Rewriting accounts:: * Rewriting accounts::
* Default parent account:: * Default parent account::
@ -1002,7 +1003,7 @@ P 2010/1/1 € $1.40
another commodity using these prices. 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 1.14.7 Declaring accounts
------------------------- -------------------------
@ -1016,46 +1017,71 @@ account assets:bank:checking
hledger add, hledger-iadd, hledger-web, and ledger-mode. hledger add, hledger-iadd, hledger-web, and ledger-mode.
In future it will also help detect misspelled accounts. 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 An account directive can also have indented subdirectives following
it, which are currently ignored. Here is the full syntax: it, which are currently ignored. Here is the full syntax:
; account ACCTNAME [OPTIONALCODE] ; account ACCTNAME
; [OPTIONALSUBDIRECTIVES] ; [OPTIONALSUBDIRECTIVES]
account assets:bank:checking 1110 account assets:bank:checking
a comment a comment
some-tag:12345 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 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 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. 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 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, 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 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 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 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 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 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 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 within a section of the journal. Use the 'apply account' and 'end apply
@ -1417,41 +1443,43 @@ Node: Tags26403
Ref: #tags26521 Ref: #tags26521
Node: Directives27923 Node: Directives27923
Ref: #directives28066 Ref: #directives28066
Node: Comment blocks33922 Node: Comment blocks33948
Ref: #comment-blocks34067 Ref: #comment-blocks34093
Node: Including other files34243 Node: Including other files34269
Ref: #including-other-files34423 Ref: #including-other-files34449
Node: Default year34831 Node: Default year34857
Ref: #default-year35000 Ref: #default-year35026
Node: Declaring commodities35423 Node: Declaring commodities35449
Ref: #declaring-commodities35606 Ref: #declaring-commodities35632
Node: Default commodity36833 Node: Default commodity36859
Ref: #default-commodity37009 Ref: #default-commodity37035
Node: Market prices37645 Node: Market prices37671
Ref: #market-prices37810 Ref: #market-prices37836
Node: Declaring accounts38651 Node: Declaring accounts38677
Ref: #declaring-accounts38827 Ref: #declaring-accounts38856
Node: Rewriting accounts40498 Node: Account display order39406
Ref: #rewriting-accounts40683 Ref: #account-display-order39596
Node: Basic aliases41417 Node: Rewriting accounts40617
Ref: #basic-aliases41563 Ref: #rewriting-accounts40805
Node: Regex aliases42267 Node: Basic aliases41539
Ref: #regex-aliases42438 Ref: #basic-aliases41685
Node: Multiple aliases43156 Node: Regex aliases42389
Ref: #multiple-aliases43331 Ref: #regex-aliases42560
Node: end aliases43829 Node: Multiple aliases43278
Ref: #end-aliases43976 Ref: #multiple-aliases43453
Node: Default parent account44077 Node: end aliases43951
Ref: #default-parent-account44243 Ref: #end-aliases44098
Node: Periodic transactions45127 Node: Default parent account44199
Ref: #periodic-transactions45309 Ref: #default-parent-account44367
Node: Forecasting with periodic transactions46520 Node: Periodic transactions45251
Ref: #forecasting-with-periodic-transactions46763 Ref: #periodic-transactions45433
Node: Budgeting with periodic transactions48450 Node: Forecasting with periodic transactions46644
Ref: #budgeting-with-periodic-transactions48689 Ref: #forecasting-with-periodic-transactions46887
Node: Transaction Modifiers49148 Node: Budgeting with periodic transactions48574
Ref: #transaction-modifiers49311 Ref: #budgeting-with-periodic-transactions48813
Node: EDITOR SUPPORT50567 Node: Transaction Modifiers49272
Ref: #editor-support50685 Ref: #transaction-modifiers49435
Node: EDITOR SUPPORT50691
Ref: #editor-support50809
 
End Tag Table End Tag Table

View File

@ -819,45 +819,62 @@ FILE FORMAT
hledger add, hledger-iadd, hledger-web, and ledger-mode. hledger add, hledger-iadd, hledger-web, and ledger-mode.
In future it will also help detect misspelled accounts. 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, An account directive can also have indented subdirectives following it,
which are currently ignored. Here is the full syntax: which are currently ignored. Here is the full syntax:
; account ACCTNAME [OPTIONALCODE] ; account ACCTNAME
; [OPTIONALSUBDIRECTIVES] ; [OPTIONALSUBDIRECTIVES]
account assets:bank:checking 1110 account assets:bank:checking
a comment a comment
some-tag:12345 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 Rewriting accounts
You can define account alias rules which rewrite your account names, or You can define account alias rules which rewrite your account names, or
parts of them, before generating reports. This can be useful for: parts of them, before generating reports. This can be useful for:
@ -873,14 +890,14 @@ FILE FORMAT
o customising reports o customising reports
Account aliases also rewrite account names in account directives. They 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. hledger-web.
See also Cookbook: Rewrite account names. See also Cookbook: Rewrite account names.
Basic aliases Basic aliases
To set an account alias, use the alias directive in your journal file. 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 This affects all subsequent journal entries in the current file or its
included files. The spaces around the = are optional: included files. The spaces around the = are optional:
alias OLD = NEW alias OLD = NEW
@ -888,54 +905,54 @@ FILE FORMAT
Or, you can use the --alias 'OLD=NEW' option on the command line. This 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. affects all entries. It's useful for trying out aliases interactively.
OLD and NEW are case sensitive full account names. hledger will OLD and NEW are case sensitive full account names. hledger will
replace any occurrence of the old account name with the new one. Sub- replace any occurrence of the old account name with the new one. Sub-
accounts are also affected. Eg: accounts are also affected. Eg:
alias checking = assets:bank:wells fargo:checking 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" # rewrites "checking" to "assets:bank:wells fargo:checking", or "checking:a" to "assets:bank:wells fargo:checking:a"
Regex aliases 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: indicated by the forward slashes:
alias /REGEX/ = REPLACEMENT alias /REGEX/ = REPLACEMENT
or --alias '/REGEX/=REPLACEMENT'. or --alias '/REGEX/=REPLACEMENT'.
REGEX is a case-insensitive regular expression. Anywhere it matches REGEX is a case-insensitive regular expression. Anywhere it matches
inside an account name, the matched part will be replaced by REPLACE- inside an account name, the matched part will be replaced by REPLACE-
MENT. If REGEX contains parenthesised match groups, these can be ref- MENT. If REGEX contains parenthesised match groups, these can be ref-
erenced by the usual numeric backreferences in REPLACEMENT. Eg: erenced by the usual numeric backreferences in REPLACEMENT. Eg:
alias /^(.+):bank:([^:]+)(.*)/ = \1:\2 \3 alias /^(.+):bank:([^:]+)(.*)/ = \1:\2 \3
# rewrites "assets:bank:wells fargo:checking" to "assets:wells fargo checking" # rewrites "assets:bank:wells fargo:checking" to "assets:wells fargo checking"
Also note that REPLACEMENT continues to the end of line (or on command 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- line, to end of option argument), so it can contain trailing white-
space. space.
Multiple aliases Multiple aliases
You can define as many aliases as you like using directives or com- You can define as many aliases as you like using directives or com-
mand-line options. Aliases are recursive - each alias sees the result mand-line options. Aliases are recursive - each alias sees the result
of applying previous ones. (This is different from Ledger, where of applying previous ones. (This is different from Ledger, where
aliases are non-recursive by default). Aliases are applied in the fol- aliases are non-recursive by default). Aliases are applied in the fol-
lowing order: 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) precedence over earlier ones; directives not yet seen are ignored)
2. alias options, in the order they appear on the command line 2. alias options, in the order they appear on the command line
end aliases 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 directive:
end aliases end aliases
Default parent account Default parent account
You can specify a parent account which will be prepended to all You can specify a parent account which will be prepended to all
accounts within a section of the journal. Use the apply account and accounts within a section of the journal. Use the apply account and
end apply account directives like so: end apply account directives like so:
apply account home apply account home
@ -952,7 +969,7 @@ FILE FORMAT
home:food $10 home:food $10
home:cash $-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: file. Included files are also affected, eg:
apply account business apply account business
@ -961,18 +978,18 @@ FILE FORMAT
apply account personal apply account personal
include personal.journal 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. ported.
A default parent account also affects account directives. It does not A default parent account also affects account directives. It does not
affect account names being entered via hledger add or hledger-web. If affect account names being entered via hledger add or hledger-web. If
account aliases are present, they are applied after the default parent account aliases are present, they are applied after the default parent
account. account.
Periodic transactions 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- 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). Secondly, they also can be used to define budget goals (with --budget).
A periodic transaction rule looks like a normal journal entry, with the A periodic transaction rule looks like a normal journal entry, with the
@ -983,8 +1000,8 @@ FILE FORMAT
expenses:rent $2000 expenses:rent $2000
assets:bank:checking assets:bank:checking
There is an additional constraint on the period expression: the start There is an additional constraint on the period expression: the start
date must fall on a natural boundary of the interval. Eg 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. 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 If you write a transaction description or same-line comment, it must be
@ -998,77 +1015,77 @@ FILE FORMAT
income:acme inc income:acme inc
Forecasting with periodic transactions 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 future transactions recurring at the specified interval. These are not
saved in the journal, but appear in all reports. They will look like 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 normal transactions, but with an extra tag named recur, whose value is
the generating period expression. the generating period expression.
Forecast transactions start on the first occurrence, and end on the Forecast transactions start on the first occurrence, and end on the
last occurrence, of their interval within the forecast period. The last occurrence, of their interval within the forecast period. The
forecast period: forecast period:
o begins on the later of o begins on the later of
o the report start date if specified with -b/-p/date: 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. 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. days from today.
where "today" means the current date at report time. The "later of" where "today" means the current date at report time. The "later of"
rule ensures that forecast transactions do not overlap normal transac- rule ensures that forecast transactions do not overlap normal transac-
tions in time; they will begin only after normal transactions end. tions in time; they will begin only after normal transactions end.
Forecasting can be useful for estimating balances into the future, and Forecasting can be useful for estimating balances into the future, and
experimenting with different scenarios. Note the start date logic experimenting with different scenarios. Note the start date logic
means that forecasted transactions are automatically replaced by normal means that forecasted transactions are automatically replaced by normal
transactions as you add those. transactions as you add those.
Forecasting can also help with data entry: describe most of your trans- 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. print --forecast to the journal.
You can generate one-time transactions too: just write a period expres- You can generate one-time transactions too: just write a period expres-
sion specifying a date with no report interval. (You could also write sion specifying a date with no report interval. (You could also write
a normal transaction with a future date, but remember this disables a normal transaction with a future date, but remember this disables
forecast transactions on previous dates.) forecast transactions on previous dates.)
Budgeting with periodic transactions Budgeting with periodic transactions
With the --budget flag, currently supported by the balance command, With the --budget flag, currently supported by the balance command,
each periodic transaction rule declares recurring budget goals for the each periodic transaction rule declares recurring budget goals for the
specified accounts. Eg the first example above declares a goal of specified accounts. Eg the first example above declares a goal of
spending $2000 on rent (and also, a goal of depositing $2000 into spending $2000 on rent (and also, a goal of depositing $2000 into
checking) every month. Goals and actual performance can then be com- checking) every month. Goals and actual performance can then be com-
pared in budget reports. 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. and Forecasting.
Transaction Modifiers Transaction Modifiers
Transaction modifier rules describe changes that should be applied Transaction modifier rules describe changes that should be applied
automatically to certain transactions. Currently, this means adding automatically to certain transactions. Currently, this means adding
extra postings (also known as "automated postings"). Transaction modi- extra postings (also known as "automated postings"). Transaction modi-
fiers are enabled by the --auto flag. fiers are enabled by the --auto flag.
A transaction modifier rule looks a bit like a normal journal entry, A transaction modifier rule looks a bit like a normal journal entry,
except the first line is an equal sign (=) followed by a query except the first line is an equal sign (=) followed by a query
(mnemonic: = suggests matching something.): (mnemonic: = suggests matching something.):
= expenses:gifts = expenses:gifts
budget:gifts *-1 budget:gifts *-1
assets:budget *1 assets:budget *1
The posting amounts can be of the form *N, which means "the amount of 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 matched transaction's first posting, multiplied by N". They can
also be ordinary fixed amounts. Fixed amounts with no commodity symbol 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. 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: transaction involving the expenses:gifts account:
= expenses:gifts = expenses:gifts
@ -1084,16 +1101,16 @@ FILE FORMAT
(budget:gifts) $-20 (budget:gifts) $-20
assets 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. transaction balancing, missing amount inference and balance assertions.
EDITOR SUPPORT EDITOR SUPPORT
Add-on modes exist for various text editors, to make working with jour- Add-on modes exist for various text editors, to make working with jour-
nal files easier. They add colour, navigation aids and helpful com- nal files easier. They add colour, navigation aids and helpful com-
mands. For hledger users who edit the journal file directly (the mands. For hledger users who edit the journal file directly (the
majority), using one of these modes is quite recommended. 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: files:
@ -1112,7 +1129,7 @@ EDITOR SUPPORT
REPORTING BUGS 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) or hledger mail list)
@ -1126,7 +1143,7 @@ COPYRIGHT
SEE ALSO 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- hledger_csv(5), hledger_journal(5), hledger_timeclock(5), hledger_time-
dot(5), ledger(1) 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)

View File

@ -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"

View File

@ -77,4 +77,4 @@ SEE ALSO
hledger 1.10.99 July 2018 hledger_timeclock(5) hledger 1.10.99 September 2018 hledger_timeclock(5)

View File

@ -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"

View File

@ -124,4 +124,4 @@ SEE ALSO
hledger 1.10.99 July 2018 hledger_timedot(5) hledger 1.10.99 September 2018 hledger_timedot(5)

View File

@ -1,5 +1,5 @@
name: hledger-lib name: hledger-lib
version: '1.10.99' version: '1.11'
synopsis: Core data types, parsers and functionality for the hledger accounting tools synopsis: Core data types, parsers and functionality for the hledger accounting tools
description: | description: |
This is a reusable library containing hledger's core functionality. This is a reusable library containing hledger's core functionality.

View File

@ -1,6 +1,11 @@
User-visible changes in hledger-ui. See also hledger, hledger-lib. 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) # 1.10.1 (2018/7/3)
* restore support for fsnotify 0.2.1.2, as well as 0.3.x (#833) * restore support for fsnotify 0.2.1.2, as well as 0.3.x (#833)

View File

@ -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"

View File

@ -2,10 +2,10 @@
-- --
-- see: https://github.com/sol/hpack -- see: https://github.com/sol/hpack
-- --
-- hash: 88116009cafa64bb3351a332b88f9848d895f7bc4e614a8647f9c26c6405ba35 -- hash: d2925ba85674c61c233d118134f8b3cd090ca0900953652b4253755bb8840c9c
name: hledger-ui name: hledger-ui
version: 1.10.99 version: 1.11
synopsis: Curses-style user interface for the hledger accounting tool synopsis: Curses-style user interface for the hledger accounting tool
description: This is hledger's curses-style interface. description: This is hledger's curses-style interface.
It is simpler and more convenient for browsing data than the command-line 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: 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 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: build-depends:
ansi-terminal >=0.6.2.3 ansi-terminal >=0.6.2.3
, async , async
@ -75,8 +75,8 @@ executable hledger-ui
, directory , directory
, filepath , filepath
, fsnotify >=0.2.1.2 && <0.4 , fsnotify >=0.2.1.2 && <0.4
, hledger >=1.10.99 && <1.11 , hledger >=1.11 && <1.12
, hledger-lib >=1.10.99 && <1.11 , hledger-lib >=1.11 && <1.12
, megaparsec >=6.4.1 , megaparsec >=6.4.1
, microlens >=0.4 , microlens >=0.4
, microlens-platform >=0.2.3.1 , microlens-platform >=0.2.3.1

View File

@ -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)

View File

@ -1,5 +1,5 @@
name : hledger-ui name : hledger-ui
version : '1.10.99' version : '1.11'
synopsis : Curses-style user interface for the hledger accounting tool synopsis : Curses-style user interface for the hledger accounting tool
description : | description : |
This is hledger's curses-style interface. This is hledger's curses-style interface.
@ -37,11 +37,11 @@ flags:
manual: false manual: false
default: true default: true
cpp-options: -DVERSION="1.10.99" cpp-options: -DVERSION="1.11"
dependencies: dependencies:
- hledger >=1.10.99 && <1.11 - hledger >=1.11 && <1.12
- hledger-lib >=1.10.99 && <1.11 - hledger-lib >=1.11 && <1.12
- ansi-terminal >=0.6.2.3 - ansi-terminal >=0.6.2.3
- async - async
- base >=4.8 && <4.12 - base >=4.8 && <4.12

View File

@ -1,6 +1,11 @@
User-visible changes in hledger-web. See also hledger, hledger-lib. 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) # 1.10 (2018/6/30)
* multiple -f options, and --auto, work again * multiple -f options, and --auto, work again

View File

@ -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"

View File

@ -2,10 +2,10 @@
-- --
-- see: https://github.com/sol/hpack -- see: https://github.com/sol/hpack
-- --
-- hash: b77366b5a138b9d5a3b4c4541bfb875642f06b621bd690712d022f53ab1afbf6 -- hash: a990f6fed36d14942e007240e0b37a9ff1147902b74cadc426403828ce3950a6
name: hledger-web name: hledger-web
version: 1.10.99 version: 1.11
synopsis: Web interface for the hledger accounting tool synopsis: Web interface for the hledger accounting tool
description: This is hledger's web interface. description: This is hledger's web interface.
It provides a more user-friendly and collaborative UI than the It provides a more user-friendly and collaborative UI than the
@ -149,7 +149,7 @@ library
other-modules: other-modules:
Paths_hledger_web Paths_hledger_web
ghc-options: -Wall -fwarn-tabs ghc-options: -Wall -fwarn-tabs
cpp-options: -DVERSION="1.10.99" cpp-options: -DVERSION="1.11"
build-depends: build-depends:
base >=4.8 && <4.12 base >=4.8 && <4.12
, blaze-html , blaze-html
@ -164,8 +164,8 @@ library
, directory , directory
, filepath , filepath
, hjsmin , hjsmin
, hledger >=1.10.99 && <1.11 , hledger >=1.11 && <1.12
, hledger-lib >=1.10.99 && <1.11 , hledger-lib >=1.11 && <1.12
, http-client , http-client
, http-conduit , http-conduit
, json , json
@ -201,7 +201,7 @@ executable hledger-web
hs-source-dirs: hs-source-dirs:
app app
ghc-options: -Wall -fwarn-tabs ghc-options: -Wall -fwarn-tabs
cpp-options: -DVERSION="1.10.99" cpp-options: -DVERSION="1.11"
build-depends: build-depends:
base base
, hledger-web , hledger-web

View File

@ -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)

View File

@ -1,5 +1,5 @@
name: hledger-web name: hledger-web
version: '1.10.99' version: '1.11'
synopsis: Web interface for the hledger accounting tool synopsis: Web interface for the hledger accounting tool
description: | description: |
This is hledger's web interface. This is hledger's web interface.
@ -77,7 +77,7 @@ when:
library: library:
source-dirs: . source-dirs: .
cpp-options: -DVERSION="1.10.99" cpp-options: -DVERSION="1.11"
exposed-modules: exposed-modules:
- Hledger.Web - Hledger.Web
- Hledger.Web.Application - Hledger.Web.Application
@ -96,8 +96,8 @@ library:
- Hledger.Web.Widget.AddForm - Hledger.Web.Widget.AddForm
- Hledger.Web.Widget.Common - Hledger.Web.Widget.Common
dependencies: dependencies:
- hledger-lib >=1.10.99 && <1.11 - hledger-lib >=1.11 && <1.12
- hledger >=1.10.99 && <1.11 - hledger >=1.11 && <1.12
- base >=4.8 && <4.12 - base >=4.8 && <4.12
- blaze-html - blaze-html
- blaze-markup - blaze-markup
@ -143,7 +143,7 @@ executables:
hledger-web: hledger-web:
source-dirs: app source-dirs: app
main: main.hs main: main.hs
cpp-options: -DVERSION="1.10.99" cpp-options: -DVERSION="1.11"
dependencies: dependencies:
- base - base
- hledger-web - hledger-web
@ -161,7 +161,7 @@ executables:
# test: # test:
# source-dirs: tests # source-dirs: tests
# main: main.hs # main: main.hs
# cpp-options: -DVERSION="1.10.99" # cpp-options: -DVERSION="1.11"
# dependencies: # dependencies:
# - base # - base
# - hledger-web # - hledger-web

View File

@ -1,6 +1,61 @@
User-visible changes in the hledger command line tool. 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) # 1.10 (2018/6/30)
* journal: many parse error messages have become more informative, and * journal: many parse error messages have become more informative, and

View File

@ -1,6 +1,6 @@
.\"t .\"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 This was formerly called \[lq]equity\[rq], as in Ledger, and that alias
is also accepted. is also accepted.
See close \[en]help for more. 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 .SS help
.PP .PP
Show any of the hledger manuals. Show any of the hledger manuals.
@ -2769,6 +2774,11 @@ Helps ledger\-autosync detect already\-seen transactions when importing.
.SS rewrite .SS rewrite
.PP .PP
Print all transactions, adding custom postings to the matched ones. 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 .SS stats
.PP .PP
Show some journal statistics. Show some journal statistics.

View File

@ -2,10 +2,10 @@
-- --
-- see: https://github.com/sol/hpack -- see: https://github.com/sol/hpack
-- --
-- hash: eeed47cc18e00b190b0dd220f044f4f63c60442fa26ee301c44454b5f66e09ca -- hash: a53ed723ef2c43c6425e4bf2d40ae7a37b9816dcdbd49795a7a7972b4b4ca203
name: hledger name: hledger
version: 1.10.99 version: 1.11
synopsis: Command-line interface for the hledger accounting tool synopsis: Command-line interface for the hledger accounting tool
description: This is hledger's command-line interface. description: This is hledger's command-line interface.
Its basic function is to read a plain text file describing Its basic function is to read a plain text file describing
@ -111,7 +111,7 @@ library
other-modules: other-modules:
Paths_hledger 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 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: build-depends:
Decimal Decimal
, Diff , Diff
@ -129,7 +129,7 @@ library
, hashable >=1.2.4 , hashable >=1.2.4
, haskeline >=0.6 , haskeline >=0.6
, here , here
, hledger-lib >=1.10.99 && <1.11 , hledger-lib >=1.11 && <1.12
, lucid , lucid
, megaparsec >=6.4.1 , megaparsec >=6.4.1
, mtl , mtl
@ -164,7 +164,7 @@ executable hledger
hs-source-dirs: hs-source-dirs:
app 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 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: build-depends:
Decimal Decimal
, ansi-terminal >=0.6.2.3 , ansi-terminal >=0.6.2.3
@ -181,7 +181,7 @@ executable hledger
, haskeline >=0.6 , haskeline >=0.6
, here , here
, hledger , hledger
, hledger-lib >=1.10.99 && <1.11 , hledger-lib >=1.11 && <1.12
, megaparsec >=6.4.1 , megaparsec >=6.4.1
, mtl , mtl
, mtl-compat , mtl-compat
@ -218,7 +218,7 @@ test-suite test
hs-source-dirs: hs-source-dirs:
test 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 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: build-depends:
Decimal Decimal
, ansi-terminal >=0.6.2.3 , ansi-terminal >=0.6.2.3
@ -235,7 +235,7 @@ test-suite test
, haskeline >=0.6 , haskeline >=0.6
, here , here
, hledger , hledger
, hledger-lib >=1.10.99 && <1.11 , hledger-lib >=1.11 && <1.12
, megaparsec >=6.4.1 , megaparsec >=6.4.1
, mtl , mtl
, mtl-compat , mtl-compat
@ -289,7 +289,7 @@ benchmark bench
, haskeline >=0.6 , haskeline >=0.6
, here , here
, hledger , hledger
, hledger-lib >=1.10.99 && <1.11 , hledger-lib >=1.11 && <1.12
, html , html
, megaparsec >=6.4.1 , megaparsec >=6.4.1
, mtl , mtl

View File

@ -912,6 +912,7 @@ detailed command help.
* check-dates:: * check-dates::
* check-dupes:: * check-dupes::
* close:: * close::
* files::
* help:: * help::
* import:: * import::
* incomestatement:: * incomestatement::
@ -921,6 +922,7 @@ detailed command help.
* register:: * register::
* register-match:: * register-match::
* rewrite:: * rewrite::
* roi::
* stats:: * stats::
* tags:: * tags::
* test:: * test::
@ -1757,7 +1759,7 @@ Report account names having the same leaf but different prefixes. An
example: http://stefanorodighiero.net/software/hledger-dupes.html 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 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. 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. Show any of the hledger manuals.
@ -1808,7 +1819,7 @@ DESCRIPTION
 
File: hledger.info, Node: import, Next: incomestatement, Prev: help, Up: COMMANDS 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 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 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 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 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 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 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. 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 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. 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 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. 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 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. 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 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, 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. 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. 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. Show some journal statistics.
@ -2243,7 +2263,7 @@ selection.
 
File: hledger.info, Node: tags, Next: test, Prev: stats, Up: COMMANDS 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, 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 File: hledger.info, Node: test, Prev: tags, Up: COMMANDS
4.22 test 4.24 test
========= =========
Run built-in unit tests. Run built-in unit tests.
@ -2491,94 +2511,98 @@ Node: QUERIES26089
Ref: #queries26191 Ref: #queries26191
Node: COMMANDS30153 Node: COMMANDS30153
Ref: #commands30265 Ref: #commands30265
Node: accounts31247 Node: accounts31265
Ref: #accounts31345 Ref: #accounts31363
Node: activity32591 Node: activity32609
Ref: #activity32701 Ref: #activity32719
Node: add33061 Node: add33079
Ref: #add33160 Ref: #add33178
Node: balance35821 Node: balance35839
Ref: #balance35932 Ref: #balance35950
Node: Classic balance report39015 Node: Classic balance report39033
Ref: #classic-balance-report39188 Ref: #classic-balance-report39206
Node: Customising the classic balance report40557 Node: Customising the classic balance report40575
Ref: #customising-the-classic-balance-report40785 Ref: #customising-the-classic-balance-report40803
Node: Colour support42859 Node: Colour support42877
Ref: #colour-support43026 Ref: #colour-support43044
Node: Flat mode43199 Node: Flat mode43217
Ref: #flat-mode43347 Ref: #flat-mode43365
Node: Depth limited balance reports43760 Node: Depth limited balance reports43778
Ref: #depth-limited-balance-reports43960 Ref: #depth-limited-balance-reports43978
Node: Multicolumn balance report44416 Node: Multicolumn balance report44434
Ref: #multicolumn-balance-report44614 Ref: #multicolumn-balance-report44632
Node: Budget report49794 Node: Budget report49812
Ref: #budget-report49937 Ref: #budget-report49955
Ref: #output-format-152971 Ref: #output-format-152989
Node: balancesheet53049 Node: balancesheet53067
Ref: #balancesheet53185 Ref: #balancesheet53203
Node: balancesheetequity55496 Node: balancesheetequity55514
Ref: #balancesheetequity55645 Ref: #balancesheetequity55663
Node: cashflow56182 Node: cashflow56200
Ref: #cashflow56310 Ref: #cashflow56328
Node: check-dates58433 Node: check-dates58451
Ref: #check-dates58560 Ref: #check-dates58578
Node: check-dupes58677 Node: check-dupes58695
Ref: #check-dupes58801 Ref: #check-dupes58819
Node: close58938 Node: close58956
Ref: #close59045 Ref: #close59064
Node: help59375 Node: files59394
Ref: #help59475 Ref: #files59495
Node: import60549 Node: help59636
Ref: #import60663 Ref: #help59736
Node: incomestatement61393 Node: import60810
Ref: #incomestatement61527 Ref: #import60924
Node: prices63931 Node: incomestatement61654
Ref: #prices64046 Ref: #incomestatement61788
Node: print64318 Node: prices64192
Ref: #print64428 Ref: #prices64307
Node: print-unique69322 Node: print64579
Ref: #print-unique69448 Ref: #print64689
Node: register69516 Node: print-unique69583
Ref: #register69643 Ref: #print-unique69709
Node: Custom register output74144 Node: register69777
Ref: #custom-register-output74273 Ref: #register69904
Node: register-match75503 Node: Custom register output74405
Ref: #register-match75637 Ref: #custom-register-output74534
Node: rewrite75820 Node: register-match75764
Ref: #rewrite75937 Ref: #register-match75898
Node: stats76006 Node: rewrite76081
Ref: #stats76109 Ref: #rewrite76196
Node: tags76979 Node: roi76265
Ref: #tags77077 Ref: #roi76363
Node: test77313 Node: stats76479
Ref: #test77397 Ref: #stats76578
Node: ADD-ON COMMANDS78105 Node: tags77448
Ref: #add-on-commands78215 Ref: #tags77546
Node: Official add-ons79502 Node: test77782
Ref: #official-add-ons79642 Ref: #test77866
Node: api79729 Node: ADD-ON COMMANDS78574
Ref: #api79818 Ref: #add-on-commands78684
Node: ui79870 Node: Official add-ons79971
Ref: #ui79969 Ref: #official-add-ons80111
Node: web80027 Node: api80198
Ref: #web80116 Ref: #api80287
Node: Third party add-ons80162 Node: ui80339
Ref: #third-party-add-ons80337 Ref: #ui80438
Node: diff80472 Node: web80496
Ref: #diff80569 Ref: #web80585
Node: iadd80668 Node: Third party add-ons80631
Ref: #iadd80782 Ref: #third-party-add-ons80806
Node: interest80865 Node: diff80941
Ref: #interest80986 Ref: #diff81038
Node: irr81081 Node: iadd81137
Ref: #irr81179 Ref: #iadd81251
Node: Experimental add-ons81257 Node: interest81334
Ref: #experimental-add-ons81409 Ref: #interest81455
Node: autosync81689 Node: irr81550
Ref: #autosync81800 Ref: #irr81648
Node: chart82039 Node: Experimental add-ons81726
Ref: #chart82158 Ref: #experimental-add-ons81878
Node: check82229 Node: autosync82158
Ref: #check82331 Ref: #autosync82269
Node: chart82508
Ref: #chart82627
Node: check82698
Ref: #check82800
 
End Tag Table End Tag Table

View File

@ -1596,6 +1596,10 @@ COMMANDS
a period. This was formerly called "equity", as in Ledger, and that a period. This was formerly called "equity", as in Ledger, and that
alias is also accepted. See close -help for more. 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 help
Show any of the hledger manuals. Show any of the hledger manuals.
@ -1978,11 +1982,15 @@ COMMANDS
rewrite rewrite
Print all transactions, adding custom postings to the matched ones. 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 stats
Show some journal statistics. Show some journal statistics.
-o FILE --output-file=FILE -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. above formats selects that format.
$ hledger stats $ hledger stats
@ -1997,61 +2005,61 @@ COMMANDS
Accounts : 8 (depth 3) Accounts : 8 (depth 3)
Commodities : 1 ($) Commodities : 1 ($)
The stats command displays summary information for the whole journal, The stats command displays summary information for the whole journal,
or a matched part of it. With a reporting interval, it shows a report or a matched part of it. With a reporting interval, it shows a report
for each report period. 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. tion.
tags tags
List all the tag names used in the journal. With a TAGREGEX argument, List all the tag names used in the journal. With a TAGREGEX argument,
only tag names matching the regular expression (case insensitive) are only tag names matching the regular expression (case insensitive) are
shown. With additional QUERY arguments, only transactions matching the shown. With additional QUERY arguments, only transactions matching the
query are considered. query are considered.
test test
Run built-in unit tests. 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. gives an error, the exit code will be non-zero.
Test names include a group prefix. If a (exact, case sensitive) group 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 prefix, or a full test name is provided as the first argument, only
that group or test is run. that group or test is run.
If a numeric second argument is provided, it will set the randomness If a numeric second argument is provided, it will set the randomness
seed, for repeatable results from tests using randomness (currently seed, for repeatable results from tests using randomness (currently
none of them). 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 ity-check your installed hledger executable at any time. All tests are
expected to pass - if you ever see otherwise, something has gone wrong, expected to pass - if you ever see otherwise, something has gone wrong,
please report a bug! please report a bug!
ADD-ON COMMANDS 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 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). 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, 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 o hledger -h web shows hledger's help, while hledger web -h shows
hledger-web's help. hledger-web's help.
o Flags specific to the add-on must have a preceding -- to hide them 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; from hledger. So hledger web --serve --port 9000 will be rejected;
you must use hledger web -- --serve --port 9000. 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. hledger-web --serve --port 9000.
Add-ons are a relatively easy way to add local features or experiment 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 with new ideas. They can be written in any language, but haskell
scripts have a big advantage: they can use the same hledger (and scripts have a big advantage: they can use the same hledger (and
haskell) library functions that built-in commands do, for command-line haskell) library functions that built-in commands do, for command-line
options, journal parsing, reporting, etc. options, journal parsing, reporting, etc.
Here are some hledger add-ons available: Here are some hledger add-ons available:
@ -2069,7 +2077,7 @@ ADD-ON COMMANDS
hledger-web provides a simple web interface. hledger-web provides a simple web interface.
Third party add-ons 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. hledger release.
diff diff
@ -2077,7 +2085,7 @@ ADD-ON COMMANDS
journal file and another. journal file and another.
iadd 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. add command.
interest interest
@ -2085,19 +2093,19 @@ ADD-ON COMMANDS
ing to various schemes. ing to various schemes.
irr irr
hledger-irr calculates the internal rate of return of an investment hledger-irr calculates the internal rate of return of an investment
account. account.
Experimental add-ons 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- 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! way to start making your own!
autosync autosync
hledger-autosync is a symbolic link for easily running ledger-autosync, hledger-autosync is a symbolic link for easily running ledger-autosync,
if installed. ledger-autosync does deduplicating conversion of OFX if installed. ledger-autosync does deduplicating conversion of OFX
data and some CSV formats, and can also download the data if your bank data and some CSV formats, and can also download the data if your bank
offers OFX Direct Connect. offers OFX Direct Connect.
chart chart
@ -2107,21 +2115,21 @@ ADD-ON COMMANDS
hledger-check.hs checks more powerful account balance assertions. hledger-check.hs checks more powerful account balance assertions.
ENVIRONMENT 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. full terminal width.
LEDGER_FILE The journal file path when not specified with -f. Default: 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). nal).
FILES FILES
Reads data from one or more files in hledger journal, timeclock, time- Reads data from one or more files in hledger journal, timeclock, time-
dot, or CSV format specified with -f, or $LEDGER_FILE, or dot, or CSV format specified with -f, or $LEDGER_FILE, or
$HOME/.hledger.journal (on windows, perhaps $HOME/.hledger.journal (on windows, perhaps
C:/Users/USER/.hledger.journal). C:/Users/USER/.hledger.journal).
BUGS 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. hledger is awkward.
When input data contains non-ascii characters, a suitable system locale 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 In a Cygwin/MSYS/Mintty window, the tab key is not supported in hledger
add. 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. 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. Ledger.
TROUBLESHOOTING TROUBLESHOOTING
Here are some issues you might encounter when you run hledger (and 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 remember you can also seek help from the IRC channel, mail list or bug
tracker): tracker):
Successfully installed, but "No command `hledger' found" Successfully installed, but "No command `hledger' found"
stack and cabal install binaries into a special directory, which should 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. that is ~/.local/bin and ~/.cabal/bin respectively.
I set a custom LEDGER_FILE, but hledger is still using the default file 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 LEDGER_FILE should be a real environment variable, not just a shell
variable. The command env | grep LEDGER_FILE should show it. You may variable. The command env | grep LEDGER_FILE should show it. You may
need to use export. Here's an explanation. 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 character" errors
In order to handle non-ascii letters and symbols (like ), hledger needs In order to handle non-ascii letters and symbols (like ), hledger needs
an appropriate locale. This is usually configured system-wide; you can an appropriate locale. This is usually configured system-wide; you can
also configure it temporarily. The locale may need to be one that sup- 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). I'm not sure yet).
Here's an example of setting the locale temporarily, on ubuntu 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 $ echo "export LANG=en_US.UTF-8" >>~/.bash_profile
$ bash --login $ 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: first:
$ apt-get install language-pack-fr $ apt-get install language-pack-fr
@ -2200,7 +2208,7 @@ TROUBLESHOOTING
REPORTING BUGS 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) or hledger mail list)
@ -2214,7 +2222,7 @@ COPYRIGHT
SEE ALSO 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- hledger_csv(5), hledger_journal(5), hledger_timeclock(5), hledger_time-
dot(5), ledger(1) 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)

View File

@ -1,5 +1,5 @@
name: hledger name: hledger
version: '1.10.99' version: '1.11'
synopsis: Command-line interface for the hledger accounting tool synopsis: Command-line interface for the hledger accounting tool
description: | description: |
This is hledger's command-line interface. This is hledger's command-line interface.
@ -78,7 +78,7 @@ ghc-options:
- -optP-Wno-nonportable-include-path - -optP-Wno-nonportable-include-path
dependencies: dependencies:
- hledger-lib >=1.10.99 && <1.11 - hledger-lib >=1.11 && <1.12
- ansi-terminal >=0.6.2.3 - ansi-terminal >=0.6.2.3
- base >=4.8 && <4.12 - base >=4.8 && <4.12
- base-compat-batteries >=0.10.1 && <0.11 - base-compat-batteries >=0.10.1 && <0.11
@ -121,7 +121,7 @@ when:
- terminfo - terminfo
library: library:
cpp-options: -DVERSION="1.10.99" cpp-options: -DVERSION="1.11"
exposed-modules: exposed-modules:
- Hledger.Cli - Hledger.Cli
- Hledger.Cli.Main - Hledger.Cli.Main
@ -163,7 +163,7 @@ executables:
hledger: hledger:
source-dirs: app source-dirs: app
main: hledger-cli.hs main: hledger-cli.hs
cpp-options: -DVERSION="1.10.99" cpp-options: -DVERSION="1.11"
when: when:
- condition: flag(threaded) - condition: flag(threaded)
ghc-options: -threaded ghc-options: -threaded
@ -174,7 +174,7 @@ tests:
test: test:
source-dirs: test source-dirs: test
main: test.hs main: test.hs
cpp-options: -DVERSION="1.10.99" cpp-options: -DVERSION="1.11"
dependencies: dependencies:
- hledger - hledger
- test-framework - test-framework

0
site/doc/1.11/.snapshot Normal file
View File

274
site/doc/1.11/csv.md Normal file
View 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.

View 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
View 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.

View 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

File diff suppressed because it is too large Load Diff

BIN
site/doc/1.11/images/.DS_Store vendored Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 318 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

1307
site/doc/1.11/journal.md Normal file

File diff suppressed because it is too large Load Diff

4980
site/doc/1.11/manual.md Normal file

File diff suppressed because it is too large Load Diff

View 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
View 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 -->
<!-- ``` -->

View File

@ -83,11 +83,11 @@ on GNU/linux, mac and freeBSD
Here's the quick, non-secure way to run it: 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: 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*\ **`less hledger-install.sh`** *# do security review*\
**`bash hledger-install.sh`** **`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: Now you should be able to run the hledger tools and see the expected versions. Eg:
```shell ```shell
$ hledger --version $ hledger --version
hledger 1.10 hledger 1.11
$ hledger-ui --version $ hledger-ui --version
hledger-ui 1.10 hledger-ui 1.11
$ hledger web --version $ hledger web --version
hledger-web 1.10 hledger-web 1.11
$ hledger iadd --version $ hledger iadd --version
This is hledger-iadd version 1.3.5 This is hledger-iadd version 1.3.6
``` ```
#### Need help ? #### 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). 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). 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.\ 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> <span class=warnings>([windows: hledger-ui is not available](https://github.com/jtdaugherty/vty/pull/1#issuecomment-297143444))</span>

View File

@ -224,21 +224,3 @@ a file format for human-friendly approximate time logging
</div> <!-- row --> </div> <!-- row -->
</div> <!-- container --> </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>

View File

@ -12,6 +12,7 @@ function addDocVersions() {
var newpage = page=='manual' ? page : topic; var newpage = page=='manual' ? page : topic;
$('.docversions').html('Available versions: \ $('.docversions').html('Available versions: \
<a href="/'+newpage+'.html'+(page=='manual' ? newhash : '')+'">dev</a> \ <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.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.9/'+newpage+'.html'+(page=='manual' ? newhash : '')+'">1.9</a> \
| <a href="/doc/1.5/'+newpage+'.html'+(page=='manual' ? newhash : '')+'">1.5</a> \ | <a href="/doc/1.5/'+newpage+'.html'+(page=='manual' ? newhash : '')+'">1.5</a> \

View File

@ -8,6 +8,7 @@ h4 { margin-top:2em; }
<ol> <ol>
<li><a href="#hledger-install">hledger-install</a> <li><a href="#hledger-install">hledger-install</a>
<!-- <li><a href="#latest-minor-release">Latest (2018/4/30)</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.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.9">hledger 1.9 (2018/3/31)</a>
<li><a href="#hledger-1.5">hledger 1.5 (2017/12/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 ## 2018/6/30 hledger 1.10
***hledger-web edit/upload/download and permissions, ***hledger-web edit/upload/download and permissions,

View File

@ -191,7 +191,7 @@ Balance Sheet 2017/01/01
>>>2 >>>2
>>>=0 >>>=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 hledger -f- balancesheet -YTA
<<< <<<
2017/1/1 2017/1/1