1
我正在複製學生項目的Irssi interface。我想在文本界面中使用NCurses,在編寫消息時使用readline以提供更好的文本編輯功能。Readline&NCurses,處理特殊鍵和組合鍵
This question,answer and project給了我一個很好的起點。
我的問題是,我想有一個輸入/事件循環是這樣的:
int ch;
while (exit_condition) {
ch = wgetch(window);
switch (ch) {
case ERR: continue;
case KEY_F(1): /* do something */ break;
case KEY_UP: /* do something else */ break;
default: forward_to_readline(ch); break;
}
}
但爲了匹配KEY_F(n)
或KEY_UP
我需要啓用keypad(window, TRUE)
,這將修改輸入並使它readline不可用。
從手冊:
如果鍵盤是TRUE,和一個功能鍵被按下時,該 功能鍵的標記被返回,而不是原始的字符。
當一個可能是功能鍵開頭的字符是 (在現代終端上,它表示一個轉義字符)時,curses設置一個定時器。如果在指定時間內序列的其餘部分不在 中,則字符會通過; 否則,返回功能鍵值。因此,許多 終端會在用戶按下 轉義密鑰並將轉義返回給程序之間經歷延遲。
這裏是我的想法:
- 是否有扭轉
keypad
效果的功能? - 我是否應該實施
keypad
的行爲?我想我也必須這樣做,如果我想趕上像Shift + Up這樣的事件。我很高興有這樣的例子。 - 如果我無法獲得它的形式NCurses可readline給我的組合鍵?也許用鍵綁定callbacs(relevant ?)?
謝謝你的時間!
謝謝!我猜想不可能有更好的人回答我的問題。我將會使用readline函數。 我的意思是反向鍵盤是給定一個功能鍵的標記,我可以在標記的原點處檢索轉義碼的序列。 –