From 4d24f8464d54cf5811f06da714fbb3f851701988 Mon Sep 17 00:00:00 2001 From: Koichi Murase Date: Tue, 5 Jul 2022 11:19:07 +0900 Subject: [PATCH] edit: set "LINENO" for "PS1", "PROMPT_COMMAND", and "DEBUG" --- contrib | 2 +- docs/ChangeLog.md | 3 +++ note.txt | 27 +++++++++++++++++++++++++++ src/edit.sh | 23 +++++++++++++++-------- 4 files changed, 46 insertions(+), 9 deletions(-) diff --git a/contrib b/contrib index eb17c730..000afffe 160000 --- a/contrib +++ b/contrib @@ -1 +1 @@ -Subproject commit eb17c7300594a21130d278817e2a6907658a5c54 +Subproject commit 000afffe4157605046475c325596f6e8ba24f0cf diff --git a/docs/ChangeLog.md b/docs/ChangeLog.md index 6b4d674b..595bec87 100644 --- a/docs/ChangeLog.md +++ b/docs/ChangeLog.md @@ -302,6 +302,7 @@ - debug: add `ble/debug/profiler` (motivated by SuperSandro2000) `#D1824` f629698 XXXXXXX - util (`ble/string#split`): optimize `#D1826` XXXXXXX - global: avoid passing arbitrary strings through `awk -v var=value` `#D1827` XXXXXXX + - edit: properly set `LINENO` for `PS1`, `PROMPT_COMMAND`, and `DEBUG` `#D1830` XXXXXXX ## Compatibility @@ -397,6 +398,8 @@ - prompt-git: detect staged changes `#D1718` 2b48e31 - prompt-git: fix a bug that information is not updated on reload `#D1732` 361e9c5 +- config/execmark: show exit status in a separate line `#D1828` XXXXXXX +- prompt-git: ignore untracked files in submodules `#D1829` XXXXXXX # ble-0.4.0-devel2 diff --git a/note.txt b/note.txt index e935a739..0e276906 100644 --- a/note.txt +++ b/note.txt @@ -1821,6 +1821,16 @@ bash_tips - Acknowledgments - keymap の移動 (これは別 commit にする?) +2022-07-04 + + * ext: trueline と組み合わせた時に問題が起こるとのこと。 + https://github.com/lecramyajiv/Emptydeeds/commit/b57e8354cc350d71c655d93c32112427ec8addda#diff-0a1c1083789380c5f4b4aaebd19b6a4b2431ae808f8b456cf865825cfb93b9dfR2527 + + * bash: history timestamp に問題がある時に history の初期化が正しくない + + bash がエラーメッセージを出力する (bash-5.0+) または segfault する + (bash-4.4-)。現状ではエラーメッセージがそのまま履歴に混入してしまっている。 + 2022-06-28 * コマンド名の曖昧補完ができない。./adf[tab] @@ -1829,6 +1839,9 @@ bash_tips る。/ が含まれる場合には glob で一致させてその上で実行属性でフィルタする必 要がある気がする。 + 引数の場合にはできている。うーん。/ が含まれる場合は別に生成するべきなので + はないか。 + 2022-06-19 * 履歴番号を検索やプロンプトで表示しているが、これは history の最初が 1 でな @@ -6436,8 +6449,22 @@ bash_tips Done (実装ログ) ------------------------------------------------------------------------------- +2022-07-05 + + * edit: プロンプト評価時に LINENO は一時的に現在の行番号に設定するべき [#D1830] + + →これは DEBUG を PREEXEC に使っている設定でも重要になる。 + うーん。DEBUG trap を呼び出す時にも設定するべきだろうか。 + →DEBUG trap を呼び出す時にも LINENO を設定する事にした。 + 2022-06-28 + * contrib/prompt-git: untracked content は赤ではない色で表示する for submodule [#D1829] + →untracked files in submodule は単に無視するオプションがあったのでそれを使う事にする。 + + * contrib/config/execmark: 同じ行に errexit を表示していると気づきにくい [#D1828] + →分けて表示する様にした。 + * global: awk -v var=value を介して任意の文字列を渡さない [#D1827] awk の -v で任意の文字列を渡すことはできない。"" の中であるかのように \? が diff --git a/src/edit.sh b/src/edit.sh index d0ed1df7..43043cba 100644 --- a/src/edit.sh +++ b/src/edit.sh @@ -1267,8 +1267,9 @@ function ble/prompt/.instantiate { if ble/prompt/.uses-builtin-prompt-expansion "$ps"; then [[ $ps == *'\'[wW]* ]] && ble/prompt/unit/add-hash '$PWD' ble-edit/exec/.setexit "$_ble_edit_exec_lastarg" - BASH_COMMAND=$_ble_edit_exec_BASH_COMMAND \ - builtin eval 'expanded=${ps@P}' + LINENO=$_ble_edit_LINENO \ + BASH_COMMAND=$_ble_edit_exec_BASH_COMMAND \ + builtin eval 'expanded=${ps@P}' else # 展開設定 @@ -1287,8 +1288,9 @@ function ble/prompt/.instantiate { ble/prompt/.escape "$processed"; local escaped=$ret expanded=${trace_hash0#*:} # Note: これは次行が失敗した時の既定値 ble-edit/exec/.setexit "$_ble_edit_exec_lastarg" - BASH_COMMAND=$_ble_edit_exec_BASH_COMMAND \ - builtin eval "expanded=\"$escaped\"" + LINENO=$_ble_edit_LINENO \ + BASH_COMMAND=$_ble_edit_exec_BASH_COMMAND \ + builtin eval "expanded=\"$escaped\"" else expanded=$processed fi @@ -1601,7 +1603,8 @@ function _ble_prompt_update__eval_prompt_command_1 { # まう。仕方がないので local で _ble_edit_exec_TRAPDEBUG_enabled=1 を設定する。 local _ble_edit_exec_TRAPDEBUG_enabled=1 ble-edit/exec/.setexit "$_ble_edit_exec_lastarg" - BASH_COMMAND=$_ble_edit_exec_BASH_COMMAND \ + LINENO=$_ble_edit_LINENO \ + BASH_COMMAND=$_ble_edit_exec_BASH_COMMAND \ builtin eval -- "$1" } ble/function#trace _ble_prompt_update__eval_prompt_command_1 @@ -6205,11 +6208,13 @@ function ble-edit/exec:gexec/.TRAPDEBUG { ble/base/.adjust-bash-options __set __shopt # Run user DEBUG trap in the sandbox + [[ $_ble_attached ]] || local _ble_edit_LINENO=${BASH_LINENO[${#BASH_LINENO[@]}-1]} local _ble_builtin_trap_processing=$_ble_builtin_trap_DEBUG local _ble_builtin_trap_postproc ble/util/setexit "$__lastexit" "$__lastarg" - ble/builtin/trap/invoke DEBUG + LINENO=$_ble_edit_LINENO ble/builtin/trap/invoke DEBUG _ble_edit_exec_TRAPDEBUG_postproc=$_ble_builtin_trap_postproc # unused + [[ $_ble_attached ]] || ble/util/unlocal _ble_edit_LINENO # Handle INT local depth=${#FUNCNAME[*]} @@ -6236,8 +6241,9 @@ function ble-edit/exec:gexec/.TRAPDEBUG { _ble_edit_exec_TRAPDEBUG_lastexit=$__lastexit _ble_edit_exec_TRAPDEBUG_lastarg=$__lastarg _ble_edit_exec_TRAPDEBUG_postproc='ble/util/setexit "$_ble_edit_exec_TRAPDEBUG_lastexit" "$_ble_edit_exec_TRAPDEBUG_lastarg"' - local user_trap=${_ble_builtin_trap_handlers[_ble_builtin_trap_DEBUG]} + local user_trap=${_ble_builtin_trap_handlers[_ble_builtin_trap_DEBUG]} q=\' Q="'\''" if [[ $user_trap == *[![:space:]]* ]]; then + [[ $_ble_attached ]] && user_trap="LINENO=\$_ble_edit_LINENO builtin eval '${user_trap//$q/$Q}'" _ble_edit_exec_TRAPDEBUG_postproc="$_ble_edit_exec_TRAPDEBUG_postproc;$user_trap" fi @@ -6343,7 +6349,8 @@ function ble-edit/exec:gexec/invoke-hook-with-setexit { local -a BLE_PIPESTATUS BLE_PIPESTATUS=("${_ble_edit_exec_PIPESTATUS[@]}") ble-edit/exec/.setexit "$_ble_edit_exec_lastarg" - BASH_COMMAND=$_ble_edit_exec_BASH_COMMAND \ + LINENO=$_ble_edit_LINENO \ + BASH_COMMAND=$_ble_edit_exec_BASH_COMMAND \ blehook/invoke "$@" } >&$_ble_util_fd_stdout 2>&$_ble_util_fd_stderr