[英]Using backspace with ncurses
我有一個簡單的ncurses程序,該程序使用getch()一次讀取一個字符並將其復制到緩沖區中。 我遇到的問題是檢測到按下了退格鍵。 以下是相關代碼:
while((buffer[i] = c = getch()) != EOF) {
++i;
if (c == '\n') {
break;
}
else if (c == KEY_BACKSPACE || c == KEY_DC || c == 127) {
i--;
delch();
buffer[i] = 0;
}
refresh();
}
但是,當嘗試運行此代碼時,以下是嘗試從“這是測試”行中刪除字符后出現在屏幕上的內容:
this is a test^?^?^?
buffer
的內容是:
this is a test
使用gdb時,我知道正在調用檢查刪除/退格的if語句,那么我還應該做什么才能刪除字符?
看起來像^?
當您輸入DEL字符時,屏幕上會顯示什么。
您可能會兩次調用delch()
,但隨后必須弄清楚哪些字符作為兩個字符(或更多)的序列回顯。
最好的選擇是調用noecho()
並自己顯式打印字符。
實際上,有一種更簡單的方法,請檢查以下代碼:
while((ch = getch() != KEY_F(1))
{
switch(ch)
{
case 127: { // Delete key
form_driver(Form, REQ_DEL_PREV);
break;
}
case 10: {// Enter key
// Do something
}
default: {
// If this is a normal character
}
}
}
(在此示例中,我要求表單驅動程序刪除“表單”表單中的最后一個鍵入的字符,這完全模擬了刪除鍵的常規功能。)
注意:在我的機器(Mac OS)上可以使用。 代表每個鍵的數字可能在您的計算機上有所不同。 但是,您可以編寫這樣的程序來找出需要使用的鍵碼:
printw("Press Delete and its corresponding keycode will be printed!");
while((ch = getch() != KEY_F(1))
{
printw(ch);
}
希望這對任何人都有幫助,我認為這確實簡化了原本復雜的程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.