📄 edit.cc
字号:
main = init_main(main);
win = mainc(main);
disp(win);
ref_sub(sub);
box(win,0,0);
wrefresh(win);
if(i == 0) break;
else if(i == 1) i = open_file(main,1);
else if(i == 2) i = open_edit(main);
else if(i == 3) i = open_page(main);
else if(i == 4) i = help_menu(main,1);
}
break;
case 'h' :
i = help_menu(main,1);
while(1)
{
main = init_main(main);
win = mainc(main);
disp(win);
ref_sub(sub);
box(win,0,0);
wrefresh(win);
if(i == 0) break;
else if(i == 1) i = open_file(main,1);
else if(i == 2) i = open_edit(main);
else if(i == 3) i = open_page(main);
else if(i == 4) i = help_menu(main,1);
}
break;
case 'x' :
if(save == 0)
nsave(main);
wrefresh(win);
system(cl);
endwin();
exit(0);
}
break;
case (KEY_UP) :
if (k == 1 && x1 < 78 - lm - rm) beep();
else
arrow_up();
break;
case (KEY_DOWN) :
i = checkc(k);
i = i - x1;
if (k == end -> row && (x + i <= 78 - rm)) beep();
else
arrow_down();
break;
case (KEY_LEFT) :
if (x1 == 1 && k == 1) beep();
else
arrow_left();
break;
case (KEY_RIGHT) :
arrow_right();
break;
case 10:
case (KEY_ENTER):
save = 0;
enter();
if (y == 21 - bm)
z++;
else y++;
k++;
x = lm + 1;
x1 = 1;
break;
case (KEY_F(1)) :
open_help(main);
break;
case (KEY_F(2)) :
save = 1;
fsave(main);
break;
case (KEY_F(3)) :
if(save == 0)
nsave(main);
open_win(main);
break;
case (KEY_F(4)) :
if(save == 0)
nsave(main);
strcpy(name,"noname");
main_win(main);
break;
case (KEY_F(5)) :
del_file(main);
break;
case (KEY_F(7)) :
forcolor(win);
break;
case (KEY_F(8)) :
backcolor(win);
break;
case (KEY_F(9)) :
leftm(main);
break;
case (KEY_F(10)) :
rightm(main);
break;
case (KEY_F(11)) :
topm(main);
break;
case (KEY_F(12)) :
botm(main);
break;
case 2 :
begin();
break;
case 5 :
endp();
break;
case (KEY_DC) :
save = 0;
d_char();
break;
case (KEY_BACKSPACE) :
save = 0;
back();
break;
case 25 :
d_lin();
break;
case 23 :
save = 0;
d_word();
break;
case (KEY_NPAGE) :
if (k == end -> row) beep();
else
{
for (i = 0;i < 21 - bm;i++)
{
arrow_down();
if (k == end -> row)
{
int j = checkc(k);
while(1)
{
i = j - x1;
if (x + i <= 78 - rm ) break;
arrow_right();
}
break;
}
}
}
break;
case (KEY_PPAGE) :
if (k == 1) beep();
else
{
for (i = 0;i < 21 - bm;i++)
{
arrow_up();
if (k == 1)
{
while(1)
{
if (x1 <= 78 - rm - lm) break;
arrow_left();
}
break;
}
}
}
break;
case (KEY_IC):
ins = (ins ? 0 : 1);
if (ins == 1) curs_set(1);
if (ins == 0) curs_set(2);
break;
case (KEY_HOME) :
home();
break;
case (KEY_END) :
enda();
break;
case 14 :
if (save == 0)
nsave(win);
strcpy(name,"noname");
inwin(win);
break;
case 1:
word_in(main);
break;
case 12 :
line_in(main);
break;
case '\t':
save = 0;
alpha(c);
x++;
if (x > 78 - rm)
{
y++;
if (y == 22 - bm)
{
z++;
y = 21 - bm;
}
x = lm + 1;
}
for (i = 0;i < tab - 1;i++)
{
alpha('\v');
x++;
if (x > 78 - rm)
{
y++;
if (y == 22 - bm)
{
z++;
y = 21 - bm;
}
x = lm + 1;
}
}
break;
default :
save = 0;
if(ins == 1)
alpha(c);
else
{
if (x1 <= checkc(k))
alins(c);
else alpha(c);
}
x++;
if (x > 78 - rm)
{
y++;
if (y == 22 - bm)
{
z++;
y = 21 - bm;
}
x = lm + 1;
}
}
ref_sub(sub);
disp(win);
}
}
void list :: arrow_up()
{
int j;
upa();
if (x1 > 78 - rm - lm)
x1 -= 78 - lm - rm;
else
{
k--;
int i = checkc(k);
j = i;
while (i > 78 - lm - rm)
i = i - (78 - lm - rm);
x = x > i + lm ? i + lm : x;
if (x <= lm) x = lm + 1;
if (j > 78 - lm - rm)
{
x1 = j;
i = i + lm - x;
x1 = x1 - i;
}
else x1 = x - lm;
}
node* p = find(k,x1);
while(p -> data == '\v' )
{
p = p -> prev;
x--;
if (x <= lm)
{
x = 78 - rm;
y--;
if (y <= tm)
{
y = tm + 1;
z--;
}
}
x1--;
}
}
void list :: arrow_down()
{
}
void list :: arrow_left()
{
}
void list :: arrow_right()
{
}
void list :: upa()
{
}
void list :: dwna()
{
}
void list :: delc(int x,int y)
{
}
void list :: dell()
{
}
void list :: ad_delc(int k,int x1,int y)
{
}
void list :: home()
{
}
void list :: begin()
{
}
void list :: enda()
{
}
void list :: endp()
{
while(k < end -> row)
arrow_down();
while(x1 < checkc(k)) arrow_right();
}
void list :: d_lin()
{
if (head -> next == NULL) beep();
else
{
save = 0;
dell();
}
}
void list :: fsave(WINDOW *main)
{
FILE *fp;
WINDOW *ws;
node *p,*q;
int c;
save = 1;
ws = subwin(main,1,80,24,0);
werase(ws);
init_pair(1,COLOR_WHITE,COLOR_BLACK);
wbkgd(ws,COLOR_PAIR(1) | A_BOLD);
if (!strcmp(name,"noname"))
{
mvwaddstr(ws,0,10,"Enter the file name : ");
wrefresh(ws);
echo();
wgetstr(ws,name);
noecho();
}
fp = fopen(name,"w+");
for (p = head;p != NULL;p = p -> down)
for (q = p -> next;q != NULL;q = q -> next)
{
putc(q -> data,fp);
if (q -> data == '\t')
for (int i = 0;i < 4;i++) q = q -> next;
}
fclose(fp);
}
void list :: nsave(WINDOW *main)
{
WINDOW *ws;
node *p,*q;
int c;
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,"File ");
waddstr(ws,name);
waddstr (ws," not saved. Save (y or n) ? : ");
wrefresh(ws);
c = wgetch(ws);
if (c == 'y') fsave(main);
}
WINDOW* list :: mainc(WINDOW *main)
{
WINDOW *win;
win = subwin(main,23,80,1,0);
init_pair(2,COLOR_WHITE,COLOR_BLUE);
wbkgd(win,COLOR_PAIR(2));
keypad(win,TRUE);
box(win,0,0);
return win;
}
WINDOW * list :: init_main(WINDOW *main)
{
WINDOW *menu,*bmen;
main = newwin(0,0,0,0);
werase(main);
init_pair(3,COLOR_WHITE,COLOR_BLUE);
wbkgd(main,COLOR_PAIR(3) | ACS_BOARD);
keypad(main,TRUE);
keypad(stdscr,TRUE);
menu = subwin(main,1,0,0,0);
init_pair(4,COLOR_BLACK,COLOR_CYAN);
init_pair(10,COLOR_BLACK,COLOR_YELLOW);
wbkgd(menu,COLOR_PAIR(4));
mvwaddstr(menu,0,8,"FILE");
mvwchgat(menu,0,8,1,A_REVERSE|A_BOLD,10,0);
mvwaddstr(menu,0,28,"EDIT");
mvwchgat(menu,0,28,1,A_REVERSE|A_BOLD,10,0);
mvwaddstr(menu,0,48,"PAGE");
mvwchgat(menu,0,48,1,A_REVERSE|A_BOLD,10,0);
mvwaddstr(menu,0,68,"HELP");
mvwchgat(menu,0,68,1,A_REVERSE|A_BOLD,10,0);
wrefresh(menu);
bmen = subwin(main,1,80,24,0);
init_pair(4,COLOR_BLACK,COLOR_CYAN);
wbkgd(bmen,COLOR_PAIR(4));
mvwaddstr(bmen,0,5,"HELP-----");
mvwaddstr(bmen,0,15,"F1");
mvwchgat(bmen,0,15,2,A_REVERSE|A_BOLD,10,0);
mvwaddstr(bmen,0,30,"MENU-----");
mvwaddstr(bmen,0,40,"ALT_F");
mvwchgat(bmen,0,40,5,A_REVERSE|A_BOLD,10,0);
return main;
}
void list :: ref_sub(WINDOW *sub)
{
char a,b;
werase(sub);
init_pair(1,COLOR_BLACK,COLOR_CYAN);
wbkgd(sub,COLOR_PAIR(1));
if (!(!(strcmp(name,"noname"))))
mvwprintw(sub,0,1,"File name : %s",name);
a = save ? 'Y' : 'N';
b = ins ? 'Y' : 'N';
mvwprintw(sub,0,31,"SAVE = %c , INS = %c ",a,b);
mvwprintw(sub,0,51,"ROW = %d,COL = %d x1 : %d",y + z - tm,x - lm,x1);
wrefresh(sub);
}
void list :: main_win(WINDOW *main)
{
int c,i;
char cl[] = "clear";
werase(main);
main = init_main(main);
wrefresh(main);
curs_set(0);
save = 1;
while(1)
{
main = init_main(main);
curs_set(0);
c = wgetch(main);
wrefresh(main);
switch(c)
{
case (KEY_F(3)) :
open_win(main);
break;
case (KEY_F(1)) :
open_help(main);
werase(main);
main = init_main(main);
break;
case (KEY_F(5)) :
del_file(main);
break;
case CNTRL_N :
strcpy(name,"noname");
inwin(main);
break;
case 27:
c = wgetch(main);
switch(c)
{
case 'f' :
i = open_file(main,0);
while(1)
{
main = init_main(main);
wrefresh(main);
if(i == 0) break;
else if(i == 1) i = open_file(main,0);
else if(i == 4) i = help_menu(main,0);
}
break;
case 'h' :
i = help_menu(main,0);
while(1)
{
main = init_main(main);
wrefresh(main);
if(i == 0) break;
else if(i == 1) i = open_file(main,0);
else if(i == 4) i = help_menu(main,0);
}
break;
case 'x' :
endwin();
system(cl);
exit(0);
break;
}
break;
}
}
}
void list :: open_win(WINDOW *main)
{
WINDOW *ws;
FILE *fp;
char nam[20];
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 opened : ");
wrefresh(ws);
echo();
wgetstr(ws,nam);
noecho();
fp = fopen(nam,"r");
if (fp != NULL)
{
fclose(fp);
strcpy(name,nam);
inwin(main);
}
else
{
werase(ws);
mvwprintw(ws,0,10,"The file %s not found : ",nam);
wrefresh(ws);
wgetch(ws);
}
}
void list :: open_help(WINDOW *main)
{
WINDOW *ws;
int c;
curs_set(0);
ws = subwin(main,23,80,1,0);
werase(ws);
box(ws,0,0);
init_pair(5,COLOR_RED,COLOR_WHITE);
init_pair(11,COLOR_WHITE,COLOR_BLUE);
wbkgd(ws,COLOR_PAIR(5));
mvwaddstr(ws,1,5,"FUNCTIONS");
mvwaddstr(ws,1,27,"HOT KEYS");
mvwaddstr(ws,1,42,"FUNCTIONS");
mvwaddstr(ws,1,68,"HOT KEYS");
mvwchgat(ws,1,0,80,A_NORMAL|A_BOLD,4,NULL);
for (int i = 1;i < 79;i++) mvwaddch(ws,2,i,'-');
for (int i = 1;i < 22;i++) mvwchgat(ws,i,38,1,ACS_VLINE,5,NULL);
mvwaddstr(ws,3,1,"HELP");
mvwaddstr(ws,3,30,"F1");
mvwaddstr(ws,4,4,"FILE OPTIONS");
mvwaddstr(ws,5,1,"SAVE FILE");
mvwaddstr(ws,5,30,"F2");
mvwaddstr(ws,6,1,"OPEN FILE");
mvwaddstr(ws,6,30,"F3");
mvwaddstr(ws,7,1,"CLOSE FILE");
mvwaddstr(ws,7,30,"F4");
mvwaddstr(ws,8,1,"DELETE FILE");
mvwaddstr(ws,8,30,"F5");
mvwaddstr(ws,9,1,"NEW FILE");
mvwaddstr(ws,9,30,"CNTRL_N");
mvwaddstr(ws,10,1,"EXIT EDITOR");
mvwaddstr(ws,10,30,"ALT_X");
mvwaddstr(ws,12,4,"MENU OPTIONS");
mvwaddstr(ws,13,1,"FILE");
mvwaddstr(ws,13,30,"ALT_F");
mvwaddstr(ws,14,1,"EDIT");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -