ターミナルエミュレータの現在の行を中央に表示する

ターミナルエミュレータの現在の行を中央に表示する

私が本当に気に入っているemacs バッファの機能 ( 、 、 も) の 1 つansi-termshell、現在の行を端末の中央に配置して、画面の上半分に以前の出力の一部が残るようにする の機能です。eshellC-l

標準の (標準の名前が何であるかはわかりませんが) ターミナルでは、C-lが押されると現在の行がウィンドウの上部に移動するようです。現在の行を画面の中央に移動する一般的な方法はありますか? ない場合は、iterm2、ターミナル、または OS X に移植されたターミナル エミュレーターでこれを行う方法はありますか?

答え1

ほとんどの端末エミュレーターはこれを「実行」できますが、多少の作業が必要です。

  • 移動したい行が画面の下部にあるとします。
  • その行を上に移動したい場合は、一番下の行にエスケープ シーケンスを送信して行をスクロール (または「インデックス付け」) し、スクロールする行数だけ (カウントして!) 行を上に移動します。
  • スクロールすると、画面上のすべての行が移動します。スクロール領域を設定することで、移動する行の数を制限できます。これにより、画面の上半分の行が消えないようにすることができます。ただし、行の元の位置と目的地の間の行は消えてしまいます。

これは行を上に移動するだけです。同様に、「逆インデックス」を使用して行を下に移動できます。これらの操作は、標準ECMA-48 ですが、xterm (DEC vt100 ベース) のようなもので、 ansi-termスクロール/インデックス作成をサポートします。

最後に、それは単に上または下です。行を左または右に移動するには、カーソルが行の先頭にあるときに文字を挿入または削除するためのエスケープ シーケンスを送信します。

これらのエスケープ シーケンスはterminfo(5)マニュアル ページに記載されています。私はこれらについて言及しました:

csr(スクロール領域の設定)
ind(インデックス)
rin(逆インデックス)
cup(カーソル位置)
ich(文字の挿入)
dch(文字の削除)

参考文献:

関連情報