#include #include #include #include static Keymap kmap; /* line handler */ void parse(char *input) { if(!input) { rl_callback_handler_remove(); rl_discard_keymap(kmap); exit(1); } free(input); } /* ESC handler*/ int hit1(int count, int key) { fprintf(stderr, "hit!\n"); return 0; } /* PageDown handler */ int hit2(int count, int key) { fprintf(stderr, "hit seq!\n"); return 0; } int preinput() { rl_set_keymap(kmap); return 0; } int main(int argc, char **argv) { char *buf; kmap = rl_make_keymap(); rl_bind_key_in_map(10, rl_newline, kmap); rl_bind_key_in_map(13, rl_newline, kmap); rl_bind_key_in_map(4, rl_delete, kmap); rl_bind_keyseq_in_map("\e", hit1, kmap); /* happens when using vi-mode */ rl_bind_keyseq_in_map("\e[6~", hit2, kmap); /* page down */ #if 0 rl_bind_keyseq_in_map("\e[6", hit2, kmap); /* this work, but it's not pagedown .. */ #endif rl_pre_input_hook = preinput; /* ensure kmap is used regardless of .inputrc */ rl_callback_handler_install("", parse); while(1) { rl_callback_read_char(); } return 0; }