2012-03-17 54 views
0

我有一個完全由控制檯/終端控制的較大的C++應用程序。大量的調試輸出被打印,但是它開始變得混亂。重要信息在各個模塊的一般狀態信息之間丟失。禁用這些輸出是不可能的,因爲它們實際上是故障的重要指標。相反,我認爲它可能更有助於「分割」屏幕,即在屏幕(終端)上的一種額外區域中具有特定的輸出。這可以被認爲是一個狀態欄(可能是多行)。具有恆定區域/狀態欄的C++終端輸出

我可以用ANSI代碼很容易地做到這一點,但仍然有很多printfs總是弄亂了輸出。滾動也是這樣打破的。

一個選項可能會使用ncurses,但我不想將整個應用程序移植到它。我試圖找出是否可以在ncurses應用程序中顯示正常的printf輸出(有點像終端控制檯中的終端:-)),但沒有找到任何。

我期待的任何建議,讓我加入這樣的事情很容易:

  • 有一個固定大小的區域(前N線)上的終端輸出一些狀態信息
  • 的餘屏幕上顯示的printf輸出
  • 滾動時,固定大小的面積/狀態欄應該不會有不良影響(即我想正常滾動的printf的輸出,而不會丟失任何!)

代碼將在筆記本電腦上的Linux機器上運行(通常使用gnome終端)或通過ssh連接遠程運行。

回答

0

如果不將應用程序轉換爲使用ncurses,使用ncurses來做到這一點是不實際的。 ncurses希望是唯一操縱屏幕的東西。

關閉我的頭頂,我有兩個想法,你(除了轉換你的應用程序的ncurses):

  • 你可以使用一些瘋狂的連接或者將#define技巧,以替換所有呼叫對printf,等使用ncurses寫入屏幕的版本。我不推薦這個。

  • 你可以通過管道將輸出到一個應用程序,需要在標準輸入的輸入,然後使用ncurses的基於某種正則表達式的顯示輸入。 (例如,與「錯誤」開始線往屏幕一切到底部的上半部分)。

如果您希望使用終端的滾動緩衝區,您需要在窗口頂部有滾動部分。 ncurses的可能並非這一要求,因爲它是在這樣一個時代設計時,終端沒有回溯的緩衝區工作。