X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=abook_rl.c;h=c09b4bb6dc4866e8402bfb4b1f37c0a6b58459b4;hb=64990eb83b3bab7df8784b6ac1ef540016070e49;hp=43ab31a0fe7d45323a6d06c6834e334c9a9aace2;hpb=4128f78f5543bebc7cd1868736855207019f1f71;p=pkg%2Fabook.git diff --git a/abook_rl.c b/abook_rl.c index 43ab31a..c09b4bb 100644 --- a/abook_rl.c +++ b/abook_rl.c @@ -12,6 +12,9 @@ #include "abook.h" #include "abook_rl.h" +#define KEYPAD_HACK 1 /* enable keypad hack */ +#define CBREAK_HACK 1 /* enable cbreak hack */ + #ifdef HAVE_CONFIG_H # include "config.h" #endif @@ -28,6 +31,10 @@ # include #endif +#ifdef HANDLE_MULTIBYTE +# include +#endif + #define RL_READLINE_NAME "Abook" static int rl_x, rl_y; @@ -42,10 +49,22 @@ rl_refresh() wrefresh(rl_win); } +#ifdef HANDLE_MULTIBYTE +static int +rline_calc_point() +{ + return (int)mbsnwidth(rl_line_buffer, rl_point, 0); +} +#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, @@ -81,7 +100,9 @@ abook_rl_init(bool use_completion) { rl_readline_name = RL_READLINE_NAME; +#if RL_VERSION_MAJOR >= 4 rl_already_prompted = 1; +#endif rl_catch_sigwinch = 0; rl_redisplay_function = rline_update; @@ -118,11 +139,22 @@ abook_readline(WINDOW *w, int y, int x, char *s, int limit, bool use_completion) if(s && *s) add_history(s); +#ifdef KEYPAD_HACK + keypad(w, FALSE); +#endif +#ifdef CBREAK_HACK + nocbreak(); +#endif ret = readline(NULL); +#ifdef CBREAK_HACK + cbreak(); +#endif +#ifdef KEYPAD_HACK + keypad(w, TRUE); +#endif - if(rl_cancelled) { - if(ret) - free(ret); + if(rl_cancelled && ret) { + free(ret); ret = NULL; }