回答:
セッションの内容は、最初にTUIプログラムを起動したときにすでに上書きされています。それが事実であることがわかります。
ncurses
テキストユーザーインターフェイスを使用するなどのTUIプログラムが起動すると、画面がクリアされます。その時点で、画面上のすべてのものが上書きされています。
不足しているもの、および名前がわからないものは、代替画面バッファーを持つ端末のアイデアです。これらのTUIプログラムが起動すると、エスケープシーケンスを発行して、端末の代替画面バッファー(存在する場合)に切り替えます。その出力はすべて、そのバッファーに送られます。プログラムが終了または一時停止すると、エスケープシーケンスを発行してプライマリスクリーンバッファーを復元します。これは、TUIプログラムがユーザーインターフェースを代替バッファーに表示している間はそのまま残ります。
代替画面バッファを持たない端末の場合、発行するエスケープシーケンスはありません。また、全画面のユーザーインターフェイスは、以前に端末にあったものを上書きします。
プログラムは、これらのエスケープシーケンスをデータベースterminfo
またはtermcap
データベースで検索します。ではterminfo
、世界の端末能力が命名されているsmcup
とrmcup
。ではtermcap
、世界彼らが命名されているti
とte
。文書化されているように、画面バッファについては何も言及していません。
代わりに、「カーソルアドレッシングモード」の開始と終了について話します。概念は、このようなフルスクリーンインターフェイスを表示するTUIプログラムは、カーソルアドレッシングモードで動作しており、プログラムが実際に端末をスクロールする必要がないことです。一方、テキストのスクロール行を出力するだけのTUIプログラムはそうではありません。そのため、このモードに切り替えます。(現実の世界では、物事はそれほど明確ではありません。たとえば、Zシェルなどの最新のシェルは、行編集、メニュー補完、および$RPROMPT
;のためにカーソルを移動しますが、代替画面バッファーに切り替えないでください。本格的なフルスクリーンユーザーインターフェースを備えており、スクロールの観点から操作できます。)
したがって、通常、機能は単にバッファーを切り替えるだけではありません。 smcup
また、現在のカーソル位置を保存するrmcup
ためのエスケープシーケンスと、端末にそのようなエスケープシーケンスがある場合、それを復元するためのエスケープシーケンスも含まれています。
あなたの問題は次の2つのうちの1つです。
termcap
FreeBSDシステムのデータベースには特定の端末タイプのエントリがte
ありませんti
。端末タイプは、サーバー側のTERM
環境変数から取得されます。その値は、データベース内のエントリを示します。そのため、環境変数が、(ローカル)ターミナルエミュレーターの機能と一致する機能を持つエントリーを指定するようにしてください。およびを含む端末エミュレータに一致するエントリがない場合、そのようなエントリを追加する必要があります。termcap
TERM
/etc/termcap
ti
te
ti
なりte
、端末タイプが何であるかに関係なく:setenv TERMCAP ${TERM}:ti@:te@:tc=${TERM}
ti
/ なしの端末で操作するのに慣れているので混乱していたのでte
、その機能を備えた端末に切り替えると、彼がやったのとまったく同じことを言います:「私のセッションは上書きされます」、つまり私のnano / less / vi / whateverセッションは消滅し、以前行っていたものに置き換えられました。スクリーンショットからは、彼が反対の状況について話していたことがわかります。
FreeBSDフォーラムのこの投稿で、何を変更すべきかの例を見つけました。この変更を行った後、マンページの表示またはファイルの編集中に画面に表示されていたものは消去され、コマンドと端末のみが端末に表示されます(bash
)。現在機能しているのは、エディターまたはその他のプロセスでのさまざまなスクロール方法(「2本指スクロール」など)です。
実行中の私にとって見事に機能しているのFreeBSD 11.0-RELEASE-p9
は、4番目の行(te
&を定義ti
)と前のバックスラッシュを、次の用語エイリアスに追加することです/usr/share/misc/termcap
。
xterm-256color|xterm alias 3:\
:Co#256:pa#32767:\
:AB=\E[48;5;%dm:AF=\E[38;5;%dm:tc=xterm-new:\
:te=\E[2J\E[?47l\E8:ti=\E7\E[?47h::tc=xterm-xfree86:
私はmacOSから来ているのでTERM=xterm-256color
、私の2にxterm-256color|xterm alias
2884行目で上記を追加しました。あなたTERM
とあなたのtermcap
ファイルの配置は異なるかもしれません。
次に、termcapを変更した後、次を使用してtermcapデータベースを再構築する必要があります。
cap_mkdb /usr/share/misc/termcap
(これを既存の回答へのコメントとして提供していましたが、50を超える評判はありませんでした。)
roensが指摘したように、FreeBSDはデフォルトのtermcapエントリであるxterm-256colorにte / ti定義を含めません。ただし、画面のクリアを必要とするユーザー向けのtermcapエントリには、これらの定義が含まれています:xterm-clear。
したがって、これを実現する簡単な方法は、TERM
変数を設定することです。
export TERM=xterm-clear
非常に遅い答えですが、私が見た他の多くのソリューション(roensを含む)は必要以上に複雑です(エスケープコードでtermcapファイルを修正し、dbを再コンパイルすることを含むため、.termcap
ファイルを使用して)。
ti
おりte
、彼のTERM
環境変数は適切なエスケープコード/etc/termcap
を設定するエントリを指定ti
しte
ているようです。さまざまなアプリがこれらのコードを出力しており、彼は結果の画面バッファーの切り替えが気に入らない。だから、アドバイスは、エントリを選択することであるべき省略ti
としますte
。(既存のまたはオーバーライド)カスタムエントリが必要な場合は、代わりに編集/etc/termcap
、彼はそれを置くことができる~/.termcap
か、TERMCAP
環境変数。