X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;f=abook_rl.c;h=f9ebba6529f32c7e4a3675e4aa4c75e0df1bec38;hb=4d2aca39cdd96958b3f0bbc6973f15aac5133cdc;hp=22c66ce497527d764776ddee531ec95444722776;hpb=24be624311cedd42ed09acfc605cdf51546bb5ab;p=pkg%2Fabook.git diff --git a/abook_rl.c b/abook_rl.c index 22c66ce..f9ebba6 100644 --- a/abook_rl.c +++ b/abook_rl.c @@ -31,6 +31,10 @@ # include #endif +#ifdef HANDLE_MULTIBYTE +# include +#endif + #define RL_READLINE_NAME "Abook" static int rl_x, rl_y; @@ -45,10 +49,42 @@ rl_refresh() wrefresh(rl_win); } +#ifdef HANDLE_MULTIBYTE +static int +rline_calc_point() +{ + char *p; + int ret = 0; + + mbtowc(NULL, NULL, 0); + for(p = rl_line_buffer;(p - rl_line_buffer) < rl_point;) { + int a, l; + wchar_t wc; + + if((a = mbtowc(&wc, p, MB_CUR_MAX)) == 0) + break; + else if (a == -1) + return rl_point; /* fall back */ + else + p += a; + + l = wcwidth(wc); + if(l > 0) + ret += l; + } + + return ret; +} +#endif + static void rline_update() { +#ifdef HANDLE_MULTIBYTE + int real_point = rline_calc_point() + rl_x; +#else int real_point = rl_point + rl_x; +#endif if(real_point > (COLS - 1)) mvwaddnstr(rl_win, rl_y, rl_x,