Skip to content

Commit

Permalink
edit: fix a regression that delete-selection does not work
Browse files Browse the repository at this point in the history
  • Loading branch information
akinomyoga committed Feb 13, 2024
1 parent 6c3f824 commit 98a2ae1
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 2 deletions.
2 changes: 1 addition & 1 deletion contrib
Submodule contrib updated 1 files
+1 −0 histdb.bash
2 changes: 2 additions & 0 deletions docs/ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,9 +139,11 @@
- keymap/vi: integrate vi tests into the test framework `#D2101` d16b8438
- global(leakvar): fix variable leak `#D2114` d3e1232d
- util: add `ble/util/{time,timeval,mktime}` `#D2133` 34a886fe
- histdb: fix variable leak of `ret` `#D2152` xxxxxxxx
- make(scan): apply builtin checks to `contrib` `#D2135` 2f16d985
- decode: change Isolated ESC to U+07FC `#D2138` 82bfa665
- edit: introduce `selection` keymap for more flexible shift selection `#D2139` 2cac11ad
- edit: fix a regression that delete-selection does not work (reported by cmndrsp0ck) `#D2151` xxxxxxxx
- util: support `bleopt connect_tty` `#D2140` f940696f
- main: fix unprocessed `-PGID` in `*.pid` for cleanup `#D2143` a5da23c0

Expand Down
36 changes: 36 additions & 0 deletions note.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7077,6 +7077,42 @@ bash_tips

2024-02-13

* 2024-02-11 histdb: varleak している。ret が時刻を含んでいる [#D2152]

norc では再現しない。histdb が怪しい。後でチェックする → 修正した。その他
の leak は今の所は起こっていない様だ。長時間使っている訳では無いので分から
ないが、todo 項目が増えて大変なのでこの時点で終結という事にする。また時間が
ある時、または実際に別の leak が判明した時に再度確認する事にする。

* edit: shift selection で delete-selection が起こらない (reported by cmndrsp0ck) [#D2151]
https://github.com/akinomyoga/ble.sh/issues/409
Ref #D2139

delete や文字挿入が効かなくなってしまったという報告。確かに考えてみればそう
だ。選択解除は処理を実行してからでなければならない筈だ。どの様に実装するべ
きか。安直には dispatch の後で selection が残っていたら解除するという形にな
る。然し、それで大丈夫だろうか。

* 例えば、もし他の機能によって selection が設定された場合に無視して解除して
良いのか。例えば _ble_edit_mark_active=S の時にだけ解除するというのでこの
パターンは回避できる。

* 或いは、再び shift selection を開始した場合にはどうなるのか? これについて
は keymap を確認すれば良い気がする。keymap が selection になっていたら保
持する。それ以外ならば解除する。selection から更に他のモードに入る事はな
いと仮定して良い。

というかそういう事であればそもそも _ble_edit_mark_active の値は気にせずに
現在の keymap の値だけを見て解除すれば良いのでは? と思ったがそれだと他の
仕組みで選択を開始した時にも解除されてしまってそれは問題だ。

つまりどの様に判定すれば良いかというと、_ble_edit_mark_active == S かつ
_ble_decode_keymap != selection の時に解除する様にすれば良い。

? ok: これに関係する考察を #D2139 でしているか? 何か落とし穴はないか? →改
めて見てみたが他の実装方法についての考察はあるが現在の実装についての詳細
な議論は残っていない。多分何も考えていなかった。気にしなくて良い気がする。

* complete: docker completion bash が遅いかもしれない [#D2150]

docker completion は __docker_q という関数を持っているみたいなので、この関
Expand Down
5 changes: 4 additions & 1 deletion src/edit.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4293,9 +4293,12 @@ function ble/widget/@marked {
}

function ble/widget/selection/exit-default {
_ble_edit_mark_active=
ble/decode/keymap/pop
ble/decode/widget/redispatch
local ext=$?
[[ $_ble_edit_mark_active == S && $_ble_decode_keymap != selection ]] &&
_ble_edit_mark_active=
return "$ext"
}

function ble-decode/keymap:selection/bind-shift {
Expand Down

0 comments on commit 98a2ae1

Please sign in to comment.