From a67458ec27d10f206b8aeeae6e3ccb92d7f64c44 Mon Sep 17 00:00:00 2001 From: Koichi Murase Date: Sat, 8 Jan 2022 07:53:57 +0900 Subject: [PATCH] decode (ble/builtin/bind): fix a bug that only lowercase is accepted for deprecated keyname --- GNUmakefile | 1 + ble.pp | 2 +- docs/ChangeLog.md | 1 + lib/test-decode.sh | 45 +++++++++++++++++++++++++++++++++++++++++++++ lib/test-main.sh | 2 +- lib/test-util.sh | 2 +- note.txt | 14 ++++++++++++++ src/decode.sh | 12 ++++++------ 8 files changed, 70 insertions(+), 9 deletions(-) create mode 100644 lib/test-decode.sh diff --git a/GNUmakefile b/GNUmakefile index 23dbac7b..79cabcb2 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -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 diff --git a/ble.pp b/ble.pp index a65f20db..cb5adb3b 100644 --- a/ble.pp +++ b/ble.pp @@ -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 diff --git a/docs/ChangeLog.md b/docs/ChangeLog.md index 8bf9fd03..ececf1e2 100644 --- a/docs/ChangeLog.md +++ b/docs/ChangeLog.md @@ -273,6 +273,7 @@ - stty: do not remove keydefs for C-u, C-v, C-w, and C-? (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 diff --git a/lib/test-decode.sh b/lib/test-decode.sh new file mode 100644 index 00000000..32f41ca6 --- /dev/null +++ b/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 diff --git a/lib/test-main.sh b/lib/test-main.sh index 4de81040..bdceb6e3 100644 --- a/lib/test-main.sh +++ b/lib/test-main.sh @@ -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} ( diff --git a/lib/test-util.sh b/lib/test-util.sh index d1398027..111b8152 100644 --- a/lib/test-util.sh +++ b/lib/test-util.sh @@ -2,7 +2,7 @@ ble-import lib/core-test -ble/test/start-section 'util' 1192 +ble/test/start-section 'ble/util' 1193 # bleopt diff --git a/note.txt b/note.txt index 4222dfb7..97af8f05 100644 --- a/note.txt +++ b/note.txt @@ -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] diff --git a/src/decode.sh b/src/decode.sh index 7aac5ef4..2c1b7cdf 100644 --- a/src/decode.sh +++ b/src/decode.sh @@ -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 @@ -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