Postpone options display until after entering a dash
I was looking at how other programs that have an overwhelming number of sub-commands and options deal with completion, namely how git does it, and I liked the clean workflow not spitting every available option until asked for. Hledger's main workflow is: > hledger COMMAND QUERY so I have tried to reproduce this with this change. Options are of course still there, but not shown until you ask for them by entering a dash on the command line. Also, the `acct:` filter proposes only top level accounts until there is some input from the user because accounts tend to be numerous as well.
This commit is contained in:
parent
ddf55a86a4
commit
e6d54f79d7
@ -48,9 +48,11 @@ _hledger_completion_function() {
|
|||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
# Replace dashes with underscores and use indirect expansion
|
if [[ $cur == -* ]]; then
|
||||||
subcommandOptions=_hledger_complist_options_${subcommand//-/_}
|
# Replace dashes with underscores and use indirect expansion
|
||||||
_hledger_compreply "$(_hledger_compgen "${!subcommandOptions}")"
|
subcommandOptions=_hledger_complist_options_${subcommand//-/_}
|
||||||
|
_hledger_compreply "$(_hledger_compgen "${!subcommandOptions}")"
|
||||||
|
fi
|
||||||
break
|
break
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -58,11 +60,12 @@ _hledger_completion_function() {
|
|||||||
_hledger_compreply_optarg && return
|
_hledger_compreply_optarg && return
|
||||||
|
|
||||||
if [[ -z $subcommand ]]; then
|
if [[ -z $subcommand ]]; then
|
||||||
# Completion lists are already sorted at build-time
|
compopt +o filenames
|
||||||
# This keeps commands and options grouped separately
|
if [[ $cur == -* ]]; then
|
||||||
compopt -o nosort +o filenames
|
_hledger_compreply "$(_hledger_compgen "$_hledger_complist_generic_options")"
|
||||||
_hledger_compreply "$(_hledger_compgen "$_hledger_complist_commands")"
|
else
|
||||||
_hledger_compreply_append "$(_hledger_compgen "$_hledger_complist_generic_options")"
|
_hledger_compreply "$(_hledger_compgen "$_hledger_complist_commands")"
|
||||||
|
fi
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
@ -261,11 +264,18 @@ _hledger_compreply_optarg() {
|
|||||||
_hledger_compreply_query() {
|
_hledger_compreply_query() {
|
||||||
[[ $cur =~ .: ]] || return
|
[[ $cur =~ .: ]] || return
|
||||||
local query=${cur%%:*}:
|
local query=${cur%%:*}:
|
||||||
|
local match=${cur#*:}
|
||||||
grep -Fxqe "$query" <<< "$_hledger_complist_query_filters" || return
|
grep -Fxqe "$query" <<< "$_hledger_complist_query_filters" || return
|
||||||
|
|
||||||
local hledgerArgs=()
|
local hledgerArgs=()
|
||||||
case $query in
|
case $query in
|
||||||
acct:) hledgerArgs=(accounts --flat) ;;
|
acct:)
|
||||||
|
if (( ${#match} )); then
|
||||||
|
hledgerArgs=(accounts --flat)
|
||||||
|
else
|
||||||
|
hledgerArgs=(accounts --flat --depth 1)
|
||||||
|
fi
|
||||||
|
;;
|
||||||
code:) hledgerArgs=(codes) ;;
|
code:) hledgerArgs=(codes) ;;
|
||||||
cur:) hledgerArgs=(commodities) ;;
|
cur:) hledgerArgs=(commodities) ;;
|
||||||
desc:) hledgerArgs=(descriptions) ;;
|
desc:) hledgerArgs=(descriptions) ;;
|
||||||
|
|||||||
@ -48,9 +48,11 @@ _hledger_completion_function() {
|
|||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
# Replace dashes with underscores and use indirect expansion
|
if [[ $cur == -* ]]; then
|
||||||
subcommandOptions=_hledger_complist_options_${subcommand//-/_}
|
# Replace dashes with underscores and use indirect expansion
|
||||||
_hledger_compreply "$(_hledger_compgen "${!subcommandOptions}")"
|
subcommandOptions=_hledger_complist_options_${subcommand//-/_}
|
||||||
|
_hledger_compreply "$(_hledger_compgen "${!subcommandOptions}")"
|
||||||
|
fi
|
||||||
break
|
break
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -58,11 +60,12 @@ _hledger_completion_function() {
|
|||||||
_hledger_compreply_optarg && return
|
_hledger_compreply_optarg && return
|
||||||
|
|
||||||
if [[ -z $subcommand ]]; then
|
if [[ -z $subcommand ]]; then
|
||||||
# Completion lists are already sorted at build-time
|
compopt +o filenames
|
||||||
# This keeps commands and options grouped separately
|
if [[ $cur == -* ]]; then
|
||||||
compopt -o nosort +o filenames
|
_hledger_compreply "$(_hledger_compgen "$_hledger_complist_generic_options")"
|
||||||
_hledger_compreply "$(_hledger_compgen "$_hledger_complist_commands")"
|
else
|
||||||
_hledger_compreply_append "$(_hledger_compgen "$_hledger_complist_generic_options")"
|
_hledger_compreply "$(_hledger_compgen "$_hledger_complist_commands")"
|
||||||
|
fi
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
@ -261,11 +264,18 @@ _hledger_compreply_optarg() {
|
|||||||
_hledger_compreply_query() {
|
_hledger_compreply_query() {
|
||||||
[[ $cur =~ .: ]] || return
|
[[ $cur =~ .: ]] || return
|
||||||
local query=${cur%%:*}:
|
local query=${cur%%:*}:
|
||||||
|
local match=${cur#*:}
|
||||||
grep -Fxqe "$query" <<< "$_hledger_complist_query_filters" || return
|
grep -Fxqe "$query" <<< "$_hledger_complist_query_filters" || return
|
||||||
|
|
||||||
local hledgerArgs=()
|
local hledgerArgs=()
|
||||||
case $query in
|
case $query in
|
||||||
acct:) hledgerArgs=(accounts --flat) ;;
|
acct:)
|
||||||
|
if (( ${#match} )); then
|
||||||
|
hledgerArgs=(accounts --flat)
|
||||||
|
else
|
||||||
|
hledgerArgs=(accounts --flat --depth 1)
|
||||||
|
fi
|
||||||
|
;;
|
||||||
code:) hledgerArgs=(codes) ;;
|
code:) hledgerArgs=(codes) ;;
|
||||||
cur:) hledgerArgs=(commodities) ;;
|
cur:) hledgerArgs=(commodities) ;;
|
||||||
desc:) hledgerArgs=(descriptions) ;;
|
desc:) hledgerArgs=(descriptions) ;;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user