mirror of
https://github.com/eddyem/tty_term.git
synced 2025-12-06 10:35:12 +03:00
fix ctrl+C bug
This commit is contained in:
parent
32f67b2fc3
commit
c03d11e7b6
18
main.c
18
main.c
@ -31,11 +31,11 @@ static ttyd dtty = {.dev = NULL, .mutex = PTHREAD_MUTEX_INITIALIZER};
|
|||||||
//FILE *fd;
|
//FILE *fd;
|
||||||
|
|
||||||
void signals(int signo){
|
void signals(int signo){
|
||||||
|
signal(signo, SIG_IGN);
|
||||||
if(dtty.dev){
|
if(dtty.dev){
|
||||||
pthread_mutex_unlock(&dtty.mutex);
|
pthread_mutex_unlock(&dtty.mutex);
|
||||||
pthread_mutex_trylock(&dtty.mutex);
|
pthread_mutex_trylock(&dtty.mutex);
|
||||||
close_tty(&dtty.dev);
|
close_tty(&dtty.dev);
|
||||||
pthread_mutex_unlock(&dtty.mutex);
|
|
||||||
}
|
}
|
||||||
//fprintf(fd, "stop\n");
|
//fprintf(fd, "stop\n");
|
||||||
//fflush(fd);
|
//fflush(fd);
|
||||||
@ -67,13 +67,13 @@ int main(int argc, char **argv){
|
|||||||
strcpy(dtty.seol, seol);
|
strcpy(dtty.seol, seol);
|
||||||
int eollen = strlen(EOL);
|
int eollen = strlen(EOL);
|
||||||
dtty.eollen = eollen;
|
dtty.eollen = eollen;
|
||||||
|
init_ncurses();
|
||||||
|
init_readline();
|
||||||
signal(SIGTERM, signals); // kill (-15) - quit
|
signal(SIGTERM, signals); // kill (-15) - quit
|
||||||
signal(SIGHUP, signals); // hup - quit
|
signal(SIGHUP, signals); // hup - quit
|
||||||
signal(SIGINT, signals); // ctrl+C - quit
|
signal(SIGINT, signals); // ctrl+C - quit
|
||||||
signal(SIGQUIT, signals); // ctrl+\ - quit
|
signal(SIGQUIT, signals); // ctrl+\ - quit
|
||||||
signal(SIGTSTP, SIG_IGN); // ignore ctrl+Z
|
signal(SIGTSTP, SIG_IGN); // ignore ctrl+Z
|
||||||
init_ncurses();
|
|
||||||
init_readline();
|
|
||||||
pthread_t writer;
|
pthread_t writer;
|
||||||
if(pthread_create(&writer, NULL, cmdline, (void*)&dtty)) ERR("pthread_create()");
|
if(pthread_create(&writer, NULL, cmdline, (void*)&dtty)) ERR("pthread_create()");
|
||||||
settimeout(G->tmoutms);
|
settimeout(G->tmoutms);
|
||||||
@ -84,27 +84,27 @@ int main(int argc, char **argv){
|
|||||||
char *buf = dtty.dev->buf;
|
char *buf = dtty.dev->buf;
|
||||||
char *eol = NULL, *estr = buf + l;
|
char *eol = NULL, *estr = buf + l;
|
||||||
do{
|
do{
|
||||||
eol = strchr(buf, '\n');
|
/*eol = strchr(buf, '\n');
|
||||||
if(eol){
|
if(eol){
|
||||||
*eol = 0;
|
*eol = 0;
|
||||||
add_ttydata(buf);
|
add_ttydata(buf);
|
||||||
buf = eol + 1;
|
buf = eol + 1;
|
||||||
}else{
|
}else{
|
||||||
add_ttydata(buf);
|
add_ttydata(buf);
|
||||||
}
|
}*/
|
||||||
/*eol = strstr(buf, EOL);
|
eol = strstr(buf, EOL);
|
||||||
if(eol){
|
if(eol){
|
||||||
*eol = 0;
|
*eol = 0;
|
||||||
add_ttydata(buf);
|
add_ttydata(buf);
|
||||||
buf = eol + eollen;
|
buf = eol + eollen;
|
||||||
}else{
|
}else{
|
||||||
char *ptr = buf;
|
/* char *ptr = buf;
|
||||||
while(*ptr){
|
while(*ptr){
|
||||||
if(*ptr == '\n' || *ptr == '\r'){ *ptr = 0; break;}
|
if(*ptr == '\n' || *ptr == '\r'){ *ptr = 0; break;}
|
||||||
++ptr;
|
++ptr;
|
||||||
}
|
|
||||||
add_ttydata(buf);
|
|
||||||
}*/
|
}*/
|
||||||
|
add_ttydata(buf);
|
||||||
|
}
|
||||||
}while(eol && buf < estr);
|
}while(eol && buf < estr);
|
||||||
}else if(l < 0){
|
}else if(l < 0){
|
||||||
pthread_mutex_unlock(&dtty.mutex);
|
pthread_mutex_unlock(&dtty.mutex);
|
||||||
|
|||||||
@ -136,8 +136,8 @@ static void readline_redisplay(){
|
|||||||
|
|
||||||
static void show_mode(bool for_resize){
|
static void show_mode(bool for_resize){
|
||||||
wclear(sep_win);
|
wclear(sep_win);
|
||||||
if(insert_mode) wprintw(sep_win, "INSERT (TAB to switch, ctrl+D to quit) ENDLINE: %s", dtty?dtty->seol:"n");
|
if(insert_mode) wprintw(sep_win, "INSERT (TAB to switch, ctrl+D to quit) ENDLINE: %s SPEED: %d", dtty?dtty->seol:"n", dtty?dtty->dev->speed:"NC");
|
||||||
else wprintw(sep_win, "SCROLL (TAB to switch, q to quit) ENDLINE: %s", dtty?dtty->seol:"n");
|
else wprintw(sep_win, "SCROLL (TAB to switch, q to quit) ENDLINE: %s SPEED: %d", dtty?dtty->seol:"n", dtty?dtty->dev->speed:"NC");
|
||||||
if(for_resize) wnoutrefresh(sep_win);
|
if(for_resize) wnoutrefresh(sep_win);
|
||||||
else wrefresh(sep_win);
|
else wrefresh(sep_win);
|
||||||
cmd_win_redisplay(for_resize);
|
cmd_win_redisplay(for_resize);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user