坂本です。
>> 日台です。
>> すいません、先のパッチ [w3m-dev 01701] は破棄して、
>> このメールに添付したものを使って下さい。
最初のものだと ^ が動作しなかったのですが直ってるのかな?
なお、menu.c の一部で文字列の最初にもかかわらず firstp = 0 としている
バグがあるので patch を送ります。
ついでに [w3m-dev 01335] もある程度直しました。(宿題だった)
kokb24-test1 からの patch です。
ところで、regex.c 内での住みわけを
#include "fm.h"
#if defined(RUBY_REGEX) || defined(ほげほげ_REGEX)
#define HAVE_REGEX
#endif
#include "regex.h"
#ifndef HAVE_REGEX
/* いままでのルーチン */
#endif
#ifdef RUBY_REGEX
/* ruby の regex を使ったルーチン */
#endif
#ifdef ほげほげ_REGEX
/* ほげほげ の regex を使ったルーチン */
#endif
のようにしませんか?読みやすいですし。
-----------------------------------
坂本 浩則 <hsaka@mth.biglobe.ne.jp>
http://www2u.biglobe.ne.jp/~hsaka/
diff -u main.c.orig main.c
--- main.c.orig Sun Jan 28 18:35:01 2001
+++ main.c Sat Feb 3 03:49:04 2001
@@ -1057,12 +1057,6 @@
disp_message("No previous regular expression", TRUE);
return;
}
- move(LASTLINE, 0);
- addstr(searchRoutine == forwardSearch ? "Forward: " : "Backward: ");
- addstr(SearchString);
- clrtoeolx();
- move(LASTLINE, 0);
- refresh();
if (reverse != 0)
reverse = 1;
if (searchRoutine == backwardSearch)
@@ -1075,6 +1069,9 @@
signal(SIGINT, prevtrap);
term_raw();
displayBuffer(Currentbuf, B_NORMAL);
+ disp_message(Sprintf("%s%s",
+ routine[reverse] == forwardSearch ? "Forward: " : "Backward: ",
+ SearchString)->ptr, FALSE);
if (wrapped) {
disp_message("Search wrapped", FALSE);
}
diff -u menu.c.orig menu.c
--- menu.c.orig Fri Jan 26 23:14:27 2001
+++ menu.c Sat Feb 3 03:57:36 2001
@@ -933,13 +933,16 @@
message (p, 0, 0);
return -1;
}
+ if (from < 0)
+ from = 0;
for (i = from; i < menu->nitem; i++)
- if (regexMatch (menu->item[i].label, 0, 0) == 1)
- return i;
+ if (menu->item[i].type != MENU_NOP &&
+ regexMatch (menu->item[i].label, 0, 1) == 1)
+ return i;
return -1;
}
-int
+static int
menu_search_forward (Menu* menu, int from)
{
char *str;
@@ -948,15 +951,16 @@
if (str != NULL && *str == '\0')
str = SearchString;
if (str == NULL || *str == '\0')
- return (MENU_NOTHING);
+ return -1;
SearchString = str;
- found = menuForwardSearch (menu, SearchString, from);
+ menuSearchRoutine = menuForwardSearch;
+ found = menuForwardSearch (menu, SearchString, from + 1);
if (WrapSearch && found == -1)
found = menuForwardSearch (menu, SearchString, 0);
- menuSearchRoutine = menuForwardSearch;
if (found >= 0)
return found;
- return from;
+ disp_message("Not found", TRUE);
+ return -1;
}
static int
@@ -964,7 +968,8 @@
{
int select;
select = menu_search_forward (CurrentMenu, CurrentMenu->select);
- goto_menu (CurrentMenu, select, 1);
+ if (select >= 0)
+ goto_menu (CurrentMenu, select, 1);
return (MENU_NOTHING);
}
@@ -977,13 +982,16 @@
message (p, 0, 0);
return -1;
}
- for (i = from; i >= 0 ; i--)
- if (regexMatch (menu->item[i].label, 0, 0) == 1)
+ if (from >= menu->nitem)
+ from = menu->nitem - 1;
+ for (i = from; i >= 0; i--)
+ if (menu->item[i].type != MENU_NOP &&
+ regexMatch (menu->item[i].label, 0, 1) == 1)
return i;
return -1;
}
-int
+static int
menu_search_backward (Menu* menu, int from)
{
char *str;
@@ -994,13 +1002,14 @@
if (str == NULL || *str == '\0')
return (MENU_NOTHING);
SearchString = str;
- found = menuBackwardSearch (menu, SearchString, from);
- if (WrapSearch && found == -1)
- found = menuBackwardSearch (menu, SearchString, 0);
menuSearchRoutine = menuBackwardSearch;
+ found = menuBackwardSearch (menu, SearchString, from - 1);
+ if (WrapSearch && found == -1)
+ found = menuBackwardSearch (menu, SearchString, menu->nitem);
if (found >= 0)
return found;
- return from;
+ disp_message("Not found", TRUE);
+ return -1;
}
static int
@@ -1008,7 +1017,8 @@
{
int select;
select = menu_search_backward (CurrentMenu, CurrentMenu->select);
- goto_menu (CurrentMenu, select, -1);
+ if (select >= 0)
+ goto_menu (CurrentMenu, select, -1);
return (MENU_NOTHING);
}
@@ -1016,7 +1026,6 @@
menu_search_next_previous (Menu* menu, int from, int reverse)
{
int found;
- int new_from;
static int (*routine[2]) (Menu *, char *, int) =
{
menuForwardSearch, menuBackwardSearch
@@ -1024,25 +1033,20 @@
if (menuSearchRoutine == NULL) {
disp_message ("No previous regular expression", TRUE);
- return from;
+ return -1;
}
- addstr(menuSearchRoutine == menuForwardSearch ? "Forward: " : "Backward: ");
- addstr(SearchString);
if (reverse != 0)
reverse = 1;
if (menuSearchRoutine == menuBackwardSearch)
reverse ^= 1;
- new_from = from - reverse * 2 + 1;
- if (new_from >=0 && new_from < menu->nitem)
- found = (*routine[reverse]) (menu, SearchString, new_from);
- else
- found = (*routine[reverse]) (menu, SearchString, from);
- if (WrapSearch && found == -1) {
+ from += reverse ? -1 : 1;
+ found = (*routine[reverse]) (menu, SearchString, from);
+ if (WrapSearch && found == -1)
found = (*routine[reverse]) (menu, SearchString, reverse * menu->nitem);
- }
if (found >= 0)
return found;
- return from;
+ disp_message("Not found", TRUE);
+ return -1;
}
static int
@@ -1050,7 +1054,8 @@
{
int select;
select = menu_search_next_previous (CurrentMenu, CurrentMenu->select, 0);
- goto_menu (CurrentMenu, select, 1);
+ if (select >= 0)
+ goto_menu (CurrentMenu, select, 1);
return (MENU_NOTHING);
}
@@ -1059,7 +1064,8 @@
{
int select;
select = menu_search_next_previous (CurrentMenu, CurrentMenu->select, 1);
- goto_menu (CurrentMenu, select, -1);
+ if (select >= 0)
+ goto_menu (CurrentMenu, select, -1);
return (MENU_NOTHING);
}
[Next]