Skip to content

Commit

Permalink
main: fix the timestamp in the session ID in bash-4.2
Browse files Browse the repository at this point in the history
  • Loading branch information
akinomyoga committed Feb 19, 2023
1 parent 46ac426 commit 651c70c
Show file tree
Hide file tree
Showing 4 changed files with 174 additions and 80 deletions.
2 changes: 1 addition & 1 deletion ble.pp
Expand Up @@ -1943,7 +1943,7 @@ function ble/base/initialize-session {
if ((_ble_bash>=50000)); then
start_time=${EPOCHREALTIME//[!0-9]}
elif ((_ble_bash>=40200)); then
printf -v start_time '%(%s)T'
printf -v start_time '%(%s)T' -1
((start_time*=1000000))
else
ble/util/assign start_time 'ble/bin/date +%s'
Expand Down
2 changes: 1 addition & 1 deletion contrib
Submodule contrib updated 1 files
+31 −8 histdb.bash
32 changes: 18 additions & 14 deletions docs/ChangeLog.md
Expand Up @@ -117,9 +117,9 @@
- auto-complete: cancel auto-complete for `magic-space` `#D1913` 01b4f67
- complete: support ambiguous completion for command paths `#D1922` 8a716ad
- complete: preserve original path segments as long as possible `#D1923` `#D1924` e3cdb9d
- main: support `BLE_SESSION_ID` and `BLE_COMMAND_ID` `#D1925` 44d9e10 `#D1947` xxxxxxx
- main: support `BLE_SESSION_ID` and `BLE_COMMAND_ID` `#D1925` 44d9e10 `#D1947` 46ac426 `#D1954` xxxxxxx
- main: support an option `--inputrc={diff,all,user,none}` `#D1926` 92f2006
- util (`ble/builtin/trap`): support Bash 5.2 `trap -P` `#D1937` xxxxxxx
- util (`ble/builtin/trap`): support Bash 5.2 `trap -P` `#D1937` 826a275

## Changes

Expand Down Expand Up @@ -341,7 +341,7 @@
- decode: fix a bug that the tab completion do not work with bash-4.4 and lower `#D1928` 7da9bce
- complete: fix non-working ambiguous path completion with `..` and `.` in the path `#D1930` 632e90a
- main (`ble-reload`): fix failure by non-existent rcfile `#D1931` 0ceb0cb
- syntax (`ble/syntax/highlight/vartype`): check variable in global scope `#D1932` xxxxxxx
- syntax (`ble/syntax/highlight/vartype`): check variable in global scope `#D1932` b7026de

## Documentation

Expand Down Expand Up @@ -458,7 +458,7 @@
- main: show warning for empty locale (movivated by Ultra980) `#D1927` 92f2006
- main: never load `/etc/inputrc` in openSUSE (motivated by Ultra980) `#D1926` 92f2006 0ceb0cb
- canvas: refine detection of `bleopt char_width_mode=musl` `#D1929` b0c16dd
- term (`terminology`): work around terminal glitches `#D1946` xxxxxxx
- term (`terminology`): work around terminal glitches `#D1946` 9a1b4f9

## Test

Expand Down Expand Up @@ -526,8 +526,8 @@
- benchmark: support for ksh as `benchmark.ksh` `#D1886` 5dae4da
- github/workflows (build): rename directory in `ble-nightly.tar.xz` to `ble-nightly` (reported by Harduex) `#D1891` f20854f 4ea2e23 43c6d4b
- edit: update prompts on g2sgr change `#D1906` 40625ac
- util, decode, vi: fix leak variables `#D1933` xxxxxxx
- util: support `bleopt debug_idle` `#D1945` xxxxxxx
- util, decode, vi: fix leak variables `#D1933` 8d5cab8
- util: support `bleopt debug_idle` `#D1945` fa10184

## Contrib

Expand All @@ -543,14 +543,18 @@
- colorglass: add `bleopt colorglass_{saturation,brightness}` (motivated by auwsom) `#D1906` 40625ac
- fzf-key-bindings: fix a problem that `modifyOtherKeys` is not reflected (reported by SuperSandro2000) `#D1908` 486564a
- add `histdb` `#D1925` 44d9e10
- histdb: support auto-complete source `histdb-word` `#D1938` xxxxxxx
- histdb: automatically updrade histdb version `#D1940` xxxxxxx
- histdb: support auto-complete source `histdb-history` `#D1941` xxxxxxx
- histdb: handle multiple exec lines for `histdb_ignore` `#D1942` xxxxxxx
- histdb: kill orphan `sqlite3` processes `#D1943` xxxxxxx
- histdb: back up the database `#D1944` xxxxxxx
- histdb: fix miscellaneous SQL query errors `#D1947` xxxxxxx
- integration: move `fzf` and `bash-preexec` integrations to subdir `#D1939` xxxxxxx
- histdb: support auto-complete source `histdb-word` `#D1938` 00cae74
- histdb: automatically upgrade histdb version `#D1940` 4fac1e3
- histdb: support auto-complete source `histdb-history` `#D1941` 4fac1e3
- histdb: handle multiple exec lines for `histdb_ignore` `#D1942` 36e1c89
- histdb: kill orphan `sqlite3` processes `#D1943` 36e1c89
- histdb: back up the database `#D1944` 36e1c89
- histdb: fix miscellaneous SQL query errors `#D1947` 46ac426
- histdb: output error messages to tty `#D1952` xxxxxxx
- histdb: fix remaining debug function name "assign{2 => }" in bash <= 3.2 `#D1953` xxxxxxx
- histdb: fix a problem that the background process fails to start in bash-3.0 `#D1956` xxxxxxx
- histdb: fix a bug that history search fails with a single quote in the commandline `#D1957` xxxxxxx
- integration: move `fzf` and `bash-preexec` integrations to subdir `#D1939` 86d9467

<!---------------------------------------------------------------------------->
# ble-0.4.0-devel2
Expand Down
218 changes: 154 additions & 64 deletions note.txt
Expand Up @@ -764,6 +764,10 @@ bash_features
bash-3.1 以降で使える。
bash-4.1 以降で var として配列要素 (arr[123] 等) を指定できる。

* printf %(...)T は bash-4.2 以降から。但し、bash-4.2 では -1 を明示的に指定
しないと現在時刻になってくれずに 0 になってしまう。bash-4.3 以降では省略し
た場合は現在時刻になる。

* ${!arr[@]} は bash-3.0 より

bash_tips
Expand Down Expand Up @@ -1928,6 +1932,19 @@ bash_tips
- leakvars
- keymap の移動 (これは別 commit にする?)

2023-02-12

* blerc.template: update unicode versions

* README: Guix package の位置が変わっている。

* edit: bash-4.1 以下で echo "$!" を実行しようとしても履歴展開周りで変な事が
起こってコマンドを実行する事ができない。更に bash-3.0 では

bash-3.0: ble/history:bash/resolve-multiline: そのようなファイルやディレクトリはありません

と表示される。

2023-02-06

* auto-complete: cd 等簡単に成否が分かる物については判定して除外する可能性
Expand All @@ -1953,13 +1970,14 @@ bash_tips

* 履歴を操作・編集(削除)する機能も欲しい。

histdb コマンド一覧
histdb -S セッション一覧
histdb -s [.|session] セッション指定
histdb -d [.|dir] ディレクトリ指定
histdb -t [.|dir] ディレクトリ指定(サブディレクトリも含める)
histdb -g glob コマンドをパターンで絞り込み
histdb -r command_id コマンド削除
histdb [list] コマンド一覧
histdb list-session [options] セッション一覧
histdb delete [OPTIONS] コマンド削除
histdb -s [.|session] セッション指定
histdb -d [.|dir] ディレクトリ指定
histdb -t [.|dir] ディレクトリ指定(サブディレクトリも含める)
histdb -g glob コマンドをパターンで絞り込み
histdb -c command_id コマンドIDによる指定

2023-01-25

Expand All @@ -1982,8 +2000,15 @@ bash_tips
(history.filename)。現在ディレクトリとの組にして記録するとより良いかもし
れない。これは compv に対して一致を試みる。

x 現在ディレクトリとの組にするのだとしたら結局現在ディレクトリで普通にファ
イル名補完をするので十分なのではないか。逆にディレクトリに関係なくファ
イル名を記録するとしても何か用途はあるだろうか。結局単語補完と実質同じ
なのではないか。

c 更に、simple-word の時には展開結果を記録する (history.vword.txt)?

x 展開結果が長大になる可能性がある。

d 更に c をスペース等で分割して単語を記録する (history.eword.txt)? 然しこ
れも変な物を記録しても仕方がないので bash special chars に関しては含めな
い様にする。もしくはそれらも分割子として取り扱う。これも compv に対して一
Expand Down Expand Up @@ -2123,16 +2148,6 @@ bash_tips
install-hook 内に継承されないので extdebug/functrace が設定されていない限り
判定できないしその様に条件で弾いている ]

2022-07-20

* konsole drag&drop
https://github.com/akinomyoga/ble.sh/issues/211
https://invent.kde.org/utilities/konsole/-/merge_requests/714

konsole に PR を出したが返事がない。この2日の間に別の PR はマージされている。
暫く待っても何も反応がなかったら Bugzilla の方にも提出する事にする。もしく
はメーリングリストに直接問い合わせる。

2022-07-10

* syntax: posix syntax check in posix mode?
Expand Down Expand Up @@ -2238,17 +2253,6 @@ bash_tips
* ext: trueline と組み合わせた時に問題が起こるとのこと。
https://github.com/lecramyajiv/Emptydeeds/commit/b57e8354cc350d71c655d93c32112427ec8addda#diff-0a1c1083789380c5f4b4aaebd19b6a4b2431ae808f8b456cf865825cfb93b9dfR2527

2022-06-28

* コマンド名の曖昧補完ができない。./adf[tab]

これは . で始まるコマンド名を列挙してそれで補完を実行しようとしている為であ
る。/ が含まれる場合には glob で一致させてその上で実行属性でフィルタする必
要がある気がする。

引数の場合にはできている。うーん。/ が含まれる場合は別に生成するべきなので
はないか。

2022-06-19

* 履歴番号を検索やプロンプトで表示しているが、これは history の最初が 1 でな
Expand Down Expand Up @@ -2553,42 +2557,6 @@ bash_tips

2022-01-23

* コマンドのログ機能を作成する。

特定のファイルに情報を書き込む。

同時に複数の書き込みがあった場合に混ざり合う危険性がある。滅多に起こらない
と思いたいがちゃんと防止策は作っておく必要がある。例えばシェル毎に履歴を記
録して終了する時に合成するという手が考えられる。合成自体が衝突する自体を防
ぐために mkdir/rmdir を使うのが一つの手である。

コマンドにはコマンド実行前とコマンド実行後の二つに分けて結果を書き込みたい
という欲求がある。という事を考えると、

$ printf '%x/%s/%s.e%s\n' $(printf '%(%s)T' -1) "$HOSTNAME" $$ "$LINENO"

* バックグラウンドのジョブの状態はどの様に記録するのか。うーん。ジョブに関
しては一応 ble.sh の中で追跡はしている。それに従って終端を幾らか荒い尺度
で検出する事はできる。しかし正確な時間は分からない。

プロンプトを表示した時刻も記録しておくと良い様に思われる。しかしそうなる
と大量の記録が残ってしまう事になるのではないか。うーん。プロンプトを表示
した時刻に関しては別に全てを記録する必要はない。前回のプロンプトの表示時
刻だけ覚えておいて、ジョブ変化を検出した時にその情報を備考として乗せるだ
けで良いのである。

* 記録する情報は以下の通り。

cmd, pwd, 終了ステータス(PIPESTATUS), 各種時刻情報, files(自動補完用), 構
文解析情報(後で単語を抽出する為。というか単語の範囲だけで良い).

これを使って処理するのはもしかしたら外部プログラムに頼らなければならない
かもしれない。

或いはデータベース等も保存先として考えても良いのかもしれない。但し、その場
合には sqlite3 等に対する依存性が発生する。一方で、sqlite3 には最低限の排他
制御が含まれている様ではある。

* "for ((i=0;i<10;i++)); do sleep 1; done" で C-c すると ble.sh 全体がその場で停止する

これは外部コマンドを実行中にそのコマンドが SIGINT で終了した場合、trap INT
Expand Down Expand Up @@ -6701,8 +6669,130 @@ bash_tips
Done (実装ログ)
-------------------------------------------------------------------------------

2023-02-12

* [棄却] histdb: コマンドも histdb-word と同様に数えて良いのではないか? [#D1959]

これは quote 等を除去した状態で数えるのが良い? それとも quote も含めて記録
する? コマンドの種類も記録するべき? 然し、実の所、わざわざ記録しなくても、
後でコマンド履歴を見れば何を呼び出したかは基本的に分かる。

これは #D1958 と同様の理由で今は数えない。実際に必要になったらその時に実装
すれば良いが、実際に必要になるのか分からない。

* [棄却] histdb: histdb-word で一つのコマンドに同じ単語が複数あった時に数える? [#D1958]

然し目的が使用頻度を記録して後の補完での優先順位に役立てるのだとしたら、一
つのコマンドの中で複数同じ単語が登場するのは自明の可能性が高く、使用頻度と
して計上するのは違う気がする。もし実際に単語の使用頻度を興味として知りたい
のであれば、command_history の command を抽出して自前で処理するべきなのであ
る。histdb で記録するのは高速にそういった処理をするのが大変だから補完候補生
成の為のキャッシュとして用いているという側面がある。

* histdb: auto-complete-history で ' を含むコマンドがあると SQL でエラーメッセージが出る [#D1957]

これは単に q=\' qq=\'\' の初期化していない状態でエスケープを実行していたか
らだった。修正した。

* histdb: bash-3.0 で fork したプロセスが消滅してしまう。謎 [#D1956]

普通に自分で実行すると生きている様な気がする。

どうも bash-3.0 では function fname { ... } <&"$fd1" >&"$fd2" 等の様にして
リダイレクトするとちゃんとリダイレクトされていない様だ。何故か /dev/null に
繋ってしまう。中でリダイレクトする様にしたら直った。

* [棄却] histdb-word: edit insert-last-argument 等についても [#D1955]

実は histdb-word を使った方が良いのでは。と思ったが

x 現在の histdb-word の実装だと単語の順序等が失われるし (同じコマンドの中に
含まれている単語は同じ時刻になるのでは)

x また重複する単語があった時に古いものが抜けてしまう (その方が望ましいとい
う考え方もあるかもしれないが、やはり思い出しながら探す時に通り過ぎた後で
もちゃんと現れた方が親切な様な気もする)。

また現在の insert-last-argument の実装を確認すると履歴展開を使って単語を抽
出しているので、結局別に現在の実装で問題があるという訳でもない。寧ろ、現在
の実装は (subshell fork するものの) 他のプロセスとの交信がない分だけ安定し
ているのではないかという気がする。

2023-02-10

* histdb: 4.2 で算術式のエラー(配列負の添字) のエラーが生じている [#D1954]

実は printf %(%s)T に対応しているとは言っても、bash-4.2 では -1 を指定しな
いとちゃんと現在時刻になってくれない様だ。これが為に BLE_SESSION_ID の為の
時刻決定で失敗していた。

* 2023-02-12 bash-4.2 の last_time が 0 になっている。これも同じ事が原因だっ
た。ble/histdb/.get-time の関数の中でも %(%s)T を用いて時刻を取得しようと
していたが、明示的に -1 を指定する必要がある。

* histdb: 3.2以下で session が登録されていない [#D1953]
これは単にデバグ用に置き換えていた関数名 assign2 が残っていたのが原因だった。

* histdb: sqlite のエラーメッセージは端末に表示するようにする [#D1952]

本来は全く表示されない事を期待しているので、もし表示されるのだとしたらバグ
である。なので表示する。

2023-02-06

* 2022-01-23 [対応済み] コマンドのログ機能を作成する [#D1951]

特定のファイルに情報を書き込む。

同時に複数の書き込みがあった場合に混ざり合う危険性がある。滅多に起こらない
と思いたいがちゃんと防止策は作っておく必要がある。例えばシェル毎に履歴を記
録して終了する時に合成するという手が考えられる。合成自体が衝突する自体を防
ぐために mkdir/rmdir を使うのが一つの手である。

コマンドにはコマンド実行前とコマンド実行後の二つに分けて結果を書き込みたい
という欲求がある。という事を考えると、

$ printf '%x/%s/%s.e%s\n' $(printf '%(%s)T' -1) "$HOSTNAME" $$ "$LINENO"

* バックグラウンドのジョブの状態はどの様に記録するのか。うーん。ジョブに関
しては一応 ble.sh の中で追跡はしている。それに従って終端を幾らか荒い尺度
で検出する事はできる。しかし正確な時間は分からない。

プロンプトを表示した時刻も記録しておくと良い様に思われる。しかしそうなる
と大量の記録が残ってしまう事になるのではないか。うーん。プロンプトを表示
した時刻に関しては別に全てを記録する必要はない。前回のプロンプトの表示時
刻だけ覚えておいて、ジョブ変化を検出した時にその情報を備考として乗せるだ
けで良いのである。

* 記録する情報は以下の通り。

cmd, pwd, 終了ステータス(PIPESTATUS), 各種時刻情報, files(自動補完用), 構
文解析情報(後で単語を抽出する為。というか単語の範囲だけで良い).

これを使って処理するのはもしかしたら外部プログラムに頼らなければならない
かもしれない。

或いはデータベース等も保存先として考えても良いのかもしれない。但し、その場
合には sqlite3 等に対する依存性が発生する。一方で、sqlite3 には最低限の排他
制御が含まれている様ではある。

* 2022-06-28 [対応済み] コマンド名の曖昧補完ができない。./adf[tab] [#D1950]

これは . で始まるコマンド名を列挙してそれで補完を実行しようとしている為であ
る。/ が含まれる場合には glob で一致させてその上で実行属性でフィルタする必
要がある気がする。

引数の場合にはできている。うーん。/ が含まれる場合は別に生成するべきなので
はないか。

* 2022-07-20 [解決済み] konsole drag&drop [#D1949]
https://github.com/akinomyoga/ble.sh/issues/211
https://invent.kde.org/utilities/konsole/-/merge_requests/714

konsole に PR を出したが返事がない。この2日の間に別の PR はマージされている。
暫く待っても何も反応がなかったら Bugzilla の方にも提出する事にする。もしく
はメーリングリストに直接問い合わせる。

* [棄却] histdb: 現在の有効なファイル名をコマンドに紐づけて記録する可能性について [#D1948]

* コマンドが前提としているファイルの存在を確認して history を skip する。
Expand Down

0 comments on commit 651c70c

Please sign in to comment.