Skip to content

Commit

Permalink
syntax: allow unquoted "[!" and "[^" in simple-word
Browse files Browse the repository at this point in the history
  • Loading branch information
akinomyoga committed Mar 29, 2020
1 parent 10ad274 commit 1efe833
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 2 deletions.
2 changes: 1 addition & 1 deletion lib/core-syntax.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1027,7 +1027,7 @@ _ble_syntax_bash_simple_rex_incomplete_word2=
function ble/syntax:bash/simple-word/update {
local q="'"

local letter='[^'${_ble_syntax_bashc_simple}']'
local letter='\[[!^]|[^'${_ble_syntax_bashc_simple}']'
local param1='\$([-*@#?$!0_]|[1-9][0-9]*|[a-zA-Z_][a-zA-Z_0-9]*)'
local param2='\$\{(#?[-*@#?$!0]|[#!]?([1-9][0-9]*|[a-zA-Z_][a-zA-Z_0-9]*))\}' # ${!!} ${!$} はエラーになる。履歴展開の所為?
local param=$param1'|'$param2
Expand Down
3 changes: 2 additions & 1 deletion memo/ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
- syntax: support parameter expansion of the form `${var/#pat}`, `${var/%pat}` `#D1286` e2f4809
- edit: support `bleopt editor line_limit_{type,length} history_limit_length` `#D1295` 2f9a000
- edit: support widgets `{vi,emacs}-editing-mode` `#D1301` 0c6c76e
- syntax: allow unquoted `[!` and `[^` in `simple-word` (reported by cmplstofB) `#D1303` 0000000

## Fix

Expand Down Expand Up @@ -85,7 +86,7 @@
- util (`ble/util/stackdump`): output to `stdout` instead of `stderr` `#D1279` 9d3c50d
- complete (`ble-sabbrev`): delay initialization `#D1282` dfc4f66
- test: update `lib/test-{core => util}.sh` (reported by andychu) `#D1294` e835b0d
- edit: improve performance of bracketed-paste `#D1296` 0a45596 `#D1300` 3f33dab `#D1302` 5ee06c8
- edit: improve performance of bracketed-paste `#D1296` 0a45596 `#D1300` 3f33dab `#D1302` 5ee06c8 10ad274
- decode: improve performance of `ble-decode-char` `#D1297` 0d9d867
- ext: update `mwg_pp.awk` (for branch osh) 978ea32

Expand Down
55 changes: 55 additions & 0 deletions note.txt
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,18 @@
具体的には _ble_syntax_bash_command_IsAssign[ctx] の設定されている文脈は、
ブレース展開が現れたときに、変数代入形式前の文脈値に戻すようにしている。

- echo [a[!b

echo [! の組み合わせは履歴展開にはならない。
echo [a[!b] の場合にも履歴展開にはならない。
しかし、echo [!a[!b の場合には履歴展開になる。
違いは bracket expressions が閉じているか閉じていないかである。
然し、それを判定する為には先読みをして単語の最後まで見ないといけない。
それは実装上困難なのでこれは諦める。

(bash の parser がここでどう動作しているのかは不思議ではある。
例えば echo [a[!echo""] は無効で [a[!echo"" は有効である。)

* 2019-02-04 プログラム補完関数の中で標準入力は使えない。
どうしてもユーザからの入力を得たい場合には、
現在の補完が自動補完でない事を確認してから /dev/tty から直接取る事。
Expand Down Expand Up @@ -2802,6 +2814,49 @@ bash_tips
Done (実装ログ)
-------------------------------------------------------------------------------

2020-03-29

* syntax: [!...] が履歴展開文字を含む為に単純単語ではなくなっている (reported by cmplstofB) [#D1303]
https://github.com/akinomyoga/ble.sh/issues/47

[!...] に関しては unquoted [! の場合には必ず履歴展開は無効になる様だ。
例えば [echo!echo] だと履歴展開が有効だが
[echo[!echo] だと履歴展開は無効である。
という事なので [! の組み合わせを無条件に単純単語に含めて良い様にしてOK?
と思ったら [echo[!echo だと履歴展開は有効になる様である。よく分からない。

[!echo] 無効
[a!echo] 有効
[a[!echo] 無効
[a[!echo 有効

* reject: 逆に履歴展開を許容するという案はあるだろうか?
然し、s/aaa/bbb/ は副作用を持つ。
これが問題になるケースがあるのではないだろうか。
うーん。やはりある気がする。サブシェルで実行するという手もあるが面倒である。
何より単語が沢山ある時に速度が低下してしまう。履歴展開の文字が含む場合だけ
特別扱いしても良いがそれはそれで面倒な事になる。

? no: というかそもそも simple-word/eval で履歴展開は実施されるのだったか。
取り敢えず [! を許容しても eval の内部で履歴展開が発生しない事は確認した。
少なくともこの変更によって副作用が発生したりおかしな事が発生することはない。

| $ ble/syntax:bash/simple-word/eval '[A[!echo'; echo $ret
| [![!echo
| $ ble/syntax:bash/simple-word/eval '[A[!echo]'; echo $ret
|
| $ ble/syntax:bash/simple-word/eval '[a[!echo]'; echo $ret
| a

eval で履歴展開が実施されるとしてもされないとしても下手に一致して着色されると
履歴展開の着色が単語着色で上書きされてしまってそれはそれで分かりにくい。
やはり履歴展開が起こる場合には履歴展開の着色が有効になっていて欲しい。
履歴展開は時に破滅的な結果を齎すのでこれが上書きされるのは避けたい。
[a[! のパターンに関しては現在構文レベルでも判定できていないし、
閉じる ] を見るまで分からないのでこれは相当先読みしないと判定できない。
従って将来的に構文的にも対応することはないと思われる。
従って [a[! のパターンで履歴展開が有効になるケースは取り敢えず無視して良い。

2020-03-27

* decode: 大量貼り付け高速化に関連する問題の修正 [#D1302]
Expand Down

0 comments on commit 1efe833

Please sign in to comment.