#include #include #include "global.h" #include "build.h" #include static int input_available = 0; static char input_char; char input_line[PATLEN + 1]; bool interpret(int c) { input_char = c; input_available = 1; rl_callback_read_char(); return 0; } static int getc_function(FILE *ignore) { UNUSED(ignore); input_available = 0; return (int)input_char; } static int input_available_hook() { return input_available; } static void redisplay_function() { window_change |= CH_INPUT; } static void callback_handler(char *line) { if(!line) { return; } switch(input_mode) { case INPUT_NORMAL: strncpy(input_line, line, PATLEN); search(input_line); curdispline = 0; PCS_reset(); current_page = 0; break; case INPUT_CHANGE_TO: strncpy(newpat, line, PATLEN); change = calloc(totallines, sizeof(*change)); input_mode = INPUT_CHANGE; horswp_field(); return; } switch(field) { case CHANGE: input_mode = INPUT_CHANGE_TO; break; case DEFINITION: case FILENAME: if(totallines == 1) { editref(0); } break; } } static int ctrl_z() { kill(0, SIGTSTP); return 0; } static int toggle_caseless() { if(caseless == false) { caseless = true; postmsg2("Caseless mode is now ON"); } else { caseless = false; postmsg2("Caseless mode is now OFF"); } egrepcaseless(caseless); /* turn on/off -i flag */ return 0; } static int rebuild_reference() { if(isuptodate == true) { postmsg("The -d option prevents rebuilding the symbol database"); return (false); } exitcurses(); freefilelist(); /* remake the source file list */ makefilelist(); rebuild(); if(errorsfound == true) { errorsfound = false; askforreturn(); } entercurses(); postmsg(""); /* clear any previous message */ totallines = 0; disprefs = 0; return (true); } void rlinit() { rl_catch_signals = 0; rl_catch_sigwinch = 0; rl_prep_term_function = NULL; rl_deprep_term_function = NULL; rl_change_environment = 0; rl_getc_function = getc_function; rl_input_available_hook = input_available_hook; rl_redisplay_function = redisplay_function; rl_callback_handler_install("", callback_handler); rl_bind_key(7, rl_rubout); // XXX: 7 is backspace for some reason (on my system anyways?) rl_bind_key(KEY_BACKSPACE, rl_rubout); rl_bind_key(EOF, myexit); rl_bind_key(ctrl('Z'), ctrl_z); rl_bind_key(ctrl('Z'), toggle_caseless); rl_bind_key(ctrl('R'), rebuild_reference); rl_bind_key(ESC, process_mouse); /* possible unixpc mouse selection */ rl_bind_key(ctrl('X'), process_mouse); /* mouse selection */ // rl_bind_key(ctrl('\\'), /**/); /* bypass bindings */ }