doc: merge latest manual changes from wiki
This commit is contained in:
		
							parent
							
								
									aa85e786b9
								
							
						
					
					
						commit
						0ad24be353
					
				
							
								
								
									
										759
									
								
								doc/MANUAL.md
									
									
									
									
									
								
							
							
						
						
									
										759
									
								
								doc/MANUAL.md
									
									
									
									
									
								
							| @ -1,14 +1,21 @@ | ||||
| <!-- hledger.org and hledger repo versions last synced: 2014/5/1 --> | ||||
| 
 | ||||
| # User Manual | ||||
| # hledger User Manual | ||||
| 
 | ||||
| This manual is for | ||||
|  <!-- hledger 0.23.98 (the latest pre-0.23 HEAD). --> | ||||
|  [hledger 0.23](http://hackage.haskell.org/package/hledger-0.23). | ||||
| This reference manual is for | ||||
|  hledger 0.23.98 (the latest pre-0.24 HEAD). | ||||
|  <!-- [hledger 0.23](http://hackage.haskell.org/package/hledger-0.23) --> | ||||
|  and [hledger-web 0.23](http://hackage.haskell.org/package/hledger-web-0.23). | ||||
|  <!-- Other versions: [[0.22/manual|0.22 Manual]]. --> | ||||
| 
 | ||||
| It is partly an introduction, but mainly a reference manual for hledger. | ||||
| For a more gradual introduction, see [[step-by-step]] and [[more docs]]. | ||||
| - [[#Introduction]] | ||||
| - [[#Usage]] | ||||
| - [[#Data format]] | ||||
| - [[#Options]] | ||||
| - [[#Query arguments]] | ||||
| - [[#Commands]] | ||||
| - [[#Known limitations]] | ||||
| - [[#Troubleshooting]] | ||||
| 
 | ||||
| ## Introduction | ||||
| 
 | ||||
| @ -42,7 +49,7 @@ latest release with cabal-install, like so: | ||||
|      | ||||
| For more help with this, and other install options, see the [[installing|Installation Guide]]. | ||||
| 
 | ||||
| ## Basic Usage | ||||
| ## Usage | ||||
| 
 | ||||
| Basic usage is: | ||||
| 
 | ||||
| @ -57,7 +64,7 @@ Options are similar across most commands, with some variations; use | ||||
| `hledger COMMAND --help` for details. Most options must appear | ||||
| somewhere after COMMAND, not before it. These input and help-related | ||||
| options can appear anywhere: `-f`, `--rules-file`, `--alias`, | ||||
| `--help`, `--debug`, `--version`. | ||||
| `--ignore-assertions`, `--help`, `--debug`, `--version`. | ||||
| 
 | ||||
| Arguments are also command-specific, but usually they form a | ||||
| [query](#queries) which selects a subset of the journal, eg transactions | ||||
| @ -68,16 +75,16 @@ enter some transactions.  Or, save this | ||||
| [sample file](https://raw.github.com/simonmichael/hledger/master/data/sample.journal) as | ||||
| `.hledger.journal` in your home directory. Now try commands like these: | ||||
| 
 | ||||
| 	$ hledger                               # show available commands | ||||
| 	$ hledger add                           # add more transactions to the journal file | ||||
| 	$ hledger balance                       # all accounts with aggregated balances | ||||
| 	$ hledger balance --help                # show help for balance command | ||||
| 	$ hledger balance --depth 1             # only top-level accounts | ||||
| 	$ hledger register                      # show a register of postings from all transactions | ||||
| 	$ hledger reg income                    # show postings to/from income accounts | ||||
| 	$ hledger reg checking                  # show postings to/from checking account | ||||
| 	$ hledger reg desc:shop                 # show postings with shop in the description | ||||
| 	$ hledger activity                      # show transactions per day as a bar chart | ||||
|     $ hledger                               # show available commands | ||||
|     $ hledger add                           # add more transactions to the journal file | ||||
|     $ hledger balance                       # all accounts with aggregated balances | ||||
|     $ hledger balance --help                # show help for balance command | ||||
|     $ hledger balance --depth 1             # only top-level accounts | ||||
|     $ hledger register                      # show a register of postings from all transactions | ||||
|     $ hledger reg income                    # show postings to/from income accounts | ||||
|     $ hledger reg checking                  # show postings to/from checking account | ||||
|     $ hledger reg desc:shop                 # show postings with shop in the description | ||||
|     $ hledger activity                      # show transactions per day as a bar chart | ||||
| 
 | ||||
| ## Data format | ||||
| 
 | ||||
| @ -90,7 +97,7 @@ The journal file contains a number of transaction entries, | ||||
| each describing a transfer of money (or any commodity) between two or more named accounts, | ||||
| in a simple format readable by both hledger and humans. | ||||
| 
 | ||||
| hledger's journal format is a compatible subset, mostly, | ||||
| hledger's journal format is a compatible subset, [mostly](http://hledger.org/faq#file-format-differences), | ||||
| of [ledger's journal format](http://ledger-cli.org/3.0/doc/ledger3.html#Journal-Format), | ||||
| so hledger can work with [compatible](FAQ.html#what-are-the-file-format-differences) ledger journal files as well. | ||||
| It's safe, and encouraged, to run both hledger and ledger on the same journal file, | ||||
| @ -231,7 +238,7 @@ digit group separators, you must also include a decimal point in at least | ||||
| one number in the same commodity, so that hledger knows which character is | ||||
| which. Eg, write `$1,000.00` or `$1.000,00`. | ||||
| 
 | ||||
| ##### Canonical amount styles | ||||
| ##### Amount display styles | ||||
| 
 | ||||
| Based on how you format amounts, hledger will infer canonical display | ||||
| styles for each commodity, and use these when displaying amounts in that | ||||
| @ -242,9 +249,8 @@ commodity. Amount styles include: | ||||
| - the decimal point character (period or comma) | ||||
| - the display precision (number of decimal places displayed) | ||||
| 
 | ||||
| The canonical style is generally the style of the first amount seen in a commodity | ||||
| (which may be in a [default commodity directive](#default-commodity). | ||||
| The precision is the highest precision seen among all amounts in the commmodity. | ||||
| The canonical style is generally the style of the first posting amount seen in a commodity | ||||
| The precision is the highest precision seen among all posting amounts in the commmodity. | ||||
| 
 | ||||
| ##### Balance Assertions | ||||
| 
 | ||||
| @ -252,7 +258,7 @@ hledger supports ledger-style | ||||
| [balance assertions](http://ledger-cli.org/3.0/doc/ledger3.html#Balance-assertions) | ||||
| in journal files. | ||||
| These look like `=EXPECTEDBALANCE` following a posting's amount. Eg in | ||||
| this example we assert the expected balance in accounts a and b after | ||||
| this example we assert the expected dollar balance in accounts a and b after | ||||
| each posting: | ||||
| 
 | ||||
|     2013/1/1 | ||||
| @ -266,25 +272,48 @@ each posting: | ||||
| After reading a journal file, hledger will check all balance | ||||
| assertions and report an error if any of them fail. Balance assertions | ||||
| can protect you from, eg, inadvertently disrupting reconciled balances | ||||
| while cleaning up old entries. | ||||
| while cleaning up old entries. You can disable them temporarily with | ||||
| the `--ignore-assertions` flag, which can be useful for | ||||
| troubleshooting or for reading Ledger files. | ||||
| 
 | ||||
| Note, when checking balance assertions hledger sorts the account's | ||||
| postings first by date and then (for postings with the same date) by | ||||
| parse order. This is different from ledger, which currently goes | ||||
| strictly by parse order. Sorting by date means balance assertions will | ||||
| still work if you reorder your entries. | ||||
| ###### Assertions and ordering | ||||
| 
 | ||||
| With included files, things are a little more complicated. Including | ||||
| preserves the ordering of postings and assertions. If you have multiple | ||||
| postings to an account on the same day, split across different files, | ||||
| and you also want to assert the account's balance on the same day, | ||||
| you can run into trouble depending on where the assertion is located. | ||||
| hledger sorts an account's postings and assertions first by date and | ||||
| then (for postings on the same day) by parse order. Note this is | ||||
| different from Ledger, which sorts assertions only by parse | ||||
| order. (Also, Ledger assertions do not see the accumulated effect of | ||||
| repeated postings to the same account within a transaction.) | ||||
| 
 | ||||
| Also note the asserted balance must be a simple amount - it's not | ||||
| currently possible to assert a balance containing multiple commodities. | ||||
| So, hledger balance assertions keep working if you reorder | ||||
| differently-dated transactions within the journal. But if you reorder | ||||
| same-dated transactions or postings, assertions might break and require | ||||
| updating. This order dependence does bring an advantage: precise | ||||
| control over the order of postings and assertions within a day, so you | ||||
| can assert intra-day balances. | ||||
| 
 | ||||
| With [[#including-other-files|included files]], things are a little | ||||
| more complicated. Including preserves the ordering of postings and | ||||
| assertions. If you have multiple postings to an account on the same | ||||
| day, split across different files, and you also want to assert the | ||||
| account's balance on the same day, you'll have to put the assertion | ||||
| in the right file. | ||||
| 
 | ||||
| 
 | ||||
| ###### Assertions and commodities | ||||
| 
 | ||||
| The asserted balance must be a simple single-commodity amount, and in | ||||
| fact the assertion checks only this commodity's balance within the | ||||
| (possibly multi-commodity) account balance.  We could call this a | ||||
| partial balance assertion.  This is compatible with Ledger, and makes | ||||
| it possible to make assertions about accounts containing multiple | ||||
| commodities. | ||||
| 
 | ||||
| To assert each commodity's balance in such a multi-commodity account, | ||||
| you can add multiple postings (with amount 0 if necessary). But note | ||||
| that no matter how many assertions you add, you can't be sure the | ||||
| account does not contain some unexpected commodity. (We'll add support | ||||
| for this kind of total balance assertion if there's demand.) | ||||
| 
 | ||||
| The impact of many balance assertions on parsing time for large files is | ||||
| unknown. | ||||
| 
 | ||||
| #### Prices | ||||
| 
 | ||||
| @ -413,21 +442,35 @@ See also [[How to use account aliases]]. | ||||
| 
 | ||||
| ##### Default commodity | ||||
| 
 | ||||
| You can set a default commodity, to be used for any subsequent amounts | ||||
| which have no commodity symbol (including [[#add|added]] amounts), with the D directive: | ||||
| You can set a default commodity, to be used for amounts without one. | ||||
| Use the D directive with a sample amount. | ||||
| The commodity (and the sample amount's display style) will be applied to all subsequent commodity-less amounts, up to the next D directive. | ||||
| (Note this is different from Ledger's default commodity directive.) | ||||
| 
 | ||||
|     ; set british pound as default commodity | ||||
|     ; also sets canonical style for pound amounts, since it's the first one | ||||
| Also note the directive itself does not influence the commodity's default | ||||
| [[#amount-display-styles|display style]], but the amount it is | ||||
| applied to might. Here's an example: | ||||
| 
 | ||||
|     ; set £ as the default commodity | ||||
|     D £1,000.00 | ||||
|      | ||||
|     2010/1/1 | ||||
|       a  2340    ; no symbol, so will use the default commodity above, and its style | ||||
|                  ; (pound symbol on left, comma thousands separator, at least two decimal places)  | ||||
|       a  2340 | ||||
|       b | ||||
|      | ||||
|     2014/1/1 | ||||
|       c  £1000 | ||||
|       d | ||||
|      | ||||
| 
 | ||||
| A default commodity directive can also influence the  | ||||
| [[#canonical-amount-styles|canonical amount style]] for the commodity, | ||||
| as in the example above. | ||||
|     $ hledger print | ||||
|     2010/01/01 | ||||
|         a     £2,340.00 | ||||
|         b    £-2,340.00 | ||||
| 
 | ||||
|     2014/01/01 | ||||
|         c     £1,000.00 | ||||
|         d    £-1,000.00 | ||||
| 
 | ||||
| ##### Default parent account | ||||
| 
 | ||||
| @ -529,26 +572,26 @@ a single field assignment. Here, any CSV record containing the | ||||
| pattern `groceries` will have its account2 field set to | ||||
| `expenses:groceries`. | ||||
| 
 | ||||
| 	if groceries | ||||
| 	 account2 expenses:groceries | ||||
|     if groceries | ||||
|      account2 expenses:groceries | ||||
| 
 | ||||
| Example 2. Here, CSV records containing any of these patterns will | ||||
| have their account2 and comment fields set as shown. The | ||||
| capitalisation is not required, that's just how I copied them from | ||||
| my bank's CSV. | ||||
| 
 | ||||
| 	if | ||||
| 	MONTHLY SERVICE FEE | ||||
| 	ATM TRANSACTION FEE | ||||
| 	FOREIGN CURR CONV | ||||
| 	OVERDRAFT TRANSFER FEE | ||||
| 	BANKING THRU SOFTWARE:FEE | ||||
| 	INTERNATIONAL PURCHASE TRANSACTION FEE | ||||
| 	WIRE TRANS SVC CHARGE | ||||
| 	FEE FOR TRANSFER | ||||
| 	VISA ISA FEE | ||||
| 	 account2 expenses:business:banking | ||||
| 	 comment  XXX probably deductible, check | ||||
|     if | ||||
|     MONTHLY SERVICE FEE | ||||
|     ATM TRANSACTION FEE | ||||
|     FOREIGN CURR CONV | ||||
|     OVERDRAFT TRANSFER FEE | ||||
|     BANKING THRU SOFTWARE:FEE | ||||
|     INTERNATIONAL PURCHASE TRANSACTION FEE | ||||
|     WIRE TRANS SVC CHARGE | ||||
|     FEE FOR TRANSFER | ||||
|     VISA ISA FEE | ||||
|      account2 expenses:business:banking | ||||
|      comment  XXX probably deductible, check | ||||
| 
 | ||||
| **skip** [*N*]\\ | ||||
| Skip this number of CSV records (1 by default). | ||||
| @ -562,17 +605,17 @@ This is required if the values for `date` or `date2` fields are not in YYYY/MM/D | ||||
| DATEFMT specifies a strptime-style date parsing pattern containing [year/month/date format codes](http://hackage.haskell.org/packages/archive/time/latest/doc/html/Data-Time-Format.html#v:formatTime). | ||||
| Note the pattern must parse the CSV date value completely. Some examples: | ||||
| 
 | ||||
| 	# "6/11/2013" | ||||
| 	date-format %-d/%-m/%Y | ||||
|     # "6/11/2013" | ||||
|     date-format %-d/%-m/%Y | ||||
| 
 | ||||
| 	# "11/06/2013" | ||||
| 	date-format %m/%d/%Y | ||||
|     # "11/06/2013" | ||||
|     date-format %m/%d/%Y | ||||
| 
 | ||||
| 	# "2013-Nov-06" | ||||
| 	date-format %Y-%h-%d | ||||
|     # "2013-Nov-06" | ||||
|     date-format %Y-%h-%d | ||||
| 
 | ||||
| 	# "11/6/2013 11:32 PM" | ||||
| 	date-format %-m/%-d/%Y %l:%M %p | ||||
|     # "11/6/2013 11:32 PM" | ||||
|     date-format %-m/%-d/%Y %l:%M %p | ||||
| 
 | ||||
| **include** *RULESFILE*\\ | ||||
| Include another rules file at this point. Useful for common rules shared across multiple CSV files. | ||||
| @ -631,6 +674,194 @@ To generate time logs, ie to clock in and clock out, you could: | ||||
| - or use the old `ti` and `to` scripts in the [ledger 2.x repository](https://github.com/ledger/ledger/tree/maint/scripts). | ||||
|   These rely on a "timeclock" executable which I think is just the ledger 2 executable renamed. | ||||
| 
 | ||||
| 
 | ||||
| ## Options | ||||
| 
 | ||||
| Use `hledger COMMAND --help` to list the options available for that | ||||
| command.  The following general options are common to most commands, | ||||
| though not every one is applicable in all cases: | ||||
| 
 | ||||
| ``` | ||||
| General flags: | ||||
|   -f --file=FILE         use a different input file. For stdin, use - | ||||
|      --rules-file=RFILE  CSV conversion rules file (default: FILE.rules) | ||||
|      --alias=OLD=NEW     display accounts named OLD as NEW | ||||
|      --ignore-assertions ignore any balance assertions in the journal | ||||
|   -b --begin=DATE        include postings/txns on or after this date | ||||
|   -e --end=DATE          include postings/txns before this date | ||||
|   -D --daily             multiperiod/multicolumn report by day | ||||
|   -W --weekly            multiperiod/multicolumn report by week | ||||
|   -M --monthly           multiperiod/multicolumn report by month | ||||
|   -Q --quarterly         multiperiod/multicolumn report by quarter | ||||
|   -Y --yearly            multiperiod/multicolumn report by year | ||||
|   -p --period=PERIODEXP  set start date, end date, and/or reporting interval | ||||
|                          all at once (overrides the flags above) | ||||
|      --date2 --aux-date  use postings/txns' secondary dates instead | ||||
|   -C --cleared           include only cleared postings/txns | ||||
|   -U --uncleared         include only uncleared postings/txns | ||||
|   -R --real              include only non-virtual postings | ||||
|      --depth=N           hide accounts/postings deeper than N | ||||
|   -E --empty             show empty/zero things which are normally omitted | ||||
|   -B --cost              show amounts in their cost price's commodity | ||||
|   -h --help              show general help or (after command) command help | ||||
|      --debug[=N]         show debug output (increase N for more) | ||||
|      --version           show version information | ||||
| ``` | ||||
| 
 | ||||
| Read on for some additional notes. | ||||
| 
 | ||||
| ### Smart dates | ||||
| 
 | ||||
| Unlike dates in the journal file, hledger's user interfaces accept a | ||||
| more flexible date syntax.  These "smart" dates allow some english | ||||
| words, can be relative to today's date, and assume 1 when less-significant date parts are omitted. | ||||
| 
 | ||||
| Examples: | ||||
| 
 | ||||
| | `2009/1/1`, `2009/01/01`, `2009-1-1`, `2009.1.1` | simple dates, several separators allowed             | | ||||
| | `2009/1`, `2009`                                 | same as above - a missing day or month defaults to 1 | | ||||
| | `1/1`, `january`, `jan`, `this year`             | relative dates, meaning january 1 of the current year| | ||||
| | `next year`                                      | january 1 of next year                               | | ||||
| | `this month`                                     | the 1st of the current month                         | | ||||
| | `this week`                                      | the most recent monday                               | | ||||
| | `last week`                                      | the monday of the week before this one               | | ||||
| | `today`, `yesterday`, `tomorrow`                 |                                                      | | ||||
| | `-pmonthlyfrom2/1tonextmonth`                    | the spaces are optional                              | | ||||
| 
 | ||||
| ### Reporting interval | ||||
| 
 | ||||
| A reporting interval can be specified so that commands like | ||||
| [[#register]], [[#balance]] and [[#activity]] will divide their | ||||
| reports into multiple report periods.  The basic intervals can be | ||||
| selected with one of `-D/--daily`, `-W/--weekly`, `-M/--monthly`, | ||||
| `-Q/--quarterly`, or `-Y/--yearly`.  More complex intervals may be | ||||
| specified with a period expression. | ||||
| 
 | ||||
| ### Period expressions | ||||
| 
 | ||||
| The `-p/--period` option accepts period expressions, a shorthand way | ||||
| of expressing a start date, end date, and or reporting interval all at | ||||
| once. Note a period expression on the command line will cause any other date | ||||
| flags (`-b`/`-e`/`-D`/`-W`/`-M`/`-Q`/`-Y`) to be ignored. | ||||
| 
 | ||||
| hledger's period expressions are similar to Ledger's, though not identical. | ||||
| Here's a basic period expression specifying the first quarter of 2009.  Note | ||||
| hledger always treats start dates as inclusive and end dates as exclusive: | ||||
| 
 | ||||
|     -p "from 2009/1/1 to 2009/4/1" | ||||
| 
 | ||||
| Keywords like "from" and "to" are optional, and so are the spaces.  Just | ||||
| don't run two dates together: | ||||
| 
 | ||||
|     -p2009/1/1to2009/4/1 | ||||
|     -p"2009/1/1 2009/4/1" | ||||
| 
 | ||||
| Dates are [smart dates](#smart-dates), so if the current year is 2009, the | ||||
| above can also be written as: | ||||
| 
 | ||||
|     -p "1/1 to 4/1" | ||||
|     -p "january to apr" | ||||
|     -p "this year to 4/1" | ||||
| 
 | ||||
| If you specify only one date, the missing start or end date will be the | ||||
| earliest or latest transaction in your journal: | ||||
| 
 | ||||
|     -p "from 2009/1/1"  (everything after january 1, 2009) | ||||
|     -p "from 2009/1"    (the same) | ||||
|     -p "from 2009"      (the same) | ||||
|     -p "to 2009"        (everything before january 1, 2009) | ||||
| 
 | ||||
| A single date with no "from" or "to" defines both the start and end date | ||||
| like so: | ||||
| 
 | ||||
|     -p "2009"           (the year 2009;    equivalent to "2009/1/1 to 2010/1/1") | ||||
|     -p "2009/1"         (the month of jan; equivalent to "2009/1/1 to 2009/2/1") | ||||
|     -p "2009/1/1"       (just that day;    equivalent to "2009/1/1 to 2009/1/2") | ||||
| 
 | ||||
| Period expressions can also start with (or be) a reporting interval: | ||||
| `daily`, `weekly`, `monthly`, `quarterly`, `yearly`, or one of the | ||||
| `every ...` expressions below. Optionally the word `in` may appear | ||||
| between the reporting interval and the start/end dates. | ||||
| Examples: | ||||
| 
 | ||||
|     -p "weekly from 2009/1/1 to 2009/4/1" | ||||
|     -p "monthly in 2008" | ||||
|     -p "bimonthly from 2008" | ||||
|     -p "quarterly" | ||||
|     -p "every 2 weeks" | ||||
|     -p "every 5 days from 1/3" | ||||
|     -p "every 15th day of month" | ||||
|     -p "every 4th day of week" | ||||
| 
 | ||||
| ### Depth limiting | ||||
| 
 | ||||
| With the `--depth N` option, commands like [[#account]], [[#balance]] | ||||
| and [[#register]] will show only the uppermost accounts in the account | ||||
| tree, down to level N. Use this when you want a summary with less detail. | ||||
| 
 | ||||
| ## Query arguments | ||||
| 
 | ||||
| Part of hledger's usefulness is being able to report on just a precise subset of your data.   | ||||
| Most commands accept an optional query expression, written as arguments after the command name, | ||||
| to filter the data by date, account name or other criteria. Query expressions are also used | ||||
| in the [[#web|web ui]]'s search form. | ||||
| 
 | ||||
| The query syntax is similar to a Google search expression: one or | ||||
| more space-separated search terms, optional prefixes to match specific | ||||
| fields, quotes to enclose whitespace, etc. | ||||
| A query term can be any of the following: | ||||
| 
 | ||||
| - `REGEX` - match account names by this regular expression | ||||
| - `acct:REGEX` - same as above | ||||
| - `code:REGEX` - match by transaction code (eg check number) | ||||
| - `desc:REGEX` - match transaction descriptions | ||||
| - `date:PERIODEXPR` - match dates within the specified [[#period-expressions|period]]. *Actually, full period syntax is [[https://github.com/simonmichael/hledger/issues/141|not yet supported]].* | ||||
| - `date2:PERIODEXPR` - as above, but match secondary dates | ||||
| - `tag:NAME[=REGEX]` - match by (exact, case sensitive) [[#tags|tag]] name, and optionally match the tag value by regular expression. Note `tag:` will match a transaction if it or any its postings have the tag, and will match posting if it or its parent transaction has the tag. | ||||
| - `depth:N` - match (or display, depending on command) accounts at or above this [[#depth-limiting|depth]] | ||||
| - `status:1` or `status:0` - match cleared/uncleared transactions | ||||
| - `real:1` or `real:0` - match real/virtual-ness | ||||
| - `empty:1` or `empty:0` - match if amount is/is not zero | ||||
| - `amt:N`, `amt:<N`, `amt:<=N`, `amt:>N`, `amt:>=N` - match postings with a single-commodity | ||||
|   amount that is equal to, less than, or greater than N. | ||||
|   (Multi-commodity amounts are not tested, and will always match.) | ||||
|   The comparison has two modes: if N is preceded by a `+` or `-` sign | ||||
|   (or is 0), the two signed numbers are compared. Otherwise, the | ||||
|   absolute magnitudes are compared, ignoring sign. | ||||
| - `cur:REGEX` - match postings or transactions including any amounts | ||||
|   whose currency/commodity symbol is fully matched by REGEX. (For a | ||||
|   partial match, use `.*REGEX.*`). Note, to match characters which are | ||||
|   regex-significant, like the dollar sign (`$`), you need to prepend `\`. | ||||
|   And when using the command line you need to add one more level | ||||
|   of quoting to hide it from the shell, so eg do: `hledger print cur:'\$'` | ||||
|   or `hledger print cur:\\$`. | ||||
| - `not:` before any of the above negates the match | ||||
| 
 | ||||
| ### Combining query arguments | ||||
| 
 | ||||
| hledger query expressions don't support full boolean logic. Instead, multiple query terms | ||||
| are combined as follows: | ||||
| 
 | ||||
| - The [[#print]] command selects transactions which: | ||||
|   - match any of the description terms AND | ||||
|   - have any postings matching any of the positive account terms AND | ||||
|   - have no postings matching any of the negative account terms AND | ||||
|   - match all the other terms. | ||||
| 
 | ||||
| <!-- --> | ||||
| 
 | ||||
| - Other reporting commands (eg [[#register]] and [[#balance]]) select transactions/postings/accounts which match (or negatively match): | ||||
|   - any of the description terms AND | ||||
|   - any of the account terms AND | ||||
|   - all the other terms. | ||||
| 
 | ||||
| ### Query arguments vs options | ||||
| 
 | ||||
| On the command line, some of the query terms above can also be expressed as command-line flags.  | ||||
| Generally you can mix and match query arguments and flags, and the resulting query will be their intersection. | ||||
| Remember that a `-p` [[#period-expressions|period]] flag will cause any other `-b`, `-e` or `-p` flags on the command line to be ignored. | ||||
| 
 | ||||
| 
 | ||||
| ## Commands | ||||
| 
 | ||||
| hledger provides a number of subcommands out of the box; run `hledger` with no arguments to see a list. | ||||
| @ -710,7 +941,7 @@ Here's [[step-by-step#record-a-transaction-with-hledger-add|an example]]. | ||||
|     date ? [2013/04/09]: <CTRL-D> | ||||
|     $ | ||||
| --> | ||||
| 	 | ||||
|      | ||||
| ### Reporting | ||||
| 
 | ||||
| These are the commands for actually querying your ledger. | ||||
| @ -862,6 +1093,79 @@ be "enlarged" if necessary so that they encompass the displayed report | ||||
| periods. This is so that the first and last periods will be "full" and | ||||
| comparable to the others. | ||||
| 
 | ||||
| The `-E/--empty` flag does two things here: first, the report will | ||||
| show all columns within the specified report period (without -E, | ||||
| leading and trailing columns with all zeroes are not shown). Second, | ||||
| all accounts which existed at the report start date will be | ||||
| considered, not just the ones with activity during the report period | ||||
| (use -E to include low-activity accounts which would otherwise would | ||||
| be omitted). | ||||
| 
 | ||||
| ##### Custom output formats | ||||
| 
 | ||||
| In simple balance reports (only), the `--format FMT` option will customize | ||||
| the format of output lines. `FMT` is like a C printf/strftime-style | ||||
| format string, except that field names are enclosed in parentheses: | ||||
| 
 | ||||
|     %[-][MIN][.MAX]([FIELD]) | ||||
| 
 | ||||
| If the minus sign is given, the text is left justified. The `MIN` field | ||||
| specified a minimum number of characters in width. After the value is | ||||
| injected into the string, spaces is added to make sure the string is at | ||||
| least as long as `MIN`. Similary, the `MAX` field specifies the maximum | ||||
| number of characters. The string will be cut if the injected string is too | ||||
| long. | ||||
| 
 | ||||
| - `%-(total)   ` the total of an account, left justified | ||||
| - `%20(total)  ` The same, right justified, at least 20 chars wide | ||||
| - `%.20(total) ` The same, no more than 20 chars wide | ||||
| - `%-.20(total)` Left justified, maximum twenty chars wide | ||||
| 
 | ||||
| The following `FIELD` types are currently supported: | ||||
| 
 | ||||
| - `account` inserts the account name | ||||
| - `depth_spacer` inserts a space for each level of an account's | ||||
|   depth. That is, if an account has two parents, this construct will | ||||
|   insert two spaces. If a minimum width is specified, that much space is | ||||
|   inserted for each level of depth. Thus `%5_`, for an account with four | ||||
|   parents, will insert twenty spaces. | ||||
| - `total` inserts the total for the account | ||||
| 
 | ||||
| Examples: | ||||
| 
 | ||||
| If you want the account before the total you can use this format: | ||||
| 
 | ||||
|     $ hledger balance --format "%20(account) %-(total)" | ||||
|                   assets $-1 | ||||
|              bank:saving $1 | ||||
|                     cash $-2 | ||||
|                 expenses $2 | ||||
|                     food $1 | ||||
|                 supplies $1 | ||||
|                   income $-2 | ||||
|                    gifts $-1 | ||||
|                   salary $-1 | ||||
|        liabilities:debts $1 | ||||
|     -------------------- | ||||
|                        0 | ||||
| 
 | ||||
| Or, if you'd like to export the balance sheet: | ||||
| 
 | ||||
|     $ hledger balance --format "%(total);%(account)" --no-total | ||||
|     $-1;assets | ||||
|     $1;bank:saving | ||||
|     $-2;cash | ||||
|     $2;expenses | ||||
|     $1;food | ||||
|     $1;supplies | ||||
|     $-2;income | ||||
|     $-1;gifts | ||||
|     $-1;salary | ||||
|     $1;liabilities:debts | ||||
| 
 | ||||
| The default output format is `%20(total)  %2(depth_spacer)%-(account)`. | ||||
| 
 | ||||
| 
 | ||||
| #### incomestatement | ||||
| 
 | ||||
| This command displays a simple | ||||
| @ -905,7 +1209,7 @@ Examples: | ||||
|     $ hledger stats | ||||
|     $ hledger stats -p 'monthly in 2009' | ||||
| 
 | ||||
| ### Utility | ||||
| ### Misc. | ||||
| 
 | ||||
| #### test | ||||
| 
 | ||||
| @ -919,7 +1223,7 @@ Examples: | ||||
|     $ hledger test | ||||
|     $ hledger test -v balance | ||||
| 
 | ||||
| ### Add-ons | ||||
| ### Add-on | ||||
| 
 | ||||
| Add-on commands are executables in your PATH whose name starts with | ||||
| `hledger-` and ends with no file extension or one of these common | ||||
| @ -975,8 +1279,9 @@ See the package page for more. | ||||
| #### web | ||||
| 
 | ||||
| [hledger-web](http://hackage.haskell.org/package/hledger-web) | ||||
| provides a web-based user interface for viewing and modifying your ledger ([demo](http://demo.hledger.org)). | ||||
| provides a web-based user interface for viewing and modifying your ledger. | ||||
| It includes an account register view that is more useful than the command-line register, and basic data entry and editing. | ||||
| Try it out at http://demo.hledger.org. | ||||
| 
 | ||||
| web-specific options: | ||||
| 
 | ||||
| @ -1030,11 +1335,11 @@ make them available. The scripts are designed to run interpreted on | ||||
| unix systems (for tweaking), or you can compile them (for speed and | ||||
| robustness). | ||||
| 
 | ||||
| #### balance-csv.hs | ||||
| #### balance-csv | ||||
| 
 | ||||
| Like the balance command, but with CSV output. | ||||
| 
 | ||||
| #### equity.hs | ||||
| #### equity | ||||
| 
 | ||||
| Like ledger's equity command, this prints a single journal entry with | ||||
| postings matching the current balance in each account (or the | ||||
| @ -1047,15 +1352,15 @@ old file, resetting balances to 0. This means you'll see the correct | ||||
| asset/liability balances whether you use one file or a whole sequence | ||||
| of files as input to hledger. | ||||
| 
 | ||||
| #### print-unique.hs | ||||
| #### print-unique | ||||
| 
 | ||||
| Prints only journal entries which are unique (by description). | ||||
| 
 | ||||
| #### register-csv.hs | ||||
| #### register-csv | ||||
| 
 | ||||
| Like the register command, but with CSV output. | ||||
| 
 | ||||
| #### rewrite.hs | ||||
| #### rewrite | ||||
| 
 | ||||
| Prints all journal entries, adding specified custom postings to matched entries. | ||||
| 
 | ||||
| @ -1116,256 +1421,46 @@ Examples: | ||||
| --> | ||||
| 
 | ||||
| 
 | ||||
| ## Common options | ||||
| ## Known limitations | ||||
| 
 | ||||
| The following common features and options work with most subcommands. | ||||
| Here are some things to be aware of. | ||||
| 
 | ||||
| ### Queries | ||||
| ### Add-on-specific options must follow -- | ||||
| 
 | ||||
| Part of hledger's usefulness is being able to report on just a precise subset of your data.   | ||||
| Most commands accept an optional query expression, written as arguments after the command name, | ||||
| to filter the data by date, account name or other criteria. Query expressions are also used | ||||
| in the [[#web|web ui]]'s search form. | ||||
| When invoking an add-on via hledger, add-on flags which are not also | ||||
| understood by the main hledger executable must have a `--` argument | ||||
| preceding them. Eg hledger-web's `--server` flag must be used like so: | ||||
| `hledger web -- --server`. | ||||
| 
 | ||||
| The query syntax is similar to a Google search expression: one or | ||||
| more space-separated search terms, optional prefixes to match specific | ||||
| fields, quotes to enclose whitespace, etc. | ||||
| A query term can be any of the following: | ||||
| ### -w/--width and --debug options must be written without whitespace | ||||
| 
 | ||||
| - `REGEX` - match account names by this regular expression | ||||
| - `acct:REGEX` - same as above | ||||
| - `code:REGEX` - match by transaction code (eg check number) | ||||
| - `desc:REGEX` - match transaction descriptions | ||||
| - `date:PERIODEXPR` - match dates within the specified [[#period-expressions|period]]. *Actually, full period syntax is [[https://github.com/simonmichael/hledger/issues/141|not yet supported]].* | ||||
| - `date2:PERIODEXPR` - as above, but match secondary dates | ||||
| - `tag:NAME[=REGEX]` - match by (exact, case sensitive) [[#tags|tag]] name, and optionally match the tag value by regular expression. Note `tag:` will match a transaction if it or any its postings have the tag, and will match posting if it or its parent transaction has the tag. | ||||
| - `depth:N` - match (or display, depending on command) accounts at or above this [[#depth-limiting|depth]] | ||||
| - `status:1` or `status:0` - match cleared/uncleared transactions | ||||
| - `real:1` or `real:0` - match real/virtual-ness | ||||
| - `empty:1` or `empty:0` - match if amount is/is not zero | ||||
| - `amt:N`, `amt:<N`, `amt:>N` - match postings with a single-commodity | ||||
|   amount that is equal to, less than, or greater than N. | ||||
|   (Multi-commodity amounts are not tested, and will always match.) | ||||
|   The comparison has two modes: if N is preceded by a `+` or `-` sign | ||||
|   (or is 0), the two signed numbers are compared. Otherwise, the | ||||
|   absolute magnitudes are compared, ignoring sign. | ||||
| - `cur:REGEX` - match postings or transactions including any amounts | ||||
|   whose currency/commodity symbol is fully matched by REGEX. (For a | ||||
|   partial match, use `.*REGEX.*`). Note, to match characters which are | ||||
|   regex-significant, like the dollar sign (`$`), you need to prepend `\`. | ||||
|   And when using the command line you need to add one more level | ||||
|   of quoting to hide it from the shell, so eg do: `hledger print cur:'\$'` | ||||
|   or `hledger print cur:\\$`. | ||||
| - `not:` before any of the above negates the match | ||||
| Up to hledger 0.23, these optional-value flags [[https://github.com/simonmichael/hledger/issues/149|did not work]] with whitespace between the flag and value. | ||||
| Good: `--debug=2`, `-w100`. Bad: `--debug 2`, `-w 100`. | ||||
| (From 0.24, the value is required.) | ||||
| 
 | ||||
| #### How query terms combine | ||||
| ### Not all of Ledger's journal file syntax is supported | ||||
| 
 | ||||
| hledger query expressions don't support full boolean logic. Instead, multiple query terms | ||||
| are combined as follows: | ||||
| See [[faq#file-format-differences|file format differences]]. | ||||
| 
 | ||||
| - The [[#print]] command selects transactions which: | ||||
|   - match any of the description terms AND | ||||
|   - have any postings matching any of the positive account terms AND | ||||
|   - have no postings matching any of the negative account terms AND | ||||
|   - match all the other terms. | ||||
| ### balance is less speedy than Ledger's on large data files | ||||
| 
 | ||||
| <!-- --> | ||||
| hledger's balance command (in particular) takes more time, and uses more memory, than Ledger's. | ||||
| This becomes more noticeable with large data files. | ||||
| 
 | ||||
| - Other reporting commands (eg [[#register]] and [[#balance]]) select transactions/postings/accounts which match (or negatively match): | ||||
|   - any of the description terms AND | ||||
|   - any of the account terms AND | ||||
|   - all the other terms. | ||||
| ### Windows CMD.EXE | ||||
| 
 | ||||
| Non-ascii characters and colours are not supported. | ||||
| 
 | ||||
| #### Query options vs query arguments | ||||
| ### Windows cygwin/msys/mintty | ||||
| 
 | ||||
| On the command line, some of the query terms above can also be expressed as command-line flags.  | ||||
| Generally you can mix and match query arguments and flags, and the resulting query will be their intersection. Note within the command-line flags, a `-p` [[#period-expressions|period]] flag causes any `-b` or `-e` flags, and any preceding `-p` flags, to be ignored. | ||||
| 
 | ||||
| ### Smart dates | ||||
| 
 | ||||
| Unlike the journal file format, hledger's user interface accepts flexible | ||||
| "smart dates", for example in the `-b` and `-e` options, period | ||||
| expressions, display expressions, the add command and the web add form. | ||||
| Smart dates allow some natural english words, will assume 1 where | ||||
| less-significant date parts are unspecified, and can be relative to | ||||
| today's date. Examples: | ||||
| 
 | ||||
| - `2009/1/1`, `2009/01/01`, `2009-1-1`, `2009.1.1` (simple dates) | ||||
| - `2009/1`, `2009` (these also mean january 1, 2009) | ||||
| - `1/1`, `january`, `jan`, `this year` (relative dates, meaning january 1 of this year) | ||||
| - `next year` (january 1, next year) | ||||
| - `this month` (the 1st of the current month) | ||||
| - `this week` (the most recent monday) | ||||
| - `last week` (the monday of the week before this one) | ||||
| - `today`, `yesterday`, `tomorrow` | ||||
| 
 | ||||
| Spaces in smart dates are optional, so eg `-b lastmonth` or `date:fromlastmonth` are valid. | ||||
| 
 | ||||
| ### Period expressions | ||||
| 
 | ||||
| hledger supports flexible "period expressions" with the `-p/--period` | ||||
| option to select transactions within a period of time (eg in 2009) and/or | ||||
| with a reporting interval (eg weekly). hledger period expressions are | ||||
| similar but not identical to ledger's. | ||||
| 
 | ||||
| Here is a basic period expression specifying the first quarter of 2009. | ||||
| Note the start date is always included and the end date is always excluded: | ||||
| 
 | ||||
|     -p "from 2009/1/1 to 2009/4/1" | ||||
| 
 | ||||
| Keywords like "from" and "to" are optional, and so are the spaces.  Just | ||||
| don't run two dates together: | ||||
| 
 | ||||
|     -p2009/1/1to2009/4/1 | ||||
|     -p"2009/1/1 2009/4/1" | ||||
| 
 | ||||
| Dates are [smart dates](#smart-dates), so if the current year is 2009, the | ||||
| above can also be written as: | ||||
| 
 | ||||
|     -p "1/1 to 4/1" | ||||
|     -p "january to apr" | ||||
|     -p "this year to 4/1" | ||||
| 
 | ||||
| If you specify only one date, the missing start or end date will be the | ||||
| earliest or latest transaction in your journal: | ||||
| 
 | ||||
|     -p "from 2009/1/1"  (everything after january 1, 2009) | ||||
|     -p "from 2009/1"    (the same) | ||||
|     -p "from 2009"      (the same) | ||||
|     -p "to 2009"        (everything before january 1, 2009) | ||||
| 
 | ||||
| A single date with no "from" or "to" defines both the start and end date | ||||
| like so: | ||||
| 
 | ||||
|     -p "2009"           (the year 2009;    equivalent to "2009/1/1 to 2010/1/1") | ||||
|     -p "2009/1"         (the month of jan; equivalent to "2009/1/1 to 2009/2/1") | ||||
|     -p "2009/1/1"       (just that day;    equivalent to "2009/1/1 to 2009/1/2") | ||||
| 
 | ||||
| The `-b/--begin` and `-e/--end` options may be used as a shorthand for `-p | ||||
| 'from ...'` and `-p 'to ...'` respectively. | ||||
| 
 | ||||
| Note, however: a `-p/--period` option in the command line will cause any | ||||
| `-b`/`-e`/`-D`/`-W`/`-M`/`-Q`/`-Y` flags to be ignored. | ||||
| 
 | ||||
| ### Reporting interval | ||||
| 
 | ||||
| Period expressions can also begin with (or be) a reporting interval, which | ||||
| affects commands like [register](#register) and [activity](#activity). | ||||
| The reporting interval can be `daily`, `weekly`, `monthly`, `quarterly`, `yearly`, | ||||
| or one of the `every ...` expressions below, optionally followed by `in`. | ||||
| Examples: | ||||
| 
 | ||||
|     -p "weekly from 2009/1/1 to 2009/4/1" | ||||
|     -p "monthly in 2008" | ||||
|     -p "bimonthly from 2008" | ||||
|     -p "quarterly" | ||||
|     -p "every 2 weeks" | ||||
|     -p "every 5 days from 1/3" | ||||
|     -p "every 15th day of month" | ||||
|     -p "every 4th day of week" | ||||
| 
 | ||||
| A reporting interval may also be specified with the `-D/--daily`, | ||||
| `-W/--weekly`, `-M/--monthly`, `-Q/--quarterly`, and `-Y/--yearly` | ||||
| options. But as noted above, a `-p/--period` option will override these. | ||||
| 
 | ||||
| ### Display expressions | ||||
| 
 | ||||
| A [period expression](#period-expressions) or other [query](#queries) | ||||
| selects the transactions to be used for calculation. A display | ||||
| expression, specified with `-d/--display`, selects a more limited | ||||
| subset of transactions to be displayed in the report output.  | ||||
| 
 | ||||
| This useful, say, if you want to see your checking register just for | ||||
| this month, but with an accurate running balance based on all | ||||
| transactions. Eg: | ||||
| 
 | ||||
|     $ hledger register checking --display "d>=[1]" | ||||
| 
 | ||||
| meaning "make a register report of all checking transactions, but | ||||
| display only the ones with date on or after the 1st of this month." | ||||
| Any [smart date](#smart-dates) can appear inside the brackets. | ||||
| 
 | ||||
| The above the only kind of display expression we currently support: | ||||
| transactions before or after a given date. | ||||
| 
 | ||||
| ### Depth limiting | ||||
| 
 | ||||
| With the `--depth N` option, reports will show only the uppermost accounts | ||||
| in the account tree, down to level N. See the [balance](#balance), | ||||
| [register](#register) and [chart](#chart) examples. | ||||
| 
 | ||||
| ### Custom output formats | ||||
| 
 | ||||
| The `--format FMT` option will customize the line format of the balance | ||||
| command's output (only, for now). `FMT` is a C printf/strftime-style | ||||
| format string, with the exception that field names are enclosed in | ||||
| parentheses: | ||||
| 
 | ||||
|     %[-][MIN][.MAX]([FIELD]) | ||||
| 
 | ||||
| If the minus sign is given, the text is left justified. The `MIN` field | ||||
| specified a minimum number of characters in width. After the value is | ||||
| injected into the string, spaces is added to make sure the string is at | ||||
| least as long as `MIN`. Similary, the `MAX` field specifies the maximum | ||||
| number of characters. The string will be cut if the injected string is too | ||||
| long. | ||||
| 
 | ||||
| - `%-(total)   ` the total of an account, left justified | ||||
| - `%20(total)  ` The same, right justified, at least 20 chars wide | ||||
| - `%.20(total) ` The same, no more than 20 chars wide | ||||
| - `%-.20(total)` Left justified, maximum twenty chars wide | ||||
| 
 | ||||
| The following `FIELD` types are currently supported: | ||||
| 
 | ||||
| - `account` inserts the account name | ||||
| - `depth_spacer` inserts a space for each level of an account's | ||||
|   depth. That is, if an account has two parents, this construct will | ||||
|   insert two spaces. If a minimum width is specified, that much space is | ||||
|   inserted for each level of depth. Thus `%5_`, for an account with four | ||||
|   parents, will insert twenty spaces. | ||||
| - `total` inserts the total for the account | ||||
| 
 | ||||
| Examples: | ||||
| 
 | ||||
| If you want the account before the total you can use this format: | ||||
| 
 | ||||
|     $ hledger balance --format "%20(account) %-(total)" | ||||
|                   assets $-1 | ||||
|              bank:saving $1 | ||||
|                     cash $-2 | ||||
|                 expenses $2 | ||||
|                     food $1 | ||||
|                 supplies $1 | ||||
|                   income $-2 | ||||
|                    gifts $-1 | ||||
|                   salary $-1 | ||||
|        liabilities:debts $1 | ||||
|     -------------------- | ||||
|                        0 | ||||
| 
 | ||||
| Or, if you'd like to export the balance sheet: | ||||
| 
 | ||||
|     $ hledger balance --format "%(total);%(account)" --no-total | ||||
|     $-1;assets | ||||
|     $1;bank:saving | ||||
|     $-2;cash | ||||
|     $2;expenses | ||||
|     $1;food | ||||
|     $1;supplies | ||||
|     $-2;income | ||||
|     $-1;gifts | ||||
|     $-1;salary | ||||
|     $1;liabilities:debts | ||||
| 
 | ||||
| The default output format is `%20(total)  %2(depth_spacer)%-(account)` | ||||
| The tab key is not supported in hledger add. | ||||
| 
 | ||||
| 
 | ||||
| ## Troubleshooting | ||||
| 
 | ||||
| Here are some issues you might encounter when you run hledger | ||||
| (and remember you can also seek help from the | ||||
| [IRC channel](irc://irc.freenode.net/#ledger), | ||||
| [IRC channel](https://github.com/ledger/ledger/wiki/%23ledger-IRC-channel), | ||||
| [mail list](http://hledger.org/list) or | ||||
| [bug tracker](http://hledger.org/bugs)): | ||||
| 
 | ||||
| @ -1374,9 +1469,6 @@ cabal installs binaries into a special directory, which should be added | ||||
| to your PATH environment variable.  On unix-like systems, it is | ||||
| ~/.cabal/bin. | ||||
| 
 | ||||
| ### Fails to parse some valid Ledger files   | ||||
| See [[faq#file-format-differences|file format differences]]. | ||||
| 
 | ||||
| ### "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 | ||||
| @ -1386,34 +1478,35 @@ I'm not sure yet). | ||||
| 
 | ||||
| Here's an example of setting the locale temporarily, on ubuntu gnu/linux: | ||||
| 
 | ||||
| 	$ file my.journal | ||||
| 	my.journal: UTF-8 Unicode text                 # <- the file is UTF8-encoded | ||||
| 	$ locale -a | ||||
| 	C | ||||
| 	en_US.utf8                             # <- a UTF8-aware locale is available | ||||
| 	POSIX | ||||
| 	$ LANG=en_US.utf8 hledger -f my.journal print   # <- use it for this command | ||||
|     $ file my.journal | ||||
|     my.journal: UTF-8 Unicode text                 # <- the file is UTF8-encoded | ||||
|     $ locale -a | ||||
|     C | ||||
|     en_US.utf8                             # <- a UTF8-aware locale is available | ||||
|     POSIX | ||||
|     $ LANG=en_US.utf8 hledger -f my.journal print   # <- use it for this command | ||||
| 
 | ||||
| Here's one way to set it permanently, there are probably better ways: | ||||
| 
 | ||||
| 	$ echo "export LANG=en_US.UTF-8" >>~/.bash_profile | ||||
| 	$ bash --login | ||||
|     $ 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 first: | ||||
| 
 | ||||
| 	$ apt-get install language-pack-fr | ||||
| 	$ locale -a | ||||
| 	C | ||||
| 	en_US.utf8 | ||||
| 	fr_BE.utf8 | ||||
| 	fr_CA.utf8 | ||||
| 	fr_CH.utf8 | ||||
| 	fr_FR.utf8 | ||||
| 	fr_LU.utf8 | ||||
| 	POSIX | ||||
| 	$ LANG=fr_FR.utf8 hledger -f my.journal print | ||||
|     $ apt-get install language-pack-fr | ||||
|     $ locale -a | ||||
|     C | ||||
|     en_US.utf8 | ||||
|     fr_BE.utf8 | ||||
|     fr_CA.utf8 | ||||
|     fr_CH.utf8 | ||||
|     fr_FR.utf8 | ||||
|     fr_LU.utf8 | ||||
|     POSIX | ||||
|     $ LANG=fr_FR.utf8 hledger -f my.journal print | ||||
| 
 | ||||
| Note some platforms allow variant locale spellings, but not all (ubuntu | ||||
| accepts `fr_FR.UTF8`, mac osx requires exactly `fr_FR.UTF-8`). | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user