diff --git a/hledger-api/hledger-api.1 b/hledger-api/hledger-api.1 index 7f5344f12..0d4801786 100644 --- a/hledger-api/hledger-api.1 +++ b/hledger-api/hledger-api.1 @@ -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" diff --git a/hledger-api/hledger-api.txt b/hledger-api/hledger-api.txt index f52bb2341..0f6ac6917 100644 --- a/hledger-api/hledger-api.txt +++ b/hledger-api/hledger-api.txt @@ -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) diff --git a/hledger-lib/hledger_csv.5 b/hledger-lib/hledger_csv.5 index ce1365909..179b4dcb7 100644 --- a/hledger-lib/hledger_csv.5 +++ b/hledger-lib/hledger_csv.5 @@ -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" diff --git a/hledger-lib/hledger_csv.txt b/hledger-lib/hledger_csv.txt index e1833761c..ac7d0f294 100644 --- a/hledger-lib/hledger_csv.txt +++ b/hledger-lib/hledger_csv.txt @@ -249,4 +249,4 @@ SEE ALSO -hledger 1.10.99 July 2018 hledger_csv(5) +hledger 1.10.99 September 2018 hledger_csv(5) diff --git a/hledger-lib/hledger_journal.5 b/hledger-lib/hledger_journal.5 index aef8bad95..27bb92c41 100644 --- a/hledger-lib/hledger_journal.5 +++ b/hledger-lib/hledger_journal.5 @@ -1,6 +1,6 @@ .\"t -.TH "hledger_journal" "5" "July 2018" "hledger 1.10.99" "hledger User Manuals" +.TH "hledger_journal" "5" "September 2018" "hledger 1.10.99" "hledger User Manuals" @@ -1159,54 +1159,84 @@ hledger add, hledger\-iadd, hledger\-web, and ledger\-mode. .PD In future it will also help detect misspelled accounts. .PP -Account names can be followed by a numeric account code: -.IP -.nf -\f[C] -account\ assets\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 1000 -account\ assets:bank:checking\ \ \ \ 1110 -account\ liabilities\ \ \ \ \ \ \ \ \ \ \ \ \ 2000 -account\ revenues\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 4000 -account\ expenses\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 6000 -\f[] -.fi -.PP -This affects how accounts are sorted in account and balance reports: -accounts with codes are listed before accounts without codes, and in -increasing code order (instead of listing all accounts alphabetically). -Warning, this feature is incomplete; account codes do not yet affect -sort order in -.IP \[bu] 2 -the \f[C]accounts\f[] command -.IP \[bu] 2 -the \f[C]balance\f[] command's single\-column mode -.IP \[bu] 2 -flat mode balance reports (to work around this, declare account codes on -the subaccounts as well). -.IP \[bu] 2 -hledger\-web's sidebar -.PP -Account codes should be all numeric digits, unique, and separated from -the account name by at least two spaces (since account names may contain -single spaces). -By convention, often the first digit indicates the type of account, as -in this numbering scheme and the example above. -In future, we might use this to recognize account types. -.PP An account directive can also have indented subdirectives following it, which are currently ignored. Here is the full syntax: .IP .nf \f[C] -;\ account\ ACCTNAME\ \ [OPTIONALCODE] +;\ account\ ACCTNAME ;\ \ \ [OPTIONALSUBDIRECTIVES] -account\ assets:bank:checking\ \ \ 1110 +account\ assets:bank:checking \ \ a\ comment \ \ some\-tag:12345 \f[] .fi +.SS Account display order +.PP +Account directives have another purpose: they set the order in which +accounts are displayed, in hledger reports, hledger\-ui accounts screen, +hledger\-web sidebar etc. +For example, say you have these top\-level accounts: +.IP +.nf +\f[C] +$\ accounts\ \-1 +assets +equity +expenses +liabilities +misc +other +revenues +\f[] +.fi +.PP +By default, they are displayed in alphabetical order. +But if you add the following account directives to the journal: +.IP +.nf +\f[C] +account\ assets +account\ liabilities +account\ equity +account\ revenues +account\ expenses +\f[] +.fi +.PP +the display order changes to: +.IP +.nf +\f[C] +$\ accounts\ \-1 +assets +liabilities +equity +revenues +expenses +misc +other +\f[] +.fi +.PP +Ie, declared accounts first, in the order they were declared, followed +by any undeclared accounts in alphabetic order. +.PP +Note that sorting is done at each level of the account tree (within each +group of sibling accounts under the same parent). +This directive: +.IP +.nf +\f[C] +account\ other:zoo +\f[] +.fi +.PP +would influence the position of \f[C]zoo\f[] among \f[C]other\f[]'s +subaccounts, but not the position of \f[C]other\f[] among the top\-level +accounts. .SS Rewriting accounts .PP You can define account alias rules which rewrite your account names, or diff --git a/hledger-lib/hledger_journal.info b/hledger-lib/hledger_journal.info index 904659bc8..8a2b2c3f3 100644 --- a/hledger-lib/hledger_journal.info +++ b/hledger-lib/hledger_journal.info @@ -853,6 +853,7 @@ times though. * Default commodity:: * Market prices:: * Declaring accounts:: +* Account display order:: * Rewriting accounts:: * Default parent account:: @@ -1002,7 +1003,7 @@ P 2010/1/1 € $1.40 another commodity using these prices.  -File: hledger_journal.info, Node: Declaring accounts, Next: Rewriting accounts, Prev: Market prices, Up: Directives +File: hledger_journal.info, Node: Declaring accounts, Next: Account display order, Prev: Market prices, Up: Directives 1.14.7 Declaring accounts ------------------------- @@ -1016,46 +1017,71 @@ account assets:bank:checking hledger add, hledger-iadd, hledger-web, and ledger-mode. In future it will also help detect misspelled accounts. - Account names can be followed by a numeric account code: - -account assets 1000 -account assets:bank:checking 1110 -account liabilities 2000 -account revenues 4000 -account expenses 6000 - - This affects how accounts are sorted in account and balance reports: -accounts with codes are listed before accounts without codes, and in -increasing code order (instead of listing all accounts alphabetically). -Warning, this feature is incomplete; account codes do not yet affect -sort order in - - * the 'accounts' command - * the 'balance' command's single-column mode - * flat mode balance reports (to work around this, declare account - codes on the subaccounts as well). - * hledger-web's sidebar - - Account codes should be all numeric digits, unique, and separated -from the account name by at least two spaces (since account names may -contain single spaces). By convention, often the first digit indicates -the type of account, as in this numbering scheme and the example above. -In future, we might use this to recognize account types. - An account directive can also have indented subdirectives following it, which are currently ignored. Here is the full syntax: -; account ACCTNAME [OPTIONALCODE] +; account ACCTNAME ; [OPTIONALSUBDIRECTIVES] -account assets:bank:checking 1110 +account assets:bank:checking a comment some-tag:12345  -File: hledger_journal.info, Node: Rewriting accounts, Next: Default parent account, Prev: Declaring accounts, Up: Directives +File: hledger_journal.info, Node: Account display order, Next: Rewriting accounts, Prev: Declaring accounts, Up: Directives -1.14.8 Rewriting accounts +1.14.8 Account display order +---------------------------- + +Account directives have another purpose: they set the order in which +accounts are displayed, in hledger reports, hledger-ui accounts screen, +hledger-web sidebar etc. For example, say you have these top-level +accounts: + +$ accounts -1 +assets +equity +expenses +liabilities +misc +other +revenues + + By default, they are displayed in alphabetical order. But if you add +the following account directives to the journal: + +account assets +account liabilities +account equity +account revenues +account expenses + + the display order changes to: + +$ accounts -1 +assets +liabilities +equity +revenues +expenses +misc +other + + Ie, declared accounts first, in the order they were declared, +followed by any undeclared accounts in alphabetic order. + + Note that sorting is done at each level of the account tree (within +each group of sibling accounts under the same parent). This directive: + +account other:zoo + + would influence the position of 'zoo' among 'other''s subaccounts, +but not the position of 'other' among the top-level accounts. + + +File: hledger_journal.info, Node: Rewriting accounts, Next: Default parent account, Prev: Account display order, Up: Directives + +1.14.9 Rewriting accounts ------------------------- You can define account alias rules which rewrite your account names, or @@ -1083,7 +1109,7 @@ hledger-web.  File: hledger_journal.info, Node: Basic aliases, Next: Regex aliases, Up: Rewriting accounts -1.14.8.1 Basic aliases +1.14.9.1 Basic aliases ...................... To set an account alias, use the 'alias' directive in your journal file. @@ -1106,7 +1132,7 @@ alias checking = assets:bank:wells fargo:checking  File: hledger_journal.info, Node: Regex aliases, Next: Multiple aliases, Prev: Basic aliases, Up: Rewriting accounts -1.14.8.2 Regex aliases +1.14.9.2 Regex aliases ...................... There is also a more powerful variant that uses a regular expression, @@ -1131,7 +1157,7 @@ whitespace.  File: hledger_journal.info, Node: Multiple aliases, Next: end aliases, Prev: Regex aliases, Up: Rewriting accounts -1.14.8.3 Multiple aliases +1.14.9.3 Multiple aliases ......................... You can define as many aliases as you like using directives or @@ -1147,7 +1173,7 @@ following order:  File: hledger_journal.info, Node: end aliases, Prev: Multiple aliases, Up: Rewriting accounts -1.14.8.4 'end aliases' +1.14.9.4 'end aliases' ...................... You can clear (forget) all currently defined aliases with the 'end @@ -1158,8 +1184,8 @@ end aliases  File: hledger_journal.info, Node: Default parent account, Prev: Rewriting accounts, Up: Directives -1.14.9 Default parent account ------------------------------ +1.14.10 Default parent account +------------------------------ You can specify a parent account which will be prepended to all accounts within a section of the journal. Use the 'apply account' and 'end apply @@ -1417,41 +1443,43 @@ Node: Tags26403 Ref: #tags26521 Node: Directives27923 Ref: #directives28066 -Node: Comment blocks33922 -Ref: #comment-blocks34067 -Node: Including other files34243 -Ref: #including-other-files34423 -Node: Default year34831 -Ref: #default-year35000 -Node: Declaring commodities35423 -Ref: #declaring-commodities35606 -Node: Default commodity36833 -Ref: #default-commodity37009 -Node: Market prices37645 -Ref: #market-prices37810 -Node: Declaring accounts38651 -Ref: #declaring-accounts38827 -Node: Rewriting accounts40498 -Ref: #rewriting-accounts40683 -Node: Basic aliases41417 -Ref: #basic-aliases41563 -Node: Regex aliases42267 -Ref: #regex-aliases42438 -Node: Multiple aliases43156 -Ref: #multiple-aliases43331 -Node: end aliases43829 -Ref: #end-aliases43976 -Node: Default parent account44077 -Ref: #default-parent-account44243 -Node: Periodic transactions45127 -Ref: #periodic-transactions45309 -Node: Forecasting with periodic transactions46520 -Ref: #forecasting-with-periodic-transactions46763 -Node: Budgeting with periodic transactions48450 -Ref: #budgeting-with-periodic-transactions48689 -Node: Transaction Modifiers49148 -Ref: #transaction-modifiers49311 -Node: EDITOR SUPPORT50567 -Ref: #editor-support50685 +Node: Comment blocks33948 +Ref: #comment-blocks34093 +Node: Including other files34269 +Ref: #including-other-files34449 +Node: Default year34857 +Ref: #default-year35026 +Node: Declaring commodities35449 +Ref: #declaring-commodities35632 +Node: Default commodity36859 +Ref: #default-commodity37035 +Node: Market prices37671 +Ref: #market-prices37836 +Node: Declaring accounts38677 +Ref: #declaring-accounts38856 +Node: Account display order39406 +Ref: #account-display-order39596 +Node: Rewriting accounts40617 +Ref: #rewriting-accounts40805 +Node: Basic aliases41539 +Ref: #basic-aliases41685 +Node: Regex aliases42389 +Ref: #regex-aliases42560 +Node: Multiple aliases43278 +Ref: #multiple-aliases43453 +Node: end aliases43951 +Ref: #end-aliases44098 +Node: Default parent account44199 +Ref: #default-parent-account44367 +Node: Periodic transactions45251 +Ref: #periodic-transactions45433 +Node: Forecasting with periodic transactions46644 +Ref: #forecasting-with-periodic-transactions46887 +Node: Budgeting with periodic transactions48574 +Ref: #budgeting-with-periodic-transactions48813 +Node: Transaction Modifiers49272 +Ref: #transaction-modifiers49435 +Node: EDITOR SUPPORT50691 +Ref: #editor-support50809  End Tag Table diff --git a/hledger-lib/hledger_journal.txt b/hledger-lib/hledger_journal.txt index 5dc616798..9e50ee426 100644 --- a/hledger-lib/hledger_journal.txt +++ b/hledger-lib/hledger_journal.txt @@ -819,45 +819,62 @@ FILE FORMAT hledger add, hledger-iadd, hledger-web, and ledger-mode. In future it will also help detect misspelled accounts. - Account names can be followed by a numeric account code: - - account assets 1000 - account assets:bank:checking 1110 - account liabilities 2000 - account revenues 4000 - account expenses 6000 - - This affects how accounts are sorted in account and balance reports: - accounts with codes are listed before accounts without codes, and in - increasing code order (instead of listing all accounts alphabetically). - Warning, this feature is incomplete; account codes do not yet affect - sort order in - - o the accounts command - - o the balance command's single-column mode - - o flat mode balance reports (to work around this, declare account codes - on the subaccounts as well). - - o hledger-web's sidebar - - Account codes should be all numeric digits, unique, and separated from - the account name by at least two spaces (since account names may con- - tain single spaces). By convention, often the first digit indicates - the type of account, as in this numbering scheme and the example above. - In future, we might use this to recognize account types. - An account directive can also have indented subdirectives following it, which are currently ignored. Here is the full syntax: - ; account ACCTNAME [OPTIONALCODE] + ; account ACCTNAME ; [OPTIONALSUBDIRECTIVES] - account assets:bank:checking 1110 + account assets:bank:checking a comment some-tag:12345 + Account display order + Account directives have another purpose: they set the order in which + accounts are displayed, in hledger reports, hledger-ui accounts screen, + hledger-web sidebar etc. For example, say you have these top-level + accounts: + + $ accounts -1 + assets + equity + expenses + liabilities + misc + other + revenues + + By default, they are displayed in alphabetical order. But if you add + the following account directives to the journal: + + account assets + account liabilities + account equity + account revenues + account expenses + + the display order changes to: + + $ accounts -1 + assets + liabilities + equity + revenues + expenses + misc + other + + Ie, declared accounts first, in the order they were declared, followed + by any undeclared accounts in alphabetic order. + + Note that sorting is done at each level of the account tree (within + each group of sibling accounts under the same parent). This directive: + + account other:zoo + + would influence the position of zoo among other's subaccounts, but not + the position of other among the top-level accounts. + Rewriting accounts You can define account alias rules which rewrite your account names, or parts of them, before generating reports. This can be useful for: @@ -873,14 +890,14 @@ FILE FORMAT o customising reports Account aliases also rewrite account names in account directives. They - do not affect account names being entered via hledger add or + do not affect account names being entered via hledger add or hledger-web. See also Cookbook: Rewrite account names. Basic aliases - To set an account alias, use the alias directive in your journal file. - This affects all subsequent journal entries in the current file or its + To set an account alias, use the alias directive in your journal file. + This affects all subsequent journal entries in the current file or its included files. The spaces around the = are optional: alias OLD = NEW @@ -888,54 +905,54 @@ FILE FORMAT Or, you can use the --alias 'OLD=NEW' option on the command line. This affects all entries. It's useful for trying out aliases interactively. - OLD and NEW are case sensitive full account names. hledger will - replace any occurrence of the old account name with the new one. Sub- + OLD and NEW are case sensitive full account names. hledger will + replace any occurrence of the old account name with the new one. Sub- accounts are also affected. Eg: alias checking = assets:bank:wells fargo:checking # rewrites "checking" to "assets:bank:wells fargo:checking", or "checking:a" to "assets:bank:wells fargo:checking:a" Regex aliases - There is also a more powerful variant that uses a regular expression, + There is also a more powerful variant that uses a regular expression, indicated by the forward slashes: alias /REGEX/ = REPLACEMENT or --alias '/REGEX/=REPLACEMENT'. - REGEX is a case-insensitive regular expression. Anywhere it matches - inside an account name, the matched part will be replaced by REPLACE- - MENT. If REGEX contains parenthesised match groups, these can be ref- + REGEX is a case-insensitive regular expression. Anywhere it matches + inside an account name, the matched part will be replaced by REPLACE- + MENT. If REGEX contains parenthesised match groups, these can be ref- erenced by the usual numeric backreferences in REPLACEMENT. Eg: alias /^(.+):bank:([^:]+)(.*)/ = \1:\2 \3 # rewrites "assets:bank:wells fargo:checking" to "assets:wells fargo checking" - Also note that REPLACEMENT continues to the end of line (or on command - line, to end of option argument), so it can contain trailing white- + Also note that REPLACEMENT continues to the end of line (or on command + line, to end of option argument), so it can contain trailing white- space. Multiple aliases - You can define as many aliases as you like using directives or com- - mand-line options. Aliases are recursive - each alias sees the result - of applying previous ones. (This is different from Ledger, where + You can define as many aliases as you like using directives or com- + mand-line options. Aliases are recursive - each alias sees the result + of applying previous ones. (This is different from Ledger, where aliases are non-recursive by default). Aliases are applied in the fol- lowing order: - 1. alias directives, most recently seen first (recent directives take + 1. alias directives, most recently seen first (recent directives take precedence over earlier ones; directives not yet seen are ignored) 2. alias options, in the order they appear on the command line end aliases - You can clear (forget) all currently defined aliases with the + You can clear (forget) all currently defined aliases with the end aliases directive: end aliases Default parent account - You can specify a parent account which will be prepended to all - accounts within a section of the journal. Use the apply account and + You can specify a parent account which will be prepended to all + accounts within a section of the journal. Use the apply account and end apply account directives like so: apply account home @@ -952,7 +969,7 @@ FILE FORMAT home:food $10 home:cash $-10 - If end apply account is omitted, the effect lasts to the end of the + If end apply account is omitted, the effect lasts to the end of the file. Included files are also affected, eg: apply account business @@ -961,18 +978,18 @@ FILE FORMAT apply account personal include personal.journal - Prior to hledger 1.0, legacy account and end spellings were also sup- + Prior to hledger 1.0, legacy account and end spellings were also sup- ported. - A default parent account also affects account directives. It does not - affect account names being entered via hledger add or hledger-web. If - account aliases are present, they are applied after the default parent + A default parent account also affects account directives. It does not + affect account names being entered via hledger add or hledger-web. If + account aliases are present, they are applied after the default parent account. Periodic transactions - Periodic transaction rules describe transactions that recur. They + Periodic transaction rules describe transactions that recur. They allow you to generate future transactions for forecasting, without hav- - ing to write them out explicitly in the journal (with --forecast). + ing to write them out explicitly in the journal (with --forecast). Secondly, they also can be used to define budget goals (with --budget). A periodic transaction rule looks like a normal journal entry, with the @@ -983,8 +1000,8 @@ FILE FORMAT expenses:rent $2000 assets:bank:checking - There is an additional constraint on the period expression: the start - date must fall on a natural boundary of the interval. Eg + There is an additional constraint on the period expression: the start + date must fall on a natural boundary of the interval. Eg monthly from 2018/1/1 is valid, but monthly from 2018/1/15 is not. If you write a transaction description or same-line comment, it must be @@ -998,77 +1015,77 @@ FILE FORMAT income:acme inc Forecasting with periodic transactions - With the --forecast flag, each periodic transaction rule generates + With the --forecast flag, each periodic transaction rule generates future transactions recurring at the specified interval. These are not - saved in the journal, but appear in all reports. They will look like - normal transactions, but with an extra tag named recur, whose value is + saved in the journal, but appear in all reports. They will look like + normal transactions, but with an extra tag named recur, whose value is the generating period expression. - Forecast transactions start on the first occurrence, and end on the - last occurrence, of their interval within the forecast period. The + Forecast transactions start on the first occurrence, and end on the + last occurrence, of their interval within the forecast period. The forecast period: o begins on the later of o the report start date if specified with -b/-p/date: - o the day after the latest normal (non-periodic) transaction in the + o the day after the latest normal (non-periodic) transaction in the journal, or today if there are no normal transactions. - o ends on the report end date if specified with -e/-p/date:, or 180 + o ends on the report end date if specified with -e/-p/date:, or 180 days from today. - where "today" means the current date at report time. The "later of" - rule ensures that forecast transactions do not overlap normal transac- + where "today" means the current date at report time. The "later of" + rule ensures that forecast transactions do not overlap normal transac- tions in time; they will begin only after normal transactions end. - Forecasting can be useful for estimating balances into the future, and - experimenting with different scenarios. Note the start date logic + Forecasting can be useful for estimating balances into the future, and + experimenting with different scenarios. Note the start date logic means that forecasted transactions are automatically replaced by normal transactions as you add those. Forecasting can also help with data entry: describe most of your trans- - actions with periodic rules, and every so often copy the output of + actions with periodic rules, and every so often copy the output of print --forecast to the journal. You can generate one-time transactions too: just write a period expres- - sion specifying a date with no report interval. (You could also write - a normal transaction with a future date, but remember this disables + sion specifying a date with no report interval. (You could also write + a normal transaction with a future date, but remember this disables forecast transactions on previous dates.) Budgeting with periodic transactions - With the --budget flag, currently supported by the balance command, - each periodic transaction rule declares recurring budget goals for the - specified accounts. Eg the first example above declares a goal of - spending $2000 on rent (and also, a goal of depositing $2000 into - checking) every month. Goals and actual performance can then be com- + With the --budget flag, currently supported by the balance command, + each periodic transaction rule declares recurring budget goals for the + specified accounts. Eg the first example above declares a goal of + spending $2000 on rent (and also, a goal of depositing $2000 into + checking) every month. Goals and actual performance can then be com- pared in budget reports. - For more details, see: balance: Budget report and Cookbook: Budgeting + For more details, see: balance: Budget report and Cookbook: Budgeting and Forecasting. Transaction Modifiers - Transaction modifier rules describe changes that should be applied - automatically to certain transactions. Currently, this means adding + Transaction modifier rules describe changes that should be applied + automatically to certain transactions. Currently, this means adding extra postings (also known as "automated postings"). Transaction modi- fiers are enabled by the --auto flag. - A transaction modifier rule looks a bit like a normal journal entry, - except the first line is an equal sign (=) followed by a query + A transaction modifier rule looks a bit like a normal journal entry, + except the first line is an equal sign (=) followed by a query (mnemonic: = suggests matching something.): = expenses:gifts budget:gifts *-1 assets:budget *1 - The posting amounts can be of the form *N, which means "the amount of - the matched transaction's first posting, multiplied by N". They can + The posting amounts can be of the form *N, which means "the amount of + the matched transaction's first posting, multiplied by N". They can also be ordinary fixed amounts. Fixed amounts with no commodity symbol - will be given the same commodity as the matched transaction's first + will be given the same commodity as the matched transaction's first posting. - This example adds a corresponding (unbalanced) budget posting to every + This example adds a corresponding (unbalanced) budget posting to every transaction involving the expenses:gifts account: = expenses:gifts @@ -1084,16 +1101,16 @@ FILE FORMAT (budget:gifts) $-20 assets - Like postings recorded by hand, automated postings participate in + Like postings recorded by hand, automated postings participate in transaction balancing, missing amount inference and balance assertions. EDITOR SUPPORT Add-on modes exist for various text editors, to make working with jour- - nal files easier. They add colour, navigation aids and helpful com- - mands. For hledger users who edit the journal file directly (the + nal files easier. They add colour, navigation aids and helpful com- + mands. For hledger users who edit the journal file directly (the majority), using one of these modes is quite recommended. - These were written with Ledger in mind, but also work with hledger + These were written with Ledger in mind, but also work with hledger files: @@ -1112,7 +1129,7 @@ EDITOR SUPPORT REPORTING BUGS - Report bugs at http://bugs.hledger.org (or on the #hledger IRC channel + Report bugs at http://bugs.hledger.org (or on the #hledger IRC channel or hledger mail list) @@ -1126,7 +1143,7 @@ COPYRIGHT SEE ALSO - hledger(1), hledger-ui(1), hledger-web(1), hledger-api(1), + hledger(1), hledger-ui(1), hledger-web(1), hledger-api(1), hledger_csv(5), hledger_journal(5), hledger_timeclock(5), hledger_time- dot(5), ledger(1) @@ -1134,4 +1151,4 @@ SEE ALSO -hledger 1.10.99 July 2018 hledger_journal(5) +hledger 1.10.99 September 2018 hledger_journal(5) diff --git a/hledger-lib/hledger_timeclock.5 b/hledger-lib/hledger_timeclock.5 index 18c11f1ff..97323e2bf 100644 --- a/hledger-lib/hledger_timeclock.5 +++ b/hledger-lib/hledger_timeclock.5 @@ -1,5 +1,5 @@ -.TH "hledger_timeclock" "5" "July 2018" "hledger 1.10.99" "hledger User Manuals" +.TH "hledger_timeclock" "5" "September 2018" "hledger 1.10.99" "hledger User Manuals" diff --git a/hledger-lib/hledger_timeclock.txt b/hledger-lib/hledger_timeclock.txt index c6a995077..4f0ae8304 100644 --- a/hledger-lib/hledger_timeclock.txt +++ b/hledger-lib/hledger_timeclock.txt @@ -77,4 +77,4 @@ SEE ALSO -hledger 1.10.99 July 2018 hledger_timeclock(5) +hledger 1.10.99 September 2018 hledger_timeclock(5) diff --git a/hledger-lib/hledger_timedot.5 b/hledger-lib/hledger_timedot.5 index acd9c2a29..a4bd8f928 100644 --- a/hledger-lib/hledger_timedot.5 +++ b/hledger-lib/hledger_timedot.5 @@ -1,5 +1,5 @@ -.TH "hledger_timedot" "5" "July 2018" "hledger 1.10.99" "hledger User Manuals" +.TH "hledger_timedot" "5" "September 2018" "hledger 1.10.99" "hledger User Manuals" diff --git a/hledger-lib/hledger_timedot.txt b/hledger-lib/hledger_timedot.txt index acd8a7e9b..28173a978 100644 --- a/hledger-lib/hledger_timedot.txt +++ b/hledger-lib/hledger_timedot.txt @@ -124,4 +124,4 @@ SEE ALSO -hledger 1.10.99 July 2018 hledger_timedot(5) +hledger 1.10.99 September 2018 hledger_timedot(5) diff --git a/hledger-ui/hledger-ui.1 b/hledger-ui/hledger-ui.1 index b8671863a..1c340b5a5 100644 --- a/hledger-ui/hledger-ui.1 +++ b/hledger-ui/hledger-ui.1 @@ -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" diff --git a/hledger-ui/hledger-ui.txt b/hledger-ui/hledger-ui.txt index 5fd91c6be..012b3100d 100644 --- a/hledger-ui/hledger-ui.txt +++ b/hledger-ui/hledger-ui.txt @@ -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) diff --git a/hledger-web/hledger-web.1 b/hledger-web/hledger-web.1 index 9072b04b0..6adcad3bd 100644 --- a/hledger-web/hledger-web.1 +++ b/hledger-web/hledger-web.1 @@ -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" diff --git a/hledger-web/hledger-web.txt b/hledger-web/hledger-web.txt index 281ca5da6..7f02985d1 100644 --- a/hledger-web/hledger-web.txt +++ b/hledger-web/hledger-web.txt @@ -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) diff --git a/hledger/hledger.1 b/hledger/hledger.1 index f88fb47a3..215dd6aaf 100644 --- a/hledger/hledger.1 +++ b/hledger/hledger.1 @@ -1,6 +1,6 @@ .\"t -.TH "hledger" "1" "July 2018" "hledger 1.10.99" "hledger User Manuals" +.TH "hledger" "1" "September 2018" "hledger 1.10.99" "hledger User Manuals" @@ -2246,6 +2246,11 @@ boundaries, or for closing out income/expenses for a period. This was formerly called \[lq]equity\[rq], as in Ledger, and that alias is also accepted. See close \[en]help for more. +.SS files +.PP +List all files included in the journal. +With a REGEX argument, only file names matching the regular expression +(case sensitive) are shown. .SS help .PP Show any of the hledger manuals. @@ -2769,6 +2774,11 @@ Helps ledger\-autosync detect already\-seen transactions when importing. .SS rewrite .PP Print all transactions, adding custom postings to the matched ones. +.SS roi +.PP +Shows time\-weighted (TWR) and money\-weighted (IRR) rate of return on +your investments. +See \f[C]roi\ \-\-help\f[] for more. .SS stats .PP Show some journal statistics. diff --git a/hledger/hledger.info b/hledger/hledger.info index 4940d4a8d..e809e2cd6 100644 --- a/hledger/hledger.info +++ b/hledger/hledger.info @@ -912,6 +912,7 @@ detailed command help. * check-dates:: * check-dupes:: * close:: +* files:: * help:: * import:: * incomestatement:: @@ -921,6 +922,7 @@ detailed command help. * register:: * register-match:: * rewrite:: +* roi:: * stats:: * tags:: * test:: @@ -1757,7 +1759,7 @@ Report account names having the same leaf but different prefixes. An example: http://stefanorodighiero.net/software/hledger-dupes.html  -File: hledger.info, Node: close, Next: help, Prev: check-dupes, Up: COMMANDS +File: hledger.info, Node: close, Next: files, Prev: check-dupes, Up: COMMANDS 4.10 close ========== @@ -1769,9 +1771,18 @@ a period. This was formerly called "equity", as in Ledger, and that alias is also accepted. See close -help for more.  -File: hledger.info, Node: help, Next: import, Prev: close, Up: COMMANDS +File: hledger.info, Node: files, Next: help, Prev: close, Up: COMMANDS -4.11 help +4.11 files +========== + +List all files included in the journal. With a REGEX argument, only +file names matching the regular expression (case sensitive) are shown. + + +File: hledger.info, Node: help, Next: import, Prev: files, Up: COMMANDS + +4.12 help ========= Show any of the hledger manuals. @@ -1808,7 +1819,7 @@ DESCRIPTION  File: hledger.info, Node: import, Next: incomestatement, Prev: help, Up: COMMANDS -4.12 import +4.13 import =========== Read new transactions added to each FILE since last run, and add them to @@ -1834,7 +1845,7 @@ $ hledger import --dry ... | hledger -f- print unknown --ignore-assertions  File: hledger.info, Node: incomestatement, Next: prices, Prev: import, Up: COMMANDS -4.13 incomestatement +4.14 incomestatement ==================== This command displays a simple income statement, showing revenues and @@ -1921,7 +1932,7 @@ selection.  File: hledger.info, Node: prices, Next: print, Prev: incomestatement, Up: COMMANDS -4.14 prices +4.15 prices =========== Print market price directives from the journal. With -costs, also print @@ -1932,7 +1943,7 @@ Prices (and postings providing prices) can be filtered by a query.  File: hledger.info, Node: print, Next: print-unique, Prev: prices, Up: COMMANDS -4.15 print +4.16 print ========== Show transactions from the journal. Aliases: p, txns. @@ -2049,7 +2060,7 @@ $ hledger print -Ocsv  File: hledger.info, Node: print-unique, Next: register, Prev: print, Up: COMMANDS -4.16 print-unique +4.17 print-unique ================= Print transactions which do not reuse an already-seen description. @@ -2057,7 +2068,7 @@ Print transactions which do not reuse an already-seen description.  File: hledger.info, Node: register, Next: register-match, Prev: print-unique, Up: COMMANDS -4.17 register +4.18 register ============= Show postings and their running total. Aliases: r, reg. @@ -2162,7 +2173,7 @@ length and comparable to the others in the report.  File: hledger.info, Node: Custom register output, Up: register -4.17.1 Custom register output +4.18.1 Custom register output ----------------------------- register uses the full terminal width by default, except on windows. @@ -2193,7 +2204,7 @@ selection.  File: hledger.info, Node: register-match, Next: rewrite, Prev: register, Up: COMMANDS -4.18 register-match +4.19 register-match =================== Print the one posting whose transaction description is closest to DESC, @@ -2201,17 +2212,26 @@ in the style of the register command. Helps ledger-autosync detect already-seen transactions when importing.  -File: hledger.info, Node: rewrite, Next: stats, Prev: register-match, Up: COMMANDS +File: hledger.info, Node: rewrite, Next: roi, Prev: register-match, Up: COMMANDS -4.19 rewrite +4.20 rewrite ============ Print all transactions, adding custom postings to the matched ones.  -File: hledger.info, Node: stats, Next: tags, Prev: rewrite, Up: COMMANDS +File: hledger.info, Node: roi, Next: stats, Prev: rewrite, Up: COMMANDS -4.20 stats +4.21 roi +======== + +Shows time-weighted (TWR) and money-weighted (IRR) rate of return on +your investments. See 'roi --help' for more. + + +File: hledger.info, Node: stats, Next: tags, Prev: roi, Up: COMMANDS + +4.22 stats ========== Show some journal statistics. @@ -2243,7 +2263,7 @@ selection.  File: hledger.info, Node: tags, Next: test, Prev: stats, Up: COMMANDS -4.21 tags +4.23 tags ========= List all the tag names used in the journal. With a TAGREGEX argument, @@ -2254,7 +2274,7 @@ query are considered.  File: hledger.info, Node: test, Prev: tags, Up: COMMANDS -4.22 test +4.24 test ========= Run built-in unit tests. @@ -2491,94 +2511,98 @@ Node: QUERIES26089 Ref: #queries26191 Node: COMMANDS30153 Ref: #commands30265 -Node: accounts31247 -Ref: #accounts31345 -Node: activity32591 -Ref: #activity32701 -Node: add33061 -Ref: #add33160 -Node: balance35821 -Ref: #balance35932 -Node: Classic balance report39015 -Ref: #classic-balance-report39188 -Node: Customising the classic balance report40557 -Ref: #customising-the-classic-balance-report40785 -Node: Colour support42859 -Ref: #colour-support43026 -Node: Flat mode43199 -Ref: #flat-mode43347 -Node: Depth limited balance reports43760 -Ref: #depth-limited-balance-reports43960 -Node: Multicolumn balance report44416 -Ref: #multicolumn-balance-report44614 -Node: Budget report49794 -Ref: #budget-report49937 -Ref: #output-format-152971 -Node: balancesheet53049 -Ref: #balancesheet53185 -Node: balancesheetequity55496 -Ref: #balancesheetequity55645 -Node: cashflow56182 -Ref: #cashflow56310 -Node: check-dates58433 -Ref: #check-dates58560 -Node: check-dupes58677 -Ref: #check-dupes58801 -Node: close58938 -Ref: #close59045 -Node: help59375 -Ref: #help59475 -Node: import60549 -Ref: #import60663 -Node: incomestatement61393 -Ref: #incomestatement61527 -Node: prices63931 -Ref: #prices64046 -Node: print64318 -Ref: #print64428 -Node: print-unique69322 -Ref: #print-unique69448 -Node: register69516 -Ref: #register69643 -Node: Custom register output74144 -Ref: #custom-register-output74273 -Node: register-match75503 -Ref: #register-match75637 -Node: rewrite75820 -Ref: #rewrite75937 -Node: stats76006 -Ref: #stats76109 -Node: tags76979 -Ref: #tags77077 -Node: test77313 -Ref: #test77397 -Node: ADD-ON COMMANDS78105 -Ref: #add-on-commands78215 -Node: Official add-ons79502 -Ref: #official-add-ons79642 -Node: api79729 -Ref: #api79818 -Node: ui79870 -Ref: #ui79969 -Node: web80027 -Ref: #web80116 -Node: Third party add-ons80162 -Ref: #third-party-add-ons80337 -Node: diff80472 -Ref: #diff80569 -Node: iadd80668 -Ref: #iadd80782 -Node: interest80865 -Ref: #interest80986 -Node: irr81081 -Ref: #irr81179 -Node: Experimental add-ons81257 -Ref: #experimental-add-ons81409 -Node: autosync81689 -Ref: #autosync81800 -Node: chart82039 -Ref: #chart82158 -Node: check82229 -Ref: #check82331 +Node: accounts31265 +Ref: #accounts31363 +Node: activity32609 +Ref: #activity32719 +Node: add33079 +Ref: #add33178 +Node: balance35839 +Ref: #balance35950 +Node: Classic balance report39033 +Ref: #classic-balance-report39206 +Node: Customising the classic balance report40575 +Ref: #customising-the-classic-balance-report40803 +Node: Colour support42877 +Ref: #colour-support43044 +Node: Flat mode43217 +Ref: #flat-mode43365 +Node: Depth limited balance reports43778 +Ref: #depth-limited-balance-reports43978 +Node: Multicolumn balance report44434 +Ref: #multicolumn-balance-report44632 +Node: Budget report49812 +Ref: #budget-report49955 +Ref: #output-format-152989 +Node: balancesheet53067 +Ref: #balancesheet53203 +Node: balancesheetequity55514 +Ref: #balancesheetequity55663 +Node: cashflow56200 +Ref: #cashflow56328 +Node: check-dates58451 +Ref: #check-dates58578 +Node: check-dupes58695 +Ref: #check-dupes58819 +Node: close58956 +Ref: #close59064 +Node: files59394 +Ref: #files59495 +Node: help59636 +Ref: #help59736 +Node: import60810 +Ref: #import60924 +Node: incomestatement61654 +Ref: #incomestatement61788 +Node: prices64192 +Ref: #prices64307 +Node: print64579 +Ref: #print64689 +Node: print-unique69583 +Ref: #print-unique69709 +Node: register69777 +Ref: #register69904 +Node: Custom register output74405 +Ref: #custom-register-output74534 +Node: register-match75764 +Ref: #register-match75898 +Node: rewrite76081 +Ref: #rewrite76196 +Node: roi76265 +Ref: #roi76363 +Node: stats76479 +Ref: #stats76578 +Node: tags77448 +Ref: #tags77546 +Node: test77782 +Ref: #test77866 +Node: ADD-ON COMMANDS78574 +Ref: #add-on-commands78684 +Node: Official add-ons79971 +Ref: #official-add-ons80111 +Node: api80198 +Ref: #api80287 +Node: ui80339 +Ref: #ui80438 +Node: web80496 +Ref: #web80585 +Node: Third party add-ons80631 +Ref: #third-party-add-ons80806 +Node: diff80941 +Ref: #diff81038 +Node: iadd81137 +Ref: #iadd81251 +Node: interest81334 +Ref: #interest81455 +Node: irr81550 +Ref: #irr81648 +Node: Experimental add-ons81726 +Ref: #experimental-add-ons81878 +Node: autosync82158 +Ref: #autosync82269 +Node: chart82508 +Ref: #chart82627 +Node: check82698 +Ref: #check82800  End Tag Table diff --git a/hledger/hledger.txt b/hledger/hledger.txt index 1c2161138..3770d23c5 100644 --- a/hledger/hledger.txt +++ b/hledger/hledger.txt @@ -1596,6 +1596,10 @@ COMMANDS a period. This was formerly called "equity", as in Ledger, and that alias is also accepted. See close -help for more. + files + List all files included in the journal. With a REGEX argument, only + file names matching the regular expression (case sensitive) are shown. + help Show any of the hledger manuals. @@ -1978,11 +1982,15 @@ COMMANDS rewrite Print all transactions, adding custom postings to the matched ones. + roi + Shows time-weighted (TWR) and money-weighted (IRR) rate of return on + your investments. See roi --help for more. + stats Show some journal statistics. -o FILE --output-file=FILE - write output to FILE. A file extension matching one of the + write output to FILE. A file extension matching one of the above formats selects that format. $ hledger stats @@ -1997,61 +2005,61 @@ COMMANDS Accounts : 8 (depth 3) Commodities : 1 ($) - The stats command displays summary information for the whole journal, - or a matched part of it. With a reporting interval, it shows a report + The stats command displays summary information for the whole journal, + or a matched part of it. With a reporting interval, it shows a report for each report period. - This command also supports output destination and output format selec- + This command also supports output destination and output format selec- tion. tags - List all the tag names used in the journal. With a TAGREGEX argument, - only tag names matching the regular expression (case insensitive) are + List all the tag names used in the journal. With a TAGREGEX argument, + only tag names matching the regular expression (case insensitive) are shown. With additional QUERY arguments, only transactions matching the query are considered. test Run built-in unit tests. - Prints test names and their results on stdout. If any test fails or + Prints test names and their results on stdout. If any test fails or gives an error, the exit code will be non-zero. - Test names include a group prefix. If a (exact, case sensitive) group - prefix, or a full test name is provided as the first argument, only + Test names include a group prefix. If a (exact, case sensitive) group + prefix, or a full test name is provided as the first argument, only that group or test is run. - If a numeric second argument is provided, it will set the randomness - seed, for repeatable results from tests using randomness (currently + If a numeric second argument is provided, it will set the randomness + seed, for repeatable results from tests using randomness (currently none of them). - This is mainly used by developers, but it's nice to be able to san- + This is mainly used by developers, but it's nice to be able to san- ity-check your installed hledger executable at any time. All tests are expected to pass - if you ever see otherwise, something has gone wrong, please report a bug! ADD-ON COMMANDS - hledger also searches for external add-on commands, and will include + hledger also searches for external add-on commands, and will include these in the commands list. These are programs or scripts in your PATH - whose name starts with hledger- and ends with a recognised file exten- + whose name starts with hledger- and ends with a recognised file exten- sion (currently: no extension, bat,com,exe, hs,lhs,pl,py,rb,rkt,sh). - Add-ons can be invoked like any hledger command, but there are a few + Add-ons can be invoked like any hledger command, but there are a few things to be aware of. Eg if the hledger-web add-on is installed, o hledger -h web shows hledger's help, while hledger web -h shows hledger-web's help. - o Flags specific to the add-on must have a preceding -- to hide them - from hledger. So hledger web --serve --port 9000 will be rejected; + o Flags specific to the add-on must have a preceding -- to hide them + from hledger. So hledger web --serve --port 9000 will be rejected; you must use hledger web -- --serve --port 9000. - o You can always run add-ons directly if preferred: + o You can always run add-ons directly if preferred: hledger-web --serve --port 9000. - Add-ons are a relatively easy way to add local features or experiment - with new ideas. They can be written in any language, but haskell - scripts have a big advantage: they can use the same hledger (and - haskell) library functions that built-in commands do, for command-line + Add-ons are a relatively easy way to add local features or experiment + with new ideas. They can be written in any language, but haskell + scripts have a big advantage: they can use the same hledger (and + haskell) library functions that built-in commands do, for command-line options, journal parsing, reporting, etc. Here are some hledger add-ons available: @@ -2069,7 +2077,7 @@ ADD-ON COMMANDS hledger-web provides a simple web interface. Third party add-ons - These are maintained separately, and usually updated shortly after a + These are maintained separately, and usually updated shortly after a hledger release. diff @@ -2077,7 +2085,7 @@ ADD-ON COMMANDS journal file and another. iadd - hledger-iadd is a curses-style, more interactive replacement for the + hledger-iadd is a curses-style, more interactive replacement for the add command. interest @@ -2085,19 +2093,19 @@ ADD-ON COMMANDS ing to various schemes. irr - hledger-irr calculates the internal rate of return of an investment + hledger-irr calculates the internal rate of return of an investment account. Experimental add-ons - These are available in source form in the hledger repo's bin/ direc- + These are available in source form in the hledger repo's bin/ direc- tory; installing them is pretty easy. They may be less mature and doc- - umented than built-in commands. Reading and tweaking these is a good + umented than built-in commands. Reading and tweaking these is a good way to start making your own! autosync hledger-autosync is a symbolic link for easily running ledger-autosync, - if installed. ledger-autosync does deduplicating conversion of OFX - data and some CSV formats, and can also download the data if your bank + if installed. ledger-autosync does deduplicating conversion of OFX + data and some CSV formats, and can also download the data if your bank offers OFX Direct Connect. chart @@ -2107,21 +2115,21 @@ ADD-ON COMMANDS hledger-check.hs checks more powerful account balance assertions. ENVIRONMENT - COLUMNS The screen width used by the register command. Default: the + COLUMNS The screen width used by the register command. Default: the full terminal width. LEDGER_FILE The journal file path when not specified with -f. Default: - ~/.hledger.journal (on windows, perhaps C:/Users/USER/.hledger.jour- + ~/.hledger.journal (on windows, perhaps C:/Users/USER/.hledger.jour- nal). FILES - Reads data from one or more files in hledger journal, timeclock, time- - dot, or CSV format specified with -f, or $LEDGER_FILE, or - $HOME/.hledger.journal (on windows, perhaps + Reads data from one or more files in hledger journal, timeclock, time- + dot, or CSV format specified with -f, or $LEDGER_FILE, or + $HOME/.hledger.journal (on windows, perhaps C:/Users/USER/.hledger.journal). BUGS - The need to precede addon command options with -- when invoked from + The need to precede addon command options with -- when invoked from hledger is awkward. When input data contains non-ascii characters, a suitable system locale @@ -2134,33 +2142,33 @@ BUGS In a Cygwin/MSYS/Mintty window, the tab key is not supported in hledger add. - Not all of Ledger's journal file syntax is supported. See file format + Not all of Ledger's journal file syntax is supported. See file format differences. - On large data files, hledger is slower and uses more memory than + On large data files, hledger is slower and uses more memory than Ledger. TROUBLESHOOTING - Here are some issues you might encounter when you run hledger (and - remember you can also seek help from the IRC channel, mail list or bug + Here are some issues you might encounter when you run hledger (and + remember you can also seek help from the IRC channel, mail list or bug tracker): Successfully installed, but "No command `hledger' found" stack and cabal install binaries into a special directory, which should - be added to your PATH environment variable. Eg on unix-like systems, + be added to your PATH environment variable. Eg on unix-like systems, that is ~/.local/bin and ~/.cabal/bin respectively. I set a custom LEDGER_FILE, but hledger is still using the default file - LEDGER_FILE should be a real environment variable, not just a shell - variable. The command env | grep LEDGER_FILE should show it. You may + LEDGER_FILE should be a real environment variable, not just a shell + variable. The command env | grep LEDGER_FILE should show it. You may need to use export. Here's an explanation. - "Illegal byte sequence" or "Invalid or incomplete multibyte or wide + "Illegal byte sequence" or "Invalid or incomplete multibyte or wide character" errors In order to handle non-ascii letters and symbols (like ), hledger needs an appropriate locale. This is usually configured system-wide; you can also configure it temporarily. The locale may need to be one that sup- - ports UTF-8, if you built hledger with GHC < 7.2 (or possibly always, + ports UTF-8, if you built hledger with GHC < 7.2 (or possibly always, I'm not sure yet). Here's an example of setting the locale temporarily, on ubuntu @@ -2179,7 +2187,7 @@ TROUBLESHOOTING $ echo "export LANG=en_US.UTF-8" >>~/.bash_profile $ bash --login - If we preferred to use eg fr_FR.utf8, we might have to install that + If we preferred to use eg fr_FR.utf8, we might have to install that first: $ apt-get install language-pack-fr @@ -2200,7 +2208,7 @@ TROUBLESHOOTING REPORTING BUGS - Report bugs at http://bugs.hledger.org (or on the #hledger IRC channel + Report bugs at http://bugs.hledger.org (or on the #hledger IRC channel or hledger mail list) @@ -2214,7 +2222,7 @@ COPYRIGHT SEE ALSO - hledger(1), hledger-ui(1), hledger-web(1), hledger-api(1), + hledger(1), hledger-ui(1), hledger-web(1), hledger-api(1), hledger_csv(5), hledger_journal(5), hledger_timeclock(5), hledger_time- dot(5), ledger(1) @@ -2222,4 +2230,4 @@ SEE ALSO -hledger 1.10.99 July 2018 hledger(1) +hledger 1.10.99 September 2018 hledger(1)