aboutsummaryrefslogtreecommitdiffstats
path: root/src/_hledger
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2014-11-16 08:16:07 +0100
committerVincent Breitmoser <valodim@mugenguild.com>2014-11-16 08:16:07 +0100
commit123a4007201c81eb9bc5785d5bac8d9b4d8709ec (patch)
tree35aa5b386baa67ddf8cf0c15539d07e7e7ddea1b /src/_hledger
parentMerge pull request #264 from duthils/cask (diff)
downloadzsh-completions-123a4007201c81eb9bc5785d5bac8d9b4d8709ec.tar
zsh-completions-123a4007201c81eb9bc5785d5bac8d9b4d8709ec.tar.gz
zsh-completions-123a4007201c81eb9bc5785d5bac8d9b4d8709ec.tar.bz2
zsh-completions-123a4007201c81eb9bc5785d5bac8d9b4d8709ec.tar.lz
zsh-completions-123a4007201c81eb9bc5785d5bac8d9b4d8709ec.tar.xz
zsh-completions-123a4007201c81eb9bc5785d5bac8d9b4d8709ec.tar.zst
zsh-completions-123a4007201c81eb9bc5785d5bac8d9b4d8709ec.zip
add hledger completion
Diffstat (limited to 'src/_hledger')
-rw-r--r--src/_hledger177
1 files changed, 177 insertions, 0 deletions
diff --git a/src/_hledger b/src/_hledger
new file mode 100644
index 0000000..156bf92
--- /dev/null
+++ b/src/_hledger
@@ -0,0 +1,177 @@
+#compdef hledger
+
+# ------------------------------------------------------------------------------
+# Description
+# -----------
+#
+# Completion script for hleder 0.23.2 ( http://hledger.org/ )
+# Last updated: 16.11.2014
+#
+# ------------------------------------------------------------------------------
+# Authors
+# -------
+#
+# * Valodim ( https://github.com/Valodim )
+#
+# ------------------------------------------------------------------------------
+# Notes
+# -----
+#
+# account completion depends on availability of a ~/.hledger.journal file
+#
+# ------------------------------------------------------------------------------
+
+
+local curcontext="$curcontext" curstate state line expl grp cmd ret=1
+typeset -a args
+typeset -A opt_args
+
+args=(
+ '(- *)'{-h,--help}'[print help information]'
+ '(-f --file)'{-f,--file}'=[use a different input file]:input file:_files'
+ '--rules-file=[CSV conversion rules file]:rules file:_files'
+ '--alias=[display accounts named OLD as NEW]:alias specification'
+ '(-b --begin)'{-b,--begin}'=[include postings/txns on or after this date]:date'
+ '(-e --end)'{-e,--end}'=[include postings/txns before this date]:date'
+ '(-D --daily)'{-D,--daily}'[multiperiod/multicolumn report by day]'
+ '(-W --weekly)'{-W,--weekly}'[multiperiod/multicolumn report by week]'
+ '(-M --monthly)'{-M,--monthly}'[multiperiod/multicolumn report by month]'
+ '(-Q --quarterly)'{-Q,--quarterly}'[multiperiod/multicolumn report by quarter]'
+ '(-Y --yearly)'{-Y,--yearly}'[multiperiod/multicolumn report by year]'
+ '(-p --period)'{-p,--period}'=[set start date, end date, and/or reporting interval all at once]'
+ '(-C --cleared)'{-C,--cleared}'[include only cleared postings/txns]'
+ '(-U --uncleared)'{-U,--uncleared}'[include only uncleared postings/txns]'
+ '(-R --real)'{-R,--real}'[include only non-virtual postings]'
+ '(--depth)--depth=[hide accounts/postings deeper than N]:depth'
+ '(-E --empty)'{-E,--empty}'[show empty/zero things which are normally omitted]'
+ '(-B --cost)'{-B,--cost}'[show amounts in their cost price'\''s commodity]'
+)
+
+_arguments -C "$args[@]" -A "-*" \
+ '(- *)--version[print version information]' \
+ '--debug[show debug output]' \
+ '1: :->cmds' \
+ '*:: :->args' && ret=0
+
+while (( $#state )); do
+ curstate=$state
+ shift state
+ case $curstate in
+ cmds)
+ typeset -a cmds
+ cmds=(
+ 'print:show transaction entries'
+ 'accounts:show account names'
+ 'balance:show accounts and balances (bal)'
+ 'register:show postings and running total (reg)'
+ 'incomestatement:show an income statement (is)'
+ 'balancesheet:show a balance sheet (bs)'
+ 'cashflow:show a cashflow statement (cf)'
+ 'activity:show an ascii barchart of posting counts per interval'
+ 'stats:show some journal statistics'
+ )
+ _describe 'subcommands' cmds && ret=0
+ ;;
+ args)
+ : $words
+ local cmd=$words[1]
+ (( $+cmd )) || return 1
+ # curcontext="${curcontext%:*:*}:$service-$cmd:"
+ case $cmd in
+ accounts)
+ args+=(
+ '(--tree)--tree[show accounts as a tree (default in simple reports)]'
+ '(--flat)--flat[show accounts as a list (default in multicolumn)]'
+ '(--drop)--drop=[flat mode, omit N leading account name parts]:drop n'
+ )
+ ;;
+ activity)
+ ;;
+ bal|balance)
+ args+=(
+ '(--tree)--tree[show accounts as a tree (default in simple reports)]'
+ '(--flat)--flat[show accounts as a list (default in multicolumn)]'
+ '(--drop)--drop=[in flat mode, omit N leading account name parts]:drop n'
+ '(--format)--format=[in tree mode, use this custom line format]:custom line format'
+ '(--no-elide)--no-elide[tree mode, do not squash boring parent accounts]'
+ '(--no-total)--no-total[do not show the final total]'
+ '(--cumulative)--cumulative[multicolumn mode, show accumulated ending balances]'
+ '(-H --historical)'{-H,--historical}'[multicolumn mode, show historical ending balances]'
+ )
+ ;;
+ cashflow|cf|balancesheet|bs|incomestatement|is)
+ args+=(
+ '(--flat)--flat[show accounts as a list (default in multicolumn)]'
+ '(--drop)--drop=[in flat mode, omit N leading account name parts]:drop n'
+ )
+ ;;
+ print)
+ ;;
+ register|reg)
+ args+=(
+ '(-H --historical)'{-H,--historical}'[include prior postings in the running total]'
+ '(-A --average)'{-A,--average}'[show a running average instead of the running total]'
+ '(-r --related)'{-r,--related}'[show postings'\'' siblings instead]'
+ '(-w --width)'{-w,--width}'=[set output width to 120, or N]:width (default 80)'
+ )
+ ;;
+ stats)
+ ;;
+ # fallback to _default
+ *) _arguments -C -A "-*" "$args[@]" \
+ '*: :_default' && ret=0
+ continue
+ esac
+ _arguments -C -A "-*" "$args[@]" \
+ '*:query patterns:->query' && ret=0
+ ;;
+ query)
+
+ local -a accs keywords
+ keywords=(
+ 'code\::match by transaction code'
+ 'desc\::match transaction descriptions'
+ 'tag\::match by tag name'
+ 'depth\::match at or above depth'
+ 'status\::match cleared/uncleared transactions'
+ 'real\::match real/virtual transactions'
+ 'empty\::match if amount is/is not zero'
+ 'amt\::match transaction amount'
+ )
+ if compset -P 'amt:'; then
+ _message 'match amount (<, <=, >, >=, add sign for non-absolute match)' && ret=0
+ continue
+ fi
+ if compset -P '(#b)(code|desc|tag|depth|status|real|empty):'; then
+ _message "'$match[1]' parameter" && ret=0
+ continue
+ fi
+
+ accs=( ${(f)"$(_call_program hledger hledger accounts $PREFIX 2>/dev/null)"} )
+ if (( $? )); then
+ _message "error fetching accounts from hledger"
+ fi
+
+ # decided against partial matching here. these lines can
+ # be uncommented to complete subaccounts hierarchically
+ # (add -S '' -q to the compadd below, too)
+ # if compset -P '(#b)(*):'; then
+ # accs=( ${(M)accs:#$match[1]:*} )
+ # accs=( ${accs#$IPREFIX} )
+ # fi
+ # accs=( ${accs%%:*} )
+
+ _wanted accounts expl "accounts" compadd -a accs && ret=0
+ _describe "matcher keywords" keywords -S '' && ret=0
+
+ # not is special, it doesn't need the -S ''
+ keywords=(
+ 'not:negate expression'
+ )
+ _describe "matcher keywords" keywords && ret=0
+
+ ;;
+ esac
+done
+
+return ret