シェルが画面カーソルを移動する方法(入力矢印キーの移動など)を理解しようとしています。
多くのテストを行いましたが、端末で画面カーソルを移動できるシステムコールが見つかりませんでした。特定の端末拡張を使用してこれを行いますか?それでは、これを達成する方法に関する文書はありますか(xtermなど)。
これはすでに私を狂わせています。これについて私に与えることができる手がかりをいただきありがとうございます。
答え1
そのようなシステムコールまたはシステムコールセットは存在しません。これらの操作はすべてルーチンに従って行われます。
昔は「ターミナル」がケーブルを介してコンピュータに接続された大きくて薄暗いデバイスだったとき、「スマートターミナル」はカーソル移動、線画、多角形を色で塗りつぶすなどの作業を行うことができました。スマート端末は通常、「エスケープシーケンス」を介してこれを行います。プログラムは通常、ASCII 0x1b、「ESC」で始まる特殊なバイト値シーケンスをエクスポートします。これは、カーソル移動、カラーワード、またはテレタイプマシン以外の他の特別な操作をエミュレートするために使用されます。
これが「合意」です。今日、「ターミナル」はほとんど常にビットマップ画面、xterm、rxvtなどの多くのウィンドウの1つです。実行中の「プログラム」からバイトを読み取り、そのバイトを与えられた規則に従って解釈することはxterm(またはrxvtなど)に依存します。私はxtermウィンドウの1つに次のように入力しました。
6 % echo $TERM
xterm
しかし、私はこの場合「vt100」と言った古いxtermを知っています。 「カーソルを移動」するすべてのプログラムは、xtermインスタンス内でカーソルを移動するために「xterm」ルールのエスケープシーケンスを出力する必要があります。
man curses
これにより、man terminfo
より多くの情報を得ることができます。
ポリスチレン
人々はエスケープシーケンスを使用して全体のウィンドウシステムを完成しました。より自己抵抗例えば。
答え2
確認してくださいtput
。ほぼすべての端末エミュレータでサポートされているANSIエスケープシーケンスを囲むラッパーです(サポートの程度はさまざまです)。
tput
端末がサポートしている場合にのみシーケンスが出力されるため、サポートについて心配する必要はありません。または、少なくとも端末に奇妙な文字が印刷されることを心配する必要はありません。 :-)
答え3
これはあなたの質問に正確な答えではないことを知っていますが、呪いライブラリはTuiの開発に必要なものです。プログラマの場合は、そのソースコード(すべてのオープンソースUnixディストリビューションで利用可能)を調べて、これがどのように実行されるのかを確認できます。