Skip to content

Commit

Permalink
edit: fix regressions of vbell and ble/builtin/exit in Bash 3.2
Browse files Browse the repository at this point in the history
  • Loading branch information
akinomyoga committed Aug 25, 2024
1 parent ed11901 commit f5955d5
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 2 deletions.
1 change: 1 addition & 0 deletions docs/ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@
- edit: fix leftover region after command execution `#D2247` 75c4a848
- keymap/vi: fix <kbd>C-w</kbd> not saving the word into kill ring `#D2208` aa7ca45d
- edit: fix standard streams in `EXIT` trap with `ble/widget/exit` `#D2217` 89f0dab8
- edit: fix regressions of vbell and `ble/builtin/exit` in Bash 3.2 `#D2265` xxxxxxxx
- util(`ble/fd#cloexec`): check `fdflags` compatibility to avoid crash `#D2227` c3b3aaf8
- util(`ble/function#evaldef`): suppress alias expansions (reported by 103sbavert) `#D2240` 51e762fe
- main: fix a bug that `_ble_bash` is missing (reported by tessus and Knusper) `#D2242` bb2dae6e a9b962d2
Expand Down
43 changes: 43 additions & 0 deletions note.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7373,6 +7373,32 @@ bash_tips

2024-08-25

* edit: bash-3.2 がまた動かなくなっている [#D2265]
Ref: #D2228, #D2217

https://github.com/akinomyoga/ble.sh/issues/489 の報告を受けてから bash-3.2
の動作を確認していて気付いた。然し、何故報告者はこの振る舞いについて報告し
ていなくて代わりにどうでも良い事を報告しているのだろう。一つの可能性は少し
使っただけで実際には ble.sh を使っていない? 或いは実は bash-3.2 ではなくて
もっと新しい bash を使っている? 或いは何らかの理由で bash-3.2 でもちゃんと
動く状況が存在する? よく分からない。

ble/util/idle.cancel を使おうとしてエラーが発生している。また終了時に
return に空引数が渡されてエラーメッセージが発生している。C-d で終了できない。

* ble/uti/idle.cancel に関しては新しい visible-bell の実装がコマンド実行直
前に visible-bell の表示を消去する時に無条件に呼び出している。
ble/util/idle.push が有効の時にのみ ble/util/idle.cancel を呼び出す。

* C-d で終了できないのは、bash-3.2 では C-d の受信を trap USR1 経由で行って
いて、しかし ble/util/exit は trap 内部での実行を制限しているからだった。
受信に使っている USR1 の場合には ble/builtin/exit の trap の特別取り扱い
はしない様に修正する。

* return にから引数が渡されてエラーになる問題は trap 処理の修正をしたら消え
てなくなった。ble.sh の unload 処理をした後も処理が続行していたのが問題だっ
たのかもしれない。

* README: ble-attach の条件を [[ ! ${BLE_VERSION-} ]] || ble-attach に変更 [#D2264]

現在の方法 [[ ${BLE_VERSION-} ]] && ble-attach だと ble.sh をロードしていな
Expand Down Expand Up @@ -8848,6 +8874,7 @@ bash_tips
2024-06-19

* vbell: panel 内部に表示する (requested by bb010g) [#D2228]
Ref: #D2265

類似の事を過去に考えた事がある様な気がする。ToDo 2021-02-23 に sc..rc の親
シェルと子シェルの conflict について書いてある。結局、complete menu と同じ
Expand Down Expand Up @@ -8957,6 +8984,13 @@ bash_tips

* done: doc: blerc.template ok, wiki en ok, wiki jp

----

2024-08-25 #D2265 bash-3.2 で ble/edit/visible-bell#collapse が
ble/util/idle.cancel を呼び出してエラーが発生する様になっていた。bash-3.2
ではそもそも ble/util/idle を使わないので ble/util/idle.cancel を呼び出す必
要もない。

* 2024-06-12 util: fdflags を呼び出した時点で bash がクラッシュしている [#D2227]

何故か分からないが現在の bash と関係ない BASH が設定されていて、その上で互
Expand Down Expand Up @@ -9536,6 +9570,7 @@ bash_tips
* done: 1>&2 は >&2 に標準化する。

* edit: fix standard streams in EXIT trap with ble/widget/exit [#D2217]
Ref: #D2265

EXIT trap 実行時に tui streams にリダイレクトする?

Expand Down Expand Up @@ -9713,6 +9748,14 @@ bash_tips
ble/builtin/exit を用いて終了する事にした。重複したジョブのチェックをスキッ
プする為に _ble_builtin_exit_processing=1 を設定して呼び出す。

----

2024-08-25 #D2265 bash-3.2 で C-d で終了できなくなっていた。bash-3.2 は
trap で C-d を受信するが、trap 内では ble/builtin/exit の動作が制限されてい
る。この修正で明示的な builtin exit の呼び出しを ble/builtin/exit に置き換
えた事で問題が発生していた。bash-3.2 の trap USR1 経由の trap handler 内部
では trap 用の特別処理を無効にする事にした。

* debug: 関数呼び出しツリー [#D2216]
Ref #D2207

Expand Down
14 changes: 12 additions & 2 deletions src/edit.sh
Original file line number Diff line number Diff line change
Expand Up @@ -771,8 +771,10 @@ function ble/edit/visible-bell#panel::render {
}

function ble/edit/visible-bell#collapse {
ble/util/idle.cancel ble/edit/visible-bell/.async-1.idle
ble/util/idle.cancel ble/edit/visible-bell/.async-2.idle
if ble/is-function ble/util/idle.push; then
ble/util/idle.cancel ble/edit/visible-bell/.async-1.idle
ble/util/idle.cancel ble/edit/visible-bell/.async-2.idle
fi
_ble_edit_vbell_state=('' '' 0)
local -a DRAW_BUFF=()
ble/canvas/panel#set-height.draw "$_ble_edit_vbell_panel" 0
Expand Down Expand Up @@ -6605,6 +6607,14 @@ function ble/builtin/exit {
local trap_processing=$_ble_builtin_trap_processing
[[ $_ble_builtin_trap_processing == "${BASH_SUBSHELL:-0}"/* ]] || trap_processing=

# Note (#D22XX): In bash < 4.0, "_ble_builtin_trap_processing" may be set by
# the user input [C-d] through SIGUSR1. In this case, we clear
# "trap_processing" since we want to process ble/builtin/exit normally.
((_ble_bash<40000)) &&
[[ $trap_processing && " ${FUNCNAME[*]} " == *' ble-edit/io/TRAPUSR1 '* ]] &&
[[ ${_ble_builtin_trap_sig_name[${trap_processing##*/}]} == SIGUSR1 ]] &&
trap_processing=

if [[ ! $trap_processing ]] && { ble/util/is-running-in-subshell || [[ $_ble_decode_bind_state == none ]]; }; then
(($#)) || set -- "$ext"
builtin exit "$@"
Expand Down

0 comments on commit f5955d5

Please sign in to comment.