1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-09-22 19:45:54 -04:00

Merge branch 'master' into inp-utf8

Conflicts:
	src/ui/inputwin.c
This commit is contained in:
James Booth 2015-01-15 23:31:06 +00:00
commit bb11dc0973
3 changed files with 28 additions and 29 deletions

View File

@ -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;
}

View File

@ -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

View File

@ -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);