From 6954b134c8bf1912d1a2bd397805802983d8d142 Mon Sep 17 00:00:00 2001 From: Koichi Murase Date: Tue, 12 Jul 2022 21:41:26 +0900 Subject: [PATCH] complete: generate options by empty-word copmletion after filenames --- docs/ChangeLog.md | 1 + lib/core-complete.sh | 27 ++++++++++++++++++++++----- note.txt | 14 ++++++++++++++ 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/docs/ChangeLog.md b/docs/ChangeLog.md index 006a66cd..e7094c7f 100644 --- a/docs/ChangeLog.md +++ b/docs/ChangeLog.md @@ -165,6 +165,7 @@ - edit (`ble-detach`): prepend a space to `stty sane` for `HISTIGNORE=' *'` `#D1796` 26b532e - decode (`bind`): do not treat non-beginning `#` as comments `#D1820` 65c4138 - history: disable the history file when `HISTFILE` is empty `#D1836` 9549e83 +- complete: generate options by empty-word copmletion after filenames (reported by geekscrapy) `#D1846` XXXXXXX ## Fixes diff --git a/lib/core-complete.sh b/lib/core-complete.sh index dd30a69a..deb9d4bd 100644 --- a/lib/core-complete.sh +++ b/lib/core-complete.sh @@ -4862,9 +4862,15 @@ function ble/complete/source:option/.is-option-context { } function ble/complete/source:option { - # 空文字列もしくは /^[-+].*/ の時にだけ候補生成 (曖昧補完で最初の /^[-+]/ は補わない) - local rex='^-[-+'$_ble_complete_option_chars']*$|^\+[_'$_ble_complete_option_chars']*$' - [[ ! $COMPV || $COMPV =~ $rex ]] || return 0 + local opts=$1 + if [[ :$opts: == *:empty:* ]]; then + # 空文字列に対する補完を明示的に実行 + [[ ! $COMPV ]] || return 0 + else + # /^[-+].*/ の時にだけ候補生成 (曖昧補完で最初の /^[-+]/ は補わない) + local rex='^-[-+'$_ble_complete_option_chars']*$|^\+[_'$_ble_complete_option_chars']*$' + [[ $COMPV =~ $rex ]] || return 0 + fi local COMPS=$COMPS COMPV=$COMPV ble/complete/source/reduce-compv-for-ambiguous-match @@ -5001,14 +5007,18 @@ function ble/complete/source:argument { local old_cand_count=$cand_count - # try complete&compgen + #---------------------------------------------------------------------------- + # 1. Attempt user-defined completion ble/complete/source:argument/.generate-user-defined-completion; local ext=$? ((ext==148||cand_count>old_cand_count)) && return "$ext" [[ $comp_opts == *:ble/no-default:* ]] && return "$ext" + #---------------------------------------------------------------------------- + # 2. Attempt built-in argument completion + # "-option" の時は complete options based on mandb ble/complete/source:option; local ext=$? - ((ext==148||cand_count>old_cand_count&&${#COMPV})) && return "$ext" + ((ext==148)) && return "$ext" # 候補が見付からない場合 (または曖昧補完で COMPV に / が含まれる場合) if [[ $comp_opts == *:dirnames:* ]]; then @@ -5017,8 +5027,15 @@ function ble/complete/source:argument { # filenames, default, bashdefault ble/complete/source:file fi; local ext=$? + ((ext==148)) && return "$ext" + + # 空文字列に対するオプション生成はファイル名よりも後で試みる + ble/complete/source:option empty; local ext=$? ((ext==148||cand_count>old_cand_count)) && return "$ext" + #---------------------------------------------------------------------------- + # 3. Attempt rhs completion + if local rex='^/?[-_a-zA-Z0-9.]+[:=]|^-[^-/=:]'; [[ $COMPV =~ $rex ]]; then # var=filename --option=filename /I:filename など。 local prefix=$BASH_REMATCH value=${COMPV:${#BASH_REMATCH}} diff --git a/note.txt b/note.txt index 965846fc..d2086644 100644 --- a/note.txt +++ b/note.txt @@ -6463,6 +6463,20 @@ bash_tips 2022-07-12 + * ble.sh built-in completion で既定でオプションを補完するが他の候補よりも前に来るので邪魔 (reported by geekscrapy) [#D1846] + https://github.com/rsteube/carapace-bin/issues/1219 + https://github.com/akinomyoga/ble.sh/issues/204 + + % と思ったが、よく考えるとそもそも空文字列でオプションも含める様にしたのは + % ちゃんと絞り込みで候補を絞った時にオプションも表示する様にする為だった。 + % 空文字列での補完に対してオプションを生成しなかった時に何が起こるのか改め + % て確認する必要がある。 + + 改めて確認したが別にオプション名はソートによってファイル名よりも先に来てい + るのではなく、単に生成する順序に従って先に来ているだけだった。"-" で始まる + 補完の時にはオプションを先に表示して、空文字列に対する補完の時にはファイル + 名よりも後にオプションを生成する様に変更した。 + * kitty の keyboard protocol を terminal multiplexer 越しに有効化する (motivated by ferdinandyb) [#D1845] https://github.com/akinomyoga/ble.sh/issues/209#issuecomment-1179994203