ncurses 终端界面 —— 在黑色控制台窗口里画界面
ncurses 是什么
ncurses 是「New Curses」的缩写,一个在终端中绘制文本界面的库。它能做的事:
- 在终端任意位置写字符
- 绘制简单的框线界面
- 响应键盘输入
- 实现菜单、滚动列表、对话框
经典的使用场景:文件管理器(mc)、文本编辑器(vim)、远程管理工具(top)等。
移动端上用 ncurses 的意义
Cxxdroid 的编译结果在黑色控制台窗口显示——这个窗口本身就是一个终端。ncurses 让你把这个终端变成一个有界面的应用,而不只是单纯滚动的文字输出。
比如,你可以写一个终端版扫雷游戏:
#include <ncurses.h>
int main() {
initscr();
noecho();
cbreak();
keypad(stdscr, TRUE);
mvprintw(5, 10, "Hello, Cxxdroid Terminal!");
mvprintw(7, 10, "Press any key to quit...");
getch();
endwin();
return 0;
}
安装与链接
包管理器搜索「ncurses」安装。
CMake 链接:
find_package(ncurses REQUIRED)
target_link_libraries(myexe PRIVATE ncurses)
实际限制
ncurses 在 Cxxdroid 的控制台上能用,但需要注意:
- 屏幕尺寸:手机屏幕通常 1080×1920 或更小,ncurses 绘制的文本界面区域有限。横屏模式能多放几行。
- 键盘支持:ncurses 的
getch()能接收大部分按键,但 Android 软键盘的特殊按键(如功能键 F1-F12)可能无法识别。 - 颜色支持:部分终端可能不支持完整的 ANSI 颜色,测试后再用
attron(COLOR_PAIR(...))。 - 窗口尺寸变化:如果用户在运行时旋转手机或改变控制台窗口大小,ncurses 可能不会自动适应。
替代方案
如果 ncurses 受限太多,可以考虑:
- 直接操作 ANSI 转义序列:比 ncurses 简单,但功能弱
- 用 SDL2 做图形界面(见 SDL2 移动端配置):更灵活,能画真实图形和像素,不局限于终端文本
典型项目
- 终端小游戏(扫雷、贪吃蛇、2048)
- 数据库 CLI 工具(用 ncurses 画查询结果界面)
- 进程监控面板(仿 top 的简化版)