Skip to content

Commit

Permalink
decode (ble/builtin/bind): fix a bug that only lowercase is accepted …
Browse files Browse the repository at this point in the history
…for deprecated keyname
  • Loading branch information
akinomyoga committed Jan 7, 2022
1 parent 952c388 commit a67458e
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 9 deletions.
1 change: 1 addition & 0 deletions GNUmakefile
Expand Up @@ -82,6 +82,7 @@ outfiles += $(OUTDIR)/lib/vim-airline.sh
outfiles += $(OUTDIR)/lib/test-main.sh
outfiles += $(OUTDIR)/lib/test-util.sh
outfiles += $(OUTDIR)/lib/test-canvas.sh
outfiles += $(OUTDIR)/lib/test-decode.sh
$(OUTDIR)/lib/%.sh: lib/%.sh | $(OUTDIR)/lib
cp -p $< $@
$(OUTDIR)/lib/%.txt: lib/%.txt | $(OUTDIR)/lib
Expand Down
2 changes: 1 addition & 1 deletion ble.pp
Expand Up @@ -1655,7 +1655,7 @@ function ble/base/sub:test {
echo "BLE_VERSION: $BLE_VERSION"
fi
echo "BASH_VERSION: $BASH_VERSION"
(($#)) || set -- main util canvas
(($#)) || set -- main util canvas decode
local section
for section; do
local file=$_ble_base/lib/test-$section.sh
Expand Down
1 change: 1 addition & 0 deletions docs/ChangeLog.md
Expand Up @@ -273,6 +273,7 @@
- stty: do not remove keydefs for <kbd>C-u</kbd>, <kbd>C-v</kbd>, <kbd>C-w</kbd>, and <kbd>C-?</kbd> (reported by laoshaw) `#D1683` 82f74f0
- builtin: print usages of emulated builtins on option errors `#D1694` 6f74021
- decode (`ble/builtin/bind`): improve compatibility of the deprecated form `bind key:rlfunc` (motivated by cmplstofB) `#D1698` b6fc4f0
- decode (`ble/builtin/bind`): fix a bug that only lowercase is accepted for deprecated form `bind key:rlfunc` (reported by returntrip) `#D1726` 0000000
- complete: work around a false warning messages of gawk-4.0.2 `#D1709` 9771693
- main: work around `XDG_RUNTIME_DIR` of a different user by `su` (reported by zim0369) `#D1712` 8d37048
- main (`ble/util/readlink`): work around non-standard or missing `readlink` (motivated by peterzky) `#D1720` a41279e
Expand Down
45 changes: 45 additions & 0 deletions lib/test-decode.sh
@@ -0,0 +1,45 @@
# source script for ble.sh interactive sessions -*- mode: sh; mode: sh-bash -*-

ble-import lib/core-test

ble/test/start-section 'ble/decode' 31

# ble/builtin/bind/.parse-keyname
(
# valid cases
ble/test 'ble/builtin/bind/.parse-keyname tab ; ret=${chars[0]}' ret=9
ble/test 'ble/builtin/bind/.parse-keyname TAB ; ret=${chars[0]}' ret=9
ble/test 'ble/builtin/bind/.parse-keyname newline; ret=${chars[0]}' ret=10
ble/test 'ble/builtin/bind/.parse-keyname LFD ; ret=${chars[0]}' ret=10
ble/test 'ble/builtin/bind/.parse-keyname Return ; ret=${chars[0]}' ret=13
ble/test 'ble/builtin/bind/.parse-keyname RET ; ret=${chars[0]}' ret=13
ble/test 'ble/builtin/bind/.parse-keyname Space ; ret=${chars[0]}' ret=32
ble/test 'ble/builtin/bind/.parse-keyname SPC ; ret=${chars[0]}' ret=32
ble/test 'ble/builtin/bind/.parse-keyname Rubout ; ret=${chars[0]}' ret=127
ble/test 'ble/builtin/bind/.parse-keyname DEL ; ret=${chars[0]}' ret=127
ble/test 'ble/builtin/bind/.parse-keyname Escape ; ret=${chars[0]}' ret=27
ble/test 'ble/builtin/bind/.parse-keyname ESC ; ret=${chars[0]}' ret=27
ble/test 'ble/builtin/bind/.parse-keyname C-Space; ret=${chars[0]}' ret=0

# invalid cases
ble/test "ble/builtin/bind/.parse-keyname '\C-x\C-y' ; ret=\${chars[0]}" ret=25 # C-y
ble/test "ble/builtin/bind/.parse-keyname 'xyz' ; ret=\${chars[0]}" ret=120 # x
ble/test "ble/builtin/bind/.parse-keyname '\a' ; ret=\${chars[0]}" ret=92 # \ (backslash)
ble/test "ble/builtin/bind/.parse-keyname '\C-nop' ; ret=\${chars[0]}" ret=14 # C-n
ble/test "ble/builtin/bind/.parse-keyname '\C-xC-y' ; ret=\${chars[0]}" ret=25 # C-y
ble/test "ble/builtin/bind/.parse-keyname '\C-axC-b' ; ret=\${chars[0]}" ret=2 # C-b
ble/test "ble/builtin/bind/.parse-keyname 'helloC-b' ; ret=\${chars[0]}" ret=2 # C-b
ble/test "ble/builtin/bind/.parse-keyname 'helloC-x,TAB' ; ret=\${chars[0]}" ret=24 # C-x
ble/test "ble/builtin/bind/.parse-keyname 'C-xTAB' ; ret=\${chars[0]}" ret=24 # C-x
ble/test "ble/builtin/bind/.parse-keyname 'TABC-x' ; ret=\${chars[0]}" ret=24 # C-x
ble/test "ble/builtin/bind/.parse-keyname 'BC-' ; ret=\${chars[0]}" ret=0 # C-@
ble/test "ble/builtin/bind/.parse-keyname 'C-M-a' ; ret=\${chars[0]}" ret=129 # C-M-a
ble/test "ble/builtin/bind/.parse-keyname 'M-C-a' ; ret=\${chars[0]}" ret=129 # C-M-a
ble/test "ble/builtin/bind/.parse-keyname 'C-aalpha-beta'; ret=\${chars[0]}" ret=2 # C-b
ble/test "ble/builtin/bind/.parse-keyname '\C-a\M-c' ; ret=\${chars[0]}" ret=131 # C-M-c
ble/test "ble/builtin/bind/.parse-keyname 'panic-trim-c' ; ret=\${chars[0]}" ret=131 # C-M-c
ble/test "ble/builtin/bind/.parse-keyname 'C--' ; ret=\${chars[0]}" ret=0 # C-@
ble/test "ble/builtin/bind/.parse-keyname 'C--x' ; ret=\${chars[0]}" ret=24 # C-x
)

ble/test/end-section
2 changes: 1 addition & 1 deletion lib/test-main.sh
Expand Up @@ -2,7 +2,7 @@

ble-import lib/core-test

ble/test/start-section 'main' 19
ble/test/start-section 'ble/main' 19

# ble/util/{put,print}
(
Expand Down
2 changes: 1 addition & 1 deletion lib/test-util.sh
Expand Up @@ -2,7 +2,7 @@

ble-import lib/core-test

ble/test/start-section 'util' 1192
ble/test/start-section 'ble/util' 1193

# bleopt

Expand Down
14 changes: 14 additions & 0 deletions note.txt
Expand Up @@ -5773,6 +5773,20 @@ bash_tips
Done (実装ログ)
-------------------------------------------------------------------------------

2022-01-08

* decode: bind の古い形式が使えなくなっている (reported by returntrip) [#D1726]
https://github.com/akinomyoga/ble.sh/issues/165

これは #D1698 (b6fc4f0) の regression だろう。確認した。確かにこの時点で導
入したバグである。テストもちゃんと追加する事にする。以前実験したケースも全
てテストに追加する事にする。

% どうも \C も解釈しなければならない様だ。と思ったが C で終わっていればどう
% でも良いらしい。これは control で終わっていても良い。

修正した。テストを追加した。テストも通っている。

2022-01-01

* util (ble/function): work around "shopt -u extglob" [#D1725]
Expand Down
12 changes: 6 additions & 6 deletions src/decode.sh
Expand Up @@ -3375,9 +3375,9 @@ ble/function#suppress-stderr ble/builtin/bind/.decompose-pair
## @var[out] chars
function ble/builtin/bind/.parse-keyname {
local ret mflags=
if [[ $1 == *-* ]]; then
ble/string#tolower "$1"
ble/string#split ret - "$ret"
ble/string#tolower "$1"; local value=$ret
if [[ $value == *-* ]]; then
ble/string#split ret - "$value"
local mod
for mod in "${ret[@]::${#ret[@]}-1}"; do
case $mod in
Expand All @@ -3387,15 +3387,15 @@ function ble/builtin/bind/.parse-keyname {
done
fi

local value=${1##*-} ch=
case $value in
local name=${value##*-} ch=
case $name in
(rubout|del) ch=$'\177' ;;
(escape|esc) ch=$'\033' ;;
(newline|lfd) ch=$'\n' ;;
(return|ret) ch=$'\r' ;;
(space|spc) ch=' ' ;;
(tab) ch=$'\t' ;;
(*) ble/util/substr "$value" 0 1; ch=$ret ;;
(*) ble/util/substr "$name" 0 1; ch=$ret ;;
esac
ble/util/s2c "$ch"; local key=$ret

Expand Down

0 comments on commit a67458e

Please sign in to comment.