int echo(); // 開啟:輸入字符即時顯示 int noecho(); // 關閉:輸入不顯示(密碼輸入必備)
int cbreak(); // 開啟:字符即時讀取,無需回車 int nocbreak(); // 關閉:恢復行緩衝模式
特點:除 DELETE/CTRL 等控制字符外,所有字符立即可讀。默認開啟。舊版用 crmode()/nocrmode()。
int nl(); // 開啟:回車轉換為換行 int nonl(); // 關閉:保持回車原樣
控制輸入時 \r 與 \n 的轉換行為。
int keypad(WINDOW* win, int flag); // TRUE/FALSE
核心作用:將方向鍵、功能鍵等特殊鍵盤掃描碼轉換為 Curses 內部 KEY_* 常量,否則 wgetch() 無法識別。
| 常量 | 對應鍵 |
|---|---|
| KEY_UP/DOWN/LEFT/RIGHT | 四個方向鍵 |
| KEY_HOME / KEY_END | Home / End |
| KEY_BACKSPACE | 退格鍵 |
| KEY_F(n) | 功能鍵 F1~F12 |
| KEY_PPAGE / KEY_NPAGE | Page Up / Page Down |
| KEY_IC / KEY_DC | Insert / Delete |
| KEY_IL / KEY_DL | 行插入 / 行刪除 |
int raw(); // 開啟:所有字符直通,含 Ctrl+C 等信號鍵 int noraw(); // 關閉
特點:完全禁用終端驅動程序處理,所有特殊字符產生信號而非控制動作。與 CBREAK 同時開啟時,RAW 生效。
int halfdelay(int tenth); // tenth:十分之一秒單位
類似 CBREAK,但超時返回 ERR。用 nocbreak() 取消。
int nodelay(WINDOW* win, bool bf); // TRUE=非阻塞
將 wgetch() 從阻塞調用轉為非阻塞,無輸入立即返回 ERR,適用於遊戲主循環、即時監控等場景。
| 場景 | 推薦組合 |
|---|---|
| 互動式選單/表單 | cbreak + noecho + keypad |
| 密碼輸入 | cbreak + noecho |
| 即時遊戲/動畫 | cbreak + nodelay + keypad |
| 原始協議調試 | raw + noecho |
精準掌握各模式特性與組合,是編寫健壯終端應用的關鍵。