我們定義delete鍵為刪除某個字符,回車符表示換行,同時定義F12為刪除整行,F1為退出。
dp@dp:~/cursestest % cat a.c
#include
#include
#include
//code by [email protected]
//date:2014/1/17
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"");
initscr();
clear();
noecho();
cbreak();
if(has_colors() == FALSE)
{
endwin();
printf("你的終端不支持色彩!\n");
return (1);
}
start_color(); /*啟動color 機制*/
mvprintw(5,COLS/2-10,"簡單編輯器-僅限於單個屏幕的編輯");
refresh();
init_pair(1, COLOR_GREEN, COLOR_BLACK);
WINDOW *win1;
int width=COLS-14;
int height=LINES-14;
int x,y;
win1=newwin(height,width,7,7);//新窗口(行,列,begin_y,begin_x)
keypad(win1,TRUE);
wattron(win1,COLOR_PAIR(1));
box(win1,ACS_VLINE,ACS_HLINE);
wrefresh(win1);
getyx(win1,y,x);
++y;++x;
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:
++y;
if (y>=height-1){
y=1;
}
break;
case KEY_F(1):
//退出
mvprintw(LINES-3,2,"退出編輯器嗎?");
mvprintw(LINES-2,2," ");
refresh();
int ans=getch();
if (ans=='Y' ||ans=='y')
{
mvprintw(LINES-2,2,"是\n");
refresh();
return 0;
}else
mvprintw(LINES-2,2,"否\n");
refresh();
break;
case KEY_F(12):
//刪除某行
wdeleteln(win1);
winsertln(win1);
box(win1,ACS_VLINE,ACS_HLINE);
case KEY_DC:
//刪除某字符
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);
}
}
wattroff(win1,COLOR_PAIR(1));
endwin();
return 0;
}
運行
dp@dp:~/cursestest % gcc -lncursesw a.c -o mytest
dp@dp:~/cursestest % ./mytest