From acd6dc4bbb33c193489ab6ab440929e07b9856ce Mon Sep 17 00:00:00 2001 From: Rishabh Dave Date: Sun, 20 Nov 2016 14:21:18 +0530 Subject: [PATCH] new 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 | 20 ++++-- src/global.c | 55 ++++++++------- src/help.c | 227 +++++++++++++++++++++++++++++++++++++++++------------------ src/nano.c | 12 ++-- src/nano.h | 1 + src/prompt.c | 10 ++- src/proto.h | 1 + src/search.c | 4 +- src/winio.c | 13 ++-- 9 files changed, 230 insertions(+), 113 deletions(-) diff --git a/src/files.c b/src/files.c index a4ac750..d5f7961 100644 --- a/src/files.c +++ b/src/files.c @@ -486,7 +486,7 @@ 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, &f) : -2; /* If we have a file, and we're loading into a new buffer, update * the filename. */ @@ -553,8 +553,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 + * of 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 +596,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,6 +914,9 @@ void read_file(FILE *f, int fd, const char *filename, bool undoable, bool checkw * file we inserted. */ openfile->placewewant = xplustabs(); + if (currmenu == MHELP) + return; + if (!writable) statusline(ALERT, "File '%s' is unwritable", filename); #ifndef NANO_TINY @@ -1010,7 +1016,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..78f1f6e 100644 --- a/src/global.c +++ b/src/global.c @@ -655,7 +655,7 @@ void shortcut_init(void) /* TRANSLATORS: Try to keep the following strings at most 10 characters. */ N_("Get Help"), IFSCHELP(nano_help_msg), TOGETHER, VIEW); - add_to_funcs(do_cancel, ((MMOST & ~MMAIN & ~MBROWSER) | MYESNO), + add_to_funcs(do_cancel, ((MMOST & ~MMAIN & ~MBROWSER) | MYESNO | MFINDINHELP), N_("Cancel"), IFSCHELP(nano_cancel_msg), BLANKAFTER, VIEW); add_to_funcs(do_exit, MMAIN, @@ -715,6 +715,9 @@ void shortcut_init(void) add_to_funcs(total_refresh, MHELP, refresh_tag, "x", 0, VIEW); + add_to_funcs(do_search, MHELP, whereis_tag, "x", 0, VIEW); + add_to_funcs(do_research, MHELP, whereis_next_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 @@ -1045,8 +1048,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); @@ -1082,8 +1085,8 @@ void shortcut_init(void) add_to_sclist(MMAIN|MHELP, "M-|", 0, do_first_line, 0); add_to_sclist(MMAIN|MHELP, "M-/", 0, do_last_line, 0); add_to_sclist(MMAIN|MHELP, "M-?", 0, do_last_line, 0); - add_to_sclist(MMAIN|MBROWSER, "M-W", 0, do_research, 0); - add_to_sclist(MMAIN|MBROWSER, "F16", 0, do_research, 0); + add_to_sclist(MMAIN|MBROWSER|MHELP, "M-W", 0, do_research, 0); + add_to_sclist(MMAIN|MBROWSER|MHELP, "F16", 0, do_research, 0); #ifndef NANO_TINY add_to_sclist(MMAIN, "M-]", 0, do_find_bracket, 0); add_to_sclist(MMAIN, "^^", 0, do_mark, 0); @@ -1099,19 +1102,19 @@ void shortcut_init(void) #ifdef ENABLE_COMMENT add_to_sclist(MMAIN, "M-3", 0, do_comment, 0); #endif - add_to_sclist(MMOST, "^B", 0, do_left, 0); - add_to_sclist(MMOST, "Left", KEY_LEFT, do_left, 0); - add_to_sclist(MMOST, "^F", 0, do_right, 0); - add_to_sclist(MMOST, "Right", KEY_RIGHT, do_right, 0); + add_to_sclist(MMOST|MFINDINHELP, "^B", 0, do_left, 0); + add_to_sclist(MMOST|MFINDINHELP, "Left", KEY_LEFT, do_left, 0); + add_to_sclist(MMOST|MFINDINHELP, "^F", 0, do_right, 0); + add_to_sclist(MMOST|MFINDINHELP, "Right", KEY_RIGHT, do_right, 0); #ifdef ENABLE_UTF8 if (using_utf8()) { - add_to_sclist(MMOST, "^\xE2\x86\x90", CONTROL_LEFT, do_prev_word_void, 0); - add_to_sclist(MMOST, "^\xE2\x86\x92", CONTROL_RIGHT, do_next_word_void, 0); + add_to_sclist(MMOST|MFINDINHELP, "^\xE2\x86\x90", CONTROL_LEFT, do_prev_word_void, 0); + add_to_sclist(MMOST|MFINDINHELP, "^\xE2\x86\x92", CONTROL_RIGHT, do_next_word_void, 0); } else #endif { - add_to_sclist(MMOST, "^Left", CONTROL_LEFT, do_prev_word_void, 0); - add_to_sclist(MMOST, "^Right", CONTROL_RIGHT, do_next_word_void, 0); + add_to_sclist(MMOST|MFINDINHELP, "^Left", CONTROL_LEFT, do_prev_word_void, 0); + add_to_sclist(MMOST|MFINDINHELP, "^Right", CONTROL_RIGHT, do_next_word_void, 0); } add_to_sclist(MMOST, "M-Space", 0, do_prev_word_void, 0); add_to_sclist(MMOST, "^Space", 0, do_next_word_void, 0); @@ -1203,7 +1206,7 @@ void shortcut_init(void) add_to_sclist(MMAIN, "^Q", 0, xon_complaint, 0); add_to_sclist(MMAIN, "^S", 0, xoff_complaint, 0); - add_to_sclist(((MMOST & ~MMAIN & ~MBROWSER) | MYESNO), "^C", 0, do_cancel, 0); + add_to_sclist(((MMOST & ~MMAIN & ~MBROWSER) | MYESNO | MFINDINHELP), "^C", 0, do_cancel, 0); add_to_sclist(MWHEREIS|MREPLACE, "M-C", 0, case_sens_void, 0); add_to_sclist(MWHEREIS|MREPLACE, "M-R", 0, regexp_void, 0); @@ -1218,10 +1221,10 @@ void shortcut_init(void) add_to_sclist(MWHEREIS, "^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|MFINDINHELP, "^P", 0, get_history_older_void, 0); + add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE|MFINDINHELP, "Up", KEY_UP, get_history_older_void, 0); + add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE|MFINDINHELP, "^N", 0, get_history_newer_void, 0); + add_to_sclist(MWHEREIS|MREPLACE|MREPLACEWITH|MWHEREISFILE|MFINDINHELP, "Down", KEY_DOWN, get_history_newer_void, 0); #endif #ifndef DISABLE_BROWSER add_to_sclist(MWHEREISFILE, "^Y", 0, do_first_file, 0); @@ -1263,14 +1266,14 @@ void shortcut_init(void) add_to_sclist(MHELP, "Home", KEY_HOME, do_first_line, 0); add_to_sclist(MHELP, "End", KEY_END, do_last_line, 0); #endif - add_to_sclist(MMOST, "^I", 0, do_tab, 0); - add_to_sclist(MMOST, "Tab", TAB_CODE, do_tab, 0); - add_to_sclist(MMOST, "^M", 0, do_enter, 0); - add_to_sclist(MMOST, "Enter", KEY_ENTER, do_enter, 0); - add_to_sclist(MMOST, "^D", 0, do_delete, 0); - add_to_sclist(MMOST, "Del", 0, do_delete, 0); - add_to_sclist(MMOST, "^H", 0, do_backspace, 0); - add_to_sclist(MMOST, "Bsp", KEY_BACKSPACE, do_backspace, 0); + add_to_sclist(MMOST|MFINDINHELP, "^I", 0, do_tab, 0); + add_to_sclist(MMOST|MFINDINHELP, "Tab", TAB_CODE, do_tab, 0); + add_to_sclist(MMOST|MFINDINHELP, "^M", 0, do_enter, 0); + add_to_sclist(MMOST|MFINDINHELP, "Enter", KEY_ENTER, do_enter, 0); + add_to_sclist(MMOST|MFINDINHELP, "^D", 0, do_delete, 0); + add_to_sclist(MMOST|MFINDINHELP, "Del", 0, do_delete, 0); + add_to_sclist(MMOST|MFINDINHELP, "^H", 0, do_backspace, 0); + add_to_sclist(MMOST|MFINDINHELP, "Bsp", KEY_BACKSPACE, do_backspace, 0); #ifdef DEBUG print_sclist(); diff --git a/src/help.c b/src/help.c index b694192..92e41ce 100644 --- a/src/help.c +++ b/src/help.c @@ -25,6 +25,7 @@ #include #include #include +#include #ifndef DISABLE_HELP @@ -35,36 +36,86 @@ static char *end_of_intro = NULL; /* The point in the help text where the introductory paragraphs end * and the shortcut descriptions begin. */ +static char *title = NULL; + /* Title of the help text. */ + +/* Refresh the entire help screen. Useful when window size changes. */ +void help_refresh(void) +{ + total_redraw(); + edit_refresh(); + bottombars(currmenu); + titlebar(title); +} + /* Our main help-viewer function. */ void do_help(void) { int kbinput = ERR; bool old_no_help = ISSET(NO_HELP); - size_t line = 0; - /* The line number in help_text of the first displayed help - * line. This variable is zero-based. */ - size_t last_line = 0; - /* The line number in help_text of the last help line. This - * variable is zero-based. */ int oldmenu = currmenu; /* The menu we were called from. */ - const char *ptr; - /* The current line of the help text. */ - size_t old_line = (size_t)-1; - /* The line we were on before the current line. */ functionptrtype func; /* The function of the key the user typed in. */ + FILE *fp; + char *tempfilename = NULL; + const char *ptr; + const char *beg_of_para; + /* The point in the help text where the introductory paragraphs + * begin. */ + int line_size; + int top_lineno; + int saved_margin = 0; + /* For avoiding the line numbers on the help screen. */ + char *saved_answer = answer != NULL ? strdup(answer) : NULL; + /* In case user chooses help at prompt, save the string entered, + * if any, by the user at the prompt. */ + bool window_below_74 = FALSE; + /* Gives help text the original look when window is resized to + * something more than 74 characters from anything below 74. */ - /* Don't show a cursor in the help screen. */ - curs_set(0); - blank_edit(); blank_statusbar(); + tempfilename = safe_tempfile(&fp); + if (tempfilename == NULL) { + statusline(ALERT, _("Error writing temp file: %s"), strerror(errno)); + return; + } + /* Set help_text as the string to display. */ help_init(); assert(help_text != NULL); + /* Extract the title from help_text. */ + title = charalloc(MAX_BUF_SIZE * sizeof(char)); + ptr = help_text; + line_size = break_line(ptr, 74, TRUE); + strncpy(title, ptr, line_size); + title[line_size] = '\0'; + + /* Skip the title, for copying the rest of the help text. */ + ptr += line_size; + while (*ptr == '\n') + ++ptr; + + beg_of_para = ptr; + + /* Wrap and copy the rest of the help text into the temporary file. */ + while (strlen(ptr) > 0) { + line_size = help_line_len(ptr); + fwrite(ptr, sizeof(char), line_size, fp); + ptr += line_size; + + /* Hard-wrap every line of the paragraphs. */ + if (ptr < end_of_intro && *ptr != '\n') + fwrite("\n", sizeof(char), 1, fp); + + while (*ptr == '\n') + fwrite(ptr++, sizeof(char), 1, fp); + } + fclose(fp); + if (ISSET(NO_HELP)) { /* Make sure that the help screen's shortcut list will actually * be displayed. */ @@ -75,48 +126,26 @@ void do_help(void) bottombars(MHELP); wnoutrefresh(bottomwin); - while (TRUE) { - size_t i; - - ptr = help_text; - - /* Find the line number of the last line of the help text. */ - for (last_line = 0; *ptr != '\0'; last_line++) { - ptr += help_line_len(ptr); - if (*ptr == '\n') - ptr++; - } - - if (last_line > 0) - last_line--; - - /* Redisplay if the text was scrolled or an invalid key was pressed. */ - if (line != old_line || kbinput == ERR) { - blank_edit(); - - ptr = help_text; - - /* Advance in the text to the first line to be displayed. */ - for (i = 0; i < line; i++) { - ptr += help_line_len(ptr); - if (*ptr == '\n') - ptr++; - } - - /* Now display as many lines as the window will hold. */ - for (i = 0; i < editwinrows && *ptr != '\0'; i++) { - size_t j = help_line_len(ptr); +#ifdef ENABLE_LINENUMBERS + if (ISSET(LINE_NUMBERS)) { + saved_margin = margin; + margin = 0; + UNSET(LINE_NUMBERS); + } +#endif - mvwaddnstr(edit, i, 0, ptr, j); - ptr += j; - if (*ptr == '\n') - ptr++; - } - } + if (!ISSET(MULTIBUFFER)) { + SET(MULTIBUFFER); + open_buffer(tempfilename, FALSE); + UNSET(MULTIBUFFER); + } else + open_buffer(tempfilename, FALSE); - wnoutrefresh(edit); + display_buffer(); + titlebar(title); - old_line = line; + while (TRUE) { + edit_refresh(); lastmessage = HUSH; @@ -125,10 +154,50 @@ void do_help(void) #ifndef NANO_TINY if (kbinput == KEY_WINCH) { kbinput = ERR; + + /* Rewrap and recopy the help text into the temporary file. */ + if (COLS < 74 || window_below_74) { + window_below_74 = TRUE; + top_lineno = openfile->edittop->lineno; + close_buffer(); + ptr = beg_of_para; + fp = fopen(tempfilename, "w"); + + while (strlen(ptr) > 0) { + line_size = help_line_len(ptr); + fwrite(ptr, sizeof(char), line_size, fp); + ptr += line_size; + + /* Hard-wrap every line of the paragraphs. */ + if (ptr < end_of_intro && *ptr != '\n') + fwrite("\n", sizeof(char), 1, fp); + + while (*ptr == '\n') + fwrite(ptr++, sizeof(char), 1, fp); + } + fclose(fp); + + if (!ISSET(MULTIBUFFER)) { + SET(MULTIBUFFER); + open_buffer(tempfilename, FALSE); + UNSET(MULTIBUFFER); + } else + open_buffer(tempfilename, FALSE); + + display_buffer(); + + /* Stay at the current line or, at least, close to it. */ + if (openfile->current->lineno < top_lineno) + while (openfile->current->lineno < top_lineno) + do_down(FALSE); + else + while (openfile->current->lineno > top_lineno) + do_up(FALSE); + } + continue; /* Redraw the screen. */ } #endif - #ifndef DISABLE_MOUSE if (kbinput == KEY_MOUSE) { int mouse_x, mouse_y; @@ -142,31 +211,44 @@ void do_help(void) if (func == total_refresh) { total_redraw(); } else if (func == do_up_void) { - if (line > 0) - line--; + do_up(FALSE); } else if (func == do_down_void) { - if (line + (editwinrows - 1) < last_line) - line++; + do_down(FALSE); } else if (func == do_page_up) { - if (line > editwinrows - 2) - line -= editwinrows - 2; - else - line = 0; + do_page_up(); } else if (func == do_page_down) { - if (line + (editwinrows - 1) < last_line) - line += editwinrows - 2; + do_page_down(); } else if (func == do_first_line) { - line = 0; + do_first_line(); } else if (func == do_last_line) { - if (line + (editwinrows - 1) < last_line) - line = last_line - (editwinrows - 1); + do_last_line(); + } else if (func == do_search) { + do_search(); + bottombars(MHELP); + wnoutrefresh(bottomwin); + } else if (func == do_research) { + do_research(); + currmenu = MHELP; } else if (func == do_exit) { /* Exit from the help viewer. */ + close_buffer(); break; - } else + } else if ((kbinput >= '0' && kbinput <= '9') || + (kbinput >= 'a' && kbinput <= 'z') || + (kbinput >= 'A' && kbinput <= 'Z')) + /* No text can be entered at help screen. */ + ; + else unbound_key(kbinput); } +#ifdef ENABLE_LINENUMBERS + if (saved_margin != 0) { + margin = saved_margin; + SET(LINE_NUMBERS); + } +#endif + if (old_no_help) { blank_bottombars(); wnoutrefresh(bottomwin); @@ -181,9 +263,16 @@ void do_help(void) browser_refresh(); else #endif - edit_refresh(); + total_refresh(); /* We're exiting from the help screen. */ + answer = mallocstrcpy(answer, saved_answer); + free(saved_answer); + + remove(tempfilename); + free(tempfilename); + + free(title); free(help_text); } @@ -503,7 +592,7 @@ size_t help_line_len(const char *ptr) /* Full length of the line, until the first newline. */ /* Avoid overwide paragraphs in the introductory text. */ - if (ptr < end_of_intro && COLS > 74) + if (COLS > 74) wrapping_point = 74; wrap_location = break_line(ptr, wrapping_point, TRUE); diff --git a/src/nano.c b/src/nano.c index 7204b45..37ffc04 100644 --- a/src/nano.c +++ b/src/nano.c @@ -1372,7 +1372,10 @@ void regenerate_screen(void) window_init(); /* Redraw the contents of the windows that need it. */ - total_refresh(); + if (currmenu == MHELP || currmenu == MFINDINHELP) + help_refresh(); + else + total_refresh(); } /* If allow is FALSE, block any SIGWINCH signal. If allow is TRUE, @@ -1442,8 +1445,9 @@ void do_toggle(int flag) ) enabled = !enabled; - statusline(HUSH, "%s %s", _(flagtostr(flag)), - enabled ? _("enabled") : _("disabled")); + if (currmenu != MHELP) + statusline(HUSH, "%s %s", _(flagtostr(flag)), + enabled ? _("enabled") : _("disabled")); } /* Bleh. */ @@ -1578,7 +1582,7 @@ void unbound_key(int code) statusline(ALERT, _("Unbound key: M-%c"), toupper(code)); } else if (code < 0x20) statusline(ALERT, _("Unbound key: ^%c"), code + 0x40); - else + else if (currmenu != MHELP) statusline(ALERT, _("Unbound key: %c"), code); } diff --git a/src/nano.h b/src/nano.h index 93ec5e1..e778ee4 100644 --- a/src/nano.h +++ b/src/nano.h @@ -557,6 +557,7 @@ enum #define MGOTODIR (1<<12) #define MYESNO (1<<13) #define MLINTER (1<<14) +#define MFINDINHELP (1<<15) /* This is an abbreviation for all menus except Help and YesNo. */ #define MMOST (MMAIN|MWHEREIS|MREPLACE|MREPLACEWITH|MGOTOLINE|MWRITEFILE|MINSERTFILE|\ MEXTCMD|MBROWSER|MWHEREISFILE|MGOTODIR|MSPELL|MLINTER) diff --git a/src/prompt.c b/src/prompt.c index 34e7b4c..65a9314 100644 --- a/src/prompt.c +++ b/src/prompt.c @@ -662,9 +662,17 @@ int do_prompt(bool allow_tabs, #endif /* Save a possible current statusbar x position. */ size_t was_statusbar_x = statusbar_x; + char *prompt_save = NULL; + /* In case we need prompt again before completing previous one, + * above variables become useful. */ bottombars(menu); + if (prompt != NULL) { + prompt_save = strdup(prompt); + free(prompt); + } + answer = mallocstrcpy(answer, curranswer); #ifndef NANO_TINY @@ -687,7 +695,7 @@ int do_prompt(bool allow_tabs, refresh_func); free(prompt); - prompt = NULL; + prompt = prompt_save; #ifndef NANO_TINY if (retval == KEY_WINCH) diff --git a/src/proto.h b/src/proto.h index 4222a32..447503c 100644 --- a/src/proto.h +++ b/src/proto.h @@ -379,6 +379,7 @@ void thanks_for_all_the_fish(void); /* All functions in help.c. */ #ifndef DISABLE_HELP +void help_refresh(void); void do_help(void); void help_init(void); functionptrtype parse_help_input(int *kbinput); diff --git a/src/search.c b/src/search.c index 8a7b9b1..67b699e 100644 --- a/src/search.c +++ b/src/search.c @@ -126,6 +126,8 @@ int search_init(bool replacing, bool use_answer) static char *backupstring = NULL; /* The search string we'll be using. */ functionptrtype func; + int menu = ((currmenu == MHELP) ? MFINDINHELP : + (replacing ? MREPLACE : MWHEREIS)); /* If use_answer is TRUE, set backupstring to answer and get out. */ if (use_answer) { @@ -154,7 +156,7 @@ int search_init(bool replacing, bool use_answer) #ifndef DISABLE_TABCOMP TRUE, #endif - replacing ? MREPLACE : MWHEREIS, backupstring, + menu, backupstring, #ifndef DISABLE_HISTORIES &search_history, #endif diff --git a/src/winio.c b/src/winio.c index 18f98f0..bf40226 100644 --- a/src/winio.c +++ b/src/winio.c @@ -1913,10 +1913,11 @@ char *display_string(const char *buf, size_t start_col, size_t span, /* If path is NULL, we're in normal editing mode, so display the current * version of nano, the current filename, and whether the current file - * has been modified on the titlebar. If path isn't NULL, we're in the - * file browser, and path contains the directory to start the file - * browser in, so display the current version of nano and the contents - * of path on the titlebar. */ + * has been modified on the titlebar. If path isn't NULL, either we're + * in the file browser or help. If we are in file browser, path contains + * the directory to start the file browser in, so display the current + * version of nano and the contents of path on the titlebar. If we are + * in help, path contains the name of title of the help text. */ void titlebar(const char *path) { size_t verlen, prefixlen, pathlen, statelen; @@ -1948,7 +1949,9 @@ void titlebar(const char *path) /* Figure out the path, prefix and state strings. */ #ifndef DISABLE_BROWSER - if (path != NULL) + if ((currmenu == MHELP || currmenu == MFINDINHELP) && path != NULL) + state = _("View"); + else if (path != NULL) prefix = _("DIR:"); else #endif -- 2.7.4