首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Ncurses 進階:實現帶導航、刪除與退出功能的單屏編輯器

     編輯:關於C語言

功能擴展概覽

在上一版基礎上,本文加入方向鍵導航、退格鍵刪除字符、Enter 換行、F12 刪除整行、F1 確認退出等核心編輯功能,邁向實用的文本編輯器雛形。

關鍵代碼變更

特殊鍵處理邏輯

主循環採用 switch-case 結構分發不同按鍵事件:

while (1) {
    int c = mvwgetch(win1, y, x);
    switch (c) {
        case KEY_RIGHT:  // 右鍵移動
            ++x;
            if (x >= width - 1) { ++y; x = 1; }
            break;
        case KEY_LEFT:   // 左鍵移動
            --x;
            if (x < 1) { --y; x = width - 2; }
            break;
        case KEY_UP:     // 上鍵移動
            --y;
            if (y < 1) y = height - 2;
            break;
        case KEY_DOWN:   // 下鍵移動
            ++y;
            if (y >= height - 1) y = 1;
            break;
        case 10:         // Enter 鍵 (ASCII 10)
            ++y;
            if (y >= height - 1) y = 1;
            break;
        case KEY_F(1):   // F1 退出確認
            mvprintw(LINES-3, 2, "退出編輯器嗎?");
            refresh();
            int ans = getch();
            if (ans == 'Y' || ans == 'y') {
                wattroff(win1, COLOR_PAIR(1));
                endwin();
                return 0;
            }
            mvprintw(LINES-2, 2, "否");
            refresh();
            break;
        case KEY_F(12):  // F12 刪除整行
            wdeleteln(win1);
            winsertln(win1);
            box(win1, ACS_VLINE, ACS_HLINE);
            break;
        case KEY_DC:     // Delete 鍵刪除字符
            mvwprintw(win1, y, x, " ");
            break;
        default:         // 普通字符輸入
            mvwprintw(win1, y, x, "%c", c);
            ++x;
            if (x >= width - 1) { ++y; x = 1; }
            if (y >= height - 1) y = 1;
            wrefresh(win1);
    }
}

關鍵函數說明

  • wdeleteln/winsertln:刪除/插入當前行,實現整行清空
  • KEY_F(n):Ncurses 定義的功能鍵宏,兼容不同終端
  • KEY_DC:Delete 鍵鍵碼常量

編譯運行

gcc -lncursesw a.c -o mytest
./mytest

運行效果:可在窗口內自由移動光標、輸入文字、刪除字符/整行,按 F1 彈出確認對話框退出。

增強版編輯器運行截圖

總結

通過 switch-case 結構化處理鍵盤事件,配合 Ncurses 豐富的窗口操作函數,快速構建出具備基本編輯能力的終端應用。下一步將引入 Panel 庫實現多窗口同時編輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved