Skip to content

Commit

Permalink
keymap/vi: fix the behavior of text-object for quotes in xmap
Browse files Browse the repository at this point in the history
  • Loading branch information
akinomyoga committed Dec 11, 2023
1 parent 11cf118 commit 5f9a44e
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 7 deletions.
5 changes: 3 additions & 2 deletions docs/ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
- make: support `make uninstall` `#D2068` a39a4a89
- edit: support `bleopt {edit_marker{,_error},exec_exit_mark}` `#D2079` e4e1c874
- edit: add widget `zap-to-char` `#D2082` ce7ce403
- keymap/vi: split widget `text-object` into `text-object-{inner,outer}` `#D2093` xxxxxxxx
- keymap/vi: split widget `text-object` into `text-object-{inner,outer}` (requested by Darukutsu) `#D2093` 11cf118a

## Changes

Expand All @@ -41,6 +41,7 @@
- complete: fix error messages on empty command names `#D2085` dab8dd04
- complete: fix parsing the output of `complete -p` in bash-5.2 (reported by maheis) `#D2088` a7eb5d04
- make: specify bash to search the awk path using `type -p` (reported by rashil2000) `#D2089` 26826354
- keymap/vi: fix the behavior of text-object for quotes in xmap (reported by Darukutsu) `#D2093` xxxxxxxx

## Compatibility

Expand All @@ -59,7 +60,7 @@
- canvas: update tables and grapheme clusters for Unicode 15.1.0 `#D2078` 503bb38b 9d84b424 9d84b424
- complete: use conditional-sync for cobraV2 completions (reported by sebhoss) `#D2084` 595f905b
- term: add workarounds for `eterm` `#D2087` a643f0ea
- global: adjust bash options for utilities outside the ble context `#D2092` xxxxxxxx
- global: adjust bash options for utilities outside the ble context (motivated by jkemp814) `#D2092` 6b144de7

## Contrib

Expand Down
27 changes: 23 additions & 4 deletions lib/keymap.vi.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4605,7 +4605,18 @@ function ble/keymap:vi/text-object/word.impl {
fi
}

## @fn ble/keymap:vi/text-object:quote/is-closing-quote index
## @var[in] quote
function ble/keymap:vi/text-object:quote/is-closing-quote {
local index=${1:-$_ble_edit_ind}
[[ ${_ble_edit_str:index:1} == "$quote" ]] || return 1
local ret
ble-edit/content/find-logical-bol "$index"; local bol=$ret
ble/string#count-char "${_ble_edit_str:bol:_ble_edit_ind-bol}" "$quote"
((ret%2==1))
}
## @fn ble/keymap:vi/text-object:quote/.next [index]
## @var[in] quote
## @var[out] ret
function ble/keymap:vi/text-object:quote/.next {
local index=${1:-$((_ble_edit_ind+1))} nl=$'\n'
Expand All @@ -4615,6 +4626,7 @@ function ble/keymap:vi/text-object:quote/.next {
return 0
}
## @fn ble/keymap:vi/text-object:quote/.prev [index]
## @var[in] quote
## @var[out] ret
function ble/keymap:vi/text-object:quote/.prev {
local index=${1:-_ble_edit_ind} nl=$'\n'
Expand Down Expand Up @@ -4676,6 +4688,8 @@ function ble/keymap:vi/text-object:quote/.expand-xmap-range {
((beg++,end--))
fi
}
## @fn ble/keymap:vi/text-object:quote/.xmap
## @var[in] quote
function ble/keymap:vi/text-object:quote/.xmap {
# 複数行に亘る場合は失敗
local min=$_ble_edit_ind max=$_ble_edit_mark
Expand All @@ -4693,10 +4707,15 @@ function ble/keymap:vi/text-object:quote/.xmap {
if ((_ble_edit_ind==_ble_edit_mark)); then
ble/keymap:vi/text-object:quote/.prev "$((_ble_edit_ind+1))" ||
ble/keymap:vi/text-object:quote/.next "$((_ble_edit_ind+1))" || return 1
local beg=$ret
ble/keymap:vi/text-object:quote/.next "$((beg+1))" || return 1
local end=$ret

if ble/keymap:vi/text-object:quote/is-closing-quote; then
local end=$ret
ble/keymap:vi/text-object:quote/.prev "$end" || return 1
local beg=$ret
else
local beg=$ret
ble/keymap:vi/text-object:quote/.next "$((beg+1))" || return 1
local end=$ret
fi
ble/keymap:vi/text-object:quote/.expand-xmap-range "$inclusive"
_ble_edit_mark=$beg
_ble_edit_ind=$((end-1))
Expand Down
2 changes: 1 addition & 1 deletion lib/keymap.vi_test.sh
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ function ble/widget/vi-command:check-vi-mode/xmap_txtobj_quote {
ble/keymap:vi_test/check A1a '@:ab@cd " fghi " jklm " nopq " rstu " vwxyz' 'v i " S a' '@:abcd "@< fghi >" jklm " nopq " rstu " vwxyz'
ble/keymap:vi_test/check A1b '@:abcd @" fghi " jklm " nopq " rstu " vwxyz' 'v i " S a' '@:abcd "@< fghi >" jklm " nopq " rstu " vwxyz'
ble/keymap:vi_test/check A1c '@:abcd " fghi@ " jklm " nopq " rstu " vwxyz' 'v i " S a' '@:abcd "@< fghi >" jklm " nopq " rstu " vwxyz'
ble/keymap:vi_test/check A1d '@:abcd " fghi @" jklm " nopq " rstu " vwxyz' 'v i " S a' '@:abcd " fghi "@< jklm >" nopq " rstu " vwxyz'
ble/keymap:vi_test/check A1d '@:abcd " fghi @" jklm " nopq " rstu " vwxyz' 'v i " S a' '@:abcd "@< fghi >" jklm " nopq " rstu " vwxyz'
# A2. 引数が指定された時、a" が指定された時
ble/keymap:vi_test/check A2a '@:ab@cd " fghi " jklm " nopq " rstu " vwxyz' 'v 2 i " S a' '@:abcd @<" fghi "> jklm " nopq " rstu " vwxyz'
ble/keymap:vi_test/check A2b '@:ab@cd " fghi " jklm " nopq " rstu " vwxyz' 'v a " S a' '@:abcd @<" fghi " >jklm " nopq " rstu " vwxyz'
Expand Down
51 changes: 51 additions & 0 deletions note.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1905,6 +1905,33 @@ bash_tips
- make_command.sh の整理 (scan 分離, char_width 分離)
- note.txt -> memo.txt

2023-12-11

* keymap.vi_test: テスト項目を ble/test を用いた物に書き換える。

後 leave-command-layout を呼んでいるのに行が再描画されない。何故? どうも
ble/widget/vi-command:check-vi-mode/search を呼び出すと消える様だ。search
に使っている info が干渉して内容が消滅する等している可能性? 一応
ble/textarea#invalidate を enter-command-layout の後に実行すれば問題はない。
うーん。どうやら、search の途中で描画を実行してしまうのでその時点で
ble/textarea#invalidate の効果が消えてなくなってしまっているという事だろう。

* ble-import に関する説明を書く?
https://github.com/akinomyoga/blesh-contrib/issues/16

* ble-import -d の意味と、もし中の関数をすぐに使う必要があるのであれば、-d
を指定しないという事を何処かに書いておく (何処かに既に説明を書いた様な気
がしたが、改めて contrib README を見てみても -d についての説明は何処にも
書かれていない)。

* また ble/util/import/eval-after-load の interface を ble-import のオプショ
ンとして実装する可能性? 然し、これは変な気もする。つまり、オプション -H
script を指定する事で、指定した通常引数をロードする代わりに、ロードされた
時の付加動作を定義する事になっている。これは混乱の元の気がする。一方で、-q
はロードしたかどうかを判定する物になっているので、既に指定したファイル名
を必ずしもロードする訳では無い状況にはなっている。何れにしても、指定され
た引数はモジュール名という事になっているので或る意味一貫している。

2023-12-10

* main: ble-update, ble-reload, bleopt, ble-sabbrev, ble-palette の adjust-bash-options
Expand Down Expand Up @@ -7065,6 +7092,30 @@ bash_tips

2023-12-11

* vi: text-object:quote の振る舞いが xmap 内で正確ではない (reported by Darukutsu) [#D2094]
https://github.com/akinomyoga/ble.sh/issues/377#issuecomment-1849550762

vi_xmap for i' の振る舞いが異なるとの事。

これは実装していない奴ではないかと思ったが、実際に確認してみると実装されて
いる。単に手で規則を試した時の漏れという事の気がする。その他の微妙に異なる
状況に関してはちゃんと vim の振る舞いを再現できている。

? no: 或いは vim の古い version と新しい version で振る舞いが違うという事な
のかもしれないと思ったが、Ubuntu 16.04 の vim 7.4 (少なくとも 2013年には
あった) の振る舞いを見る限りは、以前からそうであった。という事なのでやは
り見落としである。

修正は意外とコンパクトになった。

* テスト項目を追加する。と思ったが長らく動かしていなかった。そもそもテスト
が動かなくなっているかもしれない。と思って試しに走らせてみたらちょうど今
回振る舞いを修正した所でエラーになっている。

うーん。これは今回新しく修正した事によってテストが失敗する様になったのか?
→実際に master で試してみるとテストは全て通る。という事はテスト項目自体
が駄目だったという事になる。テスト項目を修正した。

* vi: text-object を別の文字に割り当てようとしている人がいる (requested by Darukutsu) [#D2093]
https://github.com/akinomyoga/ble.sh/issues/377

Expand Down

0 comments on commit 5f9a44e

Please sign in to comment.