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 | ||||
|             fi | ||||
|         fi | ||||
|         # Replace dashes with underscores and use indirect expansion | ||||
|         subcommandOptions=_hledger_complist_options_${subcommand//-/_} | ||||
|         _hledger_compreply "$(_hledger_compgen "${!subcommandOptions}")" | ||||
|         if [[ $cur == -* ]]; then | ||||
|             # Replace dashes with underscores and use indirect expansion | ||||
|             subcommandOptions=_hledger_complist_options_${subcommand//-/_} | ||||
|             _hledger_compreply "$(_hledger_compgen "${!subcommandOptions}")" | ||||
|         fi | ||||
|         break | ||||
|     done | ||||
| 
 | ||||
| @ -58,11 +60,12 @@ _hledger_completion_function() { | ||||
|     _hledger_compreply_optarg && return | ||||
| 
 | ||||
|     if [[ -z $subcommand ]]; then | ||||
|         # Completion lists are already sorted at build-time | ||||
|         # This keeps commands and options grouped separately | ||||
|         compopt -o nosort +o filenames | ||||
|         _hledger_compreply "$(_hledger_compgen "$_hledger_complist_commands")" | ||||
|         _hledger_compreply_append "$(_hledger_compgen "$_hledger_complist_generic_options")" | ||||
|         compopt +o filenames | ||||
|         if [[ $cur == -* ]]; then | ||||
|             _hledger_compreply "$(_hledger_compgen "$_hledger_complist_generic_options")" | ||||
|         else | ||||
|             _hledger_compreply "$(_hledger_compgen "$_hledger_complist_commands")" | ||||
|         fi | ||||
| 
 | ||||
|         return 0 | ||||
|     fi | ||||
| @ -261,11 +264,18 @@ _hledger_compreply_optarg() { | ||||
| _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:)  hledgerArgs=(accounts --flat) ;; | ||||
|         acct:) | ||||
|                 if (( ${#match} )); then | ||||
|                     hledgerArgs=(accounts --flat) | ||||
|                 else | ||||
|                     hledgerArgs=(accounts --flat --depth 1) | ||||
|                 fi | ||||
|                 ;; | ||||
|         code:)  hledgerArgs=(codes) ;; | ||||
|         cur:)   hledgerArgs=(commodities) ;; | ||||
|         desc:)  hledgerArgs=(descriptions) ;; | ||||
|  | ||||
| @ -48,9 +48,11 @@ _hledger_completion_function() { | ||||
|                 return 0 | ||||
|             fi | ||||
|         fi | ||||
|         # Replace dashes with underscores and use indirect expansion | ||||
|         subcommandOptions=_hledger_complist_options_${subcommand//-/_} | ||||
|         _hledger_compreply "$(_hledger_compgen "${!subcommandOptions}")" | ||||
|         if [[ $cur == -* ]]; then | ||||
|             # Replace dashes with underscores and use indirect expansion | ||||
|             subcommandOptions=_hledger_complist_options_${subcommand//-/_} | ||||
|             _hledger_compreply "$(_hledger_compgen "${!subcommandOptions}")" | ||||
|         fi | ||||
|         break | ||||
|     done | ||||
| 
 | ||||
| @ -58,11 +60,12 @@ _hledger_completion_function() { | ||||
|     _hledger_compreply_optarg && return | ||||
| 
 | ||||
|     if [[ -z $subcommand ]]; then | ||||
|         # Completion lists are already sorted at build-time | ||||
|         # This keeps commands and options grouped separately | ||||
|         compopt -o nosort +o filenames | ||||
|         _hledger_compreply "$(_hledger_compgen "$_hledger_complist_commands")" | ||||
|         _hledger_compreply_append "$(_hledger_compgen "$_hledger_complist_generic_options")" | ||||
|         compopt +o filenames | ||||
|         if [[ $cur == -* ]]; then | ||||
|             _hledger_compreply "$(_hledger_compgen "$_hledger_complist_generic_options")" | ||||
|         else | ||||
|             _hledger_compreply "$(_hledger_compgen "$_hledger_complist_commands")" | ||||
|         fi | ||||
| 
 | ||||
|         return 0 | ||||
|     fi | ||||
| @ -261,11 +264,18 @@ _hledger_compreply_optarg() { | ||||
| _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:)  hledgerArgs=(accounts --flat) ;; | ||||
|         acct:) | ||||
|                 if (( ${#match} )); then | ||||
|                     hledgerArgs=(accounts --flat) | ||||
|                 else | ||||
|                     hledgerArgs=(accounts --flat --depth 1) | ||||
|                 fi | ||||
|                 ;; | ||||
|         code:)  hledgerArgs=(codes) ;; | ||||
|         cur:)   hledgerArgs=(commodities) ;; | ||||
|         desc:)  hledgerArgs=(descriptions) ;; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user