;doc: update embedded manuals

This commit is contained in:
Simon Michael 2025-09-03 20:22:46 +01:00
parent 8be3e85676
commit 82552b4ea8
13 changed files with 644 additions and 402 deletions

View File

@ -1,2 +1,2 @@
m4_dnl Date to show in man pages. Updated by "Shake manuals" m4_dnl Date to show in man pages. Updated by "Shake manuals"
m4_define({{_monthyear_}}, {{June 2025}})m4_dnl m4_define({{_monthyear_}}, {{September 2025}})m4_dnl

View File

@ -1,2 +1,2 @@
m4_dnl Date to show in man pages. Updated by "Shake manuals" m4_dnl Date to show in man pages. Updated by "Shake manuals"
m4_define({{_monthyear_}}, {{June 2025}})m4_dnl m4_define({{_monthyear_}}, {{September 2025}})m4_dnl

View File

@ -1,5 +1,5 @@
.TH "HLEDGER\-UI" "1" "June 2025" "hledger-ui-1.43.99 " "hledger User Manuals" .TH "HLEDGER\-UI" "1" "September 2025" "hledger-ui-1.50.99 " "hledger User Manuals"
@ -17,7 +17,7 @@ or
.PD .PD
\f[CR]hledger ui [OPTS] [QUERYARGS]\f[R] \f[CR]hledger ui [OPTS] [QUERYARGS]\f[R]
.SH DESCRIPTION .SH DESCRIPTION
This manual is for hledger\[aq]s terminal interface, version 1.43.99. This manual is for hledger\[aq]s terminal interface, version 1.50.99.
See also the hledger manual for common concepts and file formats. See also the hledger manual for common concepts and file formats.
.PP .PP
hledger is a robust, user\-friendly, cross\-platform set of programs for hledger is a robust, user\-friendly, cross\-platform set of programs for

View File

@ -18,7 +18,7 @@ plain text accounting app.
or or
'hledger ui [OPTS] [QUERYARGS]' 'hledger ui [OPTS] [QUERYARGS]'
This manual is for hledger's terminal interface, version 1.43.99. This manual is for hledger's terminal interface, version 1.50.99.
See also the hledger manual for common concepts and file formats. See also the hledger manual for common concepts and file formats.
hledger is a robust, user-friendly, cross-platform set of programs hledger is a robust, user-friendly, cross-platform set of programs

View File

@ -11,7 +11,7 @@ SYNOPSIS
hledger ui [OPTS] [QUERYARGS] hledger ui [OPTS] [QUERYARGS]
DESCRIPTION DESCRIPTION
This manual is for hledger's terminal interface, version 1.43.99. See This manual is for hledger's terminal interface, version 1.50.99. See
also the hledger manual for common concepts and file formats. also the hledger manual for common concepts and file formats.
hledger is a robust, user-friendly, cross-platform set of programs for hledger is a robust, user-friendly, cross-platform set of programs for
@ -471,4 +471,4 @@ LICENSE
SEE ALSO SEE ALSO
hledger(1), hledger-ui(1), hledger-web(1), ledger(1) hledger(1), hledger-ui(1), hledger-web(1), ledger(1)
hledger-ui-1.43.99 June 2025 HLEDGER-UI(1) hledger-ui-1.50.99 September 2025 HLEDGER-UI(1)

View File

@ -1,2 +1,2 @@
m4_dnl Date to show in man pages. Updated by "Shake manuals" m4_dnl Date to show in man pages. Updated by "Shake manuals"
m4_define({{_monthyear_}}, {{June 2025}})m4_dnl m4_define({{_monthyear_}}, {{September 2025}})m4_dnl

View File

@ -1,5 +1,5 @@
.TH "HLEDGER\-WEB" "1" "June 2025" "hledger-web-1.43.99 " "hledger User Manuals" .TH "HLEDGER\-WEB" "1" "September 2025" "hledger-web-1.50.99 " "hledger User Manuals"
@ -17,7 +17,7 @@ or
.PD .PD
\f[CR]hledger web [OPTS] [QUERY]\f[R] \f[CR]hledger web [OPTS] [QUERY]\f[R]
.SH DESCRIPTION .SH DESCRIPTION
This manual is for hledger\[aq]s web interface, version 1.43.99. This manual is for hledger\[aq]s web interface, version 1.50.99.
See also the hledger manual for common concepts and file formats. See also the hledger manual for common concepts and file formats.
.PP .PP
hledger is a robust, user\-friendly, cross\-platform set of programs for hledger is a robust, user\-friendly, cross\-platform set of programs for

View File

@ -18,7 +18,7 @@ plain text accounting app.
or or
'hledger web [OPTS] [QUERY]' 'hledger web [OPTS] [QUERY]'
This manual is for hledger's web interface, version 1.43.99. See This manual is for hledger's web interface, version 1.50.99. See
also the hledger manual for common concepts and file formats. also the hledger manual for common concepts and file formats.
hledger is a robust, user-friendly, cross-platform set of programs hledger is a robust, user-friendly, cross-platform set of programs

View File

@ -11,7 +11,7 @@ SYNOPSIS
hledger web [OPTS] [QUERY] hledger web [OPTS] [QUERY]
DESCRIPTION DESCRIPTION
This manual is for hledger's web interface, version 1.43.99. See also This manual is for hledger's web interface, version 1.50.99. See also
the hledger manual for common concepts and file formats. the hledger manual for common concepts and file formats.
hledger is a robust, user-friendly, cross-platform set of programs for hledger is a robust, user-friendly, cross-platform set of programs for
@ -480,4 +480,4 @@ LICENSE
SEE ALSO SEE ALSO
hledger(1), hledger-ui(1), hledger-web(1), ledger(1) hledger(1), hledger-ui(1), hledger-web(1), ledger(1)
hledger-web-1.43.99 June 2025 HLEDGER-WEB(1) hledger-web-1.50.99 September 2025 HLEDGER-WEB(1)

View File

@ -1,2 +1,2 @@
m4_dnl Date to show in man pages. Updated by "Shake manuals" m4_dnl Date to show in man pages. Updated by "Shake manuals"
m4_define({{_monthyear_}}, {{June 2025}})m4_dnl m4_define({{_monthyear_}}, {{September 2025}})m4_dnl

View File

@ -1,6 +1,6 @@
.\"t .\"t
.TH "HLEDGER" "1" "June 2025" "hledger-1.43.99 " "hledger User Manuals" .TH "HLEDGER" "1" "September 2025" "hledger-1.50.99 " "hledger User Manuals"
@ -28,7 +28,7 @@ hledger is inspired by and largely compatible with ledger(1), and
largely interconvertible with beancount(1). largely interconvertible with beancount(1).
.PP .PP
This manual is for hledger\[aq]s command line interface, version This manual is for hledger\[aq]s command line interface, version
1.43.99. 1.50.99.
It also describes the common options, file formats and concepts used by It also describes the common options, file formats and concepts used by
all hledger programs. all hledger programs.
It might accidentally teach you some bookkeeping/accounting as well! It might accidentally teach you some bookkeeping/accounting as well!
@ -4165,6 +4165,11 @@ T}@T{
optionally declare which file to read data from optionally declare which file to read data from
T} T}
T{ T{
\f[B]\f[CB]archive\f[B]\f[R]
T}@T{
optionally enable an archive of imported files
T}
T{
\f[B]\f[CB]encoding\f[B]\f[R] \f[B]\f[CB]encoding\f[B]\f[R]
T}@T{ T}@T{
optionally declare which text encoding the data has optionally declare which text encoding the data has
@ -4285,31 +4290,69 @@ All this enables a convenient workflow where can you just download CSV
files, then run \f[CR]hledger import rules/*\f[R]. files, then run \f[CR]hledger import rules/*\f[R].
.PP .PP
See also \[dq]Working with CSV > Reading files specified by rule\[dq]. See also \[dq]Working with CSV > Reading files specified by rule\[dq].
.SS Data cleaning / generating commands
After \f[CR]source\f[R]\[aq]s file pattern, you can write \f[CR]|\f[R]
(pipe) and a data cleaning command.
If hledger\[aq]s CSV rules aren\[aq]t enough, you can pre\-process the
downloaded data here with a shell command or script, to make it more
suitable for conversion.
The command will be executed by your default shell, in the directory of
the rules file, will receive the data file\[aq]s content as standard
input, and should output zero or more lines of
character\-separated\-values, suitable for conversion by the CSV rules.
.PP .PP
The \f[CR]archive\f[R] rule adds a few more features to Examples:
\f[CR]source\f[R]; see below. .IP
.EX
source ./paypal.json | paypalcsv
source data/simplefin.json | simplefincsv \- \[aq]chase.*card\[aq]
source OfxDownload*.csv | grep \-vE \[aq]\[ha](([\[ha],]*,){6}[\[ha],]*|)$\[aq] | sort \-t, \-n +2
source History_for_Account_Z20144832*.csv # | grep \-E \[aq]\[ha]([\[ha],]*,){12}[\[ha],]*$\[aq] | sed \-E \-e \[aq]s/\[ha] //\[aq] \-e \[aq]s/\[rs].([0\-9]),/.\[rs]10,/g\[aq] \-e \[aq]s/,([0\-9]+),/,\[rs]1.00,/g\[aq]
.EE
.PP
Or, after \f[CR]source\f[R] you can write \f[CR]|\f[R] and a data
generating command (with no file pattern before the \f[CR]|\f[R]).
This command receives no input, and should output zero or more lines of
character\-separated values, suitable for conversion by the CSV rules.
.PP
Examples:
.IP
.EX
source | paypaljson | paypalcsv
source | paypalcsv data/paypal.json
source | simplefinjson >data/simplefin.json && simplefincsv data/simplefin.json \[aq]chase.*card\[aq]
source | simplefincsv data/simplefin.json \[aq]unify.*checking\[aq]
.EE
.PP
(\f[CR]paypal*\f[R] and \f[CR]simplefin*\f[R] scripts are in bin/)
.PP
Whenever hledger runs one of these commands, it will echo the command on
stderr.
If the command produces error output, but exits successfully, hledger
will show the error output as a warning.
If the command fails, hledger will fail and show the error output in the
error message.
.PP
\f[I]Added in 1.50; experimental.\f[R]
.SS \f[CR]archive\f[R] .SS \f[CR]archive\f[R]
Adding the \f[CR]archive\f[R] rule to your rules file affects importing With \f[CR]archive\f[R] added to a rules file, the \f[CR]import\f[R]
or reading files specified by \f[CR]source\f[R]: command will archive each successfully processed data file or data
.IP \[bu] 2 command output in a nearby \f[CR]data/\f[R] directory.
After successfully importing, \f[CR]import\f[R] will move the data file The archive file name will be based on the rules file and the data
to an archive directory (\f[CR]data/\f[R] next to the rules file, file\[aq]s modification date and extension (or for a data\-generating
auto\-created), renamed to command, the current date and the \[dq].csv\[dq] extension).
\f[CR]RULESFILEBASENAME.DATAFILEMODDATE.DATAFILEEXT\f[R]. The original data file, if any, will be removed.
Archiving data files is optional, but it can be useful for .PP
troubleshooting, detecting variations in your banks\[aq] CSV data, Also, in this mode \f[CR]import\f[R] will prefer the oldest file matched
regenerating entries with improved rules, etc. by the \f[CR]source\f[R] rule\[aq]s glob pattern, not the newest.
.IP \[bu] 2 (So if there are multiple downloads, they will be imported and archived
\f[CR]import\f[R] will pick the oldest of \f[CR]source\f[R] glob oldest first.)
matches, rather than the newest. .PP
So if you have multiple versions of a download, repeated imports will Archiving is optional, but it can be useful for troubleshooting your CSV
process them in chronological order. rules, regenerating entries with improved rules, checking for variations
.IP \[bu] 2 in your bank\[aq]s CSV, etc.
For commands other than \f[CR]import\f[R], when the \f[CR]source\f[R] .PP
path or glob pattern matches no files, hledger will try to read the \f[I]Added in 1.50; experimental.\f[R]
latest archived data file instead.
This is convenient for working with the downloaded data again, even
after it has been imported.
.SS \f[CR]encoding\f[R] .SS \f[CR]encoding\f[R]
.IP .IP
.EX .EX
@ -5515,7 +5558,6 @@ This is all done by the CSV reader, one of several readers hledger can
use to read transactions from an input file. use to read transactions from an input file.
When all input files have been read successfully, their transactions are When all input files have been read successfully, their transactions are
passed to whichever hledger command the user specified. passed to whichever hledger command the user specified.
.PP
.SS Well factored rules .SS Well factored rules
Some things than can help reduce duplication and complexity in rules Some things than can help reduce duplication and complexity in rules
files: files:
@ -5823,19 +5865,75 @@ $ hledger \-f paypal\-custom.csv print
revenues:foss donations:darcshub $\-10.00 ; business: revenues:foss donations:darcshub $\-10.00 ; business:
expenses:banking:paypal $0.59 ; business: expenses:banking:paypal $0.59 ; business:
.EE .EE
.SH Timeclock
The time logging format of timeclock.el, as read by hledger.
.PP .PP
hledger can read time logs in timeclock format. .SH Timeclock
As with Ledger, these are (a subset of) timeclock.el\[aq]s format, hledger can read time logs in the timeclock time logging format of
containing clock\-in and clock\-out entries as in the example below. timeclock.el.
The date is a simple date. As with Ledger, hledger\[aq]s timeclock format is a subset/variant of
The time format is HH:MM[:SS][+\-ZZZZ]. timeclock.el\[aq]s.
Seconds and timezone are optional. .PP
The timezone, if present, must be four digits and is ignored (currently hledger\[aq]s timeclock format was updated in hledger 1.43 and 1.50.
the time is always interpreted as a local time). If your old time logs are rejected, you should adapt them to modern
Lines beginning with \f[CR]#\f[R] or \f[CR];\f[R] or \f[CR]*\f[R], and hledger; for now, you can restore the pre\-1.43 behaviour with the
blank lines, are ignored. \f[CR]\-\-old\-timeclock\f[R] flag.
.PP
Here the timeclock format in hledger 1.50+:
.IP
.EX
# Comment lines like these, and blank lines, are ignored:
# comment line
; comment line
* comment line
# Lines beginning with b, h, or capital O are also ignored, for compatibility:
b SIMPLEDATE HH:MM[:SS][+\-ZZZZ][ TEXT]
h SIMPLEDATE HH:MM[:SS][+\-ZZZZ][ TEXT]
O SIMPLEDATE HH:MM[:SS][+\-ZZZZ][ TEXT]
# Lines beginning with i or o are are clock\-in / clock\-out entries:
i SIMPLEDATE HH:MM[:SS][+\-ZZZZ] ACCOUNT[ DESCRIPTION][;COMMENT]]
o SIMPLEDATE HH:MM[:SS][+\-ZZZZ][ ACCOUNT][;COMMENT]
.EE
.PP
The date is a hledger simple date (YYYY\-MM\-DD or similar).
The time parts must use two digits.
The seconds are optional.
A + or \- four\-digit time zone is accepted for compatibility, but
currently ignored; times are always interpreted as a local time.
.PP
In clock\-in entries (\f[CR]i\f[R]), the account name is required.
A transaction description, separated from the account name by 2+ spaces,
is optional.
A transaction comment, beginning with \f[CR];\f[R], is also optional.
(Indented following comment lines are also allowed, as in journal
format.)
.PP
In clock\-out entries (\f[CR]o\f[R]) have no description, but can have a
comment if you wish.
A clock\-in and clock\-out pair form a \[dq]transaction\[dq] posting
some number of hours to an account \- also known as a session.
Eg:
.IP
.EX
i 2015/03/30 09:00:00 session1
o 2015/03/30 10:00:00
.EE
.IP
.EX
$ hledger \-f a.timeclock print
2015\-03\-30 * 09:00\-10:00
(session1) 1.00h
.EE
.PP
Clock\-ins and clock\-outs are matched by their account/session name.
If a clock\-out does not specify a name, the most recent unclosed
clock\-in is closed.
You can have multiple sessions active simultaneously.
Entries are processed in the order they are parsed.
Sessions spanning more than one day are automatically split at day
boundaries.
.PP
Eg, the following time log:
.IP .IP
.EX .EX
i 2015/03/30 09:00:00 some account optional description after 2 spaces ; optional comment, tags: i 2015/03/30 09:00:00 some account optional description after 2 spaces ; optional comment, tags:
@ -5848,16 +5946,7 @@ o 2015/04/02 14:00:00
o 2015/04/02 15:00:00 another:account o 2015/04/02 15:00:00 another:account
.EE .EE
.PP .PP
hledger treats each clock\-in/clock\-out pair as a transaction posting generates these transactions:
some number of hours to an account.
Entries are paired by the account name if the same name is given for a
clock\-in/clock\-out pair.
If no name is given for a clock\-out, then it is paired with the most
recent clock\-in entry.
If the session spans more than one day, it is split into several
transactions, one for each day.
For the above time log, \f[CR]hledger print\f[R] generates these journal
entries:
.IP .IP
.EX .EX
$ hledger \-f t.timeclock print $ hledger \-f t.timeclock print
@ -7818,10 +7907,10 @@ More specifically:
For single period reports (including normal print and register reports): For single period reports (including normal print and register reports):
.RS 2 .RS 2
.IP \[bu] 2 .IP \[bu] 2
If an explicit report end date is specified, that is used If an explicit report end date is specified, that is used.
.IP \[bu] 2 .IP \[bu] 2
Otherwise the latest transaction date or P directive date is used (even Otherwise the latest transaction date or non\-future P directive date is
if it\[aq]s in the future) used.
.RE .RE
.IP \[bu] 2 .IP \[bu] 2
For multiperiod reports, each period is valued on its last day. For multiperiod reports, each period is valued on its last day.
@ -7829,8 +7918,6 @@ For multiperiod reports, each period is valued on its last day.
This can be customised with the \-\-value option described below, which This can be customised with the \-\-value option described below, which
can select either \[dq]then\[dq], \[dq]end\[dq], \[dq]now\[dq], or can select either \[dq]then\[dq], \[dq]end\[dq], \[dq]now\[dq], or
\[dq]custom\[dq] dates. \[dq]custom\[dq] dates.
(Note, this has a bug in hledger\-ui <=1.31: turning on valuation with
the \f[CR]V\f[R] key always resets it to \[dq]end\[dq].)
.SS Finding market price .SS Finding market price
To convert a commodity A to its market value in another commodity B, To convert a commodity A to its market value in another commodity B,
hledger looks for a suitable market price (exchange rate) as follows, in hledger looks for a suitable market price (exchange rate) as follows, in

View File

@ -24,7 +24,7 @@ accounting and a simple, editable file format. hledger is inspired by
and largely compatible with ledger(1), and largely interconvertible with and largely compatible with ledger(1), and largely interconvertible with
beancount(1). beancount(1).
This manual is for hledger's command line interface, version 1.43.99. This manual is for hledger's command line interface, version 1.50.99.
It also describes the common options, file formats and concepts used by It also describes the common options, file formats and concepts used by
all hledger programs. It might accidentally teach you some all hledger programs. It might accidentally teach you some
bookkeeping/accounting as well! You don't need to know everything in bookkeeping/accounting as well! You don't need to know everything in
@ -4143,6 +4143,7 @@ The following kinds of rule can appear in the rules file, in any order.
*'source'* optionally declare which file to read data *'source'* optionally declare which file to read data
from from
*'archive'* optionally enable an archive of imported files
*'encoding'* optionally declare which text encoding the *'encoding'* optionally declare which text encoding the
data has data has
*'separator'* declare the field separator, instead of *'separator'* declare the field separator, instead of
@ -4215,7 +4216,53 @@ CSV files, then run 'hledger import rules/*'.
See also "Working with CSV > Reading files specified by rule". See also "Working with CSV > Reading files specified by rule".
The 'archive' rule adds a few more features to 'source'; see below. * Menu:
* Data cleaning / generating commands::

File: hledger.info, Node: Data cleaning / generating commands, Up: source
9.2.1 Data cleaning / generating commands
-----------------------------------------
After 'source''s file pattern, you can write '|' (pipe) and a data
cleaning command. If hledger's CSV rules aren't enough, you can
pre-process the downloaded data here with a shell command or script, to
make it more suitable for conversion. The command will be executed by
your default shell, in the directory of the rules file, will receive the
data file's content as standard input, and should output zero or more
lines of character-separated-values, suitable for conversion by the CSV
rules.
Examples:
source ./paypal.json | paypalcsv
source data/simplefin.json | simplefincsv - 'chase.*card'
source OfxDownload*.csv | grep -vE '^(([^,]*,){6}[^,]*|)$' | sort -t, -n +2
source History_for_Account_Z20144832*.csv # | grep -E '^([^,]*,){12}[^,]*$' | sed -E -e 's/^ //' -e 's/\.([0-9]),/.\10,/g' -e 's/,([0-9]+),/,\1.00,/g'
Or, after 'source' you can write '|' and a data generating command
(with no file pattern before the '|'). This command receives no input,
and should output zero or more lines of character-separated values,
suitable for conversion by the CSV rules.
Examples:
source | paypaljson | paypalcsv
source | paypalcsv data/paypal.json
source | simplefinjson >data/simplefin.json && simplefincsv data/simplefin.json 'chase.*card'
source | simplefincsv data/simplefin.json 'unify.*checking'
('paypal*' and 'simplefin*' scripts are in bin/)
Whenever hledger runs one of these commands, it will echo the command
on stderr. If the command produces error output, but exits
successfully, hledger will show the error output as a warning. If the
command fails, hledger will fail and show the error output in the error
message.
_Added in 1.50; experimental._
 
File: hledger.info, Node: archive, Next: encoding, Prev: source, Up: CSV File: hledger.info, Node: archive, Next: encoding, Prev: source, Up: CSV
@ -4223,25 +4270,22 @@ File: hledger.info, Node: archive, Next: encoding, Prev: source, Up: CSV
9.3 'archive' 9.3 'archive'
============= =============
Adding the 'archive' rule to your rules file affects importing or With 'archive' added to a rules file, the 'import' command will archive
reading files specified by 'source': each successfully processed data file or data command output in a nearby
'data/' directory. The archive file name will be based on the rules
file and the data file's modification date and extension (or for a
data-generating command, the current date and the ".csv" extension).
The original data file, if any, will be removed.
* After successfully importing, 'import' will move the data file to Also, in this mode 'import' will prefer the oldest file matched by
an archive directory ('data/' next to the rules file, the 'source' rule's glob pattern, not the newest. (So if there are
auto-created), renamed to multiple downloads, they will be imported and archived oldest first.)
'RULESFILEBASENAME.DATAFILEMODDATE.DATAFILEEXT'. Archiving data
files is optional, but it can be useful for troubleshooting,
detecting variations in your banks' CSV data, regenerating entries
with improved rules, etc.
* 'import' will pick the oldest of 'source' glob matches, rather than Archiving is optional, but it can be useful for troubleshooting your
the newest. So if you have multiple versions of a download, CSV rules, regenerating entries with improved rules, checking for
repeated imports will process them in chronological order. variations in your bank's CSV, etc.
* For commands other than 'import', when the 'source' path or glob _Added in 1.50; experimental._
pattern matches no files, hledger will try to read the latest
archived data file instead. This is convenient for working with
the downloaded data again, even after it has been imported.
 
File: hledger.info, Node: encoding, Next: separator, Prev: archive, Up: CSV File: hledger.info, Node: encoding, Next: separator, Prev: archive, Up: CSV
@ -5770,15 +5814,62 @@ File: hledger.info, Node: Timeclock, Next: Timedot, Prev: CSV, Up: Top
10 Timeclock 10 Timeclock
************ ************
The time logging format of timeclock.el, as read by hledger. hledger can read time logs in the timeclock time logging format of
timeclock.el. As with Ledger, hledger's timeclock format is a
subset/variant of timeclock.el's.
hledger can read time logs in timeclock format. As with Ledger, hledger's timeclock format was updated in hledger 1.43 and 1.50. If
these are (a subset of) timeclock.el's format, containing clock-in and your old time logs are rejected, you should adapt them to modern
clock-out entries as in the example below. The date is a simple date. hledger; for now, you can restore the pre-1.43 behaviour with the
The time format is HH:MM[:SS][+-ZZZZ]. Seconds and timezone are '--old-timeclock' flag.
optional. The timezone, if present, must be four digits and is ignored
(currently the time is always interpreted as a local time). Lines Here the timeclock format in hledger 1.50+:
beginning with '#' or ';' or '*', and blank lines, are ignored.
# Comment lines like these, and blank lines, are ignored:
# comment line
; comment line
* comment line
# Lines beginning with b, h, or capital O are also ignored, for compatibility:
b SIMPLEDATE HH:MM[:SS][+-ZZZZ][ TEXT]
h SIMPLEDATE HH:MM[:SS][+-ZZZZ][ TEXT]
O SIMPLEDATE HH:MM[:SS][+-ZZZZ][ TEXT]
# Lines beginning with i or o are are clock-in / clock-out entries:
i SIMPLEDATE HH:MM[:SS][+-ZZZZ] ACCOUNT[ DESCRIPTION][;COMMENT]]
o SIMPLEDATE HH:MM[:SS][+-ZZZZ][ ACCOUNT][;COMMENT]
The date is a hledger simple date (YYYY-MM-DD or similar). The time
parts must use two digits. The seconds are optional. A + or -
four-digit time zone is accepted for compatibility, but currently
ignored; times are always interpreted as a local time.
In clock-in entries ('i'), the account name is required. A
transaction description, separated from the account name by 2+ spaces,
is optional. A transaction comment, beginning with ';', is also
optional. (Indented following comment lines are also allowed, as in
journal format.)
In clock-out entries ('o') have no description, but can have a
comment if you wish. A clock-in and clock-out pair form a "transaction"
posting some number of hours to an account - also known as a session.
Eg:
i 2015/03/30 09:00:00 session1
o 2015/03/30 10:00:00
$ hledger -f a.timeclock print
2015-03-30 * 09:00-10:00
(session1) 1.00h
Clock-ins and clock-outs are matched by their account/session name.
If a clock-out does not specify a name, the most recent unclosed
clock-in is closed. You can have multiple sessions active
simultaneously. Entries are processed in the order they are parsed.
Sessions spanning more than one day are automatically split at day
boundaries.
Eg, the following time log:
i 2015/03/30 09:00:00 some account optional description after 2 spaces ; optional comment, tags: i 2015/03/30 09:00:00 some account optional description after 2 spaces ; optional comment, tags:
o 2015/03/30 09:20:00 o 2015/03/30 09:20:00
@ -5789,13 +5880,7 @@ i 2015/04/02 13:00:00 some account
o 2015/04/02 14:00:00 o 2015/04/02 14:00:00
o 2015/04/02 15:00:00 another:account o 2015/04/02 15:00:00 another:account
hledger treats each clock-in/clock-out pair as a transaction posting generates these transactions:
some number of hours to an account. Entries are paired by the account
name if the same name is given for a clock-in/clock-out pair. If no
name is given for a clock-out, then it is paired with the most recent
clock-in entry. 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:
$ hledger -f t.timeclock print $ hledger -f t.timeclock print
2015-03-30 * optional description after 2 spaces ; optional comment, tags: 2015-03-30 * optional description after 2 spaces ; optional comment, tags:
@ -7694,16 +7779,14 @@ hledger uses "end" dates for valuation. More specifically:
* For single period reports (including normal print and register * For single period reports (including normal print and register
reports): reports):
* If an explicit report end date is specified, that is used * If an explicit report end date is specified, that is used.
* Otherwise the latest transaction date or P directive date is * Otherwise the latest transaction date or non-future P
used (even if it's in the future) directive date is used.
* For multiperiod reports, each period is valued on its last day. * For multiperiod reports, each period is valued on its last day.
This can be customised with the -value option described below, which This can be customised with the -value option described below, which
can select either "then", "end", "now", or "custom" dates. (Note, this can select either "then", "end", "now", or "custom" dates.
has a bug in hledger-ui <=1.31: turning on valuation with the 'V' key
always resets it to "end".)
 
File: hledger.info, Node: Finding market price, Next: --infer-market-prices market prices from transactions, Prev: Valuation date, Up: Value reporting File: hledger.info, Node: Finding market price, Next: --infer-market-prices market prices from transactions, Prev: Valuation date, Up: Value reporting
@ -13099,263 +13182,264 @@ Node: Other Ledger directives149795
Node: Other cost/lot notations150557 Node: Other cost/lot notations150557
Node: CSV153398 Node: CSV153398
Node: CSV rules cheatsheet155564 Node: CSV rules cheatsheet155564
Node: source157591 Node: source157663
Node: archive159012 Node: Data cleaning / generating commands159062
Node: encoding160103 Node: archive160924
Node: separator161146 Node: encoding161852
Node: skip161799 Node: separator162895
Node: date-format162449 Node: skip163548
Node: timezone163394 Node: date-format164198
Node: newest-first164520 Node: timezone165143
Node: intra-day-reversed165233 Node: newest-first166269
Node: decimal-mark165835 Node: intra-day-reversed166982
Node: fields list166315 Node: decimal-mark167584
Node: Field assignment168123 Node: fields list168064
Node: Field names169342 Node: Field assignment169872
Node: date field170674 Node: Field names171091
Node: date2 field170838 Node: date field172423
Node: status field171033 Node: date2 field172587
Node: code field171223 Node: status field172782
Node: description field171411 Node: code field172972
Node: comment field171628 Node: description field173160
Node: account field172185 Node: comment field173377
Node: amount field172903 Node: account field173934
Node: currency field175742 Node: amount field174652
Node: balance field176150 Node: currency field177491
Node: if block176673 Node: balance field177899
Node: Matchers178200 Node: if block178422
Node: Multiple matchers180190 Node: Matchers179949
Node: Match groups180998 Node: Multiple matchers181939
Node: if table181891 Node: Match groups182747
Node: balance-type183954 Node: if table183640
Node: include184781 Node: balance-type185703
Node: Working with CSV185350 Node: include186530
Node: Rapid feedback185902 Node: Working with CSV187099
Node: Valid CSV186485 Node: Rapid feedback187651
Node: File Extension187361 Node: Valid CSV188234
Node: Reading CSV from standard input188096 Node: File Extension189110
Node: Reading multiple CSV files188482 Node: Reading CSV from standard input189845
Node: Reading files specified by rule188958 Node: Reading multiple CSV files190231
Node: Valid transactions190355 Node: Reading files specified by rule190707
Node: Deduplicating importing191180 Node: Valid transactions192104
Node: Setting amounts192409 Node: Deduplicating importing192929
Node: Amount signs194936 Node: Setting amounts194158
Node: Setting currency/commodity196001 Node: Amount signs196685
Node: Amount decimal places197377 Node: Setting currency/commodity197750
Node: Referencing other fields198634 Node: Amount decimal places199126
Node: How CSV rules are evaluated199742 Node: Referencing other fields200383
Node: Well factored rules202459 Node: How CSV rules are evaluated201491
Node: CSV rules examples202949 Node: Well factored rules204208
Node: Bank of Ireland203147 Node: CSV rules examples204698
Node: Coinbase204744 Node: Bank of Ireland204896
Node: Amazon205927 Node: Coinbase206493
Node: Paypal207769 Node: Amazon207676
Node: Timeclock215519 Node: Paypal209518
Node: Timedot218344 Node: Timeclock217268
Node: Timedot examples221821 Node: Timedot221321
Node: PART 3 REPORTING CONCEPTS224098 Node: Timedot examples224798
Node: Time periods224262 Node: PART 3 REPORTING CONCEPTS227075
Node: Report start & end date224535 Node: Time periods227239
Node: Smart dates226011 Node: Report start & end date227512
Node: Report intervals228134 Node: Smart dates228988
Node: Date adjustments228708 Node: Report intervals231111
Node: Start date adjustment228928 Node: Date adjustments231685
Node: End date adjustment229831 Node: Start date adjustment231905
Node: Period headings230612 Node: End date adjustment232808
Node: Period expressions231545 Node: Period headings233589
Node: Period expressions with a report interval233450 Node: Period expressions234522
Node: More complex report intervals233898 Node: Period expressions with a report interval236427
Node: Multiple weekday intervals236014 Node: More complex report intervals236875
Node: Depth237025 Node: Multiple weekday intervals238991
Node: Queries238863 Node: Depth240002
Node: Query types241535 Node: Queries241840
Node: acct query241910 Node: Query types244512
Node: amt query242221 Node: acct query244887
Node: code query242918 Node: amt query245198
Node: cur query243113 Node: code query245895
Node: desc query243719 Node: cur query246090
Node: date query243902 Node: desc query246696
Node: date2 query244298 Node: date query246879
Node: depth query244589 Node: date2 query247275
Node: note query244925 Node: depth query247566
Node: payee query245191 Node: note query247902
Node: real query245472 Node: payee query248168
Node: status query245677 Node: real query248449
Node: type query245917 Node: status query248654
Node: tag query246450 Node: type query248894
Node: Negative queries247079 Node: tag query249427
Node: not query247261 Node: Negative queries250056
Node: Space-separated queries247548 Node: not query250238
Node: Boolean queries248236 Node: Space-separated queries250525
Node: expr query249554 Node: Boolean queries251213
Node: any query250234 Node: expr query252531
Node: all query250687 Node: any query253211
Node: Queries and command options251269 Node: all query253664
Node: Queries and account aliases251717 Node: Queries and command options254246
Node: Queries and valuation252042 Node: Queries and account aliases254694
Node: Pivoting252404 Node: Queries and valuation255019
Node: Generating data254680 Node: Pivoting255381
Node: Forecasting256480 Node: Generating data257657
Node: --forecast257136 Node: Forecasting259457
Node: Inspecting forecast transactions258237 Node: --forecast260113
Node: Forecast reports259570 Node: Inspecting forecast transactions261214
Node: Forecast tags260679 Node: Forecast reports262547
Node: Forecast period in detail261299 Node: Forecast tags263656
Node: Forecast troubleshooting262387 Node: Forecast period in detail264276
Node: Budgeting263458 Node: Forecast troubleshooting265364
Node: Amount formatting264018 Node: Budgeting266435
Node: Commodity display style264262 Node: Amount formatting266995
Node: Rounding266103 Node: Commodity display style267239
Node: Trailing decimal marks266708 Node: Rounding269080
Node: Amount parseability267641 Node: Trailing decimal marks269685
Node: Cost reporting269250 Node: Amount parseability270618
Node: Recording costs270081 Node: Cost reporting272227
Node: Reporting at cost271808 Node: Recording costs273058
Node: Equity conversion postings272573 Node: Reporting at cost274785
Node: Inferring equity conversion postings275218 Node: Equity conversion postings275550
Node: Combining costs and equity conversion postings276360 Node: Inferring equity conversion postings278195
Node: Requirements for detecting equity conversion postings277585 Node: Combining costs and equity conversion postings279337
Node: Infer cost and equity by default ?279107 Node: Requirements for detecting equity conversion postings280562
Node: Value reporting279544 Node: Infer cost and equity by default ?282084
Node: -V Value280480 Node: Value reporting282521
Node: -X Value in specified commodity280807 Node: -V Value283457
Node: Valuation date281157 Node: -X Value in specified commodity283784
Node: Finding market price282117 Node: Valuation date284134
Node: --infer-market-prices market prices from transactions283497 Node: Finding market price284967
Node: Valuation commodity286541 Node: --infer-market-prices market prices from transactions286347
Node: --value Flexible valuation287974 Node: Valuation commodity289391
Node: Valuation examples289817 Node: --value Flexible valuation290824
Node: Interaction of valuation and queries291961 Node: Valuation examples292667
Node: Effect of valuation on reports292678 Node: Interaction of valuation and queries294811
Node: PART 4 COMMANDS300576 Node: Effect of valuation on reports295528
Node: Help commands303365 Node: PART 4 COMMANDS303426
Node: commands303551 Node: Help commands306215
Node: demo303759 Node: commands306401
Node: help304852 Node: demo306609
Node: User interface commands306557 Node: help307702
Node: repl306768 Node: User interface commands309407
Node: Examples309032 Node: repl309618
Node: run309590 Node: Examples311882
Node: Examples 2312005 Node: run312440
Node: ui313029 Node: Examples 2314855
Node: web313166 Node: ui315879
Node: Data entry commands313294 Node: web316016
Node: add313555 Node: Data entry commands316144
Node: add and balance assertions316129 Node: add316405
Node: add and balance assignments316853 Node: add and balance assertions318979
Node: import317414 Node: add and balance assignments319703
Node: Import dry run318493 Node: import320264
Node: Overlap detection319441 Node: Import dry run321343
Node: First import322327 Node: Overlap detection322291
Node: Importing balance assignments323522 Node: First import325177
Node: Import and commodity styles324577 Node: Importing balance assignments326372
Node: Import archiving325011 Node: Import and commodity styles327427
Node: Import special cases325836 Node: Import archiving327861
Node: Deduplication326054 Node: Import special cases328686
Node: Varying file name326545 Node: Deduplication328904
Node: Multiple versions326929 Node: Varying file name329395
Node: Basic report commands328036 Node: Multiple versions329779
Node: accounts328337 Node: Basic report commands330886
Node: codes330983 Node: accounts331187
Node: commodities332005 Node: codes333833
Node: descriptions332762 Node: commodities334855
Node: files333222 Node: descriptions335612
Node: notes333519 Node: files336072
Node: payees334031 Node: notes336369
Node: prices334943 Node: payees336881
Node: stats335835 Node: prices337793
Node: tags337576 Node: stats338685
Node: Standard report commands339113 Node: tags340426
Node: print339418 Node: Standard report commands341963
Node: print explicitness342232 Node: print342268
Node: print amount style343152 Node: print explicitness345082
Node: print parseability344390 Node: print amount style346002
Node: print other features345309 Node: print parseability347240
Node: print output format346270 Node: print other features348159
Node: aregister349555 Node: print output format349120
Node: aregister and posting dates354119 Node: aregister352405
Node: register355020 Node: aregister and posting dates356969
Node: Custom register output362261 Node: register357870
Node: balancesheet363446 Node: Custom register output365111
Node: balancesheetequity368411 Node: balancesheet366296
Node: cashflow373746 Node: balancesheetequity371261
Node: incomestatement378559 Node: cashflow376596
Node: Advanced report commands383408 Node: incomestatement381409
Node: balance383616 Node: Advanced report commands386258
Node: balance features389037 Node: balance386466
Node: Simple balance report391140 Node: balance features391887
Node: Balance report line format392950 Node: Simple balance report393990
Node: Filtered balance report395310 Node: Balance report line format395800
Node: List or tree mode395829 Node: Filtered balance report398160
Node: Depth limiting397342 Node: List or tree mode398679
Node: Dropping top-level accounts398109 Node: Depth limiting400192
Node: Showing declared accounts398619 Node: Dropping top-level accounts400959
Node: Sorting by amount399349 Node: Showing declared accounts401469
Node: Percentages400203 Node: Sorting by amount402199
Node: Multi-period balance report400910 Node: Percentages403053
Node: Balance change end balance403662 Node: Multi-period balance report403760
Node: Balance report modes405299 Node: Balance change end balance406512
Node: Calculation mode405978 Node: Balance report modes408149
Node: Accumulation mode406682 Node: Calculation mode408828
Node: Valuation mode407783 Node: Accumulation mode409532
Node: Combining balance report modes409127 Node: Valuation mode410633
Node: Budget report411157 Node: Combining balance report modes411977
Node: Using the budget report413457 Node: Budget report414007
Node: Budget date surprises415733 Node: Using the budget report416307
Node: Selecting budget goals417097 Node: Budget date surprises418583
Node: Budgeting vs forecasting418045 Node: Selecting budget goals419947
Node: Balance report layout419722 Node: Budgeting vs forecasting420895
Node: Wide layout420927 Node: Balance report layout422572
Node: Tall layout423332 Node: Wide layout423777
Node: Bare layout424638 Node: Tall layout426182
Node: Tidy layout426702 Node: Bare layout427488
Node: Balance report output428246 Node: Tidy layout429552
Node: Some useful balance reports429020 Node: Balance report output431096
Node: roi430280 Node: Some useful balance reports431870
Node: Spaces and special characters in --inv and --pnl432527 Node: roi433130
Node: Semantics of --inv and --pnl433253 Node: Spaces and special characters in --inv and --pnl435377
Node: IRR and TWR explained435340 Node: Semantics of --inv and --pnl436103
Node: Chart commands438751 Node: IRR and TWR explained438190
Node: activity438932 Node: Chart commands441601
Node: Data generation commands439429 Node: activity441782
Node: close439635 Node: Data generation commands442279
Node: close --clopen442198 Node: close442485
Node: close --close444372 Node: close --clopen445048
Node: close --open444896 Node: close --close447222
Node: close --assert445146 Node: close --open447746
Node: close --assign445473 Node: close --assert447996
Node: close --retain446152 Node: close --assign448323
Node: close customisation447009 Node: close --retain449002
Node: close and balance assertions448653 Node: close customisation449859
Node: close examples450175 Node: close and balance assertions451503
Node: Retain earnings450412 Node: close examples453025
Node: Migrate balances to a new file450915 Node: Retain earnings453262
Node: More detailed close examples452277 Node: Migrate balances to a new file453765
Node: rewrite452499 Node: More detailed close examples455127
Node: Re-write rules in a file455059 Node: rewrite455349
Node: Diff output format456360 Node: Re-write rules in a file457909
Node: rewrite vs print --auto457630 Node: Diff output format459210
Node: Maintenance commands458344 Node: rewrite vs print --auto460480
Node: check458563 Node: Maintenance commands461194
Node: Basic checks459645 Node: check461413
Node: Strict checks460666 Node: Basic checks462495
Node: Other checks461603 Node: Strict checks463516
Node: Custom checks463355 Node: Other checks464453
Node: diff463810 Node: Custom checks466205
Node: setup465018 Node: diff466660
Node: test467885 Node: setup467868
Node: PART 5 COMMON TASKS468788 Node: test470735
Node: Getting help469021 Node: PART 5 COMMON TASKS471638
Node: Constructing command lines469930 Node: Getting help471871
Node: Starting a journal file470775 Node: Constructing command lines472780
Node: Setting LEDGER_FILE472159 Node: Starting a journal file473625
Node: Setting opening balances473417 Node: Setting LEDGER_FILE475009
Node: Recording transactions476739 Node: Setting opening balances476267
Node: Reconciling477464 Node: Recording transactions479589
Node: Reporting479853 Node: Reconciling480314
Node: Migrating to a new file483967 Node: Reporting482703
Node: BUGS484416 Node: Migrating to a new file486817
Node: Troubleshooting485129 Node: BUGS487266
Node: Troubleshooting487979
 
End Tag Table End Tag Table

View File

@ -16,7 +16,7 @@ DESCRIPTION
and largely compatible with ledger(1), and largely interconvertible and largely compatible with ledger(1), and largely interconvertible
with beancount(1). with beancount(1).
This manual is for hledger's command line interface, version 1.43.99. This manual is for hledger's command line interface, version 1.50.99.
It also describes the common options, file formats and concepts used by It also describes the common options, file formats and concepts used by
all hledger programs. It might accidentally teach you some bookkeep- all hledger programs. It might accidentally teach you some bookkeep-
ing/accounting as well! You don't need to know everything in here to ing/accounting as well! You don't need to know everything in here to
@ -3254,6 +3254,7 @@ CSV
source optionally declare which file to read data source optionally declare which file to read data
from from
archive optionally enable an archive of imported files
encoding optionally declare which text encoding the encoding optionally declare which text encoding the
data has data has
separator declare the field separator, instead of rely- separator declare the field separator, instead of rely-
@ -3318,27 +3319,61 @@ CSV
See also "Working with CSV > Reading files specified by rule". See also "Working with CSV > Reading files specified by rule".
The archive rule adds a few more features to source; see below. Data cleaning / generating commands
After source's file pattern, you can write | (pipe) and a data cleaning
command. If hledger's CSV rules aren't enough, you can pre-process the
downloaded data here with a shell command or script, to make it more
suitable for conversion. The command will be executed by your default
shell, in the directory of the rules file, will receive the data file's
content as standard input, and should output zero or more lines of
character-separated-values, suitable for conversion by the CSV rules.
Examples:
source ./paypal.json | paypalcsv
source data/simplefin.json | simplefincsv - 'chase.*card'
source OfxDownload*.csv | grep -vE '^(([^,]*,){6}[^,]*|)$' | sort -t, -n +2
source History_for_Account_Z20144832*.csv # | grep -E '^([^,]*,){12}[^,]*$' | sed -E -e 's/^ //' -e 's/\.([0-9]),/.\10,/g' -e 's/,([0-9]+),/,\1.00,/g'
Or, after source you can write | and a data generating command (with no
file pattern before the |). This command receives no input, and should
output zero or more lines of character-separated values, suitable for
conversion by the CSV rules.
Examples:
source | paypaljson | paypalcsv
source | paypalcsv data/paypal.json
source | simplefinjson >data/simplefin.json && simplefincsv data/simplefin.json 'chase.*card'
source | simplefincsv data/simplefin.json 'unify.*checking'
(paypal* and simplefin* scripts are in bin/)
Whenever hledger runs one of these commands, it will echo the command
on stderr. If the command produces error output, but exits success-
fully, hledger will show the error output as a warning. If the command
fails, hledger will fail and show the error output in the error mes-
sage.
Added in 1.50; experimental.
archive archive
Adding the archive rule to your rules file affects importing or reading With archive added to a rules file, the import command will archive
files specified by source: each successfully processed data file or data command output in a
nearby data/ directory. The archive file name will be based on the
rules file and the data file's modification date and extension (or for
a data-generating command, the current date and the ".csv" extension).
The original data file, if any, will be removed.
o After successfully importing, import will move the data file to an Also, in this mode import will prefer the oldest file matched by the
archive directory (data/ next to the rules file, auto-created), re- source rule's glob pattern, not the newest. (So if there are multiple
named to RULESFILEBASENAME.DATAFILEMODDATE.DATAFILEEXT. Archiving downloads, they will be imported and archived oldest first.)
data files is optional, but it can be useful for troubleshooting, de-
tecting variations in your banks' CSV data, regenerating entries with
improved rules, etc.
o import will pick the oldest of source glob matches, rather than the Archiving is optional, but it can be useful for troubleshooting your
newest. So if you have multiple versions of a download, repeated im- CSV rules, regenerating entries with improved rules, checking for vari-
ports will process them in chronological order. ations in your bank's CSV, etc.
o For commands other than import, when the source path or glob pattern Added in 1.50; experimental.
matches no files, hledger will try to read the latest archived data
file instead. This is convenient for working with the downloaded
data again, even after it has been imported.
encoding encoding
encoding ENCODING encoding ENCODING
@ -4574,15 +4609,59 @@ CSV
expenses:banking:paypal $0.59 ; business: expenses:banking:paypal $0.59 ; business:
Timeclock Timeclock
The time logging format of timeclock.el, as read by hledger. hledger can read time logs in the timeclock time logging format of
timeclock.el. As with Ledger, hledger's timeclock format is a sub-
set/variant of timeclock.el's.
hledger can read time logs in timeclock format. As with Ledger, these hledger's timeclock format was updated in hledger 1.43 and 1.50. If
are (a subset of) timeclock.el's format, containing clock-in and your old time logs are rejected, you should adapt them to modern
clock-out entries as in the example below. The date is a simple date. hledger; for now, you can restore the pre-1.43 behaviour with the
The time format is HH:MM[:SS][+-ZZZZ]. Seconds and timezone are op- --old-timeclock flag.
tional. The timezone, if present, must be four digits and is ignored
(currently the time is always interpreted as a local time). Lines be- Here the timeclock format in hledger 1.50+:
ginning with # or ; or *, and blank lines, are ignored.
# Comment lines like these, and blank lines, are ignored:
# comment line
; comment line
* comment line
# Lines beginning with b, h, or capital O are also ignored, for compatibility:
b SIMPLEDATE HH:MM[:SS][+-ZZZZ][ TEXT]
h SIMPLEDATE HH:MM[:SS][+-ZZZZ][ TEXT]
O SIMPLEDATE HH:MM[:SS][+-ZZZZ][ TEXT]
# Lines beginning with i or o are are clock-in / clock-out entries:
i SIMPLEDATE HH:MM[:SS][+-ZZZZ] ACCOUNT[ DESCRIPTION][;COMMENT]]
o SIMPLEDATE HH:MM[:SS][+-ZZZZ][ ACCOUNT][;COMMENT]
The date is a hledger simple date (YYYY-MM-DD or similar). The time
parts must use two digits. The seconds are optional. A + or -
four-digit time zone is accepted for compatibility, but currently ig-
nored; times are always interpreted as a local time.
In clock-in entries (i), the account name is required. A transaction
description, separated from the account name by 2+ spaces, is optional.
A transaction comment, beginning with ;, is also optional. (Indented
following comment lines are also allowed, as in journal format.)
In clock-out entries (o) have no description, but can have a comment if
you wish. A clock-in and clock-out pair form a "transaction" posting
some number of hours to an account - also known as a session. Eg:
i 2015/03/30 09:00:00 session1
o 2015/03/30 10:00:00
$ hledger -f a.timeclock print
2015-03-30 * 09:00-10:00
(session1) 1.00h
Clock-ins and clock-outs are matched by their account/session name. If
a clock-out does not specify a name, the most recent unclosed clock-in
is closed. You can have multiple sessions active simultaneously. En-
tries are processed in the order they are parsed. Sessions spanning
more than one day are automatically split at day boundaries.
Eg, the following time log:
i 2015/03/30 09:00:00 some account optional description after 2 spaces ; optional comment, tags: i 2015/03/30 09:00:00 some account optional description after 2 spaces ; optional comment, tags:
o 2015/03/30 09:20:00 o 2015/03/30 09:20:00
@ -4593,13 +4672,7 @@ Timeclock
o 2015/04/02 14:00:00 o 2015/04/02 14:00:00
o 2015/04/02 15:00:00 another:account o 2015/04/02 15:00:00 another:account
hledger treats each clock-in/clock-out pair as a transaction posting generates these transactions:
some number of hours to an account. Entries are paired by the account
name if the same name is given for a clock-in/clock-out pair. If no
name is given for a clock-out, then it is paired with the most recent
clock-in entry. 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:
$ hledger -f t.timeclock print $ hledger -f t.timeclock print
2015-03-30 * optional description after 2 spaces ; optional comment, tags: 2015-03-30 * optional description after 2 spaces ; optional comment, tags:
@ -6101,17 +6174,15 @@ Value reporting
o For single period reports (including normal print and register re- o For single period reports (including normal print and register re-
ports): ports):
o If an explicit report end date is specified, that is used o If an explicit report end date is specified, that is used.
o Otherwise the latest transaction date or P directive date is used o Otherwise the latest transaction date or non-future P directive
(even if it's in the future) date is used.
o For multiperiod reports, each period is valued on its last day. o For multiperiod reports, each period is valued on its last day.
This can be customised with the --value option described below, which This can be customised with the --value option described below, which
can select either "then", "end", "now", or "custom" dates. (Note, this can select either "then", "end", "now", or "custom" dates.
has a bug in hledger-ui <=1.31: turning on valuation with the V key al-
ways resets it to "end".)
Finding market price Finding market price
To convert a commodity A to its market value in another commodity B, To convert a commodity A to its market value in another commodity B,
@ -10614,4 +10685,4 @@ LICENSE
SEE ALSO SEE ALSO
hledger(1), hledger-ui(1), hledger-web(1), ledger(1) hledger(1), hledger-ui(1), hledger-web(1), ledger(1)
hledger-1.43.99 June 2025 HLEDGER(1) hledger-1.50.99 September 2025 HLEDGER(1)