追加読書

追加読書

ここに質問してください:

この変更を実際に実装するには、どのライブラリ/プログラムを調べる必要がありますか? 「ターミナルスタック」のどの部分がターミナルバッファに新しい行を追加する役割を担っていますか?

私はそれがターミナルソースにあると思いました、そしてそれからシェルにいると思いましたが、今はVTEになると思いますか?

どんなアドバイス?

答え1

端末エミュレータは異なる方法で実装されます。変更する必要があるのは、変更する端末エミュレータによって異なります。

通常、これは2つの場所で達成できます。シミュレーション部分では、印刷および制御シーケンスが端末の表示状態に対するメモリ表現のいくつかの形態に対する修正として解釈され、実装部分では対応する表示状態がレンダリングされる。一種の出力装置で。

前者は非常に複雑な仕事になります。フルスクリーンのテキストユーザーインターフェースを提供するソフトウェアであれ、編集可能な行だけを提供するソフトウェアであれ、アプリケーションソフトウェアは進行方向。彼らは、、、、、、、、、、、、、、、、、、、、、などの方向など、あらゆる種類のものを想定しています。 (理論的には、ECMA-48:1991互換デバイスでは、行の移動方向と暗黙の移動方向を切り替えることができます。私の知る限り、UnixやLinux端末エミュレータは実際にこれを実装していません。世界最大のMostはこれが前提として機能します最終的に人々が後者のアプローチを難​​しく実装すると、さまざまな結果と波及効果があると思います。RIINDCUDCUU

後者が比較的簡単な作業だからです。ただ楽しさで端末エミュレータに実装しました。 2つの実装者のブールフラグのコマンドラインスイッチと複数の場所で座標変換を実行するいくつかの条件式。もちろん、表示される実装ウィンドウは常にこれらの実装者の文字単位のサイズの整数倍であるため、追加の複雑さを回避できます。

言い換えれば、それを使用し、長年にわたって上から下に読んでいる習慣と戦って経験します。初期の小さなことを期待するアプリケーションの問題(貧しい人のカラットなど)戻る矢印とチルダは貧しい人のための下線です。その後、マニュアルページに警告の説明を追加しました。私は人々が今から実際に端末でそれを試してみて、実際にそうするという結論に到達できるように、次のバージョンまでそのメカニズムを維持するつもりです。いいえ彼らが何を言っても、結局彼らはまだこれを望んでいます。 ☺

追加読書

答え2

何ですか精密達成したい行動は何ですか?

まず、あなたが欲しいと仮定しますみんな行の順序が逆になりましたいつも

私の考えでは、ほとんどの場合、これは非常に珍しく直感に反する(完全に壊れていなくても)動作が発生し、非常に迅速に使用を放棄することになります。

catテキストファイルを編集すると、通常、テキストを読む方向ではなく、下から上に行が表示されます。お気に入りのテキストエディタやビューアでも行が反転します。アプリでは、トップバーが下部にあり、下部バーが上部にあります。 alsamixerでは、ボリュームコントロールは上部に依存します。ブロックダイアグラム文字(alsamixer、Midnight Commanderなど)は角に広がります。多くのアプリケーションでは、上下のキーはカーソルを反対方向に移動します。

これは、お気に入りの端末エミュレータ(またはGNOME端末などのVTEベースのエミュレータを使用している場合はVTE)のソースコードを変更することによって行うことができます。

デフォルトでは、ターミナルエミュレータは論理コンテンツ(文字セルにグラフィックプロパティを含む文字が含まれています)を追跡し、それをユーザーが見ることができるピクセル(美しいレンダリングされた文字の外観)に変換します。これを逆さまに反転しなければなりません。文字ベースの座標とピクセルベースの座標との間の変換が発生する位置、つまりセルの高さの乗算または除算が発生する位置を探します。この式は調整する必要があります。たとえば、表示されている場合、またはこれに似ている可能性がy_pixel = top_padding + row * cell_heightあります。y_pixel = top_padding + (number_of_rows - 1 - row) * cell_height

VTEでは、非常にスムーズなスクロール(タッチパッドを使用したピクセルごとのスクロール)とスムーズなスクロール時に、追加の下部パディング(ウィンドウの最大化など、グリッドに整列していない状況)で、次のようにコンテンツを埋めます。追加の頭痛。

デフォルトのレンダリングが完了したら、選択項目のマウスイベントを追跡するのと同じように、アプリケーションに送信されたマウスイベントが正しく反転していることを確認する必要があります。スクロールバーも反転する必要があります。

2番目のステップでは、メニュー項目を追加したり、標準アクションと反転アクションを切り替えたりするための新しいカスタムエスケープシーケンス(おそらく新しいDEC個人番号)を導入できます。モードを変更すると、すべてのもの(すべての画面コンテンツと履歴)がすぐに反転または反転します。元の動作を復元できることは非常に便利です。特に、好みのエディタの前のラッパースクリプトで自動的に実行できる場合はさらにそうです。 VTE および VTE ベースのエミュレータの場合、グラフィックメニュー項目には 2 つのコンポーネント間に新しい API が必要なので、これがエスケープシーケンスを使用するもう 1 つの理由です。

各コマンドの出力は「通常」の順序で出てきますが、コマンドの順序が「逆」になるなど、より細かい操作が必要な場合は、より複雑になり、エミュレータから直接実行することはできません。はい、リバースの論理部分を知るには、新しく設計されたエスケープシーケンスを介して助けが必要です。私の個人的なアドバイスは忘れてしまうということです。私はそれが実現可能だとは思わない。

関連情報