使用curses管理基於文字的螢幕 (三)

2021-08-22 19:58:09 字數 1864 閱讀 2950

鍵盤

除了提供乙個簡單的介面用來管理螢幕以外,curses同時提供了乙個更為簡單的方法用來控制鍵盤。

鍵盤模式

鍵盤的讀取例程是由模式來控制的。用來設定模式的函式為:

#include

int echo(void);

int noecho(void);

int cbreak(void);

int nocbreak(void);

int raw(void);

int noraw(void);

兩個回顯函式只是用來簡單的開啟或是關閉輸入字元的回顯。其餘的四個函式呼叫控制在終端輸入的字元如何可以為curses程式所用。

為了解釋cbreak,我們需要理解預設的輸入模式。當乙個curses程式通過initscr呼叫開始進,輸入模式被設定為cooked模式。這就意味著所有的處理是一行一行完成的;也就是說,只有在使用者在輸入enter之後輸入才可用。鍵盤特殊字元也是允許的,所以輸入合適的按鍵序列可以在程式中生成乙個訊號。如果終端是由乙個終端執行的,那麼流控制也是允許的。通過呼叫cbreak,乙個程式可以將輸入模式設定為cbreak模式,此時字元在輸入以後立即就可以為程式所用,而不是進行緩衝,直到輸入enter時也會為程式所用。如同在cooked模式中一樣,鍵盤特殊字元也是允許的,但只是簡單的按鍵,例如backspace,會直接傳遞給程式進行處理,所以如果我們希望backspace的功能如同我們所希望的,我們需要自己對其進行程式設計。

raw呼叫會關閉特殊字元處理,所以他可以使得通過輸入特殊字串行來產生訊號或是流控制變得不可能。呼叫nocbreak可以將輸入模式設定回cooked模式,但是特殊字元處理會保持不變;呼叫noraw可以重新設定cooked模式與特殊字元處理。

鍵盤輸入

讀取鍵盤是非常簡單的。函式如下:

#include

int getch(void);

int getstr(char *string);

int getnstr(char *string, int number_of_characters);

int scanw(char *format, ...);

其行為動作類似於非curses程式的getchar,gets,scanf。注意,getstr並沒有提供限制返回的字串長度的辦法,所以我們使用這個函式時一定要小心。如果我們的curses版本支援getnstr,這個函式會允許我們限制讀取的字元數,我們應使用這個函式,而不是getnstr。這與我們在第三章所看到的gets與fgets函式相類似。

下面是乙個簡短的例子程式,ipmode.c,來向我們顯示如何處理鍵盤。

試驗--鍵盤模式與輸入

1 首先,我們設定程式並且初始化curses呼叫。

#include

#include

#include

#include

#define pw_len 25

#define name_len 256

int main()

3 最後我們重新開啟鍵盤回顯,並且輸出成功還是失敗。

echo();

nocbreak();

move(11, 10);

if (strcmp(password, real_password) == 0) printw(「%s」, 「correct」);

else printw(「%s」, 「wrong」);

refresh();

endwin();

exit(exit_success);

}工作原理

阻止了鍵盤輸入的回顯並且將輸入模式設定為cbreak,我們為密碼準備了一塊記憶體區域。所輸入密碼的每乙個字元都會立即進行處理,並且會在螢幕的下乙個位置顯示乙個*。我們需要每次重新整理螢幕。然後我們使用strcmp函式來比較這兩個字串,輸入與實際的字元。

使用curses管理基於文字的螢幕 (三)

鍵盤 除了提供乙個簡單的介面用來管理螢幕以外,curses同時提供了乙個更為簡單的方法用來控制鍵盤。鍵盤模式 鍵盤的讀取例程是由模式來控制的。用來設定模式的函式為 include int echo void int noecho void int cbreak void int nocbreak v...

linux 下curses庫的安裝和使用

sudo apt get install libncurses5 dev curses的基本用法如下 1.包含標頭檔案 curses.h 3.重要的函式 initscr 初始化curses庫和ttty。在開始curses程式設計之前,必須使用initscr 這個函式來開啟curses模式 endwi...

基於canvas使用粒子拼出你想要的文字

本次分享一下使用canvas實現粒子效果拼出你想要的文字。歡迎關注我的部落格,不定期更新中 不久之前看到大搜車團隊出品的easy mock產品的介面中有乙個使用粒子拼出 mock so easy 的效果,感覺非常有意思,就像下面這樣 當然了,這個easy mock的介面中還有粒子匯聚 散開 以及緩動...