【メモ】WSLのTab補完時のベル音を含めた警告音の抑止設定

WSLのコンソールを使うようになってからPCの音声をミュートしています。それはコンソールでコマンドなどのTab補完を行っていると、候補を出すたびにベルがなっていたからです。一応以下の設定はしていたので、警告時のベルの抑止はしていました。

.bashrcに設定にベル抑止を追加する方法

# ~/.bashrcの最後に以下を追加
set bell-style none

しかしながら、この設定ではTab補完時のベル音の抑止できていませんでした。

Tab補完時のベル音の抑止

設定は.inputrcの設定で行います。内容は.bashrc同じです。

bashのすべてのベル音を無効化

# ~/.inputrcファイルに追記
echo 'set bell-style none' >> ~/.inputrc

設定反映

以下のコマンドを実行するか新しいコンソール開くと設定が反映されます。

$ bind -f ~/.inputrc

どうしてこの動きになるか

bashは入力時の対話な理にReadlineライブラリを使用しています。ここでいうTab補完時の処理(複数の候補がある場合のベル音を含む)はReadlineライブラリが制御しています。そして、Readlineライブラリの設定を行っているのが.inputrcとなっているため、ベル音の抑止を行うことできたわけです。

WSLならではの別解

WSLを扱うターミナルエミュレータの設定でベル音の設定を変更する方法もあります。

Windows Terminalを使用している場合は、設定【Ctrl+,(カンマ)】から、【プロファイル】>【既定値】>【詳細設定】で【ベル音を有効にする】のチェックでオフにします。

おわりに

ベル音制御は.bashrcと`.inputrc`の2つの設定ファイルが関係していました。

Tab補完時のベル抑止は.bashrcでの設定だけでは不十分で、Readlineライブラリが制御する補完時のベル音まで抑止するには.inputrcの設定が必要です。Windows Terminal自体の設定でも制御可能です。