docs: say more about special chars and unicode chars (cf #895)
[ci skip]
This commit is contained in:
		
							parent
							
								
									9685699491
								
							
						
					
					
						commit
						c53502e1ac
					
				| @ -39,37 +39,96 @@ and then reuse them by writing `@FILENAME` in a command line. | |||||||
| To prevent this expansion of `@`-arguments, precede them with a `--` argument. | To prevent this expansion of `@`-arguments, precede them with a `--` argument. | ||||||
| For more, see [Save frequently used options](https://github.com/simonmichael/hledger/wiki/Save-frequently-used-options). | For more, see [Save frequently used options](https://github.com/simonmichael/hledger/wiki/Save-frequently-used-options). | ||||||
| 
 | 
 | ||||||
| ## Special characters in command line | ## Special characters in arguments and queries | ||||||
| 
 | 
 | ||||||
| Option and argument values which contain "problematic" characters | In shell command lines, option and argument values which contain "problematic" characters, | ||||||
| should be escaped with double quotes, backslashes, or (best) single quotes. | ie spaces,  | ||||||
| Problematic characters means spaces, and also characters which are significant to your  | and also characters significant to your shell such as `<`, `>`, `(`, `)`, `|` and `$`, | ||||||
| command shell, such as `<`, `>`, '(', ')', '|' and '$'. | should be escaped by enclosing them in quotes or by writing backslashes before the characters. | ||||||
| Eg: `hledger register -p 'last year' "accounts receivable (receivable|payable)" amt:\>100`. | Eg: | ||||||
| 
 | 
 | ||||||
| Characters which are significant both to the shell and in  | `hledger register -p 'last year' "accounts receivable (receivable|payable)" amt:\>100`. | ||||||
| [regular expressions](#regular-expressions) sometimes need to be double-escaped. | 
 | ||||||
| These include parentheses, the pipe symbol and the dollar sign. | ### More escaping | ||||||
| Eg, to match the dollar symbol, bash users should do: `hledger balance cur:'\$'` or  | 
 | ||||||
| `hledger balance cur:\\$`. | Characters significant both to the shell and in [regular expressions](#regular-expressions)  | ||||||
|  | may need one extra level of escaping. These include parentheses, the pipe symbol and the dollar sign. | ||||||
|  | Eg, to match the dollar symbol, bash users should do: | ||||||
|  | 
 | ||||||
|  | `hledger balance cur:'\$'` | ||||||
|  | 
 | ||||||
|  | or: | ||||||
|  | 
 | ||||||
|  | `hledger balance cur:\\$` | ||||||
|  | 
 | ||||||
|  | ### Even more escaping | ||||||
|  | 
 | ||||||
|  | When hledger runs an addon executable (eg you type `hledger ui`, hledger runs `hledger-ui`),  | ||||||
|  | it de-escapes command-line options and arguments once, so you might need to *triple*-escape. | ||||||
|  | Eg in bash, running the ui command and matching the dollar sign, it's:  | ||||||
|  | 
 | ||||||
|  | `hledger ui cur:'\\$'` | ||||||
|  | 
 | ||||||
|  | or: | ||||||
|  | 
 | ||||||
|  | `hledger ui cur:\\\\$` | ||||||
|  | 
 | ||||||
|  | If you asked why *four* slashes above, this may help: | ||||||
|  | 
 | ||||||
|  | ----------------- -------- | ||||||
|  | unescaped:        `$` | ||||||
|  | escaped:          `\$` | ||||||
|  | double-escaped:   `\\$` | ||||||
|  | triple-escaped:   `\\\\$` | ||||||
|  | ----------------- -------- | ||||||
| 
 | 
 | ||||||
| When hledger is invoking an addon executable (like hledger-ui),  |  | ||||||
| options and arguments get de-escaped once more,  |  | ||||||
| so you might need *triple*-escaping. |  | ||||||
| Eg: `hledger ui cur:'\\$'` or `hledger ui cur:\\\\$` in bash. |  | ||||||
| (The number of backslashes in fish shell is left as an exercise for the reader.) | (The number of backslashes in fish shell is left as an exercise for the reader.) | ||||||
| 
 | 
 | ||||||
| Inside a file used for [argument expansion](#argument-expansion), one less level of escaping is enough. | You can always avoid the extra escaping for addons by running the addon directly: | ||||||
| (And in this case, backslashes seem to work better than quotes. Eg: `cur:\$`). | 
 | ||||||
|  | `hledger-ui cur:\\$` | ||||||
|  | 
 | ||||||
|  | ### Less escaping | ||||||
|  | 
 | ||||||
|  | Inside an [argument file](#argument-expansion), | ||||||
|  | or in the search field of hledger-ui or hledger-web,  | ||||||
|  | or at a GHCI prompt,  | ||||||
|  | you need one less level of escaping than at the command line. | ||||||
|  | And backslashes may work better than quotes.  | ||||||
|  | Eg: | ||||||
|  | 
 | ||||||
|  | `ghci> :main balance cur:\$` | ||||||
|  | 
 | ||||||
|  | ## Command line tips | ||||||
| 
 | 
 | ||||||
| If in doubt, keep things simple: | If in doubt, keep things simple: | ||||||
| 
 | 
 | ||||||
| - run add-on executables directly | - write options after the command (`hledger CMD -OPTIONS ARGS`) | ||||||
| - write options after the command | - run add-on executables directly (`hledger-ui -OPTIONS ARGS`) | ||||||
| - enclose problematic args in single quotes | - enclose problematic args in single quotes | ||||||
| - if needed, also add a backslash to escape regexp metacharacters | - if needed, also add a backslash to escape regexp metacharacters | ||||||
| 
 | 
 | ||||||
| If you're really stumped, add `--debug=2` to troubleshoot. | To find out exactly how a command line is being parsed, add `--debug=2` to troubleshoot. | ||||||
|  | 
 | ||||||
|  | ## Unicode characters | ||||||
|  | 
 | ||||||
|  | hledger is expected to handle unicode (non-ascii) characters,  | ||||||
|  | but this requires a well-configured environment. | ||||||
|  | 
 | ||||||
|  | To handle unicode characters in the command line or input data, | ||||||
|  | a system locale that can decode them must be configured (POSIX's default `C` locale will not work). | ||||||
|  | Eg in bash, you could do: | ||||||
|  | ``` | ||||||
|  | export LANG=en_US.UTF-8 | ||||||
|  | ``` | ||||||
|  | See [Troubleshooting](#troubleshooting) for more about this. | ||||||
|  | 
 | ||||||
|  | Unicode characters should appear correctly in hledger's output. | ||||||
|  | For the hledger and hledger-ui tools, this requires that  | ||||||
|  | 
 | ||||||
|  | - your terminal supports unicode | ||||||
|  | - the terminal's font includes the required unicode glyphs | ||||||
|  | - the terminal is configured to display "wide" characters as double width (otherwise report alignment will be off) | ||||||
| 
 | 
 | ||||||
| ## Input files | ## Input files | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user