From 4057ff0248de235db50e39274521172b497d3aea Mon Sep 17 00:00:00 2001 From: Koichi Murase Date: Fri, 20 Dec 2019 06:40:33 +0800 Subject: [PATCH] decode: check "bind -X" first to store the original bindings --- memo.txt | 15 ++++++++++++++- src/decode.sh | 16 +++++++++------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/memo.txt b/memo.txt index d8555ebd..0f0daa87 100644 --- a/memo.txt +++ b/memo.txt @@ -3265,9 +3265,22 @@ bash_tips Done (実装ログ) ------------------------------------------------------------------------------- +2019-12-18 + + * bind -X の修正が入ったのでキーバインドの復元に bind -X を入れられる [#D1179] + またユーザ設定を起動時に読み取るというのもできるのではないか。 + + →確認したところ既に復元の時に bind -X を入れる様になっていた。 + つまり bind -r した設定も一緒に復元されてしまう。 + 他の bind で上書きしたのが復元されてしまうのは困るので、 + 他の bind の復元の方を後に持ってくる様に変更する事にした。 + + ユーザ設定を起動時に読み取るのは面倒なので対応しなくて良い気がする。 + そもそも bind -x に限らず現状の実装では設定を読み取る事は試みていない。 + 2019-12-16 - * edit: 現状の実装では改行と同時に更に次の文字が来ている時、 [#D1178] + * edit: 現状の実装では改行と同時に更に次の文字が来ている時 [#D1178] その場でコマンドを実行せずに複数行編集に入るようになっている。 然し、ssh を使っている場合やそもそも使っている機械が遅い時、 簡単に複数行モードに突入してしまって使いづらい。 diff --git a/src/decode.sh b/src/decode.sh index 390910bc..57b53737 100644 --- a/src/decode.sh +++ b/src/decode.sh @@ -2450,11 +2450,12 @@ function ble/decode/attach/.generate-source-to-unbind-default { # 1 ESC で始まる既存の binding を全て削除 # 2 bind を全て記録 at $$.bind.save { - builtin bind -sp if ((_ble_bash>=40300)); then ble/bin/echo '__BINDX__' builtin bind -X fi + ble/bin/echo '__BINDP__' + builtin bind -sp #%x } | LC_ALL=C ble/decode/attach/.generate-source-to-unbind-default/.process @@ -2466,7 +2467,7 @@ function ble/decode/attach/.generate-source-to-unbind-default/.process { #%end.i BEGIN { APOS = apos "\\" apos apos; - mode = 0; + mode = 1; } function quote(text) { @@ -2510,7 +2511,10 @@ function ble/decode/attach/.generate-source-to-unbind-default/.process { } } - mode == 0 && $0 ~ /^"/ { + /^__BINDP__$/ { mode = 1; next; } + /^__BINDX__$/ { mode = 2; next; } + + mode == 1 && $0 ~ /^"/ { # Workaround Bash-5.0 bug (cf #D1078) sub(/^"\\C-\\\\\\"/, "\"\\C-\\\\\""); sub(/^"\\C-\\"/, "\"\\C-\\\\\""); @@ -2520,9 +2524,7 @@ function ble/decode/attach/.generate-source-to-unbind-default/.process { print "builtin bind " quote($0) > "/dev/stderr"; } - /^__BINDX__$/ { mode = 1; } - - mode == 1 && $0 ~ /^"/ { + mode == 2 && $0 ~ /^"/ { output_bindr($0); line = $0; @@ -2540,7 +2542,7 @@ function ble/decode/attach/.generate-source-to-unbind-default/.process { #% # escape には以下の種類がある: \C-a など \C-? \e \\ \" #% # \n\r\f\t\v\b\a 等は使われない様だ。 #%if use_gawk - if (match(line, /^("([^"\\]|\\.)*":) "(([^"\\]|\\.)*)"/,captures) > 0) { + if (match(line, /^("([^"\\]|\\.)*":) "(([^"\\]|\\.)*)"/, captures) > 0) { sequence = captures[1]; command = captures[3];