Fix --long-opt= completion

Commit #64282f3f broke that somehow so I need to force the match on
an empty string after the equal sign, not the equal sign itself.

I think that _init_completion() does a bit more than I need...
This commit is contained in:
Vladimir Zhelezov 2020-12-10 08:33:56 +01:00
parent 9569cfc8f3
commit 357a78e7bf
2 changed files with 38 additions and 22 deletions

View File

@ -179,8 +179,12 @@ _hledger_compgen() {
quoted[i++]=$word quoted[i++]=$word
done <<< "$wordlist" done <<< "$wordlist"
if (( $# < 3 )); then
match=${cur:${#prefix}}
fi
local IFS=$'\n' local IFS=$'\n'
compgen -P "$prefix" -W "${quoted[*]}" -- "${match:-${cur:${#prefix}}}" compgen -P "$prefix" -W "${quoted[*]}" -- "$match"
} }
# Try required option argument completion. Set COMPREPLY and return 0 on # Try required option argument completion. Set COMPREPLY and return 0 on
@ -190,43 +194,47 @@ _hledger_compreply_optarg() {
local recursionLevel=${2:-0} local recursionLevel=${2:-0}
local wordlist local wordlist
local error=0 local error=0
local match
# Match the empty string on --file=<TAB>
[[ $cur == = ]] || match=$cur
case ${words[optionIndex]} in case ${words[optionIndex]} in
--alias) --alias)
compopt -o nospace compopt -o nospace
_hledger_compreply "$(_hledger_compgen "$(_hledger accounts --flat)")" _hledger_compreply "$(_hledger_compgen "$(_hledger accounts --flat)" "" "$match")"
;; ;;
-f|--file|--rules-file|-o|--output-file) -f|--file|--rules-file|-o|--output-file)
_hledger_compreply "$(compgen -f -- "$cur")" _hledger_compreply "$(compgen -f -- "$match")"
;; ;;
--pivot) --pivot)
compopt -o nosort compopt -o nosort
wordlist="code description note payee" wordlist="code description note payee"
_hledger_compreply "$(compgen -W "$wordlist" -- "$cur")" _hledger_compreply "$(compgen -W "$wordlist" -- "$match")"
_hledger_compreply_append "$(_hledger_compgen "$(_hledger tags)")" _hledger_compreply_append "$(_hledger_compgen "$(_hledger tags)" "" "$match")"
;; ;;
--value) --value)
wordlist="cost then end now" wordlist="cost then end now"
_hledger_compreply "$(compgen -W "$wordlist" -- "$cur")" _hledger_compreply "$(compgen -W "$wordlist" -- "$match")"
;; ;;
-X|--exchange) -X|--exchange)
_hledger_compreply "$(_hledger_compgen "$(_hledger commodities)")" _hledger_compreply "$(_hledger_compgen "$(_hledger commodities)" "" "$match")"
;; ;;
--color|--colour) --color|--colour)
compopt -o nosort compopt -o nosort
wordlist="auto always yes never no" wordlist="auto always yes never no"
_hledger_compreply "$(compgen -W "$wordlist" -- "$cur")" _hledger_compreply "$(compgen -W "$wordlist" -- "$match")"
;; ;;
-O|--output-format) -O|--output-format)
wordlist="txt csv json sql" wordlist="txt csv json sql"
_hledger_compreply "$(compgen -W "$wordlist" -- "$cur")" _hledger_compreply "$(compgen -W "$wordlist" -- "$match")"
;; ;;
--close-acct|--open-acct) --close-acct|--open-acct)
compopt -o nospace compopt -o nospace
_hledger_compreply "$(_hledger_compgen "$(_hledger accounts --flat)")" _hledger_compreply "$(_hledger_compgen "$(_hledger accounts --flat)" "" "$match")"
;; ;;
--debug) --debug)
_hledger_compreply "$(compgen -W "{1..9}" -- "$cur")" _hledger_compreply "$(compgen -W "{1..9}" -- "$match")"
;; ;;
# Argument required, but no handler (yet) # Argument required, but no handler (yet)
-b|--begin|-e|--end|-p|--period|--depth|--drop) -b|--begin|-e|--end|-p|--period|--depth|--drop)

View File

@ -179,8 +179,12 @@ _hledger_compgen() {
quoted[i++]=$word quoted[i++]=$word
done <<< "$wordlist" done <<< "$wordlist"
if (( $# < 3 )); then
match=${cur:${#prefix}}
fi
local IFS=$'\n' local IFS=$'\n'
compgen -P "$prefix" -W "${quoted[*]}" -- "${match:-${cur:${#prefix}}}" compgen -P "$prefix" -W "${quoted[*]}" -- "$match"
} }
# Try required option argument completion. Set COMPREPLY and return 0 on # Try required option argument completion. Set COMPREPLY and return 0 on
@ -190,43 +194,47 @@ _hledger_compreply_optarg() {
local recursionLevel=${2:-0} local recursionLevel=${2:-0}
local wordlist local wordlist
local error=0 local error=0
local match
# Match the empty string on --file=<TAB>
[[ $cur == = ]] || match=$cur
case ${words[optionIndex]} in case ${words[optionIndex]} in
--alias) --alias)
compopt -o nospace compopt -o nospace
_hledger_compreply "$(_hledger_compgen "$(_hledger accounts --flat)")" _hledger_compreply "$(_hledger_compgen "$(_hledger accounts --flat)" "" "$match")"
;; ;;
-f|--file|--rules-file|-o|--output-file) -f|--file|--rules-file|-o|--output-file)
_hledger_compreply "$(compgen -f -- "$cur")" _hledger_compreply "$(compgen -f -- "$match")"
;; ;;
--pivot) --pivot)
compopt -o nosort compopt -o nosort
wordlist="code description note payee" wordlist="code description note payee"
_hledger_compreply "$(compgen -W "$wordlist" -- "$cur")" _hledger_compreply "$(compgen -W "$wordlist" -- "$match")"
_hledger_compreply_append "$(_hledger_compgen "$(_hledger tags)")" _hledger_compreply_append "$(_hledger_compgen "$(_hledger tags)" "" "$match")"
;; ;;
--value) --value)
wordlist="cost then end now" wordlist="cost then end now"
_hledger_compreply "$(compgen -W "$wordlist" -- "$cur")" _hledger_compreply "$(compgen -W "$wordlist" -- "$match")"
;; ;;
-X|--exchange) -X|--exchange)
_hledger_compreply "$(_hledger_compgen "$(_hledger commodities)")" _hledger_compreply "$(_hledger_compgen "$(_hledger commodities)" "" "$match")"
;; ;;
--color|--colour) --color|--colour)
compopt -o nosort compopt -o nosort
wordlist="auto always yes never no" wordlist="auto always yes never no"
_hledger_compreply "$(compgen -W "$wordlist" -- "$cur")" _hledger_compreply "$(compgen -W "$wordlist" -- "$match")"
;; ;;
-O|--output-format) -O|--output-format)
wordlist="txt csv json sql" wordlist="txt csv json sql"
_hledger_compreply "$(compgen -W "$wordlist" -- "$cur")" _hledger_compreply "$(compgen -W "$wordlist" -- "$match")"
;; ;;
--close-acct|--open-acct) --close-acct|--open-acct)
compopt -o nospace compopt -o nospace
_hledger_compreply "$(_hledger_compgen "$(_hledger accounts --flat)")" _hledger_compreply "$(_hledger_compgen "$(_hledger accounts --flat)" "" "$match")"
;; ;;
--debug) --debug)
_hledger_compreply "$(compgen -W "{1..9}" -- "$cur")" _hledger_compreply "$(compgen -W "{1..9}" -- "$match")"
;; ;;
# Argument required, but no handler (yet) # Argument required, but no handler (yet)
-b|--begin|-e|--end|-p|--period|--depth|--drop) -b|--begin|-e|--end|-p|--period|--depth|--drop)