zsh はターミナルに標準モードを使用しますか?

zsh はターミナルに標準モードを使用しますか?

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)。

zshreadline ライブラリを使用する他のプログラムと同様に動作するオプションは見つかりませんでしたbashが、コマンドを実行する前に icanon モードをオフにしたい場合は、同じコマンド ラインから stty を呼び出すことでオフにできます。

zsh$ stty -icanon; cat
hheelloo

関連情報