From 51105720ab32faa4548655266ca0ae4c661f0701 Mon Sep 17 00:00:00 2001 From: James Booth Date: Thu, 15 Jan 2015 23:43:22 +0000 Subject: Moved input line to inputwin --- src/ui/inputwin.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) (limited to 'src/ui/inputwin.c') diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c index c4c90986..43eaeba8 100644 --- a/src/ui/inputwin.c +++ b/src/ui/inputwin.c @@ -72,9 +72,12 @@ #define KEY_CTRL_U 0025 #define KEY_CTRL_W 0027 +#define INP_WIN_MAX 1000 + static WINDOW *inp_win; static int pad_start = 0; static int rows, cols; +static char line[INP_WIN_MAX]; static int inp_size; static int _handle_edit(int result, const wint_t ch, char *input); @@ -132,13 +135,13 @@ inp_block(void) wtimeout(inp_win, -1); } -void -inp_get_char(char *result, int *key_type, wint_t *ch) +char * +inp_get_char(int *key_type, wint_t *ch) { int display_size = 0; if (inp_size != 0) { - display_size = g_utf8_strlen(result, inp_size); + display_size = g_utf8_strlen(line, inp_size); } // echo off, and get some more input @@ -146,7 +149,7 @@ inp_get_char(char *result, int *key_type, wint_t *ch) *key_type = wget_wch(inp_win, ch); gboolean in_command = FALSE; - if ((display_size > 0 && result[0] == '/') || + if ((display_size > 0 && line[0] == '/') || (display_size == 0 && *ch == '/')) { in_command = TRUE; } @@ -159,11 +162,11 @@ inp_get_char(char *result, int *key_type, wint_t *ch) } // if it wasn't an arrow key etc - if (!_handle_edit(*key_type, *ch, result)) { + if (!_handle_edit(*key_type, *ch, line)) { if (_printable(*ch) && *key_type != KEY_CODE_YES) { if (inp_size >= INP_WIN_MAX) { *ch = ERR; - return; + return NULL; } int inp_x = getcurx(inp_win); @@ -173,9 +176,9 @@ inp_get_char(char *result, int *key_type, wint_t *ch) char bytes[MB_CUR_MAX]; size_t utf_len = wcrtomb(bytes, *ch, NULL); - char *next_ch = g_utf8_offset_to_pointer(result, inp_x); + char *next_ch = g_utf8_offset_to_pointer(line, inp_x); char *offset; - for (offset = &result[inp_size - 1]; offset >= next_ch; offset--) { + for (offset = &line[inp_size - 1]; offset >= next_ch; offset--) { *(offset + utf_len) = *offset; } int i; @@ -184,7 +187,7 @@ inp_get_char(char *result, int *key_type, wint_t *ch) } inp_size += utf_len; - result[inp_size] = '\0'; + line[inp_size] = '\0'; waddstr(inp_win, next_ch); wmove(inp_win, 0, inp_x + 1); @@ -202,9 +205,9 @@ inp_get_char(char *result, int *key_type, wint_t *ch) if (utf_len < MB_CUR_MAX) { int i; for (i = 0 ; i < utf_len; i++) { - result[inp_size++] = bytes[i]; + line[inp_size++] = bytes[i]; } - result[inp_size] = '\0'; + line[inp_size] = '\0'; bytes[utf_len] = '\0'; waddstr(inp_win, bytes); @@ -227,8 +230,11 @@ inp_get_char(char *result, int *key_type, wint_t *ch) echo(); if (*ch == '\n') { - result[inp_size++] = '\0'; + line[inp_size++] = '\0'; inp_size = 0; + return strdup(line); + } else { + return NULL; } } -- cgit 1.4.1-2-gfad0