Skip to content

Commit

Permalink
edit: refactor "bleopt edit_{{a,v} => }bell=abell:vbell:visual"
Browse files Browse the repository at this point in the history
  • Loading branch information
akinomyoga committed Jun 22, 2024
1 parent fe85e0d commit 79beebd
Show file tree
Hide file tree
Showing 6 changed files with 127 additions and 45 deletions.
18 changes: 9 additions & 9 deletions README-ja_JP.md
Original file line number Diff line number Diff line change
Expand Up @@ -485,21 +485,21 @@ bleopt input_encoding='C'

## 2.5 ベル

設定 `edit_abell` と設定 `edit_vbell` は、編集関数 `bell` の振る舞いを制御します。
`edit_abell` が非空白の文字列の場合、音による通知が有効になります (つまり、制御文字の `BEL` (0x07) が `stderr` に出力されます)。
`edit_vbell` が非空白の文字列の場合、画面での通知が有効になります。既定では音による通知が有効で、画面での通知が無効になっています。
設定 `edit_bell` は編集関数 `bell` の振る舞いを制御するコロン区切りのリストです。
`abell`, `vbell`, `visual` はそれぞれ対応するベルの提示方法を有効化します。
`abell` は音による通知に対応し、制御文字の <kbd>BEL</kbd> (0x07) を `stderr` に出力します。
`vbell` は画面での通知に対応し、端末画面上にメッセージを表示します。
`visual` は画面の反転に対応し、<kbd>DECSCNM</kbd> を用いて端末画面を瞬間的に反転します。
既定では音による通知のみが有効になっています。

設定 `vbell_default_message` は画面での通知で使用するメッセージ文字列を指定します。既定値は `' Wuff, -- Wuff!! '` です。
設定 `vbell_duration` は画面での通知を表示する時間の長さを指定します。単位はミリ秒です。既定値は `2000` です。
設定 `vbell_align` は画面での通知の表示位置を指定します。`left`, `center`, `right` が指定できます。

例えば、画面での通知は以下のように設定・有効化できます:
```bash
bleopt edit_vbell=1 vbell_default_message=' BEL ' vbell_duration=3000
```
例えば、以下の設定によって、音による通知を無効化して画面での通知を設定・有効化できます。

もう一つの例として、音による通知は以下の様にして無効化できます。
```bash
bleopt edit_abell=
bleopt edit_bell=vbell vbell_{default_message=' BEL ',duration=3000,align=right}
```

## 2.6 着色の設定
Expand Down
32 changes: 21 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -501,18 +501,28 @@ bleopt input_encoding='C'

## 2.5 Bell

The options `edit_abell` and `edit_vbell` control the behavior of the edit function `bell`. If `edit_abell` is a non-empty string, the audible bell is enabled, i.e. ASCII Control Character `BEL` (0x07) will be written to `stderr`. If `edit_vbell` is a non-empty string, the visual bell is enabled. By default, the audible bell is enabled while the visual bell is disabled.
The option `edit_bell` controls the behavior of the edit function (widget)
called `bell`. It is a colon-separated list of the values `vbell`, `abell`,
and `visual`. When a value is contained, the corresponding type of the bell is
enabled. The value `abell` corresponds to the audible bell, which prints ASCII
Control Character <kbd>BEL</kbd> (0x07) will be written to `stderr`. The value
`vbell` corresponds to the visible bell, which shows the message in the
terminal display. The value `visual` corresponds to the visual bell, which
flashes the terminal screen by turning on the <kbd>DECSCNM</kbd> mode for a
short moment. By default, only the audible bell is enabled.

The option `vbell_default_message` specifies the default message shown by the
visual bell. The default value of this setting is `' Wuff, -- Wuff!! '`. The
option `vbell_duration` specifies the display duration of the visual-bell
message. The unit is a millisecond. The default value is `2000`. The option
`vbell_align` specifies the position of `vbell` by `left`, `center`, or
`right`.

For example, the audible bell can be disabled, and the visual bell can be set
up as:

The option `vbell_default_message` specifies the message shown as the visual bell. The default value is `' Wuff, -- Wuff!! '`. The option `vbell_duration` specifies the display duration of the visual-bell message. The unit is a millisecond. The default value is `2000`.

For example, the visual bell can be enabled as:
```
bleopt edit_vbell=1 vbell_default_message=' BEL ' vbell_duration=3000
```

For another instance, the audible bell is disabled as:
```
bleopt edit_abell=
```bash
bleopt edit_bell=vbell vbell_{default_message=' BEL ',duration=3000,align=right}
```

## 2.6 Highlight Colors
Expand Down
14 changes: 11 additions & 3 deletions ble.pp
Original file line number Diff line number Diff line change
Expand Up @@ -2581,16 +2581,24 @@ function ble/base/unload {
ble/base/adjust-bash-options
ble/base/adjust-BASH_REMATCH

# src/edit.sh
ble-edit/bind/clear-keymap-definition-loader
ble/widget/.bell/.clear-DECSCNM

# decode.sh
ble/decode/keymap#unload

# src/util.sh
ble/term/stty/TRAPEXIT "$1"
ble/term/leave
ble/util/buffer.flush
blehook/invoke unload
ble/decode/keymap#unload
ble-edit/bind/clear-keymap-definition-loader
ble/builtin/trap/finalize "$1"
ble/util/import/finalize

# main
ble/base/clean-up-runtime-directory finalize
ble/fd#finalize
ble/fd#finalize # this is used by the above function
ble/base/clear-version-variables
return 0
} 0<&"$_ble_util_fd_tui_stdin" 1>&"$_ble_util_fd_tui_stdout" 2>&"$_ble_util_fd_tui_stderr"
Expand Down
14 changes: 9 additions & 5 deletions blerc.template
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,15 @@
## Line editor settings


## The following settings turns on/off the audible bells and visible bells for
## errors while user edit. The non-empty value turns on the bells.

#bleopt edit_abell=1
#bleopt edit_vbell=
## This option controls the behavior of the bell in the line editing by
## colon-separated values. When "abell", "vbell", and "visual" are contained,
## the audible bells, the visible bells, and the visual bells are enabled. The
## audible bell sends BEL to the terminal. The visible bell shows the message
## on the terminal display. The visual bell is the GNU-Screen style bell that
## flashes the terminal display by turning on DECSCNM in a short moment. Old
## settings "edit_vbell" and "edit_abell" should be updated to use "edit_bell".

#bleopt edit_bell=abell


## The following setting turns on the delayed load of history when an non-empty
Expand Down
14 changes: 14 additions & 0 deletions note.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7392,6 +7392,20 @@ bash_tips
Done (実装ログ)
-------------------------------------------------------------------------------

2024-06-20

* vbell: edit_vbell edit_abell の設定を統合する [#D2229]

* visible bell vs visual bell? ソースコード上は全て visible になっている。
audible と対象になっている。一方で wiki では visual bell になっている。元
の GNU Screen では visual bell である。

* DECSCNM を使った反転にも対応する? これを visual と名付けるのでも良い気が
する。これについては visible

これまで visual/visible としていたのは visible に統一する事にして、新しいベ
ルの形式として GNU screen と同様の方法を用いる visual を導入する事にした。

2024-06-19

* vbell: panel 内部に表示する (requested by bb010g) [#D2228]
Expand Down
80 changes: 63 additions & 17 deletions src/edit.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,21 +31,45 @@
# 1 追加入力欄
# 2 infobar

## @bleopt edit_vbell
## 編集時の visible bell の有効・無効を設定します。
## bleopt_edit_vbell=1
## 有効です。
## bleopt_edit_vbell=
## 無効です。
bleopt/declare -v edit_vbell ''

## @bleopt edit_abell
## 編集時の audible bell (BEL 文字出力) の有効・無効を設定します。
## bleopt_edit_abell=1
## 有効です。
## bleopt_edit_abell=
## 無効です。
bleopt/declare -v edit_abell 1
## @bleopt edit_bell
## A colon-separated list of fields to control the behavior of the bell in
## line editing.
##
## @opt vbell
## When this is specified, the visible bell (vbell) is enabled for the edit
## bell. The message is shown in the position specified by "bleopt
## vbell_align"
##
## @opt abell
## When this is specified, the audible bell (abell) is enabled for the edit
## bell. The event is notified by printing BEL to the terminal.
##
## @opt visual
## When this is specified, the visual bell in the GNU Screen style is
## enabled for the edit bell. The event is notified by flashing the screen
## by DECSCNM.
##
bleopt/declare -v edit_bell 'abell'
bleopt/declare -v edit_vbell '[obsolute: use edit_bell=vbell]'
bleopt/declare -v edit_abell '[obsolute: use edit_bell=abell]'
function bleopt/obsolete:edit_vbell { return 0; }
function bleopt/obsolete:edit_abell { return 0; }
function bleopt/check:edit_vbell {
if [[ $value ]]; then
ble/opts#append-unique bleopt_edit_bell vbell
else
ble/opts#remove bleopt_edit_bell vbell
fi
value=$bleopt_edit_vbell
}
function bleopt/check:edit_abell {
if [[ $value ]]; then
ble/opts#append-unique bleopt_edit_bell abell
else
ble/opts#remove bleopt_edit_bell abell
fi
value=$bleopt_edit_abell
}

## @bleopt history_lazyload
## bleopt_history_lazyload=1
Expand Down Expand Up @@ -4792,12 +4816,34 @@ function ble-decode/keymap:yankpop/define {

# **** bell **** @edit.bell

_ble_term_DECSCNM_state=

function ble/widget/.bell {
[[ $bleopt_edit_vbell ]] && ble/term/visible-bell "$1"
[[ $bleopt_edit_abell ]] && ble/term/audible-bell
[[ :$bleopt_edit_bell: == *:vbell:* ]] && ble/term/visible-bell "$1"
[[ :$bleopt_edit_bell: == *:abell:* ]] && ble/term/audible-bell

if [[ :$bleopt_edit_bell: == *:visual:* ]]; then
ble/util/buffer $'\e[?5h'
ble/util/buffer.flush
_ble_term_DECSCNM_state=1
if ble/is-function ble/util/idle.push; then
ble/util/idle.push --sleep=50 ble/widget/.bell/.clear-DECSCNM
else
ble/util/msleep 50
ble/widget/.bell/.clear-DECSCNM
fi
fi

return 0
}

function ble/widget/.bell/.clear-DECSCNM {
[[ $_ble_term_DECSCNM_state ]] || return
_ble_term_DECSCNM_state=
ble/util/buffer $'\e[?5l'
ble/util/buffer.flush
}

# blehook/declare widget_bell (defined in def.sh)
function ble/widget/bell {
ble-edit/content/clear-arg
Expand Down

0 comments on commit 79beebd

Please sign in to comment.