#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
# include <history.h>
#endif
+#ifdef HANDLE_MULTIBYTE
+# include <mbswidth.h>
+#endif
+
#define RL_READLINE_NAME "Abook"
static int rl_x, rl_y;
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,
{
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;
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 && ret) {
free(ret);