Skip to content

Commit

Permalink
util (ble/builtin/readonly): adjust bash options
Browse files Browse the repository at this point in the history
  • Loading branch information
akinomyoga committed Jun 29, 2023
1 parent f16c0d8 commit 1f3cbc0
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 2 deletions.
1 change: 1 addition & 0 deletions docs/ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
- util (`ble/util/idle`): fix an infinite loop `#D2043` 5f4c0afd
- main: fix `--inputrc=TYPE` not applied on startup `#D2044` 1b15b851 0adce7c9
- stty: suggest `stty sane` after exiting from bash >= 5.2 to non-ble session `#D2046` xxxxxxxx
- util (`ble/builtin/readonly`): adjust bash options (reported by dongxi8) `#D2050` xxxxxxxx

## Compatibility

Expand Down
48 changes: 48 additions & 0 deletions note.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1996,6 +1996,34 @@ bash_tips
- make_command.sh の整理 (scan 分離, char_width 分離)
- note.txt -> memo.txt

2023-06-21

* menu for history entries
https://github.com/akinomyoga/ble.sh/issues/258#issuecomment-1599945461

* mawk in Ubuntu 16.04 LTS

mawk の version が古い。そして Ubuntu 16.04 LTS はこの古い mawk を使ってい
る様だ。mawk が失敗するとどうやら全く操作ができなくなる様だ。これは良くない。

x reject: 後テストしていて気づいたが --clear-cache が効いていない。

もしくはそのまま ble.sh が起動してしまう。例えば bash out/ble.sh
--clear-cache とするとそのまま新しい interactive session が始まってしまう。
何故? chatoyancy 上でやっても再現しない。と思ったが勘違いだった。

それでも既に ble.sh がロードされているセッションで source out/ble.sh
--clear-cache を実行した時に ble.sh をリロードするのかリロードせずに既に
ロードされている ble.sh で指定されたコマンドを実行するのかは非自明 → こ
れに関しては新しい物をリロードした上でコマンドを実行するという現在の振る
舞いで良い気がする。

ble.sh がロードされていない時にsource out/ble.sh --clear-cache をした時に
勝手に attach してしまうのは変だろう、と思ったが実際にはそのような振る舞
いはしていなかった。勘違いだった。

結局何れも勘違いがった。

2023-06-12

* stty: bash-5.2 以上 exit 後の stty 状態を正しく復元する手法?
Expand Down Expand Up @@ -6964,6 +6992,26 @@ bash_tips
Done (実装ログ)
-------------------------------------------------------------------------------

2023-06-26

* util: ble/builtin/readonly が bash options で壊れる (reported by dongxi8) [#D2050]
https://github.com/akinomyoga/ble.sh/issues/335#issuecomment-1598485650

readonly builtin: readonly BASH_COMPLETION_COMPAT_DIR がエラーになる。これ
は何故だろう。Ubuntu 16.04 LTS でも再現しない。

nocasematch? → これは nocasematch だった。nocasematch に対して耐性のある書
き方をするか、或いは ble/builtin/readonly を他の ble/builtin と同じ様に
bash オプションの保存・復元を行うかする必要がある。というか、set -xv 等の事
を考えるとやはり保存・復元は実行するべきだ。

ble/builtin/readonly の最初と最後で呼び出す事にした。

? 既に adjust-bash-options されている状態で呼び出しても問題ないのか気になる
が、既に様々の関数でその様にしている事を思うと問題はないはずである。特に
これらの関数は外側の状態を (グローバル変数ではなく) ローカル変数に記録し
てそれをまた復元するという形を取っている。なので問題ない筈。

2023-06-12

* complete: fzf-completion で生成された path が full path になる (reported by teutat3s) [#D2049]
Expand Down
2 changes: 1 addition & 1 deletion src/edit.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5971,7 +5971,7 @@ function ble/builtin/exit {

# 現在、同じ(サブ)シェルでの trap 処理実行中かどうか
local trap_processing=$_ble_builtin_trap_processing
[[ $_ble_builtin_trap_processing != "${BASH_SUBSHELL:-0}"/* ]] && trap_processing=
[[ $_ble_builtin_trap_processing == "${BASH_SUBSHELL:-0}"/* ]] || trap_processing=

if [[ ! $trap_processing ]] && { ble/util/is-running-in-subshell || [[ $_ble_decode_bind_state == none ]]; }; then
(($#)) || set -- "$ext"
Expand Down
9 changes: 8 additions & 1 deletion src/util.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7086,7 +7086,7 @@ function ble/builtin/readonly/.check-variable-name {
# If the variable starts with "_" but does not start with "_ble", it could be
# a global variable used by another framework. We allow such namespaced
# variables being readonly.
if [[ $1 == _* && $1 != _ble* && $1 != __ble* ]]; then
if [[ $1 == _* && $1 != _ble* && $1 != __ble* ]]; then
return 0
fi

Expand Down Expand Up @@ -7151,6 +7151,9 @@ function ble/builtin/readonly/.print-warning {
return 0
}
function ble/builtin/readonly {
local _ble_local_set _ble_local_shopt
ble/base/.adjust-bash-options _ble_local_set _ble_local_shopt

local _ble_local_flags=
local -a _ble_local_options=()
local _ble_local_caller= # used by print-warning
Expand All @@ -7177,12 +7180,16 @@ function ble/builtin/readonly {
if [[ $_ble_local_flags == *w* ]]; then
ble/util/print 'ble.sh: The global variables with unprefixed lowercase names or special names should not be made readonly. It can break arbitrary Bash configurations.' >&2
fi
local _ble_local_ext=0
if [[ $_ble_local_flags != *v* || $_ble_local_flags == *r* ]]; then
# We call `builtin readonly' only when no variables are specified
# (e.g. readonly, readonly --help), or at least one variable are allowed to
# become readonly.
builtin readonly "${_ble_local_options[@]}"
_ble_local_ext=$?
fi
ble/base/.restore-bash-options _ble_local_set _ble_local_shopt
return "$?"
}

function readonly { ble/builtin/readonly "$@"; }
Expand Down

0 comments on commit 1f3cbc0

Please sign in to comment.