有什麼方法可以找回輸出到ncurses變量上的字符嗎?用ncurses獲取顯示屏中的文字
比方說我做的:
printw("test");
話,我希望能夠到:
somefunc(strbuffer);
printf("%s",strbuffer); // test
我需要一個函數來找回屏幕上的所有字符轉換爲一個變量,scr_dump得到的接近但輸出格式不可讀取。
有什麼方法可以找回輸出到ncurses變量上的字符嗎?用ncurses獲取顯示屏中的文字
比方說我做的:
printw("test");
話,我希望能夠到:
somefunc(strbuffer);
printf("%s",strbuffer); // test
我需要一個函數來找回屏幕上的所有字符轉換爲一個變量,scr_dump得到的接近但輸出格式不可讀取。
如果你使用curses函數(例如addch,mvaddch,addstr)在屏幕上放東西,你可以使用inchstr
)和相關函數來讀取e屏幕上的字符(使用A_CHARTEXT
與返回的值進行AND操作來提取它們)。
但是,如果在屏幕上使用printf或任何其他非詛咒方法將文本放在屏幕上(包括系統調用另一個使用curses的程序),您將無法讀取屏幕內容。
Curses在內部維護當前屏幕內容,inchstr功能使用屏幕的內部表示來查找當前內容。
謝謝,這正是我正在尋找的。 – Anon 2010-06-22 11:26:34
@Anon,那麼你應該接受答案。 – 2011-03-03 12:35:31
有兩組函數用於從屏幕中檢索數據。如果您printw
只使用(如問題),它表示爲8位編碼(ASCII,POSIX,ISO-8859-1),然後inch
和inchstr
的工作文字:
或更簡單地使用instr
及其變化沿。這些函數可以返回數據,而無需額外掩蓋字符中的屬性。
但是,如果數據使用多字節編碼(例如UTF-8),則必須使用不同的接口來檢索字符。這些是inch
和inchstr
等同:
in_wch
, etc. - extract a complex character and rendition from a window
in_wchstr
, etc. - get an array of complex characters and renditions from a curses window
甲複雜字符是一個結構,其中的X/Open詛咒對待爲不透明的。您必須使用getcchar
從每個單元格的數據中提取數據(例如寬字符字符串)。
A(一點)更簡單地,可以讀取從一個窗口寬字符字符串信息:
inwstr
, etc. - get a string of wchar_t
characters from a curses window
沒有單字符形式;您必須以單字符字符串的形式檢索數據。
總之,雖然應用程序可以把數據作爲char
(或個人chtype
值)的陣列,在UTF-8環境它必須檢索它作爲複雜字符或寬字符。如果您恰好使用Linux,則通常可以將wchar_t
視爲Unicode值。給定數據爲wchar_t
值的數組,您可以使用其他(非詛咒)函數來獲取多字節(UTF-8)字符串。
由於提問時表示ncurses的而不是簡單地詛咒,這是適當地指出,使用ncurses的應用程序可以在他們把屏幕上的數據(這可能會影響你對預期的方式,從在X/Open詛咒不同檢索它)。在ncurses中,addch
(和類似的char
面向函數)將處理多字節字符串中的字節,如UTF-8,將結果存儲爲寬字符。迄今爲止,其他X/Open Curses實現都沒有這樣做。其他人將這些字節視爲獨立字節,並可能將它們表示爲無效的寬字符。
順便說一下,自2010年提問以來,ncurses的'scr_dump
format已被擴展,使其「可讀」。
答案仍然正確,應該接受:-) – 2017-11-15 21:06:50