ウィンドウ下部
vim、mutt、aptitudeなどのアプリケーションには、
- 出力用の上部ウィンドウセクションと
- ユーザーが入力したりステータスを表示したりするための下部セクション。
(出力用の子プロセスが 1 つあり、ユーザー入力を受け取る子プロセスがもう 1 つあるとします。その目的は、入力を入力したりステータスを表示したりすると同時に、更新された出力を可能にすることです。)
Actions Undo Package Resolver Search Options Views Help
C-T: Menu ?: Help q: Quit u: Update g: Download/Install/Remove Pkgs
|
|
|
|
|
┌─────────────┐ |
│Loading cache│ |
└─────────────┘ |
|
|
|
|
|
|
|
--------------------------------------------------------------------------- |
Initialising package states 100% |
+-------------------------------------------------------+
| some output here |
| |
| |
| |
| |
| |
|-------------------------------------------------------+
|:input here |
+-------------------------------------------------------+
Ncurses チュートリアルこれが明らかに可能であるとは言及されていません。
「c {ウィンドウ、画面、端末、コンソール}の下部に印刷StackOverflow や Web 検索エンジンで「」を検索しても役に立ちません。
これを C 言語でプログラム的に実行できますか?
入力を破棄する
以下の解決策のいくつかは、文字を特定の位置に移動できますが、ユーザー入力を画面に残すのではなく破棄する必要がある場合があるという問題があります。vim
の場合のように、「 」と入力して Enter キーを押しても、画面に:w
「 」は残りません。:w
更新。これはここにあります:getstr() の後にテキストを削除する方法 c++ ncurses
ウィンドウフォーカス - 問題の未解決部分
ウィンドウの下部に入力しているときに上部のテキストが変更されると、フォーカスが下部に戻るという問題が発生します。12 月 29 日時点のソリューションではこの問題は発生していません。
アップデート1。
- 前のカーソル位置を記憶し、
- 出力を表示し、
- 位置を復元する
は簡単な解決策ではないこれらは異なるプロセスであるため、カーソル位置を取得しようとすると、他のプロセスの実行中に発生した変更には影響しません。
たとえば、親が入力を受け取った場合、子はカーソルの位置がどのように変化したかを把握できず、コンソールの別の部分で出力行を実行した後でカーソルの位置を復元できません。
これを実装するには、プロセス間通信が必要になりますが、他の解決策があればそちらの方が望ましいかもしれません。
関連している
- 入力を待たずにキーボードから入力を取得する関連はあるが、十分に具体的ではない。
- Python Urwid を使用してチャットのような UI を作成する方法は?Python用のUrwidは、(JFセバスチャン下のコメントで確認してください。残念ながら、C ではそうではありません。
ベストアンサー1
標準ライブラリを使用しても、それを行う方法はありません。すでに提案されているように、ncursesを使用すると、簡単に可能です。このチュートリアル非常にわかりやすく説明してくれています。