簡體   English   中英

在ncurses中使用退格鍵

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM