Skip to content

Commit

Permalink
edit: work around WINCH not updating COLUMNS/LINES after "ble-reload"
Browse files Browse the repository at this point in the history
  • Loading branch information
akinomyoga committed May 11, 2020
1 parent 537acf2 commit e2d54a2
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/edit.sh
Expand Up @@ -1198,7 +1198,7 @@ function ble-edit/attach/.attach {
_ble_edit_CMD=$_ble_edit_LINENO
fi

trap ble-edit/attach/TRAPWINCH WINCH
ble/builtin/trap/set-readline-signal WINCH ble-edit/attach/TRAPWINCH

ble-edit/adjust-PS1
ble-edit/adjust-IGNOREEOF
Expand Down Expand Up @@ -6577,7 +6577,7 @@ function ble/builtin/read/.loop {

local x0=$_ble_canvas_x y0=$_ble_canvas_y
ble/builtin/read/.setup-textarea
trap -- ble/builtin/read/TRAPWINCH WINCH
ble/builtin/trap/set-readline-signal WINCH ble/builtin/read/TRAPWINCH

local ret= timeout=
if [[ $opt_timeout ]]; then
Expand Down
32 changes: 32 additions & 0 deletions src/util.sh
Expand Up @@ -760,6 +760,38 @@ function ble/path#remove-glob {
builtin eval -- "${_ble_local_script//opts/$1}"
}

## 関数 ble/builtin/trap/set-readline-signal sig handler
## ble.sh 内部で使用するハンドラを登録します。
##
## Note #D1345: ble.sh の内部で "builtin trap -- WINCH" 等とすると
## readline の処理が行われなくなってしまう (COLUMNS, LINES が更新さ
## れない)。
##
## Bash では TSTP, TTIN, TTOU, INT, TERM, HUP, QUIT, WINCH について
## は readline が処理を追加している。builtin trap を実行すると、一旦
## は trap の設定した trap_handler が設定されるが、"コマンド実行後"
## に readline が rl_maybe_set_sighandler という関数を用いて上書きし
## てreadline 特有の処理を挿入する。ble.sh は readline の "コマンド
## 実行"を使わないので、readline による追加処理が消滅する。
##
## 対策として、今から登録しようとしている文字列が既に登録されている
## 物と一致する場合には、builtin trap の呼び出しを省略する。現状では
## 問題になっているのは WINCH だけなので取り敢えず WINCH だけ対策を
## する。
##
function ble/builtin/trap/set-readline-signal {
local sig=${1#SIG} handler=$2 trap
if ble/util/is-running-in-subshell; then
builtin trap -- "$handler" "$sig"
return
fi

# Skip if already registered
ble/util/assign trap "builtin trap -p $sig"
local cmd="trap -- '$handler' SIG$sig"
[[ $cmd == "$trap" ]] && return 0
eval "builtin $cmd"
}

#
# assign: reading files/streams into variables
Expand Down

0 comments on commit e2d54a2

Please sign in to comment.