From: Benno Schulenberg Date: Fri, 27 Jun 2014 19:32:12 +0000 (+0000) Subject: Removing the ability to search for a matching bracket in a prompt input line. X-Git-Tag: v2.3.5~36 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=29dfb68b6e8f161471ca8ffb38563f5c87911f34;p=nano.git Removing the ability to search for a matching bracket in a prompt input line. git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5024 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- diff --git a/ChangeLog b/ChangeLog index 0ccaebe2..4caa05df 100644 --- a/ChangeLog +++ b/ChangeLog @@ -8,6 +8,10 @@ * src/rcfile.c (is_universal): New function, returning TRUE for the functions that are present in most menus but only listed in MMAIN. * doc/man/nanorc.5, doc/texinfo/nano.texi: Update the docs for this. + * prompt.c (find_statusbar_bracket_match, do_statusbar_find_bracket): + Remove these functions and thus the ability to search for a matching + bracket in a prompt input line. The find_bracket function never had + a default keybinding outside MMAIN, so is unlikely to have been used. 2014-06-25 Benno Schulenberg * src/browser.c (do_browser): Allow 'firstfile' and 'lastfile' to be diff --git a/src/prompt.c b/src/prompt.c index 8ffa39a8..d755bfe5 100644 --- a/src/prompt.c +++ b/src/prompt.c @@ -178,11 +178,6 @@ int do_statusbar_input(bool *meta_key, bool *func_key, bool *have_shortcut, do_statusbar_home(); else if (s->scfunc == do_end) do_statusbar_end(); - -#ifndef NANO_TINY - else if (s->scfunc == do_find_bracket) - do_statusbar_find_bracket(); -#endif else if (s->scfunc == do_verbatim_input) { /* If we're using restricted mode, the filename * isn't blank, and we're at the "Write File" @@ -650,162 +645,6 @@ void do_statusbar_verbatim_input(bool *got_enter) free(output); } -#ifndef NANO_TINY -/* Search for a match to one of the two characters in bracket_set. If - * reverse is TRUE, search backwards for the leftmost bracket. - * Otherwise, search forwards for the rightmost bracket. Return TRUE if - * we found a match, and FALSE otherwise. */ -bool find_statusbar_bracket_match(bool reverse, const char - *bracket_set) -{ - const char *rev_start = NULL, *found = NULL; - - assert(mbstrlen(bracket_set) == 2); - - /* rev_start might end up 1 character before the start or after the - * end of the line. This won't be a problem because we'll skip over - * it below in that case. */ - rev_start = reverse ? answer + (statusbar_x - 1) : answer + - (statusbar_x + 1); - - while (TRUE) { - /* Look for either of the two characters in bracket_set. - * rev_start can be 1 character before the start or after the - * end of the line. In either case, just act as though no match - * is found. */ - found = ((rev_start > answer && *(rev_start - 1) == '\0') || - rev_start < answer) ? NULL : (reverse ? - mbrevstrpbrk(answer, bracket_set, rev_start) : - mbstrpbrk(rev_start, bracket_set)); - - /* We've found a potential match. */ - if (found != NULL) - break; - - /* We've reached the start or end of the statusbar text, so - * get out. */ - return FALSE; - } - - /* We've definitely found something. */ - statusbar_x = found - answer; - statusbar_pww = statusbar_xplustabs(); - - return TRUE; -} - -/* Search for a match to the bracket at the current cursor position, if - * there is one. */ -void do_statusbar_find_bracket(void) -{ - size_t statusbar_x_save, pww_save; - const char *ch; - /* The location in matchbrackets of the bracket at the current - * cursor position. */ - int ch_len; - /* The length of ch in bytes. */ - const char *wanted_ch; - /* The location in matchbrackets of the bracket complementing - * the bracket at the current cursor position. */ - int wanted_ch_len; - /* The length of wanted_ch in bytes. */ - char *bracket_set; - /* The pair of characters in ch and wanted_ch. */ - size_t i; - /* Generic loop variable. */ - size_t matchhalf; - /* The number of single-byte characters in one half of - * matchbrackets. */ - size_t mbmatchhalf; - /* The number of multibyte characters in one half of - * matchbrackets. */ - size_t count = 1; - /* The initial bracket count. */ - bool reverse; - /* The direction we search. */ - char *found_ch; - /* The character we find. */ - - assert(mbstrlen(matchbrackets) % 2 == 0); - - ch = answer + statusbar_x; - - if (ch == '\0' || (ch = mbstrchr(matchbrackets, ch)) == NULL) - return; - - /* Save where we are. */ - statusbar_x_save = statusbar_x; - pww_save = statusbar_pww; - - /* If we're on an opening bracket, which must be in the first half - * of matchbrackets, we want to search forwards for a closing - * bracket. If we're on a closing bracket, which must be in the - * second half of matchbrackets, we want to search backwards for an - * opening bracket. */ - matchhalf = 0; - mbmatchhalf = mbstrlen(matchbrackets) / 2; - - for (i = 0; i < mbmatchhalf; i++) - matchhalf += parse_mbchar(matchbrackets + matchhalf, NULL, - NULL); - - reverse = ((ch - matchbrackets) >= matchhalf); - - /* If we're on an opening bracket, set wanted_ch to the character - * that's matchhalf characters after ch. If we're on a closing - * bracket, set wanted_ch to the character that's matchhalf - * characters before ch. */ - wanted_ch = ch; - - while (mbmatchhalf > 0) { - if (reverse) - wanted_ch = matchbrackets + move_mbleft(matchbrackets, - wanted_ch - matchbrackets); - else - wanted_ch += move_mbright(wanted_ch, 0); - - mbmatchhalf--; - } - - ch_len = parse_mbchar(ch, NULL, NULL); - wanted_ch_len = parse_mbchar(wanted_ch, NULL, NULL); - - /* Fill bracket_set in with the values of ch and wanted_ch. */ - bracket_set = charalloc((mb_cur_max() * 2) + 1); - strncpy(bracket_set, ch, ch_len); - strncpy(bracket_set + ch_len, wanted_ch, wanted_ch_len); - null_at(&bracket_set, ch_len + wanted_ch_len); - - found_ch = charalloc(mb_cur_max() + 1); - - while (TRUE) { - if (find_statusbar_bracket_match(reverse, bracket_set)) { - /* If we found an identical bracket, increment count. If we - * found a complementary bracket, decrement it. */ - parse_mbchar(answer + statusbar_x, found_ch, NULL); - count += (strncmp(found_ch, ch, ch_len) == 0) ? 1 : -1; - - /* If count is zero, we've found a matching bracket. Update - * the statusbar prompt and get out. */ - if (count == 0) { - if (need_statusbar_horizontal_update(pww_save)) - update_statusbar_line(answer, statusbar_x); - break; - } - } else { - /* We didn't find either an opening or closing bracket. - * Restore where we were, and get out. */ - statusbar_x = statusbar_x_save; - statusbar_pww = pww_save; - break; - } - } - - /* Clean up. */ - free(bracket_set); - free(found_ch); -} -#endif /* !NANO_TINY */ /* Return the placewewant associated with statusbar_x, i.e. the * zero-based column position of the cursor. The value will be no diff --git a/src/proto.h b/src/proto.h index 1226188f..5084e19b 100644 --- a/src/proto.h +++ b/src/proto.h @@ -514,11 +514,6 @@ bool do_statusbar_next_word(bool allow_punct); bool do_statusbar_prev_word(bool allow_punct); #endif void do_statusbar_verbatim_input(bool *got_enter); -#ifndef NANO_TINY -bool find_statusbar_bracket_match(bool reverse, const char - *bracket_set); -void do_statusbar_find_bracket(void); -#endif size_t statusbar_xplustabs(void); size_t get_statusbar_page_start(size_t start_col, size_t column); void reset_statusbar_cursor(void);