diff --git a/src/command.c b/src/command.c index 7bb0e72..fd85b61 100644 --- a/src/command.c +++ b/src/command.c @@ -40,11 +40,7 @@ #include -#if defined(USE_NCURSES) && !defined(RENAMED_NCURSES) -# include -#else -# include -#endif +#include #include /* These are strictly used to test how keys are suppose to behave. @@ -52,7 +48,7 @@ * with the history, while in _mode mode_ it selects what operation * to perform with the user input. * In the original version this was handled by - * "int selecting // whether the (upper) symbol list is being browsed". + * `int selecting // whether the (upper) symbol list is being browsed`. */ extern const void *const winput; extern const void *const wmode; @@ -71,13 +67,13 @@ bool readrefs(char *filename) { FILE *file; int c; - if((file = myfopen(filename, "rb")) == NULL) { + if((file = myfopen(filename, "r")) == NULL) { cannotopen(filename); - return (false); + return false; } if((c = getc(file)) == EOF) { /* if file is empty */ fclose(file); - return (false); + return false; } totallines = 0; disprefs = 0; @@ -94,13 +90,15 @@ bool readrefs(char *filename) { return (false); } countrefs(); - } else + } else { fclose(file); + } return (true); } /* scrollbar actions */ static void scrollbar(MOUSE *p) { + // XXX ///* reposition list if it makes sense */ // if (totallines == 0) { // return; diff --git a/src/input.c b/src/input.c index 3be5b26..8e5677d 100644 --- a/src/input.c +++ b/src/input.c @@ -265,21 +265,10 @@ static int global_input(const int c) { force_window(); break; case '<': /* read lines from a file */ - break; // XXX - // move(PRLINE, 0); - // addstr(readprompt); // XXX fix - // if (mygetline("", newpat, COLS - sizeof(readprompt), '\0', NO) > 0) { - // clearprompt(); - // shellpath(filename, sizeof(filename), newpat); - // if (readrefs(filename) == NO) { - // postmsg2("Ignoring an empty file"); - // return(NO); - // } - // window_change |= CH_INPUT; - // return(YES); - // } - // clearprompt(); - return 0; + input_mode = INPUT_READ; + window_change |= CH_INPUT; + force_window(); + break; case '|': /* pipe the lines to a shell command */ case '^': break; // XXX fix @@ -503,9 +492,10 @@ int handle_input(const int c) { return 0; } /* - Resize - */ - /* it's treated specially because curses treat it specially. - as far as i can tell this is the only key that does not - flush after itself. + /* it's treated specially because curses treat it specially: + + its valid without keypad() + + as far as i can tell this is the only key that does not + flush after itself */ if(c == KEY_RESIZE) { redisplay(); @@ -530,6 +520,7 @@ int handle_input(const int c) { break; /* NOTREACHED */ case INPUT_CHANGE_TO: case INPUT_APPEND: + case INPUT_READ: return interpret(c); case INPUT_CHANGE: return change_input(c); diff --git a/src/readline.c b/src/readline.c index eb8a0e3..3093506 100644 --- a/src/readline.c +++ b/src/readline.c @@ -85,20 +85,20 @@ static void callback_handler(char *line) { add_history(line); switch(input_mode) { - case INPUT_NORMAL: + case INPUT_NORMAL: { strncpy(input_line, line, PATLEN); search(input_line); horswp_window(); curdispline = 0; current_page = 0; PCS_reset(); - break; - case INPUT_CHANGE_TO: + } break; + case INPUT_CHANGE_TO: { strncpy(newpat, line, PATLEN); change = calloc(totallines, sizeof(*change)); input_mode = INPUT_CHANGE; force_window(); - return; + } return; case INPUT_APPEND: { char filename[PATHLEN + 1]; FILE* file; @@ -111,8 +111,16 @@ static void callback_handler(char *line) { } fclose(file); input_mode = INPUT_NORMAL; - return; - } + } return; + case INPUT_READ: { + char filename[PATHLEN + 1]; + shellpath(filename, sizeof(filename), line); + if (!readrefs(filename)) { + postmsg("Ignoring an empty file"); + } + window_change |= CH_INPUT | CH_RESULT; + input_mode = INPUT_NORMAL; + } return; } switch(field) {