X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=abook_rl.c;fp=abook_rl.c;h=0cd591e9dc7c2a4861b52dbdd54a9aa0abaa21f0;hb=548845673bdbe52a3cb2d7c6c2818d3202fffcba;hp=0000000000000000000000000000000000000000;hpb=4501dbfd29a28bc5291e9ed7401a19b52b52861c;p=pkg%2Fabook.git diff --git a/abook_rl.c b/abook_rl.c new file mode 100644 index 0000000..0cd591e --- /dev/null +++ b/abook_rl.c @@ -0,0 +1,107 @@ +/* + * $Id$ + * + * by JH + * + * Copyright (C) Jaakko Heinonen + */ + + +#include +#include +#include +#include "abook.h" +#include "abook_rl.h" + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#if defined(HAVE_READLINE_READLINE_H) +# include +#elif defined(HAVE_READLINE_H) +# include +#endif + +#if defined(HAVE_READLINE_HISTORY_H) +# include +#elif defined(HAVE_HISTORY_H) +# include +#endif + +#define RL_READLINE_NAME "Abook" + +static int rl_x, rl_y; +static WINDOW *rl_win; + +static void +rl_refresh() +{ + /*refresh();*/ + wrefresh(rl_win); +} + +static void +rline_update() +{ + int real_point = rl_point + rl_x; + + if(real_point > (COLS - 1)) + mvwaddnstr(rl_win, rl_y, rl_x, + rl_line_buffer + (1 + real_point - COLS), + COLS - rl_x - 1); + else + mvwaddnstr(rl_win, rl_y, rl_x, rl_line_buffer, rl_end); + + wclrtoeol(rl_win); + wmove(rl_win, rl_y, min(real_point, COLS - 1)); + + rl_refresh(); +} + +void +rline_compdisp(char **matches, int n, int max_len) +{ + /* + * dummy + */ +} + +static void +abook_rl_init(int use_completion) +{ + rl_readline_name = RL_READLINE_NAME; + + rl_already_prompted = 1; + + rl_redisplay_function = rline_update; + rl_completion_display_matches_hook = rline_compdisp; + + rl_unbind_function_in_map(rl_clear_screen, rl_get_keymap()); + + if(use_completion) + rl_bind_key('\t', rl_menu_complete); + else + rl_unbind_function_in_map(rl_complete, rl_get_keymap()); + + clear_history(); +} + +char * +abook_readline(WINDOW *w, int y, int x, char *s, int limit, int use_completion) +{ + char *ret = NULL; + + rl_win = w; + abook_rl_init(use_completion); + + wmove(rl_win, rl_y = y, rl_x = x); + rl_refresh(); + + if(s && *s) + add_history(s); + + ret = readline(NULL); + + return ret; +}