tFind occurences correctly on first and later lines - ve - a minimal text edito… | |
git clone git://src.adamsgaard.dk/ve | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 893395f4cbc488e2fa942f80589d563c7648fb6e | |
parent dce7e854fa36dd6392e73c208140c570644ad7dc | |
Author: Anders Damsgaard <[email protected]> | |
Date: Wed, 7 Aug 2019 10:35:49 +0200 | |
Find occurences correctly on first and later lines | |
Diffstat: | |
M find.c | 38 +++++++++++++++++++----------… | |
M main.c | 2 +- | |
2 files changed, 25 insertions(+), 15 deletions(-) | |
--- | |
diff --git a/find.c b/find.c | |
t@@ -16,33 +16,43 @@ | |
void | |
editor_find_next_occurence(int opposite_direction) | |
{ | |
- int i; | |
+ int x_start; | |
+ int y_start, y, y_end, y_inc; | |
eRow *row; | |
char *match; | |
- | |
+ | |
if (!E.find_query) | |
return; | |
+ y_start = E.cursor_y; | |
+ x_start = editor_row_cursor_x_to_rx(&E.row[E.cursor_y], E.cursor_x); | |
+ | |
if ((E.find_direction && !opposite_direction) || | |
(!E.find_direction && opposite_direction)) { | |
- for (i=0; i<E.num_rows; ++i) { | |
- row = &E.row[i]; | |
- match = strstr(row->rchars, E.find_query); | |
- if (match) | |
- break; | |
- } | |
+ y_end = E.num_rows; | |
+ y_inc = +1; | |
} else { | |
- for (i=E.num_rows-1; i>=0; --i) { | |
- row = &E.row[i]; | |
+ y_end = -1; | |
+ y_inc = -1; | |
+ } | |
+ | |
+ /* from cursor until end of document */ | |
+ for (y = y_start; y != y_end; y += y_inc) { | |
+ row = &E.row[y]; | |
+ | |
+ if (y == y_start) | |
+ match = strstr(row->rchars + x_start, E.find_query); | |
+ else | |
match = strstr(row->rchars, E.find_query); | |
- if (match) | |
- break; | |
- } | |
+ if (match) | |
+ break; | |
} | |
if (match) { | |
- E.cursor_y = i; | |
+ E.cursor_y = y; | |
E.cursor_x = editor_row_cursor_rx_to_x(row, match - row->rchar… | |
/* E.row_offset = E.num_rows; */ /* put line to top of screen … | |
+ } else { | |
+ /* from other end of document until cursor */ | |
} | |
} | |
diff --git a/main.c b/main.c | |
t@@ -17,7 +17,7 @@ main(int argc, char* argv[]) | |
file_open(argv[1]); | |
} | |
- editor_set_status_message("-- %s v%s --", PROGNAME, VERSION); | |
+ editor_set_status_message("%s v%s", PROGNAME, VERSION); | |
while (1) { | |
editor_refresh_screen(); |