diff --git a/src/files.c b/src/files.c index 416192dc6..28c864a83 100644 --- a/src/files.c +++ b/src/files.c @@ -1197,6 +1197,12 @@ void insert_a_file_or(bool execute) /* Reset the flag that is set by the Spell Checker and Linter and such. */ ran_a_tool = FALSE; +#ifndef NANO_TINY + /* If something was typed at the Execute prompt without being run, restore it. */ + if (execute && *foretext) + given = mallocstrcpy(given, foretext); +#endif + while (TRUE) { #ifndef NANO_TINY if (execute) { diff --git a/src/global.c b/src/global.c index 2a072e1d5..aee14b490 100644 --- a/src/global.c +++ b/src/global.c @@ -52,8 +52,13 @@ bool more_than_one = FALSE; /* Whether more than one buffer is or has been open. */ bool report_size = TRUE; /* Whether to show the number of lines when the minibar is used. */ + bool ran_a_tool = FALSE; /* Whether a tool has been run at the Execute-Command prompt. */ +#ifndef NANO_TINY +char *foretext = NULL; + /* What was typed at the Execute prompt before invoking a tool. */ +#endif bool inhelp = FALSE; /* Whether we are in the help viewer. */ diff --git a/src/nano.c b/src/nano.c index b3f51e06c..f2b4680b7 100644 --- a/src/nano.c +++ b/src/nano.c @@ -2384,6 +2384,9 @@ int main(int argc, char **argv) whitelen[1] = 1; } } + + /* Initialize a special stash for something typed at the Execute prompt. */ + foretext = copy_of(""); #endif /* !NANO_TINY */ /* Initialize the search string. */ diff --git a/src/prompt.c b/src/prompt.c index 3129a4f82..e47f24aba 100644 --- a/src/prompt.c +++ b/src/prompt.c @@ -538,6 +538,11 @@ functionptrtype acquire_an_answer(int *actual, bool *listed, else if (function && !handle_editing(function)) { /* When it's a permissible shortcut, run it and done. */ if (!ISSET(VIEW_MODE) || !changes_something(function)) { +#ifndef NANO_TINY + /* When invoking a tool at the Execute prompt, stash an "answer". */ + if (currmenu == MEXECUTE) + foretext = mallocstrcpy(foretext, answer); +#endif function(); break; } else @@ -549,6 +554,11 @@ functionptrtype acquire_an_answer(int *actual, bool *listed, #endif } +#ifndef NANO_TINY + /* When an external command was run, clear a possibly stashed answer. */ + if (currmenu == MEXECUTE && function == do_enter) + *foretext = '\0'; +#endif #ifdef ENABLE_HISTORIES /* If the history pointer was moved, point it at the bottom again. */ if (stored_string != NULL) { diff --git a/src/prototypes.h b/src/prototypes.h index 9bbca2545..d033f292f 100644 --- a/src/prototypes.h +++ b/src/prototypes.h @@ -37,7 +37,9 @@ extern bool bracketed_paste; extern bool we_are_running; extern bool more_than_one; extern bool report_size; + extern bool ran_a_tool; +extern char *foretext; extern bool inhelp; extern char *title;