2 Save frequently used options
Simon Michael edited this page 2018-03-09 15:31:12 +00:00

You can save frequently used options and arguments in an argument file, 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 simplify the chart of accounts, hiding some distinctions (eg business vs. personal) and flattening some bank account names
  • the -2 depth flag limits account depth to 2, hiding deeper subaccounts
  • the cur:. query argument 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:

$ hledger bal @simple.args

Start a live-updating hledger-ui showing the simplified asset accounts only:

$ 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. Eg, to show just a little more account detail:

$ hledger bal @simple.args -3

Quoting

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

$ hledger bal @simple.args

is equivalent to writing:

$ 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 require a hledger built with GHC 8.2+. (Let us know.)