81 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Save frequently used options
 | 
						|
 | 
						|
You can save frequently used options and arguments in an 
 | 
						|
[argument file](manual#argument-files), one per
 | 
						|
line, then reuse them via a @FILE argument on the command line.
 | 
						|
(hledger 1.4+)
 | 
						|
 | 
						|
Here's an example.
 | 
						|
I keep frequently-used options for quick daily reports in a file
 | 
						|
called `simple.args`. The name can be anything; I use a `.args` suffix
 | 
						|
so I can find these easily. Here's the content of `simple.args`:
 | 
						|
```
 | 
						|
--alias=/:(business|personal):/=:
 | 
						|
--alias=/:(bank|cash|online):/=:
 | 
						|
--alias=/:bofi:/=:b
 | 
						|
--alias=/:unify:/=:u
 | 
						|
--alias=/:wf:/=:w
 | 
						|
-2
 | 
						|
cur:.
 | 
						|
```
 | 
						|
 | 
						|
The format is one command-line flag or command-line argument per line.
 | 
						|
Now if I write `@simple.args` in a hledger command line, it will be replaced
 | 
						|
by all of the above options/flags.
 | 
						|
 | 
						|
The options above are just an example, but in case you're wondering:
 | 
						|
 | 
						|
- the [aliases](manual.html#account-aliases) simplify the chart of accounts, hiding some distinctions (eg business vs. personal) and flattening some bank account names
 | 
						|
- the `-2` [depth flag](manual.html#depth-limiting) limits account depth to 2, hiding deeper subaccounts
 | 
						|
- the `cur:.` [query argument](manual.html#queries) shows only single-character currencies, hiding a bunch of cluttersome commodities I don't want to see
 | 
						|
 | 
						|
Ie they remove some detail, giving simplified reports which are easier for me to read at a glance.
 | 
						|
 | 
						|
## Usage
 | 
						|
 | 
						|
Generate a balance report showing the simplified accounts:
 | 
						|
```shell
 | 
						|
$ hledger bal @simple.args
 | 
						|
```
 | 
						|
Start a live-updating hledger-ui showing the simplified asset accounts only:
 | 
						|
```shell
 | 
						|
$ hledger-ui --watch @simple.args assets
 | 
						|
```
 | 
						|
 | 
						|
Options in the arguments file can be overridden by similar options later on
 | 
						|
the command line, in the [usual way](manual.html#options). 
 | 
						|
Eg, to show just a little more account detail:
 | 
						|
```shell
 | 
						|
$ hledger bal @simple.args -3
 | 
						|
```
 | 
						|
 | 
						|
## Quoting
 | 
						|
 | 
						|
[Special characters](manual.html#special-characters) in the arguments file 
 | 
						|
may need to be quoted, depending on your shell (bash, fish etc.) 
 | 
						|
They'll need one less level of quoting than on the command line.
 | 
						|
I think
 | 
						|
```shell
 | 
						|
$ hledger bal @simple.args
 | 
						|
```
 | 
						|
is equivalent to writing:
 | 
						|
```shell
 | 
						|
$ hledger bal "--alias=/:(business|personal):/=:" "--alias=/:(bank|cash|online):/=:" "--alias=/:bofi:/=:b" "--alias=/:unify:/=:u" "--alias=/:wf:/=:w" "-2" "cur:."
 | 
						|
```
 | 
						|
So in this example, using the bash shell, the `|` pipe character did 
 | 
						|
not need to be quoted in the arguments file (and should not be). 
 | 
						|
 | 
						|
## Suppressing this feature
 | 
						|
 | 
						|
If you actually need to write an argument beginning with @, 
 | 
						|
eg let's say you have an account pattern beginning with that character, 
 | 
						|
you'll want a way to disable this feature.  On unix systems at least, 
 | 
						|
you can do that by inserting a `--` (double hyphen) argument first. Eg:
 | 
						|
```
 | 
						|
$ hledger bal @somewhere.com       # looks for additional arguments in the ./somewhere.com file
 | 
						|
$ hledger bal -- @somewhere.com    # matches account names containing "@somewhere.com"
 | 
						|
```
 | 
						|
 | 
						|
On windows, this double hyphen trick [might](https://ghc.haskell.org/trac/ghc/ticket/13287) require a hledger built with GHC 8.2+. 
 | 
						|
(Let us know.)
 |