2016-08-17 9 views
2

私はのリモートクライアントを実装して、ncを通してLinuxに接続し、bashを開始したいと考えています。だから、bashに、私が送ったstdoutからどのような機能を解析できるのか、どのように鍵コードやその他のものをそのstdinに送信するのかを伝える必要があります。TERM = dumb端末のための必須の機能

これは、TERM=something環境変数で行われます。これは、ある値に設定する必要があります。私はそれを設定しない場合、その後、様々なプログラムが文句を開始します。

$ mc 
The TERM environment variable is unset! 

私は私のクライアントは本当に限られていると言うことdumbにTERMを設定できることがわかりました。それでも私は何かが足りないと思われます。

は、ここからは、これら二つの能力を持っていないdumbの端末のように見えますが、何の能力、まだ持っていると予想されますか?それについての仕様やデファクトスタンダードはありますか?

+0

文字通りことです。あなたが送る文字を吐き出すだけで、キャリッジリターンとスペースを出力する以外の位置決め機能はありません。移動するための "カーソル"がないので、基本的に何かが変わるたびに画面全体を印刷することなく、複雑なインターフェースを印刷することはできません。そして、これは不平を言うbashではないことに注意してください、これはmcです。適切な端末が必要です。ダミーの代わりにvt100などを試してみてください。 –

+0

@MarcB、ああ、私は 'vt100'を確実に実装することはできません。私の'ダム 'の実装が'ダム '端末から期待どおりに動作することを確認したいだけです。たとえば、Linux上の私の標準端末が、最後の行の最後の列に文字が印刷されると、自動的にスクロールしないことに気付きました。 –

+0

次の行に折り返すために追加の文字を印刷するときは、これを行うだけです。 –

答えて

2

がに行きますソースが助けることができます。ターミナルデータベースにはコメントがあります。ここでslice from that

#### Specials 
# 
# Special "terminals". These are used to label tty lines when you don't 
# know what kind of terminal is on it. The characteristics of an unknown 
# terminal are the lowest common denominator - they look about like a ti 700. 
# 

dumb|80-column dumb tty, 
     am, 
     cols#80, 
     bel=^G, cr=^M, cud1=^J, ind=^J, 
unknown|unknown terminal type, 
     gn, use=dumb, 

「ダム」と「不明」の端末タイプが想定されますが、ほとんど使用しない:

  • 「ダム」があるautomargins(テキスト「ラップ」を右マージンで)は、80列と、ASCII BELとキャリッジリターンを持つものとします。何かが欠けているため、cud1(カーソルが下がる)はASCII改行文字です。 ind(index)の値は同じで、画面の下部に達するとテキストが上にスクロールします。

    カーソルアドレッシング(cup)も、代替(行または列に沿って任意に移動するなど)もありません。

  • "unknown"は "generic"フラグを追加します。このフラグはcursesアプリケーションでは使用できないとマークします。それをプリンタと考えてください。実際には、個々のアプリケーションに依存最小要件、については

。 ncursesは実際にcupを持たずに画面を移動することができます。それは半ダースの戦略で動作します。 mvcurのソースを読んだら、必要なものを知ることができます。

しかし、mcのようなアプリケーションは、ncursesが動作するかどうかを判断するために単純に依存しているわけではありません。この場合、(この場合は)スラングとリンクしている可能性があります。したがって、mcは独自のチェックを行い、制限が追加される可能性があります。

実際には、「ダム」などの限定された端末の説明を選択しない限り、あなたが遭遇する可能性が高い端末のほとんどが動作します。

さらにリーディング:ダム(mvcur含む)

+0

だから、 '^ G'はバイト0x07なので、受信時にビープ音が出るはずですか? '^ M 'は' \ r'である0x0Dであり、 '^ J'は実際に' \ n'であるので、リモートから0x0Dを送ると、クライアントは行頭にカーソルを戻さなければなりません。 –

+0

はい - しかし、キャリッジリターンは '^ M^J'に(端末自体ではなく)ターミナルドライバによって(通常は)翻訳される可能性があります。端末記述は、*端末*が何を行うことができるかを示します。 –

2

情報のあなたの最もよい資料源は簡単にinfocmpツールで表示terminfoエントリ、次のようになります。

infocmp dumb 
#  Reconstructed via infocmp from file: /lib/terminfo/d/dumb 
dumb|80-column dumb tty, 
     am, 
     cols#80, 
     bel=^G, cr=^M, cud1=^J, ind=^J, 

それはかなり明確ダム端末が非常に限られていることになります...

+0

ありがとうございます。今、私は最近のLinuxのman terminfo' 'のフラグ.. =) –

+0

は、いくつかの説明と機能の素敵なリストは、少なくとも十分で何が起こっているか復号化するために、があることを解読する必要があります。 – fvu

+0

これらの説明をオンラインで入手することは、素晴らしいことです。 –

関連する問題