フォームフィード "\f" が端末を消去するように tty セッションをどのように構成しますか?

フォームフィード

/dev/ttyACM0のUSBシリアル接続に接続しています。送信者のコードは\f定期的に1文字を送信します。

    print("----------------------------\n\r");
    print("-- LED CONTROLLER 00.01   --\n\r");
    print("----------------------------\n\r");
    print("\n\f");

ただし、cat /dev/ttyACM0コンソールで実行すると、出力が画面の上部から更新されるのではなく、画面の下にスクロールされます。

stty私は(入力を介して)現在の設定を掘り下げ、stty -F /dev/ttyACM0 -a次の出力を提供します。

speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^A; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke

stty --helpページを読むとページフィード遅延(ff0)が発生しますが、他の変更方法は表示されません。私も見つけました。このページこれは、FormFeed文字をこのように設定できますが、FormFeed=014構文が私のsttyバージョン(stty --version与えられたstty (GNU coreutils) 8.5)では機能しないことを示しています。

WindowsのPuttyは正しい動作をしますが、Debian 6では動作に問題があります。端末がクリアされたときにページフィードを解釈するようにsttyを設定する方法を知っている人はいますか?

ベストアンサー1

この問題を解決するためにGNU sedは必要ありません(スクリプトが読みやすくなりますが)。最小スクリプトは次のとおりです(SolarisおよびOSXでテスト済み)。

sed -e 's/^L/^[[H^[[J/g'

ここで、およびは^L改ページおよびエスケープ用^[のテキスト制御文字です。 (エスケープ文字を挿入するには、最初に入力)を使用してファイルに挿入できます。controlLcontrol[vicontrolV

エスケープシーケンスは次の目的で使用されます。

  • カーソルを開始位置に移動^[[Hして
  • 明確なディスプレイ^[[J

いくつかの注意:

  • エスケープで行と列を提供する必要はありません^[[H(とにかく場所は次から始まります)。1、いいえ0)、そして
  • 画面が消えたら今後カーソルを移動するには、2エスケープにaが必要です。たとえば、^[[2Jディスプレイ全体が消去されるためです。デフォルトは、^[[J現在位置からディスプレイの終わりまで内容を消去することです。たとえば、一部の非標準端末では、ansi.sysこれらの区別は行われません。

一部の人々は、^Lbashが画面を消去するためにキーボードショートカットを使用することとPuTTYの説明に混乱しています^Lcontrol/Lを入力しても画面が消えないのはなぜですか?XTerm FAQから)。

追加資料:

おすすめ記事