commit 9f2368d42f8c5168605723596a8b5fdc06338164
parent 2af0d03d1faad8ce14a1f83bce45f6400c7083e4
Author: ukai <ukai>
Date: Wed, 5 Mar 2003 18:56:28 +0000
[w3m-dev 03793] incremental search fix
main.c (dispincsrch): revert sbuf.pos fix
start from next position in next forward search
(srch): start from next position in forward saerch
if not found, restore original position
(srch_nxtprv): start from next position in next forward search
* search.c (forwardSearch): search from current position
(dispincsrch): start from current position in case of
From: Fumitoshi UKAI <ukai@debian.or.jp>
Diffstat:
3 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -1,5 +1,15 @@
2003-03-06 Fumitoshi UKAI <ukai@debian.or.jp>
+ * [w3m-dev 03793] incremental search fix
+ * main.c (dispincsrch): revert sbuf.pos fix
+ start from next position in next forward search
+ (srch): start from next position in forward saerch
+ if not found, restore original position
+ (srch_nxtprv): start from next position in next forward search
+ * search.c (forwardSearch): search from current position
+
+2003-03-06 Fumitoshi UKAI <ukai@debian.or.jp>
+
* [w3m-dev 03792] URL match string
incremental search fix
* main.c (chkURLBuffer): allow - at end of URL string
diff --git a/main.c b/main.c
@@ -1603,7 +1603,6 @@ dispincsrch(int ch, Str buf, Lineprop *prop)
if (ch == 0 && buf == NULL) {
SAVE_BUFPOSITION(&sbuf); /* search starting point */
currentLine = sbuf.currentLine;
- sbuf.pos -= 1; /* XXX start from current position */
pos = sbuf.pos;
return -1;
}
@@ -1632,12 +1631,16 @@ dispincsrch(int ch, Str buf, Lineprop *prop)
if (do_next_search) {
if (*str) {
+ if (searchRoutine == forwardSearch)
+ Currentbuf->pos += 1;
SAVE_BUFPOSITION(&sbuf);
srchcore(str, searchRoutine);
arrangeCursor(Currentbuf);
if (Currentbuf->currentLine == currentLine
&& Currentbuf->pos == pos) {
SAVE_BUFPOSITION(&sbuf);
+ if (searchRoutine == forwardSearch)
+ Currentbuf->pos += 1;
srchcore(str, searchRoutine);
arrangeCursor(Currentbuf);
}
@@ -1692,6 +1695,7 @@ srch(int (*func) (Buffer *, char *), char *prompt)
char *str;
int result;
int disp = FALSE;
+ int pos;
str = searchKeyData();
if (str == NULL || *str == '\0') {
@@ -1704,9 +1708,14 @@ srch(int (*func) (Buffer *, char *), char *prompt)
}
disp = TRUE;
}
+ pos = Currentbuf->pos;
+ if (func == forwardSearch)
+ Currentbuf->pos += 1;
result = srchcore(str, func);
if (result & SR_FOUND)
clear_mark(Currentbuf->currentLine);
+ else
+ Currentbuf->pos = pos;
displayBuffer(Currentbuf, B_NORMAL);
if (disp)
disp_srchresult(result, prompt, str);
@@ -1759,6 +1768,8 @@ srch_nxtprv(int reverse)
reverse = 1;
if (searchRoutine == backwardSearch)
reverse ^= 1;
+ if (reverse == 0)
+ Currentbuf->pos += 1;
result = srchcore(SearchString, routine[reverse]);
if (result & SR_FOUND)
clear_mark(Currentbuf->currentLine);
diff --git a/search.c b/search.c
@@ -107,7 +107,7 @@ forwardSearch(Buffer *buf, char *str)
if (l == NULL) {
return SR_NOTFOUND;
}
- pos = buf->pos + 1;
+ pos = buf->pos;
if (l->bpos) {
pos += l->bpos;
while (l->bpos && l->prev)