From 846f2841f080bd0d2f2025b5d95a27aeef0febc5 Mon Sep 17 00:00:00 2001 From: Koichi Murase Date: Sun, 5 Jan 2020 21:59:17 +0800 Subject: [PATCH] decode: recover the terminal states after failing the default keymap initialization --- ble.pp | 3 +-- memo.txt | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/util.sh | 7 +------ 3 files changed, 48 insertions(+), 8 deletions(-) diff --git a/ble.pp b/ble.pp index 3ec6e89d..349f3d30 100644 --- a/ble.pp +++ b/ble.pp @@ -699,7 +699,7 @@ function ble-attach { ble-decode/reset-default-keymap # 264ms (keymap/vi.sh) if ! ble/decode/attach; then # 53ms _ble_attached= - ble/term/finalize + ble-edit/detach return 1 fi _ble_edit_detach_flag= # do not detach or exit @@ -727,7 +727,6 @@ function ble-detach { function ble-detach/impl { ble-edit/detach ble-decode/detach - ble/term/finalize READLINE_LINE='' READLINE_POINT=0 } function ble-detach/message { diff --git a/memo.txt b/memo.txt index 008cbe95..0d2cb755 100644 --- a/memo.txt +++ b/memo.txt @@ -2442,6 +2442,8 @@ bash_tips - history: fix a bug that garbage `__ble_edt__` is added in front of history entries 61f4bd1 - decode: remove debug messages for `ble-bind -s` 64a17c3 - syntax: fix highlighting of `${!var@}` `#D1176` 161ed80 + - util: fix the error message "usage: sleep seconds" on macOS bash 3.2 `#D1194` 0000000 + - decode: recover the terminal states after failing the default keymap initialization `#D1195` 0000000 Internal changes - complete: isolate menu related codes `#D1029` 43bb074 @@ -3405,6 +3407,50 @@ bash_tips Done (実装ログ) ------------------------------------------------------------------------------- +2020-01-05 + + * decode: "Failed to load the default keymap" で失敗した時に状態復元できていない [#D1195] + https://github.com/akinomyoga/ble.sh/issues/33 + これも上の報告のエラーメッセージの後に変な状態になっている様子から気づいた。 + + ? Failed to で失敗した時に stty を復元するべきでは? + 調べてみると復元している気がする。 + と思ったが stty/finalize を呼び出していて、ここでは stty -echo にしている。 + 何故だろう? と思って遡って見るがどうも最初に stty/finalize を作成した時 (2015-02-11) + からずっと stty -echo だった様である。今と昔では detach の方法が違うので、 + 実はこれについては変更しても良いのではないかという気がする。後で考察する必要がある。 + + * done: これについて整理する。stty/finalize は ble/term/finalize から呼び出されている。 + ble/term/finalize は ble-detach/impl (ble.pp) と ble-attach 失敗時 (ble.pp) + ble-decode/detach (decode.sh) 内部で呼び出されている。 + - ble-attach 失敗時には直前に ble-decode/detach が呼び出されている事が期待できる。 + - ble-detach/impl の場合にはやはり ble-decode/detach が直前で呼び出されている。 + - ble-decode/detach が呼び出されるのは上記の二箇所以外に + set -o vi|emacs によって編集モードが変わった時の reattach の時である。 + + うーん。ble/term/finalize は ble-decode/detach + の中で呼び出されるという事にして問題ない気がする。 + というのも attach の場合には ble/decode/attach で + ble/term/initialize を呼び出しているからである。 + + 無駄な呼び出しを削除した。確認してみると ble/term/{initialize,finalize} + 共に一箇所だけから呼び出される様になった。前よりもすっきりしたと思う。 + + さて、ble/term/finalize 引いては ble/term/stty/finalize も一箇所だけから呼び出される。 + この時に stty echo でも問題が生じないかについて調べる。 + 取り敢えず問題は発生していない気がする。ble-detach では大丈夫。 + 人為的に Failed to load the default keymap を起こした時も大丈夫。 + + * util: macOS での初期化時に bash-3.2 で "usage: sleep seconds" のエラーメッセージが出る [#D1194] + https://github.com/akinomyoga/ble.sh/issues/33 + これは上の報告のエラーメッセージを見ている時に気づいた。 + + ? sleep の引数がどうのこうのというエラーが出てもいる。関係は? + →これはまた別の問題だった。というか sleep の小数対応判定が完全に間違っていた。 + coreutils sleep であっても false になってしまっていた。 + また macOS の場合には sleep は期待した物であると考えて良さそう。 + なので macOS のチェックと "usage: sleep seconds" が両方表示されたら OK という事にする。 + 2020-01-02 * 2019-05-27 history: 履歴のリアルタイム同期? [#D1193] diff --git a/src/util.sh b/src/util.sh index af248bd3..95d8ea5f 100644 --- a/src/util.sh +++ b/src/util.sh @@ -3115,12 +3115,7 @@ function ble/term/stty/enter { _ble_term_stty_state=1 } function ble/term/stty/finalize { - [[ ! $_ble_term_stty_state ]] && return - # detach の場合 -echo を指定する - ble/bin/stty -echo -nl icanon \ - kill '' lnext '' werase '' erase '' \ - intr '' quit '' susp '' - _ble_term_stty_state= + ble/term/stty/leave } function ble/term/stty/TRAPEXIT { # exit の場合は echo