
terminfo
とを調べてきましたstty
。 を実行すると、stty -a|grep icanon
標準モードが設定されているように見えますが、 を使用してオフにしstty -icanon
て再度確認すると、まだ設定されていることがわかります。 bash で同じことを実行すると、icanon を無効にすることができますが、動作に変化は見られません。 2 つの質問があります。zsh で icanon を無効にできないのはなぜですか。また、無効にできる場合、動作にどのような影響がありますか。
答え1
bash で同じことを実行すると、icanon を無効にすることができますが、動作に変化は見られません。
これはbashが正規モードをオフユーザーからのコマンドを読み込むとき(端末ドライバでは提供されていない行編集機能(テキストの挿入、矢印キーによるカーソルの左右移動など)を実装できるようにするため)、そして復元する任意のコマンド ラインを実行すると、以前のターミナル設定が保持されます。
その効果を確認するには、次のような外部コマンドを実行しますcat
。
bash$ stty -icanon
bash$ cat
hheelloo
stty echo
各キーは、がオンになっているため 1 回、cat
行が完了するまで待たずに がすぐに読み取って書き戻すため1 回繰り返されます。
[zsh を使用] これをオフにして
stty -icanon
再度確認してみると、まだ設定されていることがわかります。
上記のように以前の端末設定を復元するとzsh
、いくつかの健全なデフォルトecho
(および設定を含むicanon
)。おそらく、コマンドが標準モードを離れると、オフ終了すると、それは単なる事故でした(たとえば、フルスクリーン アプリがクラッシュしたときvi
などless
)。
zsh
readline ライブラリを使用する他のプログラムと同様に動作するオプションは見つかりませんでしたbash
が、コマンドを実行する前に icanon モードをオフにしたい場合は、同じコマンド ラインから stty を呼び出すことでオフにできます。
zsh$ stty -icanon; cat
hheelloo