From 7f58476b4c526191330dc968a6548fd12ab52014 Mon Sep 17 00:00:00 2001 From: Rishabh Dave
Date: Tue, 25 Oct 2016 21:26:12 +0530 Subject: [PATCH] feature: add search facility to help Allow user to search all help text with ^W. This accomplishes https://savannah.gnu.org/bugs/?28994. Signed-off-by: Rishabh Dave --- src/files.c | 54 +++++++++++--------- src/global.c | 57 ++++++++++++--------- src/help.c | 158 ++++++++++++++++++++++++++++++++++------------------------- src/nano.c | 5 +- src/nano.h | 3 +- src/prompt.c | 10 +++- src/search.c | 4 +- src/winio.c | 13 +++-- 8 files changed, 179 insertions(+), 125 deletions(-) diff --git a/src/files.c b/src/files.c index a4ac750..dba98b4 100644 --- a/src/files.c +++ b/src/files.c @@ -486,7 +486,8 @@ bool open_buffer(const char *filename, bool undoable) /* If the filename isn't blank, and we are not in NOREAD_MODE, * open the file. Otherwise, treat it as a new file. */ rc = (filename[0] != '\0' && !ISSET(NOREAD_MODE)) ? - open_file(realname, new_buffer, FALSE, &f) : -2; + open_file(realname, new_buffer, + ((currmenu == MHELP) ? TRUE : FALSE), &f) : -2; /* If we have a file, and we're loading into a new buffer, update * the filename. */ @@ -553,8 +554,10 @@ void replace_buffer(const char *filename) /* Update the screen to account for the current buffer. */ void display_buffer(void) { - /* Update the titlebar, since the filename may have changed. */ - titlebar(NULL); + /* Update the titlebar, since the filename may have changed. In case, + * MHELP, titlebar() in done in help.c. */ + if (currmenu != MHELP) + titlebar(NULL); #ifndef DISABLE_COLOR /* Make sure we're using the buffer's associated colors. */ @@ -594,9 +597,10 @@ void switch_to_prevnext_buffer(bool to_next) display_buffer(); /* Indicate the switch on the statusbar. */ - statusline(HUSH, _("Switched to %s"), - ((openfile->filename[0] == '\0') ? - _("New Buffer") : openfile->filename)); + if (currmenu != MHELP) + statusline(HUSH, _("Switched to %s"), + ((openfile->filename[0] == '\0') ? + _("New Buffer") : openfile->filename)); #ifdef DEBUG dump_filestruct(openfile->current); @@ -911,29 +915,33 @@ void read_file(FILE *f, int fd, const char *filename, bool undoable, bool checkw * file we inserted. */ openfile->placewewant = xplustabs(); - if (!writable) - statusline(ALERT, "File '%s' is unwritable", filename); + if (currmenu != MHELP) { + if (!writable) + statusline(ALERT, "File '%s' is unwritable", filename); #ifndef NANO_TINY - else if (format == 3) { - /* TRANSLATORS: Keep the next four messages at most 78 characters. */ - statusline(HUSH, P_("Read %lu line (Converted from DOS and Mac format)", - "Read %lu lines (Converted from DOS and Mac format)", - (unsigned long)num_lines), (unsigned long)num_lines); - } else if (format == 2) { - openfile->fmt = MAC_FILE; - statusline(HUSH, P_("Read %lu line (Converted from Mac format)", + else if (format == 3) { + /* TRANSLATORS: Keep the next four messages at most 78 + * characters. */ + statusline(HUSH, P_("Read %lu line (Converted from DOS and" + " Mac format)", "Read %lu lines (Converted from" + " DOS and Mac format)", (unsigned long)num_lines), + (unsigned long)num_lines); + } else if (format == 2) { + openfile->fmt = MAC_FILE; + statusline(HUSH, P_("Read %lu line (Converted from Mac format)", "Read %lu lines (Converted from Mac format)", (unsigned long)num_lines), (unsigned long)num_lines); - } else if (format == 1) { - openfile->fmt = DOS_FILE; - statusline(HUSH, P_("Read %lu line (Converted from DOS format)", + } else if (format == 1) { + openfile->fmt = DOS_FILE; + statusline(HUSH, P_("Read %lu line (Converted from DOS format)", "Read %lu lines (Converted from DOS format)", (unsigned long)num_lines), (unsigned long)num_lines); - } + } #endif - else - statusline(HUSH, P_("Read %lu line", "Read %lu lines", + else + statusline(HUSH, P_("Read %lu line", "Read %lu lines", (unsigned long)num_lines), (unsigned long)num_lines); + } if (num_lines < editwinrows) focusing = FALSE; @@ -1010,7 +1018,7 @@ int open_file(const char *filename, bool newfie, bool quiet, FILE **f) if (*f == NULL) { statusline(ALERT, _("Error reading %s: %s"), filename, strerror(errno)); close(fd); - } else + } else if (currmenu != MHELP) statusbar(_("Reading File")); } diff --git a/src/global.c b/src/global.c index dd2e71a..92a488a 100644 --- a/src/global.c +++ b/src/global.c @@ -651,7 +651,7 @@ void shortcut_init(void) /* Start populating the different menus with functions. */ - add_to_funcs(do_help_void, MMOST, + add_to_funcs(do_help_void, MMOST & ~ MHELPWHEREIS, /* TRANSLATORS: Try to keep the following strings at most 10 characters. */ N_("Get Help"), IFSCHELP(nano_help_msg), TOGETHER, VIEW); @@ -694,7 +694,7 @@ void shortcut_init(void) #endif } - add_to_funcs(do_search, MMAIN, + add_to_funcs(do_search, MMAIN|MHELP, whereis_tag, IFSCHELP(nano_whereis_msg), TOGETHER, VIEW); add_to_funcs(do_replace, MMAIN, @@ -713,8 +713,6 @@ void shortcut_init(void) * because the help viewer does not have a help text. */ add_to_funcs(do_exit, MHELP, exit_tag, "x", 0, VIEW); - add_to_funcs(total_refresh, MHELP, refresh_tag, "x", 0, VIEW); - add_to_funcs(do_up_void, MHELP, prev_line_tag, "x", 0, VIEW); add_to_funcs(do_down_void, MHELP, next_line_tag, "x" , 0, VIEW); #endif @@ -754,7 +752,7 @@ void shortcut_init(void) defined(DISABLE_JUSTIFY) && defined(DISABLE_SPELLER) && defined(DISABLE_COLOR)) /* Conditionally placing this one here or further on, to keep the * help items nicely paired in most conditions. */ - add_to_funcs(do_gotolinecolumn_void, MMAIN, + add_to_funcs(do_gotolinecolumn_void, MMAIN|MHELPWHEREIS, gotoline_tag, IFSCHELP(nano_gotoline_msg), BLANKAFTER, VIEW); #endif @@ -764,7 +762,7 @@ void shortcut_init(void) add_to_funcs(regexp_void, MWHEREIS|MREPLACE, N_("Regexp"), IFSCHELP(nano_regexp_msg), TOGETHER, VIEW); #endif - add_to_funcs(backwards_void, MWHEREIS|MREPLACE, + add_to_funcs(backwards_void, MWHEREIS|MREPLACE|MHELPWHEREIS, N_("Backwards"), IFSCHELP(nano_reverse_msg), TOGETHER, VIEW); add_to_funcs(flip_replace_void, MWHEREIS, @@ -786,10 +784,13 @@ void shortcut_init(void) add_to_funcs(do_page_down, MMAIN|MHELP, next_page_tag, IFSCHELP(nano_nextpage_msg), TOGETHER, VIEW); - add_to_funcs(do_first_line, MMAIN|MHELP|MWHEREIS|MREPLACE|MREPLACEWITH|MGOTOLINE, - N_("First Line"), IFSCHELP(nano_firstline_msg), TOGETHER, VIEW); - add_to_funcs(do_last_line, MMAIN|MHELP|MWHEREIS|MREPLACE|MREPLACEWITH|MGOTOLINE, - N_("Last Line"), IFSCHELP(nano_lastline_msg), BLANKAFTER, VIEW); + add_to_funcs(do_first_line, MMAIN|MHELP|MWHEREIS|MREPLACE|MREPLACEWITH| + MGOTOLINE|MHELPWHEREIS, N_("First Line"), IFSCHELP(nano_firstline_msg), + TOGETHER, VIEW); + + add_to_funcs(do_last_line, MMAIN|MHELP|MWHEREIS|MREPLACE|MREPLACEWITH| + MGOTOLINE|MHELPWHEREIS, N_("Last Line"), IFSCHELP(nano_lastline_msg), + BLANKAFTER, VIEW); #ifndef NANO_TINY add_to_funcs(do_research, MMAIN, @@ -941,10 +942,10 @@ void shortcut_init(void) #ifndef DISABLE_HISTORIES add_to_funcs(get_history_older_void, - (MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE), + (MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE|MHELPWHEREIS), N_("PrevHstory"), IFSCHELP(nano_prev_history_msg), TOGETHER, VIEW); add_to_funcs(get_history_newer_void, - (MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE), + (MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE|MHELPWHEREIS), N_("NextHstory"), IFSCHELP(nano_next_history_msg), BLANKAFTER, VIEW); #endif @@ -1045,8 +1046,8 @@ void shortcut_init(void) add_to_sclist(MMAIN, "^R", 0, do_insertfile_void, 0); add_to_sclist(MMAIN, "F5", 0, do_insertfile_void, 0); add_to_sclist(MMAIN, "Ins", 0, do_insertfile_void, 0); - add_to_sclist(MMAIN|MBROWSER, "^W", 0, do_search, 0); - add_to_sclist(MMAIN|MBROWSER, "F6", 0, do_search, 0); + add_to_sclist(MMAIN|MBROWSER|MHELP, "^W", 0, do_search, 0); + add_to_sclist(MMAIN|MBROWSER|MHELP, "F6", 0, do_search, 0); add_to_sclist(MMAIN, "^\\", 0, do_replace, 0); add_to_sclist(MMAIN, "M-R", 0, do_replace, 0); add_to_sclist(MMAIN, "F14", 0, do_replace, 0); @@ -1207,21 +1208,29 @@ void shortcut_init(void) add_to_sclist(MWHEREIS|MREPLACE, "M-C", 0, case_sens_void, 0); add_to_sclist(MWHEREIS|MREPLACE, "M-R", 0, regexp_void, 0); - add_to_sclist(MWHEREIS|MREPLACE, "M-B", 0, backwards_void, 0); + add_to_sclist(MWHEREIS|MREPLACE|MHELPWHEREIS, "M-B", 0, backwards_void, 0); add_to_sclist(MWHEREIS|MREPLACE, "^R", 0, flip_replace_void, 0); - add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MGOTOLINE, "^Y", 0, do_first_line, 0); - add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MGOTOLINE, "^V", 0, do_last_line, 0); + add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MGOTOLINE|MHELPWHEREIS, + "^Y", 0, do_first_line, 0); + add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MGOTOLINE|MHELPWHEREIS, + "^V", 0, do_last_line, 0); #ifndef DISABLE_JUSTIFY - add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH, "^W", 0, do_para_begin_void, 0); - add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH, "^O", 0, do_para_end_void, 0); + add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MHELPWHEREIS, "^W", 0, + do_para_begin_void, 0); + add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MHELPWHEREIS, "^O", 0, + do_para_end_void, 0); #endif - add_to_sclist(MWHEREIS, "^T", 0, do_gotolinecolumn_void, 0); + add_to_sclist(MWHEREIS|MHELPWHEREIS, "^T", 0, do_gotolinecolumn_void, 0); add_to_sclist(MGOTOLINE, "^T", 0, gototext_void, 0); #ifndef DISABLE_HISTORIES - add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE, "^P", 0, get_history_older_void, 0); - add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE, "Up", KEY_UP, get_history_older_void, 0); - add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE, "^N", 0, get_history_newer_void, 0); - add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE, "Down", KEY_DOWN, get_history_newer_void, 0); + add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE, "^P", 0, + get_history_older_void, 0); + add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE, "Up", KEY_UP, + get_history_older_void, 0); + add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE, "^N", 0, + get_history_newer_void, 0); + add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE, "Down", + KEY_DOWN, get_history_newer_void, 0); #endif #ifndef DISABLE_BROWSER add_to_sclist(MWHEREISFILE, "^Y", 0, do_first_file, 0); diff --git a/src/help.c b/src/help.c index b694192..1c0f557 100644 --- a/src/help.c +++ b/src/help.c @@ -25,6 +25,7 @@ #include