Skip to content

Commit

Permalink
edit ({kill,copy}-region-or): fix unconditionally combined kills/copies
Browse files Browse the repository at this point in the history
  • Loading branch information
akinomyoga committed Jan 25, 2021
1 parent ff4c4e7 commit 1631751
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 21 deletions.
4 changes: 2 additions & 2 deletions keymap/vi.sh
Expand Up @@ -114,7 +114,7 @@ function ble/widget/vi_imap/__default__ {
local esc=27 # ESC
# local esc=$((_ble_decode_Ctrl|0x5b)) # もしくは C-[
ble/decode/widget/skip-lastwidget
ble/decode/widget/redispatch "$esc" $((KEYS[0]&~_ble_decode_Meta)) "${KEYS[@]:1}"
ble/decode/widget/redispatch-by-keys "$esc" $((KEYS[0]&~_ble_decode_Meta)) "${KEYS[@]:1}"
return 0
fi

Expand All @@ -135,7 +135,7 @@ function ble/widget/vi-command/decompose-meta {
if ((flag&_ble_decode_Meta)); then
local esc=$((_ble_decode_Ctrl|0x5b)) # C-[ (もしくは esc=27 ESC?)
ble/decode/widget/skip-lastwidget
ble/decode/widget/redispatch "$esc" $((KEYS[0]&~_ble_decode_Meta)) "${KEYS[@]:1}"
ble/decode/widget/redispatch-by-keys "$esc" $((KEYS[0]&~_ble_decode_Meta)) "${KEYS[@]:1}"
return 0
fi

Expand Down
8 changes: 4 additions & 4 deletions lib/core-complete.sh
Expand Up @@ -5183,7 +5183,7 @@ function ble/widget/menu_complete/accept {
function ble/widget/menu_complete/exit-default {
ble/widget/menu_complete/exit
ble/decode/widget/skip-lastwidget
ble/decode/widget/redispatch "${KEYS[@]}"
ble/decode/widget/redispatch-by-keys "${KEYS[@]}"
}

function ble-decode/keymap:menu_complete/define {
Expand Down Expand Up @@ -5544,7 +5544,7 @@ function ble/widget/auto_complete/insert {
function ble/widget/auto_complete/cancel-default {
ble/widget/auto_complete/cancel
ble/decode/widget/skip-lastwidget
ble/decode/widget/redispatch "${KEYS[@]}"
ble/decode/widget/redispatch-by-keys "${KEYS[@]}"
}
function ble/widget/auto_complete/self-insert {
local code=$((KEYS[0]&_ble_decode_MaskChar))
Expand Down Expand Up @@ -5607,7 +5607,7 @@ function ble/widget/auto_complete/self-insert {
else
ble/widget/auto_complete/cancel
ble/decode/widget/skip-lastwidget
ble/decode/widget/redispatch "${KEYS[@]}"
ble/decode/widget/redispatch-by-keys "${KEYS[@]}"
fi
}

Expand Down Expand Up @@ -6213,7 +6213,7 @@ function ble/widget/dabbrev/exit {
function ble/widget/dabbrev/exit-default {
ble/widget/dabbrev/exit
ble/decode/widget/skip-lastwidget
ble/decode/widget/redispatch "${KEYS[@]}"
ble/decode/widget/redispatch-by-keys "${KEYS[@]}"
}
function ble/widget/dabbrev/accept-line {
ble/widget/dabbrev/exit
Expand Down
3 changes: 2 additions & 1 deletion memo/ChangeLog.md
Expand Up @@ -9,6 +9,8 @@
- decode (`ble-decode-kbd`): support various specifications of key sequences `#D1439` 0f01cab
- edit: support new options `bleopt edit_line_type={logical,graphical}` (motivated by 3ximus) `#D1442` 40ae242
- complete: support new options `bleopt complete_limit{,_auto}` (contributed by timjrd) `#D1445` b13f114 5504bbc
- edit (kill/copy): combine multiple kills and copies (suggested by 3ximus) `#D1443` 66564e1
- edit (`{kill,copy}-region-or`): fix unconditionally combined kills/copies (reported by 3ximus) `#D1447` 0000000

## Changes

Expand All @@ -25,7 +27,6 @@
- edit (command-help): work around the Bash bug that tempenv vanishes with `builtin eval` `#D1438` 8379d4a
- global: suppress missing locale errors (reported by 3ximus) `#D1440` 4d3c595
- edit (sword): fix definition of `sword` (shell words) `#D1441` f923388
- edit (kill/copy): combine multiple kills and copies (suggested by 3ximus) `#D1443` 66564e1
- edit (`kill-forward-logical-line`): fix a bug not deleting newline at the end of the line `#D1443` 09cf7f1
- complete (mandb): fix an encoding prpblem of utf8 manuals `#D1446` 0000000

Expand Down
16 changes: 16 additions & 0 deletions note.txt
Expand Up @@ -3721,6 +3721,22 @@ bash_tips

2021-01-25

* edit ({kill,copy}-region-or): fix unconditionally combined kills/copies (reported by 3ximus) [#D1447]
https://github.com/akinomyoga/ble.sh/issues/83#issuecomment-766831785

C-w で無限に文字列が追加されてしまうという事を指摘された。

% 何故だろう。手許で確認した時には動いている様に見えたのに。と思ったが手許で
% 試した時は C-k や C-u を使っていたために気づかなかったという事の気がする。
% →と思ったら分かった。テストのために自分で ble-bind していたが、
% その時に kill-region-or を使っていなかった。

kill-region-or または copy-region-or の中で
ble/decode/widget/call を用いて widget を呼び出した時に
LASTWIDGET が {kill,copy}-region-or に書き換わる為に、
無条件に前回のコマンドが切り取りコマンドであったと判定されてしまうのが原因。
取り敢えず修正した。ble/decode/widget/* の関数がまた増えてしまったが仕方がない。

* mandb: man のオプションの情報が文字化けしている [#D1446]

% キャッシュが全然使われていない。毎回再生成されている様に見える
Expand Down
11 changes: 9 additions & 2 deletions src/decode.sh
Expand Up @@ -2083,6 +2083,13 @@ function ble/decode/widget/call {
_ble_decode_widget_last=$WIDGET
builtin eval -- "$WIDGET"
}
## @fn ble/decode/widget/dispatch widget args...
function ble/decode/widget/dispatch {
local ret; ble/string#quote-command "ble/widget/$@"
local WIDGET=$ret
_ble_decode_widget_last=$WIDGET
builtin eval -- "$WIDGET"
}
## @fn ble/decode/widget/suppress-widget
## __before_widget__ に登録された関数から呼び出します。
## __before_widget__ 内で必要な処理を完了した時に、
Expand All @@ -2092,10 +2099,10 @@ function ble/decode/widget/suppress-widget {
WIDGET=
}

## @fn ble/decode/widget/redispatch
## @fn ble/decode/widget/redispatch-by-keys
## @var[in] KEYS
## @var[out] _ble_decode_keylog_depth
function ble/decode/widget/redispatch {
function ble/decode/widget/redispatch-by-keys {
if ((_ble_decode_keylog_depth==1)); then
# Note: 一旦 pop してから _ble_decode_keylog_depth=0
# で ble-decode-key を呼び出す事により再記録させる。
Expand Down
22 changes: 10 additions & 12 deletions src/edit.sh
Expand Up @@ -2492,7 +2492,7 @@ function ble/widget/do-lowercase-version {
local flag=$((KEYS[0]&_ble_decode_MaskFlag)) char=$((KEYS[0]&_ble_decode_MaskChar))
if ((65<=char&&char<=90)); then
ble/decode/widget/skip-lastwidget
ble/decode/widget/redispatch $((flag|char+32)) "${KEYS[@]:1}"
ble/decode/widget/redispatch-by-keys $((flag|char+32)) "${KEYS[@]:1}"
else
return 125
fi
Expand Down Expand Up @@ -2592,13 +2592,13 @@ function ble/widget/@marked {
_ble_edit_mark=$_ble_edit_ind
_ble_edit_mark_active=S
fi
"ble/widget/$@"
ble/decode/widget/dispatch "$@"
}
function ble/widget/@nomarked {
if [[ $_ble_edit_mark_active == S ]]; then
_ble_edit_mark_active=
fi
"ble/widget/$@"
ble/decode/widget/dispatch "$@"
}

## @fn ble/widget/.process-range-argument P0 P1; p0 p1 len ?
Expand Down Expand Up @@ -2707,7 +2707,7 @@ function ble/widget/delete-region-or {
if [[ $_ble_edit_mark_active ]]; then
ble/widget/delete-region
else
"ble/widget/$@"
ble/decode/widget/dispatch "$@"
fi
}
## @widget kill-region-or widget
Expand All @@ -2718,8 +2718,7 @@ function ble/widget/kill-region-or {
if [[ $_ble_edit_mark_active ]]; then
ble/widget/kill-region
else
local -a subwidget; subwidget=("$@")
ble/decode/widget/call 'ble/widget/${subwidget[@]}' "${KEYS[@]}"
ble/decode/widget/dispatch "$@"
fi
}
## @widget copy-region-or widget
Expand All @@ -2730,8 +2729,7 @@ function ble/widget/copy-region-or {
if [[ $_ble_edit_mark_active ]]; then
ble/widget/copy-region
else
local -a subwidget; subwidget=("$@")
ble/decode/widget/call 'ble/widget/${subwidget[@]}' "${KEYS[@]}"
ble/decode/widget/dispatch "$@"
fi
}

Expand Down Expand Up @@ -2808,7 +2806,7 @@ function ble/widget/yankpop/cancel {
function ble/widget/yankpop/exit-default {
ble/widget/yankpop/exit
ble/decode/widget/skip-lastwidget
ble/decode/widget/redispatch "${KEYS[@]}"
ble/decode/widget/redispatch-by-keys "${KEYS[@]}"
}
function ble-decode/keymap:yankpop/define {
ble-decode/keymap:safe/bind-arg yankpop/exit-default
Expand Down Expand Up @@ -2995,7 +2993,7 @@ function ble/widget/lastarg/cancel {
function ble/widget/lastarg/exit-default {
ble/widget/lastarg/exit
ble/decode/widget/skip-lastwidget
ble/decode/widget/redispatch "${KEYS[@]}"
ble/decode/widget/redispatch-by-keys "${KEYS[@]}"
}
function ble/highlight/layer:region/mark:insert/get-face {
face=region_insert
Expand Down Expand Up @@ -6357,7 +6355,7 @@ function ble/widget/isearch/cancel {
function ble/widget/isearch/exit-default {
ble/widget/isearch/exit-with-region
ble/decode/widget/skip-lastwidget
ble/decode/widget/redispatch "${KEYS[@]}"
ble/decode/widget/redispatch-by-keys "${KEYS[@]}"
}
function ble/widget/isearch/accept-line {
if ((${#_ble_util_fiberchain[@]})); then
Expand Down Expand Up @@ -6688,7 +6686,7 @@ function ble/widget/nsearch/exit {
function ble/widget/nsearch/exit-default {
ble/widget/nsearch/exit
ble/decode/widget/skip-lastwidget
ble/decode/widget/redispatch "${KEYS[@]}"
ble/decode/widget/redispatch-by-keys "${KEYS[@]}"
}
function ble/widget/nsearch/cancel {
if ((${#_ble_util_fiberchain[@]})); then
Expand Down

0 comments on commit 1631751

Please sign in to comment.