hledger/hledger/shell-completion/hledger-completion.bash
Simon Michael 64023478b7 imp:accounts: rename --positions to --locations for consistency
with `print`. --positions still works, as a hidden flag.
2025-10-13 10:11:18 -10:00

2216 lines
32 KiB
Bash

# -*- mode: sh; sh-basic-offset: 4; indent-tabs-mode: nil -*-
# ex: ft=sh ts=4 sw=4 et
# shellcheck disable=2034,2154
# Completion script for hledger.
# Created using a Makefile and real hledger.
# This script is sourced by an interactive shell, so do NOT do things like
# 'set -o pipefail' or mangle the global environment in any other way!
# That said, we *do* remove colon (:) from COMP_WORDBREAKS which impacts
# the rest of the session and completion for other programs.
# INSTALLATION:
# To install you can simply source this file from your shell's startup files.
#
# Alternatively, copy/symlink it into `${BASH_COMPLETION_USER_DIR}/completions`
# or `${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion/completions`, rename
# it to either `hledger`, `_hledger` or `hledger.bash`, and it will be loaded
# dynamically the first time you use the `hledger` command. Optionally, create
# symlinks to this file for any extensions used e.g.:
#
# mkdir -p "${BASH_COMPLETION_USER_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion}/completions" &&
# cd "${BASH_COMPLETION_USER_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion}/completions" &&
# cp /path/to/hledger-completion.bash hledger &&
# ln -s hledger hledger-ui &&
# ln -s hledger hledger-web &&
# : done.
_hledger_completion() {
local cur prev words cword
_init_completion -n : || return 0
# Current treatment for special characters:
# - exclude colon (:) from COMP_WORDBREAKS
# - option processing assumes that `=` is in COMP_WORDBREAKS
# - use compopt -o filenames selectively to escape the rest
COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
case $COMP_WORDBREAKS in
*=*) : ;;
*) COMP_WORDBREAKS=$COMP_WORDBREAKS= ;;
esac
local subcommand
local subcommandOptions
local i
for ((i=1; i<${#words[@]}; i++)); do
subcommand=${words[i]}
if ! grep -Fxqe "$subcommand" <<< "$_hledger_complist_commands"; then
subcommand=
continue
fi
# There could be other commands begining with $subcommand, e.g.:
# $subcommand == reg --> register, register-match,
# $subcommand == bal --> balance, balancesheet, balancesheetequity, etc.
# Do not ignore them!
if ((i == cword)); then
_hledger_compreply "$(
_hledger_compgen "$_hledger_complist_commands"
)"
return 0
fi
# Replace dashes with underscores and use indirect expansion
subcommandOptions=_hledger_complist_options_${subcommand//-/_}
if [[ $cur == -* ]]; then
_hledger_compreply "$(_hledger_compgen "${!subcommandOptions}")"
# Suspend space on completion of long options requiring an argument
[[ ${COMPREPLY[0]} == --*= ]] && compopt -o nospace
return 0
fi
break
done
# Option argument completion
_hledger_compreply_optarg && return
if [[ -z $subcommand ]]; then
if [[ $cur == -* ]]; then
_hledger_compreply "$(
_hledger_compgen "$_hledger_complist_generic_options"
)"
# Suspend space on completion of long options requiring an argument
[[ ${COMPREPLY[0]} == --*= ]] && compopt -o nospace
else
_hledger_compreply "$(
_hledger_compgen "$_hledger_complist_commands"
)"
fi
return 0
fi
# Set this from here on because queries tend to have lots of special chars
# TODO: better handling of special characters
compopt -o filenames
# Query completion
_hledger_compreply_query && return
# Subcommand specific
case $subcommand in
# These do not expect or support any query arguments
commodities|check|files|help|import|print-unique|test)
return 0
;;
esac
# Offer query filters and accounts for the rest
_hledger_compreply "$(_hledger_compgen "$_hledger_complist_query_filters")"
if [[ -z $cur ]]; then
_hledger_compreply_append "$(
_hledger_compgen "$(_hledger accounts --flat --depth 1)"
)"
else
_hledger_compreply_append "$(
_hledger_compgen "$(_hledger accounts --flat)"
)"
fi
# Suspend space on completion of query prefix
# Do not sort, keep accounts and query filters grouped separately
[[ ${COMPREPLY[0]} == *: ]] && compopt -o nospace
compopt -o nosort
return 0
}
_hledger_extension_completion() {
local cmd=${1##*/}
local ext=${cmd#hledger-}
# Pretend that hledger is called with the given extension
# as the first argument and call main completion function
COMP_WORDS=("hledger" "$ext" "${COMP_WORDS[@]:1}")
COMP_CWORD=$((COMP_CWORD + 1))
_hledger_completion "hledger" "${@:1}"
}
# Register completion function for hledger:
complete -F _hledger_completion hledger
# Register completion functions for hledger extensions:
complete -F _hledger_extension_completion hledger-ui hledger-web
# Helpers
# Comment out when done
_hledger_debug() {
((HLEDGER_DEBUG)) || return 0
local var vars=(words)
(($#)) && vars=("$@")
for var in "${vars[@]}"; do
printf '\ndebug: %s\n' "$(declare -p "$var")" >&2
done
}
# Stolen from bash-completion
# This function quotes the argument in a way so that readline dequoting
# results in the original argument. This is necessary for at least
# `compgen' which requires its arguments quoted/escaped:
_hledger_quote_by_ref()
{
printf -v "$2" %q "$1"
# If result becomes quoted like this: $'string', re-evaluate in order to
# drop the additional quoting. See also: http://www.mail-archive.com/
# bash-completion-devel@lists.alioth.debian.org/msg01942.html
[[ ${!2} == \$* ]] && eval "$2=${!2}"
}
# Set the value of COMPREPLY from newline delimited completion candidates
_hledger_compreply() {
local IFS=$'\n'
# shellcheck disable=2206
COMPREPLY=($1)
}
# Append the value of COMPREPLY from newline delimited completion candidates
_hledger_compreply_append() {
local IFS=$'\n'
# shellcheck disable=2206
COMPREPLY+=($1)
}
# Generate input suitable for _hledger_compreply() from newline delimited
# completion candidates. It doesn't seem there is a way to feed a literal
# word list to compgen -- it will eat your quotes, drink your booze and...
# Completion candidates are quoted accordingly first and then we leave it to
# compgen to deal with readline.
#
# Arguments:
# $1: a newline separated list with completion cadidates
# $2: (optional) a prefix string to add to generated completions
# $3: (optional) a word to match instead of $cur, the default.
# If $match is null and $prefix is defined the match is done against $cur
# stripped of $prefix. If both $prefix and $match are null we match against
# $cur and no prefix is added to completions.
_hledger_compgen() {
local complist=$1
local prefix=$2
local match=$3
local quoted=()
local word
local i=0
while IFS= read -r word; do
_hledger_quote_by_ref "$word" word
quoted[i++]=$word
done <<< "$complist"
if (($# < 3)); then
match=${cur:${#prefix}}
fi
local IFS=$'\n'
compgen -P "$prefix" -W "${quoted[*]}" -- "$match"
}
# Try required option argument completion. Set COMPREPLY and return 0 on
# success, 1 if option doesn't require an argument or out of context
_hledger_compreply_optarg() {
local option=${words[cword - 1]}
local match=$cur
local wordlist
# Match the empty string on --file=<TAB>, not the equal sign itself
if [[ $cur == = ]]; then
match=""
# Once input is present, cword is incremented so we compensate
elif [[ $prev == = ]]; then
option=${words[cword - 2]}
fi
[[ $option == -* ]] || return
case $option in
--alias)
compopt -o nospace -o filenames
_hledger_compreply "$(
_hledger_compgen "$(_hledger accounts --flat)" "" "$match"
)"
;;
-f|--file|--rules-file|-o|--output-file)
compopt -o filenames
_hledger_compreply "$(compgen -f -- "$match")"
;;
--pivot)
compopt -o nosort
wordlist="code description note payee"
_hledger_compreply "$(compgen -W "$wordlist" -- "$match")"
_hledger_compreply_append "$(
_hledger_compgen "$(_hledger tags)" "" "$match"
)"
;;
--value)
wordlist="cost then end now"
_hledger_compreply "$(compgen -W "$wordlist" -- "$match")"
;;
-X|--exchange)
_hledger_compreply "$(
_hledger_compgen "$(_hledger commodities)" "" "$match"
)"
;;
--color|--colour)
compopt -o nosort
wordlist="auto always yes never no"
_hledger_compreply "$(compgen -W "$wordlist" -- "$match")"
;;
-O|--output-format)
wordlist="txt csv json sql"
_hledger_compreply "$(compgen -W "$wordlist" -- "$match")"
;;
--close-acct|--open-acct)
compopt -o filenames
_hledger_compreply "$(
_hledger_compgen "$(_hledger accounts --flat)" "" "$match"
)"
;;
--debug)
wordlist="{1..9}"
_hledger_compreply "$(compgen -W "$wordlist" -- "$match")"
;;
# Argument required, but no handler (yet)
-b|-e|-p)
_hledger_compreply ""
;;
# Check if an unhandled long option requires an argument
*)
local optionList argRequired
if [[ -n $subcommandOptions ]]; then
optionList=${!subcommandOptions}
else
optionList=$_hledger_complist_generic_options
fi
while IFS= read -r argRequired; do
if [[ $argRequired == "$option=" ]]; then
_hledger_compreply ""
return 0
fi
done <<< "$optionList"
return 1
;;
esac
return 0
}
# Query filter completion through introspection
_hledger_compreply_query() {
[[ $cur =~ .: ]] || return
local query=${cur%%:*}:
local match=${cur#*:}
grep -Fxqe "$query" <<< "$_hledger_complist_query_filters" || return
local hledgerArgs=()
case $query in
acct:)
if (( ${#match} )); then
hledgerArgs=(accounts --flat)
else
hledgerArgs=(accounts --flat --depth 1)
fi
;;
code:) hledgerArgs=(codes) ;;
cur:) hledgerArgs=(commodities) ;;
desc:) hledgerArgs=(descriptions) ;;
note:) hledgerArgs=(notes) ;;
payee:) hledgerArgs=(payees) ;;
tag:) hledgerArgs=(tags) ;;
*)
local wordlist
case $query in
amt:) wordlist="< <= > >=" ;;
real:) wordlist="\ 0" ;;
status:) wordlist="\ * !" ;;
*) return 1 ;;
esac
_hledger_compreply "$(
compgen -P "$query" -W "$wordlist" -- "$match"
)"
return 0
;;
esac
_hledger_compreply "$(
_hledger_compgen "$(_hledger "${hledgerArgs[@]}")" "$query"
)"
return 0
}
# Parse the command line so far and fill the array $optarg with the arguments to
# given options. $optarg should be declared by the caller
_hledger_optarg() {
local options=("$@")
local i j offset
optarg=()
# hledger balance --file ~/ledger _
# 0 1 2 3 4
for ((i=1; i < ${#words[@]} - 2; i++)); do
offset=0
for j in "${!options[@]}"; do
if [[ ${words[i]} == "${options[j]}" ]]; then
if [[ ${words[i+1]} == '=' ]]; then
offset=2
else
offset=1
fi
# Pass it through compgen to unescape it
optarg+=("$(compgen -W "${words[i + offset]}")")
fi
done
((i += offset))
done
}
# Get ledger file from -f --file arguments from COMP_WORDS and pass it to the
# 'hledger' call. Note that --rules-file - if present - must also be passed!
# Multiple files are allowed so pass them all in the order of appearance.
_hledger() {
local hledgerArgs=("$@")
local file
local -a optarg
_hledger_optarg -f --file
for file in "${optarg[@]}"; do
[[ -f $file ]] && hledgerArgs+=(--file "$file")
done
_hledger_optarg --rules-file
for file in "${optarg[@]}"; do
[[ -f $file ]] && hledgerArgs+=(--rules-file "$file")
done
# Discard errors. Is there a way to validate files before using them?
hledger "${hledgerArgs[@]}" 2>/dev/null
}
# Include lists of commands and options generated by the Makefile using the
# m4 macro processor.
# Included files must have exactly one newline at EOF to prevent weired errors.
read -r -d "" _hledger_complist_commands <<"__TEXT__"
accounts
activity
add
areg
aregister
bal
balance
balancesheet
balancesheetequity
bs
bse
cashflow
cf
check
close
codes
commodities
demo
descriptions
diff
files
help
import
incomestatement
is
notes
payees
prices
print
reg
register
rewrite
roi
stats
tags
test
__TEXT__
read -r -d "" _hledger_complist_query_filters <<"__TEXT__"
acct:
amt:
code:
cur:
date:
date2:
depth:
desc:
inacct:
not:
note:
payee:
real:
status:
tag:
__TEXT__
read -r -d "" _hledger_complist_generic_options <<"__TEXT__"
--alias=
--auto
--begin=
--cleared
--color=
--commodity-style=
--conf=
--cost
--daily
--date2
--debug=
--depth=
--empty
--end=
--exchange=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--market
--monthly
--no-conf
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--rules=
--strict
--tldr
--today=
--unmarked
--value=
--verbose-tags
--version
--weekly
--yearly
__TEXT__
# Dashes are replaced by m4 with underscores to form valid identifiers
# Referenced by indirect expansion of $subcommandOptions
read -r -d "" _hledger_complist_options_accounts <<"__TEXT__"
--alias=
--auto
--begin=
--cleared
--color=
--commodity-style=
--cost
--daily
--date2
--debug=
--declared
--depth=
--directives
--drop=
--empty
--end=
--exchange=
--file=
--find
--flat
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--locations
--man
--market
--monthly
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--rules=
--strict
--tldr
--today=
--tree
--types
--undeclared
--unmarked
--unused
--used
--value=
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_activity <<"__TEXT__"
--alias=
--auto
--begin=
--cleared
--color=
--commodity-style=
--cost
--daily
--date2
--debug=
--depth=
--empty
--end=
--exchange=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--market
--monthly
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--rules=
--strict
--tldr
--today=
--unmarked
--value=
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_add <<"__TEXT__"
--alias=
--auto
--debug=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--no-new-accounts
--pivot=
--rules=
--strict
--tldr
--verbose-tags
--version
__TEXT__
read -r -d "" _hledger_complist_options_areg <<"__TEXT__"
--alias=
--align-all
--auto
--begin=
--cleared
--color=
--commodity-style=
--cost
--daily
--date2
--debug=
--depth=
--empty
--end=
--exchange=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--market
--monthly
--no-elide
--output-file=
--output-format=
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--rules=
--strict
--tldr
--today=
--txn-dates
--unmarked
--value=
--verbose-tags
--version
--weekly
--width=
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_aregister <<"__TEXT__"
--alias=
--align-all
--auto
--begin=
--cleared
--color=
--commodity-style=
--cost
--daily
--date2
--debug=
--depth=
--empty
--end=
--exchange=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--market
--monthly
--no-elide
--output-file=
--output-format=
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--rules=
--strict
--tldr
--today=
--txn-dates
--unmarked
--value=
--verbose-tags
--version
--weekly
--width=
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_bal <<"__TEXT__"
--alias=
--auto
--average
--begin=
--budget
--change
--cleared
--color=
--commodity-style=
--cost
--count
--cumulative
--daily
--date2
--debug=
--declared
--depth=
--drop=
--empty
--end=
--exchange=
--file=
--flat
--forecast
--format=
--gain
--help
--historical
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--invert
--layout
--layout=
--man
--market
--monthly
--no-elide
--no-total
--output-file=
--output-format=
--pending
--percent
--period=
--pivot=
--pretty
--quarterly
--real
--related
--row-total
--rules=
--sort-amount
--strict
--sum
--summary-only
--tldr
--today=
--transpose
--tree
--unmarked
--value=
--valuechange
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_balance <<"__TEXT__"
--alias=
--auto
--average
--begin=
--budget
--change
--cleared
--color=
--commodity-style=
--cost
--count
--cumulative
--daily
--date2
--debug=
--declared
--depth=
--drop=
--empty
--end=
--exchange=
--file=
--flat
--forecast
--format=
--gain
--help
--historical
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--invert
--layout
--layout=
--man
--market
--monthly
--no-elide
--no-total
--output-file=
--output-format=
--pending
--percent
--period=
--pivot=
--pretty
--quarterly
--real
--related
--row-total
--rules=
--sort-amount
--strict
--sum
--summary-only
--tldr
--today=
--transpose
--tree
--unmarked
--value=
--valuechange
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_balancesheet <<"__TEXT__"
--alias=
--auto
--average
--begin=
--budget
--change
--cleared
--color=
--commodity-style=
--cost
--cumulative
--daily
--date2
--debug=
--declared
--depth=
--drop=
--empty
--end=
--exchange=
--file=
--flat
--forecast
--format=
--gain
--help
--historical
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--layout=
--man
--market
--monthly
--no-elide
--no-total
--output-file=
--output-format=
--pending
--percent
--period=
--pivot=
--pretty
--quarterly
--real
--row-total
--rules=
--sort-amount
--strict
--sum
--summary-only
--tldr
--today=
--tree
--unmarked
--value=
--valuechange
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_balancesheetequity <<"__TEXT__"
--alias=
--auto
--average
--begin=
--budget
--change
--cleared
--color=
--commodity-style=
--cost
--cumulative
--daily
--date2
--debug=
--declared
--depth=
--drop=
--empty
--end=
--exchange=
--file=
--flat
--forecast
--format=
--gain
--help
--historical
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--layout=
--man
--market
--monthly
--no-elide
--no-total
--output-file=
--output-format=
--pending
--percent
--period=
--pivot=
--pretty
--quarterly
--real
--row-total
--rules=
--sort-amount
--strict
--sum
--summary-only
--tldr
--today=
--tree
--unmarked
--value=
--valuechange
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_bs <<"__TEXT__"
--alias=
--auto
--average
--begin=
--budget
--change
--cleared
--color=
--commodity-style=
--cost
--cumulative
--daily
--date2
--debug=
--declared
--depth=
--drop=
--empty
--end=
--exchange=
--file=
--flat
--forecast
--format=
--gain
--help
--historical
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--layout=
--man
--market
--monthly
--no-elide
--no-total
--output-file=
--output-format=
--pending
--percent
--period=
--pivot=
--pretty
--quarterly
--real
--row-total
--rules=
--sort-amount
--strict
--sum
--summary-only
--tldr
--today=
--tree
--unmarked
--value=
--valuechange
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_bse <<"__TEXT__"
--alias=
--auto
--average
--begin=
--budget
--change
--cleared
--color=
--commodity-style=
--cost
--cumulative
--daily
--date2
--debug=
--declared
--depth=
--drop=
--empty
--end=
--exchange=
--file=
--flat
--forecast
--format=
--gain
--help
--historical
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--layout=
--man
--market
--monthly
--no-elide
--no-total
--output-file=
--output-format=
--pending
--percent
--period=
--pivot=
--pretty
--quarterly
--real
--row-total
--rules=
--sort-amount
--strict
--sum
--summary-only
--tldr
--today=
--tree
--unmarked
--value=
--valuechange
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_cashflow <<"__TEXT__"
--alias=
--auto
--average
--begin=
--budget
--change
--cleared
--color=
--commodity-style=
--cost
--cumulative
--daily
--date2
--debug=
--declared
--depth=
--drop=
--empty
--end=
--exchange=
--file=
--flat
--forecast
--format=
--gain
--help
--historical
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--layout=
--man
--market
--monthly
--no-elide
--no-total
--output-file=
--output-format=
--pending
--percent
--period=
--pivot=
--pretty
--quarterly
--real
--row-total
--rules=
--sort-amount
--strict
--sum
--summary-only
--tldr
--today=
--tree
--unmarked
--value=
--valuechange
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_cf <<"__TEXT__"
--alias=
--auto
--average
--begin=
--budget
--change
--cleared
--color=
--commodity-style=
--cost
--cumulative
--daily
--date2
--debug=
--declared
--depth=
--drop=
--empty
--end=
--exchange=
--file=
--flat
--forecast
--format=
--gain
--help
--historical
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--layout=
--man
--market
--monthly
--no-elide
--no-total
--output-file=
--output-format=
--pending
--percent
--period=
--pivot=
--pretty
--quarterly
--real
--row-total
--rules=
--sort-amount
--strict
--sum
--summary-only
--tldr
--today=
--tree
--unmarked
--value=
--valuechange
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_check <<"__TEXT__"
--alias=
--auto
--begin=
--cleared
--color=
--commodity-style=
--cost
--daily
--date2
--debug=
--depth=
--empty
--end=
--exchange=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--market
--monthly
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--rules=
--strict
--tldr
--today=
--unmarked
--value=
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_close <<"__TEXT__"
--alias=
--assert
--assertion-type=
--assign
--auto
--begin=
--cleared
--close
--close-acct=
--close-desc=
--color=
--commodity-style=
--cost
--daily
--date2
--debug=
--depth=
--empty
--end=
--exchange=
--explicit
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--interleaved
--man
--market
--migrate
--monthly
--open
--open-acct=
--open-desc=
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--retain
--round=
--rules=
--show-costs
--strict
--tldr
--today=
--unmarked
--value=
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_codes <<"__TEXT__"
--alias=
--auto
--begin=
--cleared
--color=
--commodity-style=
--cost
--daily
--date2
--debug=
--depth=
--empty
--end=
--exchange=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--market
--monthly
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--rules=
--strict
--tldr
--today=
--unmarked
--value=
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_commodities <<"__TEXT__"
--alias=
--auto
--debug=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--pivot=
--rules=
--strict
--tldr
--verbose-tags
--version
__TEXT__
read -r -d "" _hledger_complist_options_demo <<"__TEXT__"
--debug=
--help
--info
--man
--speed=
--tldr
--version
__TEXT__
read -r -d "" _hledger_complist_options_descriptions <<"__TEXT__"
--alias=
--auto
--begin=
--cleared
--color=
--commodity-style=
--cost
--daily
--date2
--debug=
--depth=
--empty
--end=
--exchange=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--market
--monthly
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--rules=
--strict
--tldr
--today=
--unmarked
--value=
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_diff <<"__TEXT__"
--alias=
--auto
--debug=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--pivot=
--rules=
--strict
--tldr
--verbose-tags
--version
__TEXT__
read -r -d "" _hledger_complist_options_files <<"__TEXT__"
--alias=
--auto
--debug=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--pivot=
--rules=
--strict
--tldr
--verbose-tags
--version
__TEXT__
read -r -d "" _hledger_complist_options_help <<"__TEXT__"
--debug=
--help
--info
--man
--tldr
--version
__TEXT__
read -r -d "" _hledger_complist_options_import <<"__TEXT__"
--alias=
--auto
--begin=
--catchup
--cleared
--color=
--commodity-style=
--cost
--daily
--date2
--debug=
--depth=
--dry-run
--empty
--end=
--exchange=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--market
--monthly
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--rules=
--strict
--tldr
--today=
--unmarked
--value=
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_incomestatement <<"__TEXT__"
--alias=
--auto
--average
--begin=
--budget
--change
--cleared
--color=
--commodity-style=
--cost
--cumulative
--daily
--date2
--debug=
--declared
--depth=
--drop=
--empty
--end=
--exchange=
--file=
--flat
--forecast
--format=
--gain
--help
--historical
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--layout=
--man
--market
--monthly
--no-elide
--no-total
--output-file=
--output-format=
--pending
--percent
--period=
--pivot=
--pretty
--quarterly
--real
--row-total
--rules=
--sort-amount
--strict
--sum
--summary-only
--tldr
--today=
--tree
--unmarked
--value=
--valuechange
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_is <<"__TEXT__"
--alias=
--auto
--average
--begin=
--budget
--change
--cleared
--color=
--commodity-style=
--cost
--cumulative
--daily
--date2
--debug=
--declared
--depth=
--drop=
--empty
--end=
--exchange=
--file=
--flat
--forecast
--format=
--gain
--help
--historical
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--layout=
--man
--market
--monthly
--no-elide
--no-total
--output-file=
--output-format=
--pending
--percent
--period=
--pivot=
--pretty
--quarterly
--real
--row-total
--rules=
--sort-amount
--strict
--sum
--summary-only
--tldr
--today=
--tree
--unmarked
--value=
--valuechange
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_notes <<"__TEXT__"
--alias=
--auto
--begin=
--cleared
--color=
--commodity-style=
--cost
--daily
--date2
--debug=
--depth=
--empty
--end=
--exchange=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--market
--monthly
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--rules=
--strict
--tldr
--today=
--unmarked
--value=
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_payees <<"__TEXT__"
--alias=
--auto
--begin=
--cleared
--color=
--commodity-style=
--cost
--daily
--date2
--debug=
--declared
--depth=
--empty
--end=
--exchange=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--market
--monthly
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--rules=
--strict
--tldr
--today=
--unmarked
--used
--value=
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_prices <<"__TEXT__"
--alias=
--auto
--begin=
--cleared
--color=
--commodity-style=
--cost
--daily
--date2
--debug=
--depth=
--empty
--end=
--exchange=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--market
--monthly
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--rules=
--show-reverse
--strict
--tldr
--today=
--unmarked
--value=
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_print <<"__TEXT__"
--alias=
--auto
--begin=
--cleared
--color=
--commodity-style=
--cost
--daily
--date2
--debug=
--depth=
--empty
--end=
--exchange=
--explicit
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--market
--match=
--monthly
--new
--output-file=
--output-format=
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--round=
--rules=
--show-costs
--strict
--tldr
--today=
--unmarked
--value=
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_reg <<"__TEXT__"
--alias=
--align-all
--auto
--average
--begin=
--cleared
--color=
--commodity-style=
--cost
--cumulative
--daily
--date2
--debug=
--depth=
--empty
--end=
--exchange=
--file=
--forecast
--help
--historical
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--invert
--man
--market
--match=
--monthly
--output-file=
--output-format=
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--related
--rules=
--sort=
--strict
--tldr
--today=
--unmarked
--value=
--verbose-tags
--version
--weekly
--width=
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_register <<"__TEXT__"
--alias=
--align-all
--auto
--average
--begin=
--cleared
--color=
--commodity-style=
--cost
--cumulative
--daily
--date2
--debug=
--depth=
--empty
--end=
--exchange=
--file=
--forecast
--help
--historical
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--invert
--man
--market
--match=
--monthly
--output-file=
--output-format=
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--related
--rules=
--sort=
--strict
--tldr
--today=
--unmarked
--value=
--verbose-tags
--version
--weekly
--width=
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_rewrite <<"__TEXT__"
--add-posting=
--alias=
--auto
--begin=
--cleared
--color=
--commodity-style=
--cost
--daily
--date2
--debug=
--depth=
--diff
--empty
--end=
--exchange=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--market
--monthly
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--rules=
--strict
--tldr
--today=
--unmarked
--value=
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_roi <<"__TEXT__"
--alias=
--auto
--begin=
--cashflow
--cleared
--color=
--commodity-style=
--cost
--daily
--date2
--debug=
--depth=
--empty
--end=
--exchange=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--investment=
--man
--market
--monthly
--pending
--period=
--pivot=
--pretty
--profit-loss=
--quarterly
--real
--rules=
--strict
--tldr
--today=
--unmarked
--value=
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_stats <<"__TEXT__"
--alias=
--auto
--begin=
--cleared
--color=
--commodity-style=
--cost
--daily
--date2
--debug=
--depth=
--empty
--end=
--exchange=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--market
--monthly
--output-file=
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--rules=
--strict
--tldr
--today=
--unmarked
--value=
--verbose
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_tags <<"__TEXT__"
--alias=
--auto
--begin=
--cleared
--color=
--commodity-style=
--cost
--daily
--date2
--debug=
--depth=
--empty
--end=
--exchange=
--file=
--forecast
--help
--ignore-assertions
--infer-costs
--infer-equity
--infer-market-prices
--info
--man
--market
--monthly
--parsed
--pending
--period=
--pivot=
--pretty
--quarterly
--real
--rules=
--strict
--tldr
--today=
--unmarked
--value=
--values
--verbose-tags
--version
--weekly
--yearly
__TEXT__
read -r -d "" _hledger_complist_options_test <<"__TEXT__"
--debug=
--help
--info
--man
--tldr
--version
__TEXT__
return 0