2017-04-11 3 views
1

私はいくつかのデータソースからのライブアップデートを持つプログラムを作成しようとしています。そして、私はまた、通常の端末のようにユーザーの入力を待っています。今、更新があるたびに、私は内容を印刷して、このようなものを作るの再入力を求めるプロンプトメッセージを出力します:Golangの端末入力を常に下に保持する方法は?

Enter command > 
This is a live update message 

Enter command > 
This is a multi-line li...... 
......ve update message 

Enter command > quit 
Bye bye! 

を問題は、私が受け取ったすべての生きたメッセージのために、私はそれを印刷することで、 「Enter command>」が何度も何度も表示されますが、これは望ましくありません。私はライブアップデートをターミナルのメイン部分で更新したいが、 "Enter command>"は常に最下部にある。

Githubで見つけられる最も近いパッケージはhttps://github.com/gizak/termuiだが、テキスト、ゲージ、グラフを表示します。だから、どうやって始めたらいいのか分かりません。

これを達成するためのtermuiパッケージのパッケージまたは例はありますか?ありがとうございました。

+0

[this](http://tldp.org/HOWTO/Bash-PHPTO-HOWTO/x361.html)を見てください:しかし、端末のデフォルトの動作があなたの期待を満たしていない場合、おそらく別のUI(Web、デスクトップなど)でより良い仕事をすることができますか?ちょっとした考え。 –

答えて

3

github.com/gizak/termuiは正しい方向に向かっています。あなたがいる間

は、私は、ライブアップデートは、端末の主要部分の更新になりたいことを得ることができない理由を常に下

に泊まる「コマンドを入力します>」理解する

の部分が選別され、コンピューティングの歴史に対する少しの遠足が予定されています。 ;-)

事があり、コンピュータが 英数字ディスプレイを先行した時代のオペレータに通信する方法で、デフォルトでは、あなたのTEMINALemulator¹の作品は 発祥モード - 彼らはラインプリンタを使用してその応答を印刷します。今考えてみましょう:ラインプリンタはこのように動作します:それは紙のロールに送られたものを印刷します。出力されたものが出力されました。 新しい出力は、常に物理的に古いものの下に表示されます。

英数字ディスプレイ(画面)は、それらが天然にこのモードをサポートし続け 存在に来たとき: 行テキスト出力は、それが上方にスクロール上にテキストを画面 の下でレンダリングしたします。 これは、エミュレータウィンドウで実行されているシェルのコマンドライン(例えばbashなど)で作業しているときに、通常の端末エミュレータで表示されます。 端末の動作モードは、デフォルトでは、 "正式"または "調理済み"と呼ばれます。そのカラムと 行番号によって識別される -

は、画面上に 個々位置を変更することが可能であったため、より高度なディスプレイを、来ました。 これは、情報がどのように出力されたかというパラダイムを変えました。いわゆる「フルスクリーンアプリケーション」という概念 が生まれました。 これらの典型的な例は、VimやEmacsなどのテキストエディタです。

フルスクリーンのテキスト出力をサポートするために、端末(および端末エミュレータ) は、プロトコルに特定の拡張機能を実装することで変更されました。

全画面アプリケーションが最初に端末が ユーザによる入力が端末上で動作するプログラムに直接あるもののほとんどを送信する「生」と呼ばれる別の モードに切り替えるための端末を要求します。 プログラムはこの入力を処理して、どこにどの端末が何を描画するかを指示します。 this good summary の両方のモードを区別することができます。あなたのプログラムがフルスクリーンプログラムであっても、端子の を使いたい

あなたはおそらく、端末のテキスト画面のある一定の場所での情報のいくつかのブロック を保つことができるように、今では疑っていると、 rawモードと特殊コマンドを使用すると、特定の文字セルで テキストを直接変更できます。

異なる端末(および端末エミュレータ) には異なるコマンドがあるので、これらの詳細からプログラムを隔離するライブラリがあります。彼らは特別な「端末 情報データベース」に依存して、端末にどのような機能があるのか​​を把握し、どのようにプログラムが要求するものにするのかを理解します。 詳細については、man terminfoを参照してください。

(Cで書かれた)最も広く知られているそのようなライブラリーは 、ncursesと呼ばれ、移動のためのネイティブのソリューションは、おそらく最も目に見える つgithub.com/nsf/termbox-goされた状態で存在しています。

github.com/gizak/termuitermbox-goを使用しますが、後者を直接使用するには で十分です。


は、チャンスはあなたがUNIX®マシンに接続 real hardware terminal の前に座っていないではなく、むしろなど GNOMEターミナルまたはxtermまたはTermial.appなどのGUIアプリケーション で作業している非常に高い¹しましたこれらは「ターミナル」自体ではなく、むしろ terminal emulators- であり、ハードウェア端末をエミュレートするソフトウェアです。

関連する問題