commit 7ba356a62c0ee345be8a427e7579d0d10250b602
parent cb17732ac24f5ffb8fd23bbc956c24163d8c0f4c
Author: Benno Schulenberg <bensberg@justemail.net>
Date: Fri, 8 Apr 2016 18:11:22 +0200
searching: don't keep track of current_y, but calculate it at the end
Stop keeping track of the vertical screen position when searching for
something. If nothing is found, current_y doesn't change, and all the
incrementing/decrementing was a waste of time. If something is found
and it is onscreen, it is easy to calculate the new current_y. And if
something is found and it is offscreen, then current_y is irrelevant,
because we will be either centering the found occurrence (searching)
or putting it on the top or bottom line (bracket matching).
(The above does not take softwrapping into account, but neither did
the old code, so this doesn't introduce any new bugs.)
(Also, when the search wraps, and the viewport is away from head or
tail of the file, and the found occurrence is within the viewport,
then the incremented/decremented current_y would be way wrong, but
this didn't have any adverse effects as far as I could tell. It
seems that current_y is irrelevant in most cases.)
Diffstat:
1 file changed, 8 insertions(+), 21 deletions(-)
diff --git a/src/search.c b/src/search.c
@@ -263,7 +263,6 @@ int findnextstr(
/* The length of the match we find. */
int feedback = 0;
/* When bigger than zero, show and wipe the "Searching..." message. */
- ssize_t current_y_find = openfile->current_y;
filestruct *fileptr = openfile->current;
const char *rev_start = fileptr->data, *found = NULL;
time_t lastkbcheck = time(NULL);
@@ -349,28 +348,20 @@ int findnextstr(
/* Move to the previous or next line in the file. */
#ifndef NANO_TINY
- if (ISSET(BACKWARDS_SEARCH)) {
+ if (ISSET(BACKWARDS_SEARCH))
fileptr = fileptr->prev;
- current_y_find--;
- } else
+ else
#endif
- {
fileptr = fileptr->next;
- current_y_find++;
- }
/* If we've reached the start or end of the buffer, wrap around. */
if (fileptr == NULL) {
#ifndef NANO_TINY
- if (ISSET(BACKWARDS_SEARCH)) {
+ if (ISSET(BACKWARDS_SEARCH))
fileptr = openfile->filebot;
- current_y_find = editwinrows - 1;
- } else
+ else
#endif
- {
fileptr = openfile->fileage;
- current_y_find = 0;
- }
statusbar(_("Search Wrapped"));
/* Delay the "Searching..." message for at least two seconds. */
feedback = -2;
@@ -394,7 +385,7 @@ int findnextstr(
openfile->current = fileptr;
openfile->current_x = found - fileptr->data;
openfile->placewewant = xplustabs();
- openfile->current_y = current_y_find;
+ openfile->current_y = fileptr->lineno - openfile->edittop->lineno;
/* When requested, pass back the length of the match. */
if (match_len != NULL)
@@ -983,7 +974,6 @@ bool find_bracket_match(bool reverse, const char *bracket_set)
{
filestruct *fileptr = openfile->current;
const char *rev_start = NULL, *found = NULL;
- ssize_t current_y_find = openfile->current_y;
assert(mbstrlen(bracket_set) == 2);
@@ -1007,13 +997,10 @@ bool find_bracket_match(bool reverse, const char *bracket_set)
/* We've found a potential match. */
break;
- if (reverse) {
+ if (reverse)
fileptr = fileptr->prev;
- current_y_find--;
- } else {
+ else
fileptr = fileptr->next;
- current_y_find++;
- }
if (fileptr == NULL)
/* We've reached the start or end of the buffer, so get out. */
@@ -1028,7 +1015,7 @@ bool find_bracket_match(bool reverse, const char *bracket_set)
openfile->current = fileptr;
openfile->current_x = found - fileptr->data;
openfile->placewewant = xplustabs();
- openfile->current_y = current_y_find;
+ openfile->current_y = fileptr->lineno - openfile->edittop->lineno;
return TRUE;
}