From 7da9bce6c1f2edf7beb0397765c143c98f7fd591 Mon Sep 17 00:00:00 2001 From: Koichi Murase Date: Tue, 31 Jan 2023 18:52:51 +0900 Subject: [PATCH] decode: fix non-working TAB completion in bash-4.4 and lower --- docs/ChangeLog.md | 1 + note.txt | 25 +++++++++++++++++++++++++ src/decode.sh | 18 ++++++++++++++---- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/docs/ChangeLog.md b/docs/ChangeLog.md index bfbc7d4a..0f4ee072 100644 --- a/docs/ChangeLog.md +++ b/docs/ChangeLog.md @@ -337,6 +337,7 @@ - highlight: fix a bug that `bleopt filename_ls_colors` is not working (reported by qoreQyaS) `#D1919` b568ade - bind: fix M-C-@, C-x C-@, and M-C-x (`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 diff --git a/note.txt b/note.txt index 584da535..a635fd46 100644 --- a/note.txt +++ b/note.txt @@ -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] diff --git a/src/decode.sh b/src/decode.sh index 0b400ed6..bea005b2 100644 --- a/src/decode.sh +++ b/src/decode.sh @@ -638,6 +638,18 @@ 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 @@ -645,7 +657,7 @@ function ble-decode/.hook { 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 @@ -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