diff options
author | Timo Sirainen <cras@irssi.org> | 2001-10-28 23:47:47 +0000 |
---|---|---|
committer | cras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564> | 2001-10-28 23:47:47 +0000 |
commit | 801e593718fe5494d3b9b357307242bc11873c48 (patch) | |
tree | 1b1bfa7581a037641f41f5f48855b60997b998d9 | |
parent | 09ca58961bc0f9c5a713f4ac20192b73d25c33a6 (diff) | |
download | irssi-801e593718fe5494d3b9b357307242bc11873c48.zip |
term_getch() -> term_gets() which can be used to read multiple keypresses at
once. Also fixes keyboard not working with netbsd.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1935 dbcabf3a-b0e7-0310-adc4-f8d773084564
-rw-r--r-- | src/fe-text/gui-readline.c | 13 | ||||
-rw-r--r-- | src/fe-text/term-curses.c | 23 | ||||
-rw-r--r-- | src/fe-text/term-terminfo.c | 5 | ||||
-rw-r--r-- | src/fe-text/term.h | 2 | ||||
-rw-r--r-- | src/fe-text/terminfo-core.c | 2 |
5 files changed, 24 insertions, 21 deletions
diff --git a/src/fe-text/gui-readline.c b/src/fe-text/gui-readline.c index 8008d6d6..61523d9d 100644 --- a/src/fe-text/gui-readline.c +++ b/src/fe-text/gui-readline.c @@ -327,15 +327,12 @@ static void key_delete_to_next_space(void) void readline(void) { - int key; + unsigned char buffer[128]; + int ret, i; - for (;;) { - key = term_getch(); - if (key == -1) - break; - - handle_key(key); - } + ret = term_gets(buffer, sizeof(buffer)); + for (i = 0; i < ret; i++) + handle_key(buffer[i]); } time_t get_idle_time(void) diff --git a/src/fe-text/term-curses.c b/src/fe-text/term-curses.c index dad1fedc..6f71ac29 100644 --- a/src/fe-text/term-curses.c +++ b/src/fe-text/term-curses.c @@ -363,18 +363,23 @@ void term_stop(void) irssi_redraw(); } -int term_getch(void) +int term_gets(unsigned char *buffer, int size) { - int key; - - key = getch(); - if (key == ERR) - return -1; + int key, count; + for (count = 0; count < size; ) { + key = getch(); #ifdef KEY_RESIZE - if (key == KEY_RESIZE) - return -1; + if (key == KEY_RESIZE) + continue; #endif - return key; + if (key == ERR) + break; + + buffer[count] = key; + count++; + } + + return count; } diff --git a/src/fe-text/term-terminfo.c b/src/fe-text/term-terminfo.c index 9beccbf0..f17e354f 100644 --- a/src/fe-text/term-terminfo.c +++ b/src/fe-text/term-terminfo.c @@ -312,7 +312,8 @@ void term_stop(void) irssi_redraw(); } -int term_getch(void) +int term_gets(unsigned char *buffer, int size) { - return fgetc(current_term->in); + /* fread() doesn't work */ + return read(fileno(current_term->in), buffer, size); } diff --git a/src/fe-text/term.h b/src/fe-text/term.h index bda89462..74e51f31 100644 --- a/src/fe-text/term.h +++ b/src/fe-text/term.h @@ -73,7 +73,7 @@ void term_refresh_thaw(void); void term_refresh(TERM_WINDOW *window); void term_stop(void); -int term_getch(void); +int term_gets(unsigned char *buffer, int size); /* internal */ void term_common_init(void); diff --git a/src/fe-text/terminfo-core.c b/src/fe-text/terminfo-core.c index d60001e7..9cbd4e20 100644 --- a/src/fe-text/terminfo-core.c +++ b/src/fe-text/terminfo-core.c @@ -429,7 +429,7 @@ static void terminfo_input_init(TERM_REC *term) memcpy(&term->tio, &term->old_tio, sizeof(term->tio)); term->tio.c_lflag &= ~(ICANON | ECHO); /* CBREAK, no ECHO */ - term->tio.c_cc[VMIN] = 0; /* non-blocking read */ + term->tio.c_cc[VMIN] = 1; /* read() is satisfied after 1 char */ term->tio.c_cc[VTIME] = 0; /* No timer */ /* Disable INTR, QUIT, VDSUSP and SUSP keys */ |