2012-04-03 14 views
2

ユーザからの入力を伴う簡単なUIにはncursesを使用しています。 入力は1行の高さのウィンドウであり、全てがカーソルです。 私は現在wgetnstr(inputwindow, input, inputlen)を使用しています。標準入力とncursesの併用

私が望むのは、readlineのように、その入力行を編集できることです。つまり、^ W(^ Uはbtwを働かせる)を使用でき、バッファーに戻って変更などを行うことができます。 入力の履歴を保存し、 '上'の矢印でそれにアクセスできるそれも素晴らしいだろう。

しかし、ncursesが提供する機能だけでは、stdinを動作させることができませんでした。 inputwindowが私に上記の利点をもたらすかどうかは、私の側では問題ないでしょう。しかし、可能かどうかはわかりません。

ので、

  • はそれがreadlineを使用するか、またはncurses、それが提供する入力機能を使用して、このような機能を持つことは可能ですか? および/または
  • cursesウィンドウの下に空行を置くと、ユーザーがstdinを直接入力することができます(これはすべて共通の読み込み入力関数なので、直接readlineでも可能です) ?

これらが実行可能であれば、いくつかの簡単なコードは素晴らしいかもしれませんが、ガイダンスとポインタも素晴らしいです。もしそうでなければ、それを知ることは素晴らしいことであり、時間を無駄にしないようにすることです。

+0

[こちら](http://stackoverflow.com/questions/1706678/ncurses-and-stdin-blocking-problem)も同様の質問ですが、実際は同じではありません。 – c00kiemon5ter

+0

おそらく私が欲しいのは、cli ircのクライアントが入力を処理する方法です。例えば。 'irssi'と' weechat'です。私は少し掘るよ.. – c00kiemon5ter

答えて

1

ncursesは画面全体を制御することを想定しています。 ncursesの入力/出力を非ncurses入出力と混在させることは可能かもしれませんが、試してみることはお勧めできません。

ncursesプログラム内でreadlineスタイルの入力が必要な場合は、それを自分で実装する必要があります。

formライブラリ(ncursesに含まれています)では、編集可能なフィールドを持つフォームを定義できます。あなたは自分で歴史を扱う必要があります。これらのフォームは、画面上の配置を容易に制御するためにpanelsに置くことができます。