Skip to content

Commit

Permalink
decode: fix non-working TAB completion in bash-4.4 and lower
Browse files Browse the repository at this point in the history
  • Loading branch information
akinomyoga committed Jan 31, 2023
1 parent 92f2006 commit 7da9bce
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 4 deletions.
1 change: 1 addition & 0 deletions docs/ChangeLog.md
Expand Up @@ -337,6 +337,7 @@
- highlight: fix a bug that `bleopt filename_ls_colors` is not working (reported by qoreQyaS) `#D1919` b568ade
- bind: fix <kbd>M-C-@</kbd>, <kbd>C-x C-@</kbd>, and <kbd>M-C-x</kbd> (`bash-4.2 -o emacs`) `#D1920` a410b03
- complete (action:file): support `ble/syntax-raw` in the filename extraction (reported by qoreQyaS) `#D1921` 32277da
- decode: fix a bug that the tab completion do not work with bash-4.4 and lower `#D1928` xxxxxxx

## Documentation

Expand Down
25 changes: 25 additions & 0 deletions note.txt
Expand Up @@ -6846,6 +6846,31 @@ bash_tips
Done (実装ログ)
-------------------------------------------------------------------------------

2023-01-31

* decode: bash-4.4 以下で補完が全く起動されない [#D1928]

cygwin で completion を起動しようとすると固まる。何故?
最近の変更が原因かもしれない。確認する必要がある。

そもそも complete が全く呼び出されていない。色々試してみたがそもそもキー入
力がちゃんと通っていない気がする。

auto-complete 候補が出ていても出ていなくても関係ない。

どうも 138c476 の前後で振る舞いが変わっている。+o posix を追加すると問題が
再現する。どうもそもそも $_ble_bash_options_adjusted が有効になっていない状
態で .hook が呼び出されている。然し、それもなぜだか分からない。

Linux でも bash-4.4 以下で再現する。

うーん。分かって来た。set +o posix すると complete が bash の complete に変
わってしまう。ここで readline のコマンドラインは空なのでコマンド名補完が行
われる。no_empty_cmd_completion off にしているので、そのまま全てのコマンド
の補完を処理しようとして固まる。

set +o posix は実際に変化がある時にのみ実行するべきである。

2023-01-30

* main: 空の LANG に対して警告を表示する (movivated by Ultra980) [#D1927]
Expand Down
18 changes: 14 additions & 4 deletions src/decode.sh
Expand Up @@ -638,14 +638,26 @@ elif ((_ble_bash>=40000)); then
ble/function#suppress-stderr ble/decode/nonblocking-read
fi

function ble-decode/.hook/adjust-volatile-options {
# Note: bind -x 内の set +v は揮発性なのでできるだけ先頭で set +v しておく。
# (PROLOGUE 内から呼ばれる) stdout.on より前であれば大丈夫 #D0930
if [[ $_ble_bash_options_adjusted ]]; then
set +ev
fi
if [[ $_ble_bash_POSIXLY_CORRECT_adjusted && ${POSIXLY_CORRECT+set} ]]; then
set +o posix
ble/base/workaround-POSIXLY_CORRECT
fi
}

_ble_decode_hook_Processing=
function ble-decode/.hook {
if ble/util/is-stdin-ready; then
ble/array#push _ble_decode_input_buffer "$@"

local buflen=${#_ble_decode_input_buffer[@]}
if ((buflen%257==0&&buflen>=2000)); then
[[ ! $_ble_bash_options_adjusted ]] || set +ev +o posix
ble-decode/.hook/adjust-volatile-options

local IFS=$_ble_term_IFS
local _ble_decode_hook_Processing=prologue
Expand Down Expand Up @@ -678,9 +690,7 @@ function ble-decode/.hook {
return 0
fi

# Note: bind -x 内の set +v は揮発性なのでできるだけ先頭で set +v しておく。
# (PROLOGUE 内から呼ばれる) stdout.on より前であれば大丈夫 #D0930
[[ ! $_ble_bash_options_adjusted ]] || set +ev +o posix
ble-decode/.hook/adjust-volatile-options

local IFS=$_ble_term_IFS
local _ble_decode_hook_Processing=prologue
Expand Down

0 comments on commit 7da9bce

Please sign in to comment.