这里用到了屏幕开发库 curses 和键盘函数 keypad.
下面来看源程序:
#include<curses.h>
#define STARTX 1
#define STARTY 1
void initial()
{
initscr(); /* 初始化 */
cbreak(); /* 用来开启 cbreak 模式,cbreak 指除了DELETE,CTRL终端处理的特殊字符外,其余键盘输入的字符将立即被读取 */
nonl(); /* 格式控制 */
noecho();/* 并不立即显示字符 */
intrflush(stdscr,FALSE); /* 不读取串 */
keypad(stdscr,TRUE); /* 键盘响应 */
refresh(); /* 更新屏幕 */
}
int main()
{
int x=STARTX;
int y=STARTY;
int ch;
initial();
//box(stdscr,ACS_VLINE,ACS_HLINE);
/* 设置窗口形式 */
move(0,30);
/* 移动 0 行 30 列 */
printw("edit"); /* curses 的输出格式,类似 printf */
refresh();
move(x,y);
do{
ch=getch();
switch(ch){
case KEY_UP: /* 获取上键 */
if(y>1) --y;
move(y,x);
break;
case KEY_DOWN: /* 获取下键 */
++y;
break;
case KEY_RIGHT: /* 获取右键 */
++x;
break;
case KEY_LEFT: /* 获取左键 */
if(x>1) --x;
break;
case '\r': /* 获取回车键,并产生一个空行 */
++y;
x=1;
move(y,x);
insertln();
break;
case '\t': /* 获取 Tab 键 */
x+=4;
break;
case KEY_BACKSPACE: /* 获取删除键,删除字符 */
if(x>1) --x;
move(y,x);
addch(' ');
break;
case KEY_DC:
delch();
break;
case 126: /* 设置 ~ 键为退出键 */
endwin(); /* 结束 curses 模式 */
exit(0);
default:
insch(ch); /* 输出字符 */
x++;
break;
}
move(y,x);
}while(1);
}
}
编译程序:gcc -I/usr/include/ncurses edit.c -o edit -lncurses
程序可移动光标,输入,删除,增加代码就可成为功能强大的编辑器了.