在上一版基礎上,本文加入方向鍵導航、退格鍵刪除字符、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 庫實現多窗口同時編輯。