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

Ncurses 實戰:打造簡單的單屏文本編輯器(鍵盤輸入篇)

     編輯:關於C語言

前言

在終端環境下開發互動式文本編輯器,是學習 Ncurses 庫的經典切入點。本文將從零開始,構建一個僅具備基本輸入功能的單屏編輯器,重點講解鍵盤事件捕捉、窗口管理與色彩設置等核心機制。

核心代碼解析

首先引入必要的頭文件,並初始化 Ncurses 環境:

#include <locale.h>
#include <stdio.h>
#include <ncurses.h>

int main(int argc, char *argv[]) {
    setlocale(LC_ALL, "");
    initscr();           // 初始化標準屏幕
    clear();             // 清屏
    noecho();            // 關閉鍵盤回顯
    cbreak();            // 禁用行緩衝,逐字符讀取

色彩支持檢測與初始化

檢查終端是否支持色彩,若不支持則退出:

    if (has_colors() == FALSE) {
        endwin();
        printf("您的終端不支持色彩!\n");
        return 1;
    }
    start_color();                    // 啟動色彩機制
    init_pair(1, COLOR_GREEN, COLOR_BLACK); // 定義色彩對:綠字黑底

創建編輯窗口

利用 newwin 在屏幕中央創建一個帶邊框的子窗口,並啟用鍵盤模式以捕捉方向鍵等特殊按鍵:

    int width = COLS - 14;
    int height = LINES - 14;
    int x, y;
    
    WINDOW *win1 = newwin(height, width, 7, 7); // (行數, 列數, 起始y, 起始x)
    keypad(win1, TRUE);                         // 啟用功能鍵捕捉
    box(win1, ACS_VLINE, ACS_HLINE);            // 繪製邊框
    wattron(win1, COLOR_PAIR(1));               // 應用色彩
    wrefresh(win1);                             // 刷新窗口顯示
    
    getyx(win1, y, x);  // 獲取當前光標位置
    ++y; ++x;           // 移至內部可編輯區域起始處

主輸入循環

使用 mvwgetch 在指定坐標讀取字符,並實現基本的換行與邊界環繞邏輯:

    while (1) {
        int c = mvwgetch(win1, y, x); // 在(y,x)處讀取字符
        ++x;
        
        // 自動換行邏輯
        if (x >= width - 1) {
            ++y;
            x = 1;
        }
        if (y >= height - 1) {
            y = 1;
        }
        
        mvwprintw(win1, y, x, "%c", c); // 顯示輸入字符
        wrefresh(win1);
    }

編譯與運行

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

編譯時需鏈接 ncursesw 庫(支持寬字符)。運行後將出現一個綠色邊框的編輯窗口,可自由輸入字符,超出邊界自動換行環繞。

進階優化方向

此版本為最基礎原型,後續可擴展:方向鍵移動光標、退格刪除、保存/讀取文件、多窗口切換等功能,將在後續文章中逐步實現。

單屏編輯器運行截圖

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