1
0
mirror of https://github.com/Tha14/toxic.git synced 2024-11-12 23:33:03 +01:00

Fix wchar cursor movement.

This commit is contained in:
AZ Huang 2013-12-12 13:41:16 +08:00
parent 1dad3711c4
commit bc8e737514

View File

@ -303,15 +303,17 @@ static void chat_onKey(ToxWindow *self, Tox *m, wint_t key)
int x, y, y2, x2;
getyx(self->window, y, x);
getmaxyx(self->window, y2, x2);
int cur_len = 0;
if (key == 0x107 || key == 0x8 || key == 0x7f) { /* BACKSPACE key: Remove character behind pos */
if (ctx->pos > 0) {
cur_len = wcwidth(ctx->line[ctx->pos - 1]);
del_char_buf_bck(ctx->line, &ctx->pos, &ctx->len);
if (x == 0)
wmove(self->window, y-1, x2-1);
wmove(self->window, y-1, x2 - cur_len);
else
wmove(self->window, y, x-1);
wmove(self->window, y, x - cur_len);
}
}
@ -342,29 +344,31 @@ static void chat_onKey(ToxWindow *self, Tox *m, wint_t key)
else if (key == KEY_END) { /* END key: move cursor to end of line */
if (ctx->pos != ctx->len) {
ctx->pos = ctx->len;
mv_curs_end(self->window, ctx->len, y2, x2);
mv_curs_end(self->window, wcswidth(ctx->line), y2, x2);
}
}
else if (key == KEY_LEFT) {
if (ctx->pos > 0) {
--ctx->pos;
cur_len = wcwidth(ctx->line[ctx->pos]);
if (x == 0)
wmove(self->window, y-1, x2-1);
wmove(self->window, y-1, x2 - cur_len);
else
wmove(self->window, y, x-1);
wmove(self->window, y, x - cur_len);
}
}
else if (key == KEY_RIGHT) {
if (ctx->pos < ctx->len) {
cur_len = wcwidth(ctx->line[ctx->pos]);
++ctx->pos;
if (x == x2-1)
wmove(self->window, y+1, 0);
else
wmove(self->window, y, x+1);
wmove(self->window, y, x + cur_len);
}
}
@ -413,7 +417,7 @@ static void chat_onKey(ToxWindow *self, Tox *m, wint_t key)
if (x == x2-1)
wmove(self->window, y+1, 0);
else
wmove(self->window, y, x+1);
wmove(self->window, y, x + wcwidth(key));
}
}
/* RETURN key: Execute command or print line */