📄 edit.cc
字号:
mvwaddstr(ws,14,30,"ALT_E");
mvwaddstr(ws,15,1,"PAGE");
mvwaddstr(ws,15,30,"ALT_P");
mvwaddstr(ws,16,1,"HELP");
mvwaddstr(ws,16,30,"ALT_H");
mvwaddstr(ws,4,45,"EDIT OPTIONS");
mvwaddstr(ws,5,40,"INSERT WORD");
mvwaddstr(ws,5,70,"CNTRL_A");
mvwaddstr(ws,6,40,"INSERT LINE");
mvwaddstr(ws,6,70,"CNTRL_L");
mvwaddstr(ws,7,40,"DELETE WORD");
mvwaddstr(ws,7,70,"CNTRL_W");
mvwaddstr(ws,8,40,"DELETE LINE");
mvwaddstr(ws,8,70,"CNTRL_Y");
mvwaddstr(ws,9,40,"BEGIN");
mvwaddstr(ws,9,70,"CNTRL_B");
mvwaddstr(ws,10,40,"END");
mvwaddstr(ws,10,70,"CNTRL_E");
mvwaddstr(ws,12,45,"PAGE OPTIONS");
mvwaddstr(ws,13,40,"FORE GROUND COLOR");
mvwaddstr(ws,13,70,"F7");
mvwaddstr(ws,14,40,"BACK GROUND COLOR");
mvwaddstr(ws,14,70,"F8");
mvwaddstr(ws,15,40,"SET LEFT MARGIN");
mvwaddstr(ws,15,70,"F9");
mvwaddstr(ws,16,40,"SET RIGHT MARGIN");
mvwaddstr(ws,16,70,"F10");
mvwaddstr(ws,17,40,"SET TOP MARGIN");
mvwaddstr(ws,17,70,"F11");
mvwaddstr(ws,18,40,"SET BOTTOM MARGIN");
mvwaddstr(ws,18,70,"F12");
wbkgd(ws,COLOR_PAIR(5));
box(ws,0,0);
mvwaddstr(ws,0,34,"HELP FILE");
mvwchgat(ws,0,34,9,A_NORMAL|A_BOLD,11,NULL);
mvwchgat(ws,4,1,20,A_NORMAL|A_BOLD,11,NULL);
mvwchgat(ws,12,1,20,A_NORMAL|A_BOLD,11,NULL);
mvwchgat(ws,4,40,20,A_NORMAL|A_BOLD,11,NULL);
mvwchgat(ws,12,40,20,A_NORMAL|A_BOLD,11,NULL);
wrefresh(ws);
c = wgetch(ws);
return;
}
int list :: open_file(WINDOW *main,int pl)
{
WINDOW *ws;
int c;
char cl[] = "clear";
char st[20][50] ={" NEW FILE ^N"," OPEN FILE F3"," SAVE FILE F2"," SAVE AS"," CLOSE FILE F4",
" DELETE FILE F5"," EXIT ALT_X"};
ws = subwin(main,15,20,1,0);
werase(ws);
box(ws,0,0);
init_pair(6,COLOR_BLACK,COLOR_CYAN);
wbkgd(ws,COLOR_PAIR(6));
mvwaddstr(ws,1,2,"NEW FILE ^N");
mvwaddstr(ws,2,1,"------------------");
mvwaddstr(ws,3,2,"OPEN FILE F3");
mvwaddstr(ws,4,1,"------------------");
mvwaddstr(ws,5,2,"SAVE FILE F2");
mvwaddstr(ws,6,1,"------------------");
mvwaddstr(ws,7,2,"SAVE AS");
mvwaddstr(ws,8,1,"------------------");
mvwaddstr(ws,9,2,"CLOSE FILE F4");
mvwaddstr(ws,10,1,"------------------");
mvwaddstr(ws,11,2,"DELETE FILE F5");
mvwaddstr(ws,12,1,"------------------");
mvwaddstr(ws,13,2,"EXIT ALT_X");
keypad(ws,TRUE);
wmove(ws,1,1);
wrefresh(ws);
int a = 1,b = 1;
curs_set(0);
if(pl == 1)
{
while(1)
{
wmove(ws,a,b);
blockwin(ws,st,a,13);
c = wgetch(ws);
wrefresh(ws);
switch(c)
{
case (KEY_RIGHT) :
return 2;
case (KEY_LEFT) :
return 4;
case (KEY_UP):
if (a == 1) a = 13;
else
a = a - 2;
break;
case (KEY_DOWN):
if (a == 13) a = 1;
else a = a + 2;
break;
case 10 :
curs_set(1);
if (a == 1)
{
if (save == 0)
nsave(main);
strcpy(name,"noname");
inwin(main);
}
else if (a == 3)
{
if(save == 0)
nsave(main);
open_win(main);
}
else if (a == 5) fsave(main);
else if (a == 7)
{
strcpy(name,"noname");
fsave(main);
}
else if (a == 9)
{
if(save == 0)
nsave(main);
strcpy(name,"noname");
main_win(main);
}
else if(a == 11)
del_file(main);
else if (a == 13)
{
if (save == 0)
nsave(main);
system(cl);
endwin();
exit(0);
}
return 0;
case 27:
curs_set(1);
wclear(ws);
return 0;
}
}
}
else
{
while(1)
{
wmove(ws,a,b);
blockwin(ws,st,a,13);
c = wgetch(ws);
wrefresh(ws);
switch(c)
{
case (KEY_RIGHT) :
case (KEY_LEFT) :
return 4;
case (KEY_UP):
if (a == 1) a = 13;
else if(a == 11) a = 3;
else
a = a - 2;
break;
case (KEY_DOWN):
if (a == 13) a = 1;
else if (a == 3) a = 11;
else a = a + 2;
break;
case 10 :
curs_set(1);
if (a == 1)
{
strcpy(name,"noname");
inwin(main);
}
else if (a == 3)
open_win(main);
else if(a == 11)
del_file(main);
else if (a == 13)
{
system(cl);
endwin();
exit(0);
}
return 0;
case 27:
curs_set(1);
wclear(ws);
return 0;
}
}
}
}
int list :: open_edit(WINDOW *main)
{
WINDOW *ws;
int c;
char cl[] = "clear";
char st[20][50] = {" INSERT WORD ^A"," INSERT LINE ^L"," DELETE WORD ^W"," DELETE LINE ^Y"};
ws = subwin(main,9,20,1,20);
werase(ws);
box(ws,0,0);
init_pair(6,COLOR_BLACK,COLOR_CYAN);
wbkgd(ws,COLOR_PAIR(6));
mvwaddstr(ws,1,2,"INSERT WORD ^A");
mvwaddstr(ws,2,1,"------------------");
mvwaddstr(ws,3,2,"INSERT LINE ^L");
mvwaddstr(ws,4,1,"------------------");
mvwaddstr(ws,5,2,"DELETE WORD ^W");
mvwaddstr(ws,6,1,"------------------");
mvwaddstr(ws,7,2,"DELETE LINE ^Y");
keypad(ws,TRUE);
wmove(ws,1,1);
wrefresh(ws);
int a = 1,b = 1;
curs_set(0);
while(1)
{
wmove(ws,a,b);
blockwin(ws,st,a,7);
c = wgetch(ws);
wrefresh(ws);
switch(c)
{
case (KEY_RIGHT) :
return 3;
case (KEY_LEFT) :
return 1;
case (KEY_UP):
if (a == 1) a = 7;
else
a = a - 2;
break;
case (KEY_DOWN):
if (a == 7) a = 1;
else a = a + 2;
break;
case 10 :
curs_set(1);
if (a == 1) word_in(main);
else if (a == 3) line_in(main);
else if (a == 5)
{
save = 0;
d_word();
}
else if (a == 7)
{
save = 0;
d_lin();
}
return 0;
case 27:
curs_set(1);
return 0;
}
}
}
int list :: open_page(WINDOW *main)
{
WINDOW *ws;
int c;
char cl[] = "clear";
char st[20][50] = {" TOP MARGIN F11"," BOTTOM MARGIN F12"," LEFT MARGIN F9"," RIGHT MARGIN F10"};
ws = subwin(main,9,20,1,40);
werase(ws);
box(ws,0,0);
init_pair(6,COLOR_BLACK,COLOR_CYAN);
wbkgd(ws,COLOR_PAIR(6));
mvwaddstr(ws,1,2,"TOP MARGIN F11");
mvwaddstr(ws,2,1,"------------------");
mvwaddstr(ws,3,2,"BOTTOM MARGIN F12");
mvwaddstr(ws,4,1,"------------------");
mvwaddstr(ws,5,2,"LEFT MARGIN F9");
mvwaddstr(ws,6,1,"------------------");
mvwaddstr(ws,7,2,"RIGHT MARGIN F10");
keypad(ws,TRUE);
wmove(ws,1,1);
wrefresh(ws);
int a = 1,b = 1;
curs_set(0);
while(1)
{
wmove(ws,a,b);
blockwin(ws,st,a,7);
c = wgetch(ws);
wrefresh(ws);
switch(c)
{
case (KEY_RIGHT) :
return 4;
case (KEY_LEFT) :
return 2;
case (KEY_UP):
if (a == 1) a = 7;
else
a = a - 2;
break;
case (KEY_DOWN):
if (a == 7) a = 1;
else a = a + 2;
break;
case 10 :
curs_set(1);
if (a == 1)
topm(main);
else if (a == 3) botm(main);
else if (a == 5)
leftm(main);
else if (a == 7)
rightm(main);
return 0;
case 27:
curs_set(1);
return 0;
}
}
}
int list :: help_menu(WINDOW *main,int pl)
{
WINDOW *ws;
int c;
char cl[] = "clear";
char st[20][50] = {" HELP F1"," ABOUT"};
ws = subwin(main,5,20,1,60);
werase(ws);
box(ws,0,0);
init_pair(6,COLOR_BLACK,COLOR_CYAN);
wbkgd(ws,COLOR_PAIR(6));
mvwaddstr(ws,1,2,"HELP F1");
mvwaddstr(ws,2,1,"------------------");
mvwaddstr(ws,3,2,"ABOUT");
keypad(ws,TRUE);
wmove(ws,1,1);
wrefresh(ws);
int a = 1,b = 1;
curs_set(0);
while(1)
{
wmove(ws,a,b);
blockwin(ws,st,a,3);
c = wgetch(ws);
wrefresh(ws);
switch(c)
{
case (KEY_RIGHT) :
return 1;
case (KEY_LEFT) :
if (pl == 1) return 3;
else return 1;
case (KEY_UP):
if (a == 1) a = 3;
else
a = a - 2;
break;
case (KEY_DOWN):
if (a == 3) a = 1;
else a = a + 2;
break;
case 10 :
curs_set(1);
if (a == 1) open_help(main);
else if (a == 3) open_about(main);
return 0;
case 27:
curs_set(1);
return 0;
}
}
}
void list :: forcolor(WINDOW *win)
{
fore++;
init_pair(7,colour[fore],colour[bac]);
wbkgd(win,COLOR_PAIR(7));
if (fore == 8)
fore = 0;
}
void list :: backcolor(WINDOW *win)
{
bac++;
init_pair(8,colour[fore],colour[bac]);
wbkgd(win,COLOR_PAIR(8));
if (bac == 8)
bac = 0;
}
void list :: leftm(WINDOW *main)
{
WINDOW *ws;
node *p,*q;
int c;
char *f;
begin();
ws = subwin(main,1,80,24,0);
werase(ws);
init_pair(1,COLOR_YELLOW,COLOR_YELLOW);
wbkgd(ws,COLOR_PAIR(1) | A_BOLD);
mvwprintw(ws,0,0,"The present value of left margin is %d.",lm);
wprintw(ws," Enter the new value (MAX : %d) : ",78 - rm - 1);
wrefresh(ws);
wmove(ws,0,74);
while(1)
{
echo();
wscanw(ws,"%d",&c);
noecho();
if (c + 1 <= 78 - rm) break;
wmove(ws,0,75);
beep();
}
lm = c;
x = lm + 1;
}
void list :: rightm(WINDOW *main)
{
WINDOW *ws;
node *p,*q;
int c;
char *f;
begin();
ws = subwin(main,1,80,24,0);
werase(ws);
init_pair(1,COLOR_YELLOW,COLOR_YELLOW);
wbkgd(ws,COLOR_PAIR(1) | A_BOLD);
mvwprintw(ws,0,0,"The present value of right margin is %d.",rm);
wprintw(ws," Enter the new value (MAX : %d) : ",78 - lm - 1);
wrefresh(ws);
wmove(ws,0,75);
while(1)
{
echo();
wscanw(ws,"%d",&c);
noecho();
if (78 - c >= lm + 1) break;
wmove(ws,0,75);
beep();
}
rm = c;
}
void list :: topm(WINDOW *main)
{
WINDOW *ws;
node *p,*q;
int c;
char *f;
begin();
ws = subwin(main,1,80,24,0);
werase(ws);
init_pair(1,COLOR_YELLOW,COLOR_YELLOW);
wbkgd(ws,COLOR_PAIR(1) | A_BOLD);
mvwprintw(ws,0,0,"The present value of top margin is %d.",tm);
wprintw(ws," Enter the new value (MAX : %d) : ",21 - bm);
wrefresh(ws);
wmove(ws,0,75);
while(1)
{
echo();
wscanw(ws,"%d",&c);
noecho();
if (c + 1 <= 21 - bm) break;
wmove(ws,0,75);
beep();
}
tm = c;
y = tm + 1;
}
void list :: botm(WINDOW *main)
{
WINDOW *ws;
node *p,*q;
int c;
char *f;
begin();
ws = subwin(main,1,80,24,0);
werase(ws);
init_pair(1,COLOR_YELLOW,COLOR_YELLOW);
wbkgd(ws,COLOR_PAIR(1) | A_BOLD);
mvwprintw(ws,0,0,"The present value of bottom margin is %d.",bm);
wprintw(ws," Enter the new value (MAX : %d) : ",21 - tm - 1);
wrefresh(ws);
wmove(ws,0,75);
while(1)
{
echo();
wscanw(ws,"%d",&c);
noecho();
if (21 - c >= tm + 1) break;
wmove(ws,0,75);
beep();
}
bm = c;
}
void list :: blockwin(WINDOW *ws,char st[20][50],int a,int n)
{
int i;
for(i = 1;i <= n;i += 2)
{
if (i == a)
{
wattron(ws,A_REVERSE | A_BOLD);
waddstr(ws,st[a/2]);
wattroff(ws,A_REVERSE | A_BOLD);
}
else
{
wattroff(ws,A_REVERSE | A_BOLD);
wmove(ws,i,1);
waddstr(ws,st[i/2]);
wmove(ws,a,1);
}
}
wrefresh(ws);
}
void list :: del_file(WINDOW *main)
{
WINDOW *ws;
FILE *fp;
char nam[20],del[20] = "rm -f ";
ws = subwin(main,1,80,24,0);
werase(ws);
init_pair(1,COLOR_WHITE,COLOR_BLACK);
wbkgd(ws,COLOR_PAIR(1) | A_BOLD);
mvwaddstr(ws,0,10,"Enter the file to be deleted : ");
wrefresh(ws);
echo();
wgetstr(ws,nam);
noecho();
strcat(del,nam);
fp = fopen(nam,"r");
if (fp != NULL)
{
fclose(fp);
system(del);
if (!(strcmp(nam,name)))
{
strcpy(name,"noname");
main_win(main);
}
}
else
{
werase(ws);
mvwprintw(ws,0,10,"The file %s not found : ",nam);
wrefresh(ws);
wgetch(ws);
}
}
void list :: open_about(WINDOW *main)
{
WINDOW *ws;
ws = subwin(main,10,30,4,20);
werase(ws);
init_pair(9,COLOR_RED,COLOR_WHITE);
init_pair(10,COLOR_WHITE,COLOR_BLACK);
box(ws,0,0);
wbkgd(ws,COLOR_PAIR(9));
mvwaddstr(ws,0,12,"About");
mvwchgat(ws,0,12,5,A_REVERSE,10,NULL);
curs_set(0);
wrefresh(ws);
int c = wgetch(ws);
}
main(int argc,char *argv[])
{
WINDOW *main;
list scr;
initscr();
noecho();
cbreak();
start_color();
raw();
curs_set(0);
main = scr.init_main(main);
if (argc <= 1) scr.main_win(main);
else
{
strcpy(name,argv[1]);
scr.inwin(main);
}
endwin();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -