about summary refs log tree commit diff stats
path: root/src/ui
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2015-01-15 23:31:06 +0000
committerJames Booth <boothj5@gmail.com>2015-01-15 23:31:06 +0000
commitbb11dc097320443c810ea0572f7b988bfa48e4a4 (patch)
treed47111ec274c16354c9769a1c1789805a740e492 /src/ui
parente326aaa84fd6a3f403e0ec80e02e2b766a5f74c7 (diff)
parent65fc4bcd9ff8e92c0f87e1c9520974a805a9ceac (diff)
downloadprofani-tty-bb11dc097320443c810ea0572f7b988bfa48e4a4.tar.gz
Merge branch 'master' into inp-utf8
Conflicts:
	src/ui/inputwin.c
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/core.c13
-rw-r--r--src/ui/inputwin.c42
-rw-r--r--src/ui/inputwin.h2
3 files changed, 28 insertions, 29 deletions
diff --git a/src/ui/core.c b/src/ui/core.c
index 45dd2a08..9ded610b 100644
--- a/src/ui/core.c
+++ b/src/ui/core.c
@@ -74,7 +74,7 @@
 
 static char *win_title;
 
-static char input[INP_WIN_MAX];
+static char line[INP_WIN_MAX];
 static int inp_size;
 
 #ifdef HAVE_LIBXSS
@@ -181,19 +181,20 @@ ui_close(void)
 char*
 ui_readline(void)
 {
-    int result = 0;
-    wint_t ch = inp_get_char(input, &result);
+    int key_type;
+    wint_t ch;
+    inp_get_char(line, &key_type, &ch);
 
     _win_handle_switch(ch);
 
     ProfWin *current = wins_get_current();
-    win_handle_page(current, ch, result);
+    win_handle_page(current, ch, key_type);
 
     if (ch == KEY_RESIZE) {
         ui_resize();
     }
 
-    if (ch != ERR && result != ERR) {
+    if (ch != ERR && key_type != ERR) {
         ui_reset_idle_time();
         ui_input_nonblocking(TRUE);
     } else {
@@ -201,7 +202,7 @@ ui_readline(void)
     }
 
     if (ch == '\n') {
-        return input;
+        return line;
     } else {
         return NULL;
     }
diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c
index b5caa258..917f6ad7 100644
--- a/src/ui/inputwin.c
+++ b/src/ui/inputwin.c
@@ -133,34 +133,34 @@ inp_block(void)
     wtimeout(inp_win, -1);
 }
 
-wint_t
-inp_get_char(char *input, int *result)
+void
+inp_get_char(char *result, int *key_type, wint_t *ch)
 {
-    wint_t ch;
     int display_size = _get_display_length(input);
 
     // echo off, and get some more input
     noecho();
-    *result = wget_wch(inp_win, &ch);
+    *key_type = wget_wch(inp_win, ch);
 
     gboolean in_command = FALSE;
-    if ((display_size > 0 && input[0] == '/') ||
-            (display_size == 0 && ch == '/')) {
+    if ((display_size > 0 && result[0] == '/') ||
+            (display_size == 0 && *ch == '/')) {
         in_command = TRUE;
     }
 
-    if (*result == ERR) {
+    if (*key_type == ERR) {
         prof_handle_idle();
     }
-    if ((*result != ERR) && (*result != KEY_CODE_YES) && !in_command && _printable(ch)) {
+    if ((*key_type != ERR) && (*key_type != KEY_CODE_YES) && !in_command && _printable(*ch)) {
         prof_handle_activity();
     }
 
     // if it wasn't an arrow key etc
-    if (!_handle_edit(*result, ch, input)) {
-        if (_printable(ch) && *result != KEY_CODE_YES) {
+    if (!_handle_edit(*key_type, *ch, result)) {
+        if (_printable(*ch) && *key_type != KEY_CODE_YES) {
             if (inp_size >= INP_WIN_MAX) {
-                return ERR;
+                *ch = ERR;
+                return;
             }
 
             int inp_x = getcurx(inp_win);
@@ -168,11 +168,11 @@ inp_get_char(char *input, int *result)
             // handle insert if not at end of input
             if (inp_x < display_size) {
                 char bytes[MB_CUR_MAX];
-                size_t utf_len = wcrtomb(bytes, ch, NULL);
+                size_t utf_len = wcrtomb(bytes, *ch, NULL);
 
-                char *next_ch = g_utf8_offset_to_pointer(input, inp_x);
+                char *next_ch = g_utf8_offset_to_pointer(result, inp_x);
                 char *offset;
-                for (offset = &input[inp_size - 1]; offset >= next_ch; offset--) {
+                for (offset = &result[inp_size - 1]; offset >= next_ch; offset--) {
                     *(offset + utf_len) = *offset;
                 }
                 int i;
@@ -181,7 +181,7 @@ inp_get_char(char *input, int *result)
                 }
 
                 inp_size += utf_len;
-                input[inp_size] = '\0';
+                result[inp_size] = '\0';
                 waddstr(inp_win, next_ch);
                 wmove(inp_win, 0, inp_x + 1);
 
@@ -193,15 +193,15 @@ inp_get_char(char *input, int *result)
             // otherwise just append
             } else {
                 char bytes[MB_CUR_MAX+1];
-                size_t utf_len = wcrtomb(bytes, ch, NULL);
+                size_t utf_len = wcrtomb(bytes, *ch, NULL);
 
                 // wcrtomb can return (size_t) -1
                 if (utf_len < MB_CUR_MAX) {
                     int i;
                     for (i = 0 ; i < utf_len; i++) {
-                        input[inp_size++] = bytes[i];
+                        result[inp_size++] = bytes[i];
                     }
-                    input[inp_size] = '\0';
+                    result[inp_size] = '\0';
 
                     bytes[utf_len] = '\0';
                     waddstr(inp_win, bytes);
@@ -223,12 +223,10 @@ inp_get_char(char *input, int *result)
 
     echo();
 
-    if (ch == '\n') {
-        input[inp_size++] = '\0';
+    if (*ch == '\n') {
+        result[inp_size++] = '\0';
         inp_size = 0;
     }
-
-    return ch;
 }
 
 void
diff --git a/src/ui/inputwin.h b/src/ui/inputwin.h
index 8a01745d..eb6c2127 100644
--- a/src/ui/inputwin.h
+++ b/src/ui/inputwin.h
@@ -36,7 +36,7 @@
 #define UI_INPUTWIN_H
 
 void create_input_window(void);
-wint_t inp_get_char(char *input, int *result);
+void inp_get_char(char *result, int *key_type, wint_t *ch);
 void inp_win_reset(void);
 void inp_win_resize(void);
 void inp_put_back(void);