📄 zped.c
字号:
current_y = search_y;
cursor_y = Scursor_y;
editTop = searchTop;
midwinBarUpdate(pathName);
edit_refresh();
} else {
wclear(botwin);
wprintw(botwin,"%s",searchNotFind);
wrefresh(botwin);
wrefresh(edit);
}
/*To search a string backwards*/
} else if(temp[0] == '?') {
searchInit();
strcpy(searchTarget,&temp[1]);
searchCount = charNum-1;
if(search_up()) {
current_R = searchRow;
current_x = search_x;
current_y = search_y;
cursor_y = Scursor_y;
editTop = searchTop;
midwinBarUpdate(pathName);
edit_refresh();
} else {
wclear(botwin);
wprintw(botwin,"%s",searchNotFind);
wrefresh(botwin);
wrefresh(edit);
}
} else if(temp[0] == 'g') {
sscanf(temp,"g %ld",&gotoline);
do_go_to_line(gotoline-1);
edit_refresh();
midwinBarUpdate(pathName);
}
return 1;
}
/*The main function*/
int main(char argc,char *argv[])
{
int kbinput = 0;
char pathName[MAXLENGTH];
char worryKey[] = "no command match";
char insertMode[] = "-- INSERT --";
char visualMode[] = "-- VISUAL --";
char replaceMode[] = "-- REPLACE --";
char openFile[MAXLENGTH] = "can not open flie ";
char writeNeeded[] = " No write since last change.";
char searchNotFind[] = "The word was not found.";
int modeState = 1;
struct termios term;
pathName[0] = 0;
/* First back up the old settings so they can be restored, duh */
tcgetattr(0, &oldterm);
term = oldterm;
term.c_cc[VINTR] = _POSIX_VDISABLE;
term.c_cc[VQUIT] = _POSIX_VDISABLE;
term.c_lflag &= ~IEXTEN;
tcsetattr(0, TCSANOW, &term);
/* now ncurses init stuff*/
initscr();
savetty();
nonl();
cbreak();
noecho();
raw();
/* Set up some global variables */
global_ini();
window_ini();
/*deal with the preopen*/
if(argc > 1) {
strcpy(pathName,argv[1]);
if(!readOneFile(pathName)) {
strcat(openFile,pathName);
wclear(botwin);
mvwprintw(botwin,0,0,"%s",openFile);
wrefresh(botwin);
wrefresh(edit);
}
edit_refresh();
}
midwinBarUpdate(pathName);
/*Begin the main loop*/
while(1) {
kbinput = wgetch(edit);
if( modeState == 1) {
switch(kbinput) {
case 'Z':
kbinput = wgetch(edit);
if(kbinput == 'Z') {
if(change) {
wclear(botwin);
wprintw(botwin,"%s",writeNeeded);
wrefresh(botwin);
wrefresh(edit);
} else {
destroyStruct();
finish();
}
}
break;
case 'i':
modeState = 2;
wclear(botwin);
mvwprintw(botwin,0,0,"%s",insertMode);
wrefresh(botwin);
wrefresh(edit);
break;
case FKEY_ESC:
wclear(botwin);
wrefresh(botwin);
wrefresh(edit);
break;
case 'h':
do_left();
midwinBarUpdate(pathName);
update_line(cursor_y,current_R);
wrefresh(edit);
break;
case KEY_LEFT:
do_left();
midwinBarUpdate(pathName);
update_line(cursor_y,current_R);
wrefresh(edit);
break;
case 'j':
do_down();
midwinBarUpdate(pathName);
edit_refresh();
break;
case KEY_DOWN:
do_down();
midwinBarUpdate(pathName);
edit_refresh();
break;
case 'k':
do_up();
midwinBarUpdate(pathName);
edit_refresh();
break;
case KEY_UP:
do_up();
midwinBarUpdate(pathName);
edit_refresh();
break;
case 'l':
do_right();
midwinBarUpdate(pathName);
update_line(cursor_y,current_R);
wrefresh(edit);
break;
case 'N':
if(search_pre()) {
current_R = searchRow;
current_x = search_x;
current_y = search_y;
cursor_y = Scursor_y;
editTop = searchTop;
midwinBarUpdate(pathName);
edit_refresh();
} else {
wclear(botwin);
wprintw(botwin,"%s",searchNotFind);
wrefresh(botwin);
}
break;
case 'n':
if(search_next()) {
current_R = searchRow;
current_x = search_x - searchCount;
current_y = search_y;
cursor_y = Scursor_y;
editTop = searchTop;
midwinBarUpdate(pathName);
edit_refresh();
} else {
wclear(botwin);
wprintw(botwin,"%s",searchNotFind);
wrefresh(botwin);
}
break;
case KEY_RIGHT:
do_right();
midwinBarUpdate(pathName);
update_line(cursor_y,current_R);
wrefresh(edit);
break;
case KEY_HOME:
do_home();
update_line(cursor_y,current_R);
wrefresh(edit);
break;
case KEY_END:
do_end();
update_line(cursor_y,current_R);
wrefresh(edit);
break;
case KEY_NPAGE:
do_pagedown();
midwinBarUpdate(pathName);
edit_refresh();
break;
case KEY_PPAGE:
do_pageup();
midwinBarUpdate(pathName);
edit_refresh();
break;
case 'x':
change = 1;
midwinBarUpdate(pathName);
dele_char();
edit_refresh();
break;
case KEY_IC:
modeState = 4;
wclear(botwin);
wprintw(botwin,"%s",replaceMode);
wrefresh(botwin);
wrefresh(edit);
break;
case 'v':
modeState = 3;
selectInit();
wclear(botwin);
wprintw(botwin,"%s",visualMode);
wrefresh(botwin);
wrefresh(edit);
break;
case 'p':
pasteSelect();
change = 1;
midwinBarUpdate(pathName);
edit_refresh();
break;
case ':':
case '/':
case '?':
case 'g':
handleCom(kbinput,pathName);
break;
default:
wclear(botwin);
mvwprintw(botwin,0,0,"%s",worryKey);
wrefresh(botwin);
wrefresh(edit);
break;
}
}
else if(modeState == 2){
switch(kbinput) {
case FKEY_ESC:
modeState = 1;
wclear(botwin);
wrefresh(botwin);
wrefresh(edit);
break;
case '\t':
do_char(' ');
do_char(' ');
do_char(' ');
do_char(' ');
change = 1;
midwinBarUpdate(pathName);
break;
case KEY_LEFT:
do_left();
midwinBarUpdate(pathName);
update_line(cursor_y,current_R);
wrefresh(edit);
break;
case KEY_RIGHT:
do_right();
midwinBarUpdate(pathName);
update_line(cursor_y,current_R);
wrefresh(edit);
break;wrefresh(edit);
case KEY_UP:
do_up();
midwinBarUpdate(pathName);
edit_refresh();
break;
case KEY_DOWN:
do_down();
midwinBarUpdate(pathName);
edit_refresh();
break;
case KEY_BACKSPACE:
change = 1;
midwinBarUpdate(pathName);
dele_char();
edit_refresh();
break;
case KEY_HOME:
do_home();
update_line(cursor_y,current_R);
wrefresh(edit);
break;
case KEY_END:
do_end();
update_line(cursor_y,current_R);
wrefresh(edit);
break;
case KEY_NPAGE:
do_pagedown();
midwinBarUpdate(pathName);
edit_refresh();
break;
case KEY_PPAGE:
do_pageup();
midwinBarUpdate(pathName);
edit_refresh();
break;
default:
if(allow_input(kbinput)) {
do_char(kbinput);
change = 1;
midwinBarUpdate(pathName);
edit_refresh();
}
break;
}
}
else if(modeState == 3) {
switch(kbinput) {
case FKEY_ESC:
modeState = 1;
edit_refresh();
break;
case 'h':
case KEY_LEFT:
select_left();
edit_refresh();
selectUpdate();
wrefresh(edit);
break;
case 'l':
case KEY_RIGHT:
select_right();
edit_refresh();
selectUpdate();
wrefresh(edit);
break;
case 'j':
case KEY_DOWN:
select_down();
edit_refresh();
selectUpdate();
wrefresh(edit);
break;
case 'k':
case KEY_UP:
select_up();
edit_refresh();
selectUpdate();
wrefresh(edit);
break;
case 'x':
cutSelect();
edit_refresh();
change = 1;
midwinBarUpdate(pathName);
modeState = 1;
break;
case 'd':
deleSelect();
edit_refresh();
change = 1;
midwinBarUpdate(pathName);
modeState = 1;
break;
case 'y':
copySelect();
modeState = 1;
break;
case 'v':
modeState = 1;
wclear(botwin);
wrefresh(botwin);
edit_refresh();
break;
default:
break;
}
} else if (modeState == 4) {
switch(kbinput) {
case FKEY_ESC:
modeState = 1;
wclear(botwin);
wrefresh(botwin);
wrefresh(edit);
break;
case '\t':
insert_add_one(' ');
insert_add_one(' ');
insert_add_one(' ');
insert_add_one(' ');
change = 1;
midwinBarUpdate(pathName);
break;
case KEY_LEFT:
do_left();
midwinBarUpdate(pathName);
update_line(cursor_y,current_R);
wrefresh(edit);
break;
case KEY_RIGHT:
do_right();
midwinBarUpdate(pathName);
update_line(cursor_y,current_R);
wrefresh(edit);
break;wrefresh(edit);
case KEY_UP:
do_up();
midwinBarUpdate(pathName);
edit_refresh();
break;
case KEY_DOWN:
do_down();
midwinBarUpdate(pathName);
edit_refresh();
break;
case KEY_BACKSPACE:
change = 1;
midwinBarUpdate(pathName);
insert_dele_one();
edit_refresh();
break;
case KEY_HOME:
do_home();
update_line(cursor_y,current_R);
wrefresh(edit);
break;
case KEY_END:
do_end();
update_line(cursor_y,current_R);
wrefresh(edit);
break;
case KEY_NPAGE:
do_pagedown();
midwinBarUpdate(pathName);
edit_refresh();
break;
case KEY_PPAGE:
do_pageup();
midwinBarUpdate(pathName);
edit_refresh();
break;
default:
if(allow_input(kbinput)) {
insert_add_one(kbinput);
change = 1;
midwinBarUpdate(pathName);
edit_refresh();
}
break;
}
}
}
finish();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -