-
-
Notifications
You must be signed in to change notification settings - Fork 86
説明書 §3 キーバインディング
[ 日本語 | English ] ≫ 説明書 [§1 基本 | §2 描画 | §3 束縛 | §4 編集 | §5 Emacs | §6 Vim | §7 補完 | §8 他 | 索引]
3.1 キー指定子 (kspec) / キー列指定子 (kspecs)†
ble.sh
では受信した "バイト列" を復号して "文字の列" とし、更にそれをデコードして "キーの列" に変換します。
キー指定子 (kspec) は単一の "バイト" または "文字" または "キー入力" を表現する共通の形式を持った文字列です。
キー指定子は C- や M- のような0個以上の修飾の後にキー名 (keyname) を並べた形式を持ちます。
修飾は「一文字 + -
」の形式を持ち、有効な修飾は以下の何れかのみです。
修飾の指定 | 修飾キー |
---|---|
S- | Shift キー |
C- | Control キー |
M- | Meta キー |
A- | Alter キー |
s- | Super キー |
H- | Hyper キー |
但し、Alter, Super, Hyper 修飾は通常端末が対応していないので既定では使われません。 特に、キーボードに Alter キーがある場合でも、 通常は端末によって Meta 修飾として取り扱われることに注意して下さい。
keyname は文字入力またはキー入力を表す非空白文字からなる1文字以上の文字列です。
keyname が1文字からなる場合はその文字の文字入力を表します。
例えば C-M-- は「Control + Meta + -
」という入力を表します。
keyname が U+hhhh (h
は16進数字) の形式の時は、対応する Unicode 文字と解釈されます。
keyname がその他の形式の時は、特殊文字・制御文字または特殊キーの入力と解釈されます。
特殊文字を表す keyname は以下の通りです。
keyname | 文字コード | keyname | 文字コード |
---|---|---|---|
SP | 32 (空白) | DEL | 127 |
C0 制御文字を表す keyname は以下の通りです。 HT 及び CR はそれぞれ TAB 及び RET の別名として取り扱われます。 これらの制御文字は文字として受信されても、キーの列へのデコードの過程で C-@, C-a - C-z, C-[, C-\, C-], C-^, C-_ に変換されるので、実際にキー入力列として自然に現れることは通常ありません。
keyname | 文字コード | keyname | 文字コード |
---|---|---|---|
NUL | 0 | DLE | 16 |
SOH | 1 | DC1 | 17 |
STX | 2 | DC2 | 18 |
ETX | 3 | DC3 | 19 |
EOT | 4 | DC4 | 20 |
ENQ | 5 | NAK | 21 |
ACK | 6 | SYN | 22 |
BEL | 7 | ETB | 23 |
BS | 8 | CAN | 24 |
HT, TAB | 9 | EM | 25 |
LF | 10 | SUB | 26 |
VT | 11 | ESC | 27 |
FF | 12 | FS | 28 |
CR, RET | 13 | GS | 29 |
SO | 14 | RS | 30 |
SI | 15 | US | 31 |
C1 制御文字を表す keyname は以下の通りです。
keyname | 文字コード | keyname | 文字コード |
---|---|---|---|
PAD | 128 | DCS | 144 |
HOP | 129 | PU1 | 145 |
BPH | 130 | PU2 | 146 |
NBH | 131 | STS | 147 |
IND | 132 | CCH | 148 |
NEL | 133 | MW | 149 |
SSA | 134 | SPA | 150 |
ESA | 135 | EPA | 151 |
HTS | 136 | SOS | 152 |
HTJ | 137 | SGCI | 153 |
VTS | 138 | SCI | 154 |
PLD | 139 | CSI | 155 |
PLU | 140 | ST | 156 |
RI | 141 | OSC | 157 |
SS2 | 142 | PM | 158 |
SS3 | 143 | APC | 159 |
修飾キー自体を表す keyname は以下の通りです。
keyname | 説明 |
---|---|
shift | Shift キー |
control | Control キー |
meta | Meta キー |
alter | Alter キー |
super | Super キー |
hyper | Hyper キー |
特殊キーを表す keyname は以下の通りです。
keyname | 説明 |
---|---|
insert | Insert キー |
delete | Delete キー |
home | Home キー |
end | End キー |
prior | PageUp キー |
next | PageDown キー |
up | ↑ (上) キー |
down | ↓ (下) キー |
left | ← (左) キー |
right | → (右) キー |
f1-f20 | Function キー |
paste_begin | Bracketed Paste Mode 開始 |
paste_end | Bracketed Paste Mode 終了 |
ble.sh
で使う特別な keyname は以下の通りです。
keyname | 説明 |
---|---|
__defchar__ | (キーマップの項で後述) |
__default__ | (キーマップの項で後述) |
__batch_char__ | (キーマップの項で後述) |
__before_widget__ | (キーマップの項で後述) |
__after_widget__ | (キーマップの項で後述) |
__attach__ | (キーマップの項で後述) |
__detach__ | (キーマップの項で後述) |
__ignore__ | (内部使用) 処理済みの受信シーケンスを無視 |
__error__ | (内部使用) 認識できないCSIシーケンス |
@ESC | (内部使用) 単独受信した ESC を区別する為の文字 |
@NUL | (内部使用) NUL を符号化する時に使う文字 |
キー列指定子 (kspecs) は連続して入力されるキーの列を表現する文字列です。
キー指定子 (kspec) を 1 つ以上空白で区切って繋げた形式を持ちます。
例えば kspecs C-x C-r は「Control + x
を入力した後に Control + r
を入力する」という操作を表します。
3.1.1 RET, ESC, TAB, BS, DEL, C-BS の表現†
既に述べた通り、端末から送られるデータにおいて制御文字は Control 修飾された通常キーのキーボード入力
(C-@, C-a...C-z, C-[,
C-\, C-], C-^, C-_).
を表現するのに使われます。
この為、制御文字に関連する一部のキーは、大概異なるキーの Control 修飾として解釈される事になります。
端末が modifyOtherKeys
モードに対応していてかつそのモードが有効になっている時に限り、
本来の制御文字として区別されてキーが受信されます。
以下の表にその様なキーをまとめます。
但し、実際の振る舞いは各端末によって異なる可能性があります。
キー | 通常の表現 |
modifyOtherKeys モードでの表現 |
---|---|---|
Return, Enter | C-m | RET |
Tab | C-i | TAB |
Escape | C-[ | ESC |
Backspace, DEL | C-? (または C-h) | BS, DEL |
C-Backspace, C-DEL | C-h (または C-?,C-_, C-w) | C-BS, C-DEL |
特に Backspace と C-Backspace に関しては端末によって大きく振る舞いが異なります。 以下の表に、各端末を、Backspace と C-Backspace に対してどのような制御文字を送信するかで分類します。
Backspace | C-Backspace | 端末 |
---|---|---|
C-? | C-h | Linux console, mintty, xterm, konsole, terminator, cygwin (pcon), Windows terminal, rxvt, urxvt, GNOME Terminal, alacritty, kitty |
C-? | C-? | FreeBSD console, lxterminal, termit, mlterm-3.8.8 |
C-? | C-w | VSCode Terminal |
C-? | C-_ | contra |
C-h | C-h | Solaris console, terminology, RLogin, Poderosa5 |
C-h | C-? | Minix console, Poderosa4 |
これらのキーに対して束縛する時には、両方の表現に対して同様の束縛を行う事が推奨されます。
# 例
ble-bind -m emacs -f 'C-m' accept-single-line-or-newline
ble-bind -m emacs -f 'RET' accept-single-line-or-newline
ble-bind -m vi_imap -f 'C-i' 'vi_imap/complete'
ble-bind -m vi_imap -f 'TAB' 'vi_imap/complete'
ble-bind -m vi_imap -f 'ESC' 'vi_imap/normal-mode'
ble-bind -m vi_imap -f 'C-[' 'vi_imap/normal-mode'
# Backspace
ble-bind -m emacs -f 'C-?' 'delete-region-or delete-backward-char'
ble-bind -m emacs -f 'DEL' 'delete-region-or delete-backward-char'
ble-bind -m emacs -f 'C-h' 'delete-region-or delete-backward-char'
ble-bind -m emacs -f 'BS' 'delete-region-or delete-backward-char'
# Control-Backspace (典型的な現代的端末向けの設定)
ble-bind -m emacs -f 'C-h' 'emacs/undo'
ble-bind -m emacs -f 'C-DEL' 'emacs/undo'
ble-bind -m emacs -f 'C-BS' 'emacs/undo'
# Control Backspace (FreeBSD console, Minix console, lxterminal, termit, Poderosa)
ble-bind -m emacs -f 'C-?' 'emacs/undo'
ble-bind -m emacs -f 'C-DEL' 'emacs/undo'
ble-bind -m emacs -f 'C-BS' 'emacs/undo'
# Control Backspace (VSCode terminal)
ble-bind -m emacs -f 'C-w' 'emacs/undo'
ble-bind -m emacs -f 'C-DEL' 'emacs/undo'
ble-bind -m emacs -f 'C-BS' 'emacs/undo'
# Control Backspace (contra)
ble-bind -m emacs -f 'C-_' 'emacs/undo'
ble-bind -m emacs -f 'C-DEL' 'emacs/undo'
ble-bind -m emacs -f 'C-BS' 'emacs/undo'
Escape キー (C-[/ESC) に対して束縛を行う場合には、§3.5 も御参照下さい。
ble.sh
ではユーザの入力操作に対する処理は全て編集関数 (widget) を実行する事によって実施されます。
各編集関数には名前があり、ble/widget/編集関数名
というシェル関数として実装されます。
個別の編集関数については後の関連する項目の中で説明します。
新しい編集関数の開発方法は "編集関数の作成" を参照して下さい。
キーマップとはどのキー入力 kspecs に対してどの編集関数が呼ばれるかを設定する表で、モード毎にキーマップが存在します。 各キーマップには名前が存在し、名前はCの識別子と同じ形式でなければなりません。 以下は基本的なキーマップの一覧です。
キーマップ名 | 説明 | ロードフック |
---|---|---|
emacs |
(Emacs 編集モード) 基底キーマップ | hook:keymap_emacs_load |
vi_imap |
(Vim 編集モード) 基底キーマップ (挿入モード) | hook:keymap_vi_load |
vi_nmap |
(Vim 編集モード) ノーマルモードのキーマップ | hook:keymap_vi_load |
vi_omap |
(Vim 編集モード) オペレータ待機モードのキーマップ | hook:keymap_vi_load |
vi_xmap |
(Vim 編集モード) ビジュアルモードのキーマップ | hook:keymap_vi_load |
vi_smap |
(Vim 編集モード) 選択モードのキーマップ | hook:keymap_vi_load |
vi_cmap |
(Vim 編集モード) コマンドモードのキーマップ | hook:keymap_vi_load |
vi_digraph |
(Vim 編集モード) ダイグラフ入力用のキーマップ | hook:keymap_vi_load |
safe |
異常時の基底キーマップ | |
isearch |
インクリメンタルサーチのキーマップ | |
nsearch |
非インクリメンタルサーチのキーマップ | |
read |
ble.sh の提供する read -e のキーマップ |
|
lastarg |
insert-last-argument で用いられるキーマップ |
|
auto_complete |
自動補完で用いられるキーマップ | hook:complete_load |
menu_complete |
メニュー補完で用いられるキーマップ | hook:complete_load |
dabbrev |
動的略語展開で用いられるキーマップ | hook:complete_load |
上の表でロードフックが指定されているキーマップは初期化が遅延されます。
それらのキーマップに対する操作 (後述の ble-bind
による操作) も自動的に遅延されます。
(ble-0.3 以前では操作の遅延は行われず、キーマップに対する操作を行うとその場でキーマップが初期化されます。)
キーマップに対する操作を直接記述することも可能ですが、
ロードフックを通して記述することも可能です。
# 例1: 直接記述
ble-bind -m vi_imap -f 'C-^' 'bell'
ble-bind -m vi_omap -f 'a' 'vi-command/text-object-outer'
# 例2: ロードフック経由で記述
# Vim 編集モード初期化用のシェル関数を作成します。
function my-keymap-settings-for-vim-mode {
ble-bind -m vi_imap -f 'C-^' 'bell'
ble-bind -m vi_omap -f 'a' 'vi-command/text-object-outer'
}
# 作成した関数を keymap_vi_load に登録(追加)します。
blehook/eval-after-load keymap_vi my-keymap-settings-for-vim-mode
# ble-0.3以前
# ble/array#push _ble_keymap_vi_load_hook my-keymap-settings-for-vim-mode
特別な kspecs として以下の物が利用できます。 これらは特別な状況で呼び出される編集関数を設定するのに使います。
keyname | 編集関数が呼び出される状況 |
---|---|
__defchar__ | 他に束縛のない文字入力があった時 |
__default__ | 他に束縛のない文字入力・キー入力があった時 |
__batch_char__ | 他に束縛のない文字入力が連続してあった時 |
__before_widget__ | そのキーマップで編集関数を呼び出す前 |
__after_widget__ | そのキーマップで編集関数を呼び出した後 |
__attach__ | そのキーマップが基底になった時 |
__detach__ | そのキーマップが基底でなくなった時 |
但し、束縛がない文字が __defchar__ で処理された場合は、 その文字に対して __default__ は呼び出されません。 __before_widget__, __after_widget__ は、 これらの束縛自体によって呼び出される編集関数の前後には適用されません。
3.4 関数 ble-bind
†
ble-bind [-m keymap] -f kspecs widget
キー列指定子 kspecs
が入力された時に呼び出される編集関数として widget
を登録します。
この事を「kspecs
を widget
に束縛する」と表現します。
keymap
はキーマップを指定します。
省略した場合はその時の編集モードの基底キーマップに対して束縛が実行されます。
ble-bind [-m keymap] -x kspecs shell-command
# 互換性: ble-0.2 以前では以下の形式で束縛します
ble-bind [-m keymap] -xf kspecs shell-command # ble-0.2
kspecs
をユーザ定義編集関数 shell-command
に束縛します。
ユーザ定義編集関数は Bash の bash -x 'kseq: shell-command'
で使えるものと同様に実装します。
つまり、ble.sh
は READLINE_LINE
に現在の編集文字列を設定し、
READLINE_POINT
に現在のカーソル位置を設定して、ユーザ定義編集関数を呼び出します。
ユーザ定義編集関数の呼び出し後の READLINE_LINE
と READLINE_POINT
の値を用いて、
現在の編集内容を更新します。
ble-bind [-m keymap] -c kspecs shell-command
# 互換性: ble-0.2 以前では以下の形式で束縛します
ble-bind [-m keymap] -cf kspecs shell-command # ble-0.2
kspecs
を外部コマンド shell-command
に束縛します。
一旦、入力を中断して外部コマンド shell-command
を呼び出し、
外部コマンドが終了した後に再び入力を再開します。
ble-bind [-m keymap] -s kspecs keyseq
# 互換性: ble-0.3 以降で利用可能
keyseq
には Bash 組み込みの bind
で使用する keyseq
の形式で指定します。
ble-bind [-m keymap] [-fxc] kspecs ''
ble-bind [-m keymap] [-fxc] kspecs -
束縛を削除する場合は編集関数名・コマンド名として -
または空文字列を指定します。
-f
, -x
, -c
の何れを用いても、
束縛されている関数・コマンドの種類によらず削除を実行します。
# タイムアウトの設定
ble-bind [-m keymap] -T kspecs timeout
# タイムアウトの削除
ble-bind [-m keymap] -T kspecs ''
指定した kspecs に対するタイムアウトを設定します。 kspecs が入力された時に未だ一意確定でなく更にその kspecs にタイムアウトが設定されている場合、 指定したタイムアウトが経過しても続きの入力がない時にその時点で kspecs を処理します。
これは文字の列からキーの列にデコードする時に参照される設定です。
ble-bind --csi Ft kspec
ble-bind --csi Ps~ kspec
Ft
または Ps~
は CSI に引き続いて受信される文字列です。
Ft
は Ft 文字 (@
- ~
の文字) 1つです。
Ps~
は Ps (整数) にチルダ ~
を繋げた文字列です。
登録されたシーケンスとそれを Function キー修飾したものを、
それぞれ kspec
及びそれを修飾したものにデコードする様に設定します。
# 例
ble-bind --csi A up
ble-bind --csi '11~' f1
これは文字の列からキーの列にデコードする時に参照される設定です。
ble-bind -k kspecs kspec
文字の列 kspecs
をキー kspec
にデコードする様に設定します。
# 例
ble-bind -k 'ESC O A' up
3.4.9 キーマップのカーソルの設定†
そのキーマップが有効になっている時のカーソル形状を設定できます。
ble-bind -m KEYMAP --cursor CODE
CODE
には DECSCUSR コードを指定します。
空文字列を指定した場合、呼び出し元キーマップのカーソル形状を継承します。
実際にカーソル形状を変更するには端末は制御機能 DECSCUSR に対応している必要があります。
ble.sh
は terminfo 項目 Ss
を参照します。
お使いの端末が実際に DECSCUSR に対応しているのにも拘わらず Ss
が terminfo に含まれていない場合には、以下の様に直接 ble.sh
の端末データベースを上書きできます。
# 例: blerc
_ble_term_Ss=$'\e[@1 q'
コード 0
は端末の既定のカーソル形状を意味します。
端末マルチプレクサをお使いの場合は、端末マルチプレクサと外側の端末の既定のカーソル形状が矛盾しないようにする必要があります。
例えば tmux
はそれ自体が既定のカーソル形状を持っている為、外側の端末と衝突が起こる可能性があります。
tmux
の既定のカーソル形状は VT 端末と同様に点滅するブロック 1
です。
tmux-3.4
以降では既定のカーソル形状をオプション cursor-style
を通じて変更できます:
# ~/.tmux.conf (必要条件 tmux >= 3.4)
# 例
set -g cursor-style blinking-block # 外側の端末の既定のカーソル形状が 1 の時
set -g cursor-style block # 外側の端末の既定のカーソル形状が 2 の時
set -g cursor-style blinking-underline # 外側の端末の既定のカーソル形状が 3 の時
set -g cursor-style underline # 外側の端末の既定のカーソル形状が 4 の時
set -g cursor-style blinking-bar # 外側の端末の既定のカーソル形状が 5 の時
set -g cursor-style bar # 外側の端末の既定のカーソル形状が 6 の時
tmux
オプション cursor-style
は実際は tmux-3.3
で導入されましたが、設定が新規ウィンドウに適用されないというバグがある為 tmux-3.4
以降でないと実用にはなりません。
また、set -g cursor-style default
は外側の端末に DECSCUSR(0) を送信して外側の既定カーソル形状を指定するのには使えません。
GNU screen はカーソル形状は保持しない為、何も設定しなくても衝突は起こりません。
ble-bind [-m keymap]... -P # ≧ ble-0.3
ble-bind [-m keymap]... --print # ≧ ble-0.3
# 互換性: ble-0.2 以前では以下の形式で確認します
ble-bind -d # ≦ ble-0.2
指定した keymap
に登録されている束縛を出力します。
keymap
が一つも指定されていない場合は、
現在ロードされている全てのキーマップについて束縛を出力します。
ble-bind [-m keymap]... -D
ble-bind [-m keymap]... --dump # ≧ ble-0.3
-P
の代わりに -D
を使用すると、内部で使用している形式で現在の束縛のデータを出力することができます。
keymap
が一つ以上指定されている時、指定された keymap
のデータを出力します。
keymap
が一つも指定されていない時、現在ロードされている全データを出力します。
ble-bind -L
ble-bind --list-widgets # ≧ ble-0.3
# 互換性: ble-0.2 以前では以下の形式で確認します
ble-bind -L
ble-bind --list-functions # ≦ ble-0.2
現在定義されている編集関数名の一覧を出力します。
3.5 ESC
の受信と解釈†
ESC を受信した直後に次のバイトが受信されずにタイムアウトした時、 その ESC は「単独で受信された」と見なされます。 それ以外の場合は「後続のバイトと一緒に受信された」と見なされます。
後続のバイトと一緒に受信された ESC は、
常に次に受信するキーのメタ修飾 (M-) として解釈されます。
単独で受信された ESC の解釈は、
後述の設定変数 decode_isolated_esc
によって制御します。
タイムアウトの長さは端末からシェルまでの経路の各ステップの累積になります。 仮想端末ハンドラのタイムアウト、端末マルチプレクサーのタイムアウト、 GNU Readline のタイムアウトなどが考えられます。 それぞれのタイムアウトの設定方法は続く節を参照して下さい。 特に単独で ESC または C-[ を入力した時に端末から送信される ESC と、 Meta 修飾によって端末から送信される ESC を区別したい時は、 タイムアウトをできるだけ短く設定します。
stty
コマンドを使用して設定します。
通常は既定のタイムアウトは 0
なので設定を変更する必要はありません。
タイムアウトは以下のコマンドで変更できます。単位は 1/10 秒です。
# 例: ~/.bashrc または ~/.blerc にて
stty time 0
Bash 4.3 以降では、readline 変数 keyseq-timeout
を用いて Readline のタイムアウトを設定できます。
~/.bashrc
で設定を行うには組み込みコマンド bind
を使用します。単位はミリ秒です。
# 例: ~/.bashrc または ~/.blerc にて
bind 'set keyseq-timeout 1'
3.5.3 端末マルチプレクサ screen
のタイムアウトの設定 (~/.screenrc
)†
端末マルチプレクサ GNU Screen (screen
) を利用している場合は、
screen
のタイムアウトも設定する必要があります。
~/.screenrc
に以下の設定を記述することでタイムアウトを設定できます。
単位はミリ秒です。
# 例: ~/.screenrc にて
maptimeout 1
また、bindkey -t
によって ESC から始まるキーシーケンスを登録している場合は、
タイムアウトが無効化される事に注意が必要です。
この時 screen
は必ず後続のバイトを待つため、
ble.sh
は必ず後続のバイトと一緒に ESC を受信することになります。
単独の ESC を区別して受信したい時は bindkey -t
によって
ESC から始まるキーシーケンスを登録するべきではありません。
3.5.4 端末マルチプレクサ tmux
のタイムアウトの設定 (~/.tmux.conf
)†
端末マルチプレクサ tmux
を利用している場合も、
同様にタイムアウトを設定する必要があります。
~/.tmux.conf
に次の設定を記述します。単位はミリ秒です。
# 例: ~/.tmux.conf にて
set -sg escape-time 1
3.5.5 設定変数 decode_isolated_esc
(v0.2)†
# 既定値
bleopt decode_isolated_esc=auto
この設定変数に esc
が設定されている場合、
単独で受信した ESC を C-[ として解釈します。
meta
が設定されている場合、
単独で受信した ESC は次に受信するキーの Meta 修飾 (M-) として解釈します。
auto
が設定されている場合、
現在有効なキー列の途中ではなくかつ現在のキーマップで C-[ が束縛されている時に
単独で受信した ESC を C-[ として解釈し、それ以外の時に Meta 修飾 M- として解釈します。
キーボードに Meta 修飾キーがなく ESC に続けてキーを入力することで
Meta 修飾の代わりとしているユーザは meta
を設定して下さい。
Meta 修飾キーを押しながら入力したキーと
ESC または C-[ を単独で入力した時で振る舞いを変えたいユーザは esc
または auto
を設定して下さい。
3.6 modifyOtherKeys
の設定†
ble.sh
では様々なキー操作を区別する為に、
端末の modifyOtherKeys
機能を操作します。
端末が対応している場合、modifyOtherKeys
には3つの状態があります。
状態 0
は通常の状態で、様々なキー入力はそのまま端末から送信されます。
状態 1
は修飾キーと一緒に通常の文字を入力した時に、
修飾が判別できるように特別なシーケンスとして端末から送信されます。
状態 2
は RET キーや TAB キーも含めて、
全ての入力が修飾の状態を持った特別なシーケンスとして端末から送信されます。
ble.sh
は端末の modifyOtherKeys
を変更するために制御シーケンスを端末に送信します。
状態 0
にする時は CSI > 4 m を、
状態 1
にする時は CSI > 4 ; 1 m を、
状態 2
にする時は CSI > 4 ; 2 m を送信します。
tmux
で modifyOtherKeys
を利用できるようにするには以下の設定を ~/.tmux.conf
に指定してください。
設定を反映させるためには全ての既存セッションを一旦終了する必要があるかもしれません。
# ~/.tmux.conf
set -g extended-keys on
以下に説明する設定変数を用いて、ble.sh
がキー入力を待つ時の modifyOtherKeys
の状態と、
それ以外 (コマンド実行時など) の modifyOtherKeys
の状態をそれぞれ設定することができます。
3.6.1 設定変数 term_modifyOtherKeys_internal
(空/非空) (v0.3)†
# 既定値
bleopt term_modifyOtherKeys_internal=auto
ble.sh
がキー入力を待つ状態に入る時に、端末の modifyOtherKeys
をどう変更するかを設定します。
この設定変数に 0
または 1
または 2
が設定されている場合、その状態に変更します。
この設定変数に auto
が設定されている場合、
端末の DA2 応答が 1;
で始まっている場合を除いて状態 2
にします。
DA2 応答が 1;
で始まっている場合は、
制御シーケンスに対応していない libvte
の可能性があるので状態を変更しません (制御シーケンスは送りません)。
それ以外の値が設定されている場合、状態を変更しません (制御シーケンスは送りません)。
3.6.2 設定変数 term_modifyOtherKeys_external
(空/非空) (v0.3)†
# 既定値
bleopt term_modifyOtherKeys_external=auto
コマンド実行時など ble.sh
以外がキー入力を受け取る可能性がある状態に入る時に、
端末の modifyOtherKeys
をどう変更するかを設定します。
この設定変数に 0
または 1
または 2
が設定されている場合、その状態に変更します。
この設定変数に auto
が設定されている場合、
term_modifyOtherKeys_internal
と同様に、
端末の DA2 応答が 1;
で始まっている場合を除いて状態 1
にします。
それ以外の値が設定されている場合、状態を変更しません (制御シーケンスは送りません)。
3.6.3 設定変数 term_modifyOtherKeys_passthrough_kitty_protocol
(空/非空) (v0.4)†
# 既定値
bleopt term_modifyOtherKeys_passthrough_kitty_protocol=
この設定は、一番外側の端末が kitty の時に、kitty keyboard protocol の制御シーケンスを端末マルチプレクサ越しに送信するかどうかを指定します。 非空文字列が指定されている時にマルチプレクサ越しの送信が有効化されます。
-
この設定は特に tmux 3.4+ と組み合わせて使う事が想定されています。 CapsLock または NumLock が有効化されていない限りは tmux 3.3a 以下でもご利用いただけます。 また、この設定を有効化した場合、tmux からデタッチ後にキーボード入力に以下の問題が生じる可能性がありますのでご注意下さい。 拡張キーシーケンスに対応していない端末アプリケーションを操作できなくなる可能性があります。
-
GNU screen と組み合わせて使った場合、高い確率で問題が生じます。 2つ以上の window が screen にあってその内の一つで ble.sh が前面で動作している時または2つ以上の window で ble.sh が動作している時、 拡張キーシーケンスに対応していない端末アプリケーションを操作できなくなります。
3.6.4 modifyOtherKeys
に対応していない端末での設定†
modifyOtherKeys
に対応していない端末でも ble.sh
は問題なくお使いいただけます。
但し、C-1 や C-S-a や S-TAB や C-RET
などの特別な組み合わせのキーを端末から送信できないという端末側の制限があります。
もし、お使いの端末が各キーの組み合わせに対して一つ一つシーケンスを設定できる場合には、
お好みのキーの組み合わせに対してシーケンス ESC [ code ; mod u を送信するように設定して下さい。
但し、code は文字の Unicode 値を十進整数で表現したものです。
mod は 1 + 各修飾の値の和
を十進整数で表現したものです。
各修飾の値は以下の通りです。
修飾 | 修飾の値 |
---|---|
S- | 1 |
M- | 2 |
C- | 4 |
s- | 8 |
H- | 16 |
A- | 32 |
具体例を以下に示します。
キー入力 | 端末が送信するシーケンス | キー入力 | 端末が送信するシーケンス |
---|---|---|---|
S-RET | ESC [ 1 3 ; 2 u | C-0 | ESC [ 4 8 ; 5 u |
C-RET | ESC [ 1 3 ; 5 u | C-1 | ESC [ 4 9 ; 5 u |
C-S-RET | ESC [ 1 3 ; 6 u | C-2 | ESC [ 5 0 ; 5 u |
S-TAB | ESC [ 9 ; 2 u | C-3 | ESC [ 5 1 ; 5 u |
C-TAB | ESC [ 9 ; 5 u | C-4 | ESC [ 5 2 ; 5 u |
C-S-TAB | ESC [ 9 ; 6 u | C-5 | ESC [ 5 3 ; 5 u |
S-SP | ESC [ 3 2 ; 2 u | C-6 | ESC [ 5 4 ; 5 u |
C-S-SP | ESC [ 3 2 ; 6 u | C-7 | ESC [ 5 5 ; 5 u |
S-BS | ESC [ 8 ; 2 u | C-8 | ESC [ 5 6 ; 5 u |
C-S-BS | ESC [ 8 ; 6 u | C-9 | ESC [ 5 7 ; 5 u |
C-S-a | ESC [ 9 7 ; 6 u | C-S-z | ESC [ 1 2 2 ; 6 u |
以下の Function キー修飾については殆どの端末が対応している筈ですが、もしそうでない場合は一つ一つ設定します。 insert と delete と prior については端末の種類 (xterm系またはvt100系) によってシーケンスが異なります。 現代の端末は基本的にxterm系です。
キー入力 | 端末が送信するシーケンス | キー入力 | 端末が送信するシーケンス | キー入力 | 端末が送信するシーケンス |
---|---|---|---|---|---|
S-up | ESC [ 1 ; 2 A | C-up | ESC [ 1 ; 5 A | C-S-up | ESC [ 1 ; 6 A |
S-down | ESC [ 1 ; 2 B | C-down | ESC [ 1 ; 5 B | C-S-down | ESC [ 1 ; 6 B |
S-right | ESC [ 1 ; 2 C | C-right | ESC [ 1 ; 5 C | C-S-right | ESC [ 1 ; 6 C |
S-left | ESC [ 1 ; 2 D | C-left | ESC [ 1 ; 5 D | C-S-left | ESC [ 1 ; 6 D |
S-home | ESC [ 1 ; 2 H | C-home | ESC [ 1 ; 5 H | C-S-home | ESC [ 1 ; 6 H |
S-end | ESC [ 1 ; 2 F | C-end | ESC [ 1 ; 5 F | C-S-end | ESC [ 1 ; 6 F |
S-insert (xterm系) | ESC [ 2 ; 2 ~ | C-insert | ESC [ 2 ; 5 ~ | C-S-insert | ESC [ 2 ; 6 ~ |
S-delete (xterm系) | ESC [ 3 ; 2 ~ | C-delete | ESC [ 3 ; 5 ~ | C-S-delete | ESC [ 3 ; 6 ~ |
S-prior (xterm系) | ESC [ 5 ; 2 ~ | C-prior | ESC [ 5 ; 5 ~ | C-S-prior | ESC [ 5 ; 6 ~ |
S-insert (vt100系) | ESC [ 1 ; 2 ~ | C-insert | ESC [ 1 ; 5 ~ | C-S-insert | ESC [ 1 ; 6 ~ |
S-delete (vt100系) | ESC [ 4 ; 2 ~ | C-delete | ESC [ 4 ; 5 ~ | C-S-delete | ESC [ 4 ; 6 ~ |
S-prior (vt100系) | ESC [ 3 ; 2 ~ | C-prior | ESC [ 3 ; 5 ~ | C-S-prior | ESC [ 3 ; 6 ~ |
S-next | ESC [ 6 ; 2 ~ | C-next | ESC [ 6 ; 5 ~ | C-S-next | ESC [ 6 ; 6 ~ |
3.7.1 設定変数 decode_abort_char
(整数値) (v0.3)†
# 既定値
bleopt decode_abort_char=28
この変数は大量の入力を処理している時にそれを中断する為に使う入力のバイト値を指定します。
既定で C-\ に対応する 28
が設定されています。
3.7.2 設定変数 decode_error_char_abell
(空/非空)†
# 既定値
bleopt decode_error_char_abell= # ble-0.2以降
bleopt error_char_abell= # ble-0.1
この設定変数に非空文字列が設定されている場合、 不正に符号化された文字を受け取った時にベルを鳴らします (BEL を送信します)。
3.7.3 設定変数 decode_error_char_vbell
(空/非空)†
# 既定値
bleopt decode_error_char_vbell=1 # ble-0.2以降
bleopt error_char_vbell=1 # ble-0.1
この設定変数に非空文字列が設定されている場合、 不正に符号化された文字を受け取った時にビジュアルベルを表示します。
3.7.4 設定変数 decode_error_char_discard
(空/非空)†
# 既定値
bleopt decode_error_char_discard= # ble-0.2以降
bleopt error_char_discard= # ble-0.1
この設定変数に非空文字列が設定されている場合、 不正に符号化された文字を受信した文字の列から除去します。 空文字列が設定されている場合は、 エラーを無視して復元された文字を続く処理に渡します。
3.7.5 設定変数 decode_error_cseq_abell
(空/非空) (v0.3)†
# 既定値
bleopt decode_error_cseq_abell=
この設定変数に非空文字列が設定されている場合、 認識できない CSI シーケンスを受け取った時にベルを鳴らします (BEL を送信します)。
3.7.6 設定変数 decode_error_cseq_vbell
(空/非空) (v0.3)†
# 既定値
bleopt decode_error_cseq_vbell=1
この設定変数に非空文字列が設定されている場合、 認識できない CSI シーケンスを受け取った時にビジュアルベルを表示します。
3.7.7 設定変数 decode_error_cseq_discard
(空/非空) (v0.3)†
# 既定値
bleopt decode_error_cseq_discard=
この設定変数に非空文字列が設定されている場合、 認識できない CSI シーケンスを無視します。 空文字列が設定されている場合は、 改めて CSI シーケンスを構成する一つ一つの文字を解釈します。
3.7.8 設定変数 decode_error_kseq_abell
(空/非空)†
# 既定値
bleopt decode_error_kseq_abell=1 # ble-0.2以降
bleopt error_kseq_abell=1 # ble-0.1
この設定変数に非空文字列が設定されている場合、 受信したキー列に対応する束縛が存在しない時にベルを鳴らします (BEL を送信します)。
3.7.9 設定変数 decode_error_kseq_vbell
(空/非空)†
# 既定値
bleopt decode_error_kseq_vbell=1 # ble-0.2以降
bleopt error_kseq_vbell=1 # ble-0.1
この設定変数に非空文字列が設定されている場合、 受信したキー列に対応する束縛が存在しない時にビジュアルベルを表示します。
3.7.10 設定変数 decode_error_kseq_discard
(空/非空)†
# 既定値
bleopt decode_error_kseq_discard=1 # ble-0.2以降
bleopt error_kseq_discard=1 # ble-0.1
この設定変数に非空文字列が設定されている場合、 受信したキー列に対応する束縛が存在しない時にそれまで読み取った全てのキーを廃棄します。 空文字列が設定されている場合は、 最初のキーだけを除去して2つ目以降のキーから再解釈します。
3.7.11 設定変数 decode_macro_limit
(算術式) (v0.4)†
# 既定値
bleopt decode_macro_limit=1024
キーボードマクロの再帰実行回数の上限を指定します。
3.7.12 設定変数 default_keymap
†
# 既定値
bleopt default_keymap=auto
この設定変数は既定の編集モードを設定します。
値 auto
は、Bash の編集モードに応じて切り替えることを意味します。
Bash が Emacs 編集モード (set -o emacs
既定) の時、ble.sh
の Emacs 編集モードが有効になります。
Bash が Vi 編集モード (set -o vi
) の時、ble.sh
の Vim 編集モードが有効になります。
値 emacs
を指定した時は、Bash の編集モードによらずに、常に ble.sh
の Emacs 編集モードを使用します。
値 vi
を指定した時は、常に ble.sh
の Vim 編集モードを使用します。
3.7.13 設定変数 term_bracketed_paste_mode
(空/非空) (v0.4)†
# bashrc
# 既定値
bleopt term_bracketed_paste_mode=on
bind 'set enable-bracketed-paste on'
非空文字列が指定されている場合、端末の Bracketed Paste Mode (DEC mode 2004) を有効にします。
Readline 変数 enable-bracketed-paste
と同期されます。
[ 日本語 | English ] ≫ 説明書 [§1 基本 | §2 描画 | §3 束縛 | §4 編集 | §5 Emacs | §6 Vim | §7 補完 | §8 他 | 索引]