diff --git a/src/global.c b/src/global.c index 03e8561..6cc6243 100644 --- a/src/global.c +++ b/src/global.c @@ -730,7 +730,7 @@ void shortcut_init(void) add_to_funcs(do_cut_text_void, MMAIN, N_("Cut Text"), IFSCHELP(nano_cut_msg), TOGETHER, NOVIEW); - add_to_funcs(do_uncut_text, MMAIN, + add_to_funcs(do_uncut_text, MMAIN|MWHEREIS, uncut_tag, IFSCHELP(nano_uncut_msg), BLANKAFTER, NOVIEW); /* Remember the entry for Uncut, to be able to replace it with Unjustify. */ uncutfunc = tailfunc; @@ -1063,8 +1063,8 @@ void shortcut_init(void) add_to_sclist(MMAIN, "F14", 0, do_replace, 0); add_to_sclist(MMOST, "^K", 0, do_cut_text_void, 0); add_to_sclist(MMOST, "F9", 0, do_cut_text_void, 0); - add_to_sclist(MMAIN, "^U", 0, do_uncut_text, 0); - add_to_sclist(MMAIN, "F10", 0, do_uncut_text, 0); + add_to_sclist(MMAIN|MWHEREIS, "^U", 0, do_uncut_text, 0); + add_to_sclist(MMAIN|MWHEREIS, "F10", 0, do_uncut_text, 0); #ifndef DISABLE_JUSTIFY add_to_sclist(MMAIN, "^J", 0, do_justify_void, 0); add_to_sclist(MMAIN, "F4", 0, do_justify_void, 0); diff --git a/src/prompt.c b/src/prompt.c index 5c6b03d..2e5a8a7 100644 --- a/src/prompt.c +++ b/src/prompt.c @@ -145,6 +145,8 @@ int do_statusbar_input(bool *ran_func, bool *finished) do_statusbar_delete(); else if (s->scfunc == do_backspace) do_statusbar_backspace(); + else if (s->scfunc == do_uncut_text) + do_statusbar_uncut_text(); else { /* Handle any other shortcut in the current menu, setting * ran_func to TRUE if we try to run their associated functions, @@ -363,6 +365,29 @@ size_t statusbar_xplustabs(void) return strnlenpt(answer, statusbar_x); } +void do_statusbar_uncut_text(void) +{ + char *new_answer = NULL; + + if (cutbuffer == NULL) + return; + + new_answer = (char *) malloc((strlen(answer) + strlen(cutbuffer->data) + + 1) * sizeof(char)); + strncpy(new_answer, answer, statusbar_x); + /* Do not copy terminating null character. */ + strncpy(new_answer + statusbar_x, cutbuffer->data, + strlen(cutbuffer->data)); + strcpy(new_answer + statusbar_x + strlen(cutbuffer->data), answer + + statusbar_x); + answer = new_answer; + +#ifdef DEBUG + fprintf(stderr, "do_statusbar_uncut_text(): answer = %s statusbar_x =" + " %lu\n", answer, statusbar_x); +#endif +} + /* Return the column number of the first character of the answer that is * displayed in the statusbar when the cursor is at the given column, * with the available room for the answer starting at base. Note that diff --git a/src/proto.h b/src/proto.h index 34d4343..f44c309 100644 --- a/src/proto.h +++ b/src/proto.h @@ -448,6 +448,7 @@ void do_statusbar_right(void); void do_statusbar_backspace(void); void do_statusbar_delete(void); void do_statusbar_cut_text(void); +void do_statusbar_uncut_text(void); #ifndef NANO_TINY void do_statusbar_prev_word(void); void do_statusbar_next_word(void);