summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Sirainen <cras@irssi.org>2001-10-28 23:47:47 +0000
committercras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564>2001-10-28 23:47:47 +0000
commit801e593718fe5494d3b9b357307242bc11873c48 (patch)
tree1b1bfa7581a037641f41f5f48855b60997b998d9
parent09ca58961bc0f9c5a713f4ac20192b73d25c33a6 (diff)
downloadirssi-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.c13
-rw-r--r--src/fe-text/term-curses.c23
-rw-r--r--src/fe-text/term-terminfo.c5
-rw-r--r--src/fe-text/term.h2
-rw-r--r--src/fe-text/terminfo-core.c2
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 */