Skip to content

Commit

Permalink
util (ble/builtin/trap): support Bash 5.2 "trap -P"
Browse files Browse the repository at this point in the history
  • Loading branch information
akinomyoga committed Feb 6, 2023
1 parent 8d5cab8 commit 826a275
Show file tree
Hide file tree
Showing 4 changed files with 128 additions and 39 deletions.
1 change: 1 addition & 0 deletions docs/ChangeLog.md
Expand Up @@ -119,6 +119,7 @@
- complete: preserve original path segments as long as possible `#D1923` `#D1924` e3cdb9d
- main: support `BLE_SESSION_ID` and `BLE_COMMAND_ID` `#D1925` 44d9e10
- main: support an option `--inputrc={diff,all,user,none}` `#D1926` 92f2006
- util (`ble/builtin/trap`): support Bash 5.2 `trap -P` `#D1937` xxxxxxx

## Changes

Expand Down
2 changes: 1 addition & 1 deletion make_command.sh
Expand Up @@ -1378,7 +1378,7 @@ function sub:scan {
#sub:scan/assign
sub:scan/builtin trap |
sed -E 'h;s/'"$esc"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
\Zble/util/print "trap -- '\''\$\{_ble_trap_handler//\$q/\$Q}'\'' \$nZd
\Z_ble_trap_handler="trap -- '\''\$\{_ble_trap_handler//\$q/\$Q}'\'' \$nZd
\Zline = "bind"Zd
\Ztrap_command=["'\'']trap -- Zd
\Zlocal trap$Zd
Expand Down
148 changes: 115 additions & 33 deletions note.txt
Expand Up @@ -1652,26 +1652,6 @@ bash_tips
を使えと書いているが、明らかにこれは bash のバグである。修正するべきだし修
正は難しくない筈である。後で観察する事にする。

2021-06-12

* bash: 開発版 version に関して

実は bash-dev 版は 5.1.xxx の儘推移している。本当は 5.2.xxx-alpha の様な形
にするべきなのではないかという気がする。よく分からない。提案しようかとも思っ
たが実際の所は 5.1.x-maint になっている事から、本来は devel branch は既に出
た version のメンテナンスモードという意味合いだったのかも知れない。然し、こ
の様になっていると次の version かどうかを判定するのに BASH_VERSINFO を利用
する事ができない。今迄は新しい version になる事によって何か機能が減るなどし
て動かなくなるという事はなかったので余り気にならなかったが、"テスト" という
観点から本来は早くに bash-5.2 に増やすべきなのではないかという気がする。

差し当たっての ble.sh の側では release status も見て version を上げる様にす
るのが良いだろうか。と思ったが…。自分はテストの為に release を release に
しているし、逆に maint で動かしているユーザーがいたとしても遅くて使い物にな
らない。自分の relstatus に関してはまた別の値を指定するという手もあるのかも
しれない。と思ったが、それをするぐらいであれば実は configure.ac に於いて
version を 5.2 に書き換えてしまえば良いのである。

2021-06-09

* complete: contra x screen-4.99 で auto-menu を有効にしていると、
Expand Down Expand Up @@ -1936,12 +1916,52 @@ bash_tips
* bump 時にする事
- note.txt に含まれるログの移動 -> done.txt
- version up in GNUmakefile, README
- Copyright
- Copyright year
- Acknowledgments
- todo 項目の整理
- leakvars
- keymap の移動 (これは別 commit にする?)

2023-02-03

* contrib: ble-import で contrib/ は不要なのではないか?
* contrib: fzf, bash-preexec などは integration dir に移動する。install 時に
symlink を貼る。

* histdb: 同じディレクトリの一番最近の履歴を抽出する。

有効なファイル名を記録するのよりも先にこちらを実装するべきである。

histdb-history

* ディレクトリが移動した後も追跡できれば追跡する。

ディレクトリの inode を記録するという手もある? 然しファイルシステムが異な
る場合もあるので何とも言えない。別のファイルシステムのディレクトリを掴ん
でしまったら仕方ないので諦める。そもそもディレクトリが移動して元の場所に
ないのであれば別の物を拾っても仕方がない。それを言い出したら一旦ディレク
トリを削除した後に別のディレクトリを移動して持ってきた場合なども考えなけ
ればならなくなる。

と思ったが inode を持っていてもそのディレクトリのパスを取得する方法がない。
ファイルシステム依存で特別のコマンドを走らせれば inode に対応するファイル
名を列挙する事はできるが、一般にはファイルシステムを浚うしかないので単な
る補完の為には現実的に実行できない。
https://stackoverflow.com/questions/14822611/is-there-any-way-that-i-can-search-for-a-file-or-a-filename-using-a-given-inode

可能性があるとしたら移動先のディレクトリでコマンドを実行した事があるとし
たら、inode が一致する物をデータベース内で探して列挙する事はできる。


一文字コマンド等の自明なコマンドを対象としない。これは histdb_ignore で指定
すれば良さそうな気もするが、実行時間などが気になる場合もあるかもしれないし、
完全なログを後で欲しいという場合もあるかもしれないので、ignore は別に指定で
きる様にするべきかもしれない。つまり、ログに残すかどうかの ignore と補完で
現れるかどうかの ignore は本来は別の物であるのに関わらず元の bash では一緒
くたになっていた (寧ろ元の bash ではログを残すという意味合いは弱くて後でコ
マンドを再利用するというのが目的だったのだから、元の bash で設定ができない
のは理解できる)。

2023-01-26

* [保留] histdb: 形式を変更する時は形式自動アップグレードを実装する
Expand Down Expand Up @@ -2411,15 +2431,6 @@ bash_tips

2022-03-19

* BUG bash-5.2 で \q{...} が動かなくなっている

どうもこれは bleopt の設定時に \ が重複しているのが原因の様だ。表示時の問題
ではなくて本当に値が変わってしまっているという事を確認した。

どうもこれは ${var[@]/%/"=$value"} の振る舞いに関する物の様だ。というかこれ
は既に別に patch を用意した物の気がする。というか既にこの問題を発見してそれ
で修正したという事の気がする。やはり早く patch を提出する事にする。

* 編集文字列に含まれる制御文字の反転表示の可能性

現在は見た目には区別がつかない。プロンプトシーケンス \w, \W, etc に含まれる
Expand Down Expand Up @@ -3955,10 +3966,28 @@ bash_tips
65822e50 - alias expansion fix in case statements
* vi-undo

* 5.2: LS_COLORS readline-colored-completion-prefix (bash e59452c7)
* 5.2: LS_COLORS *.readline-colored-completion-prefix (bash e59452c7)

* 5.2 新機能: READLINE_ARGUMENT: 調べてみると引数が存在している時にのみ定義さ
れる様である。また今気づいた事だが -x 属性が入っている。
rlvar colored-completion-prefix が on でかつ LS_COLORS の中に
*.readline-colored-completion-prefix という項目がある時、共通一致部分の着色
をそれに書き換える。

実際に bash の振る舞いを調べてみようとしたがどうも有効にならない。調べてみ
ると、_rl_color_ext_list が初期化されていない。これを初期化する為には何かす
る必要があるのだろうか。_rl_parse_colors という関数で初期化しているようだが、
この関数はどこから呼び出されているのだろうか。

うーん。分かった。readline.c:1327 で呼び出している。これは初期化部分である。
つまり、readline を初期化するよりも先に LS_COLORS を設定しておく必要がある。
更に言うと、bind 'set ... on' も事前にやって置かないと駄目。というか
colored-stats の時点で同じ問題があったのではないか?

これは単純に _rl_color_ext_list が空だったらその場で _rl_parse_colors の呼
び出しを試みるという事と、それから LS_COLORS の値が変更される時に
_rl_color_ext_list をクリアする。と思ったが、これだと LS_COLORS が空の時に、
毎回 _rl_parse_colors が試みられて非効率的である。

* 後、_rl_colored_stats = 0 が _rl_parse_colors の中で設定されている。

2021-04-30

Expand Down Expand Up @@ -6854,6 +6883,59 @@ bash_tips
Done (実装ログ)
-------------------------------------------------------------------------------

2023-02-05

* 5.3: ble/builtin/trap -P [#D1937]

trap に -p と -P の両方が指定されていた場合はどちらが勝つのか? と思ったら両
方指定する事はできませんというエラーになった。ble/builtin/trap でもその様に
実装する。

うーん。builtin trap -P を使ってより効率の良い実装に切り替えようと思ったが、
実際には ble.sh の中では « trap '' xxx » の形になっている事を想定した処理に
なっていた。読み取る時も結局 eval "ble/builtin/$(trap -p INT)" 的な形にして
ble/builtin/trap に委譲して処理している (つまり、eval を使って引数を評価し
ている)。なので今迄通り trap -p を使い続けるので良い気がする。敢えて複雑に
処理を切り替える必要もない。

* 2022-03-19 [対応済み] compat bash-5.2 で \q{...} が動かなくなっている [#D1936]

どうもこれは bleopt の設定時に \ が重複しているのが原因の様だ。表示時の問題
ではなくて本当に値が変わってしまっているという事を確認した。

どうもこれは ${var[@]/%/"=$value"} の振る舞いに関する物の様だ。というかこれ
は既に別に patch を用意した物の気がする。というか既にこの問題を発見してそれ
で修正したという事の気がする。やはり早く patch を提出する事にする。

→これはもう修正を提案して修正されている。現在の 5.2 では何も問題は生じてい
ない。

* 2021-06-12 [対応済み] bash: 開発版 version に関して [#D1935]

実は bash-dev 版は 5.1.xxx の儘推移している。本当は 5.2.xxx-alpha の様な形
にするべきなのではないかという気がする。よく分からない。提案しようかとも思っ
たが実際の所は 5.1.x-maint になっている事から、本来は devel branch は既に出
た version のメンテナンスモードという意味合いだったのかも知れない。然し、こ
の様になっていると次の version かどうかを判定するのに BASH_VERSINFO を利用
する事ができない。今迄は新しい version になる事によって何か機能が減るなどし
て動かなくなるという事はなかったので余り気にならなかったが、"テスト" という
観点から本来は早くに bash-5.2 に増やすべきなのではないかという気がする。

差し当たっての ble.sh の側では release status も見て version を上げる様にす
るのが良いだろうか。と思ったが…。自分はテストの為に release を release に
しているし、逆に maint で動かしているユーザーがいたとしても遅くて使い物にな
らない。自分の relstatus に関してはまた別の値を指定するという手もあるのかも
しれない。と思ったが、それをするぐらいであれば実は configure.ac に於いて
version を 5.2 に書き換えてしまえば良いのである。

2023-02-05 これは一回提案したが自分が決めるんだと言って reject された。仕方
がないんで自分の側で処理する事にする。

* 2021-05-03 [対応済み] 5.2 新機能: READLINE_ARGUMENT [#D1934]

調べてみると引数が存在している時にのみ定義される様である。また今気づいた事
だが -x 属性が入っている。

2023-02-02

* leakvar: いい加減に pending な leakvar fix を入れる [#D1933]
Expand Down
16 changes: 11 additions & 5 deletions src/util.hook.sh
Expand Up @@ -321,6 +321,7 @@ function ble/builtin/trap/.read-arguments {
case ${arg:i:1} in
(l) flags=l$flags ;;
(p) flags=p$flags ;;
(P) flags=P$flags ;;
(*)
ble/util/print "ble/builtin/trap: unknown option \"-${arg:i:1}\"." >&2
flags=E$flags ;;
Expand All @@ -336,13 +337,16 @@ function ble/builtin/trap/.read-arguments {
fi
done

if [[ $flags != *[hlpE]* ]]; then
if [[ $flags != *[hlpPE]* ]]; then
if [[ $flags != *c* ]]; then
flags=p$flags
elif ((${#sigspecs[@]}==0)); then
sigspecs=("$command")
command=-
fi
elif [[ $flags == *p* && $flags == *P* ]]; then
ble/util/print "ble/builtin/trap: cannot specify both -p and -P" >&2
flags=E${flags//[pP]}
fi
}

Expand Down Expand Up @@ -609,8 +613,7 @@ function ble/builtin/trap {
[[ ! $_ble_attached || $_ble_edit_exec_inside_userspace ]] &&
ble/base/adjust-BASH_REMATCH

if [[ $flags == *p* ]]; then

if [[ $flags == *[pP]* ]]; then
local -a indices=()
if ((${#sigspecs[@]})); then
local spec ret
Expand All @@ -628,8 +631,11 @@ function ble/builtin/trap {
local q=\' Q="'\''" index _ble_trap_handler
for index in "${indices[@]}"; do
if ble/builtin/trap/user-handler#load "$index"; then
local n=${_ble_builtin_trap_sig_name[index]}
ble/util/print "trap -- '${_ble_trap_handler//$q/$Q}' $n"
if [[ $flags == *p* ]]; then
local n=${_ble_builtin_trap_sig_name[index]}
_ble_trap_handler="trap -- '${_ble_trap_handler//$q/$Q}' $n"
fi
ble/util/print "$_ble_trap_handler"
fi
done
else
Expand Down

0 comments on commit 826a275

Please sign in to comment.