X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=apps%2Firssi%2Fsrc%2Ffe-text%2Fterm-terminfo.c;h=4e9781fe744f405efd4c786d97a74029086d7a91;hp=e09e9c20481fafd7bdd7ebff330e89ab17aa6402;hb=f6ace22529aa51fa32b4957a63eca20b952be947;hpb=a5ae6ba34518dbaa3396a5ea1cd5c3bf212570b4 diff --git a/apps/irssi/src/fe-text/term-terminfo.c b/apps/irssi/src/fe-text/term-terminfo.c index e09e9c20..4e9781fe 100644 --- a/apps/irssi/src/fe-text/term-terminfo.c +++ b/apps/irssi/src/fe-text/term-terminfo.c @@ -379,14 +379,21 @@ void term_addch(TERM_WINDOW *window, int chr) if (term_detached) return; if (vcmove) term_move_real(); - term_printed_text(1); + + /* With UTF-8, move cursor only if this char is either single-byte + (8. bit on) or beginning of multibyte (7+8 bits on) */ + if (term_type != TERM_TYPE_UTF8 || + (chr & 0x80) == 0 || (chr & 0x40) == 0) { + term_printed_text(1); + } + if (vcy != term_height || vcx != 0) putc(chr, window->term->out); } static void term_addch_utf8(TERM_WINDOW *window, unichar chr) { - unsigned char buf[10]; + char buf[10]; int i, len; len = utf16_char_to_utf8(chr, buf); @@ -630,9 +637,9 @@ int term_gets(unichar *buffer, int size) if (i >= term_inbuf_pos) term_inbuf_pos = 0; - else { + else if (i > 0) { memmove(term_inbuf+i, term_inbuf, term_inbuf_pos-i); - term_inbuf_pos = i; + term_inbuf_pos -= i; } }