diff options
author | Fumitoshi UKAI <ukai@debian.or.jp> | 2002-11-25 16:57:16 +0000 |
---|---|---|
committer | Fumitoshi UKAI <ukai@debian.or.jp> | 2002-11-25 16:57:16 +0000 |
commit | 0ab7c1236a1061df6a6e0cf57b136e641210dcb1 (patch) | |
tree | 7191eba8a27828ad988eb937add16f68b2b2f687 /func.c | |
parent | [w3m-dev 03476] Re: Bug#170506: w3m: Unable to use mozilla bugzilla (diff) | |
download | w3m-0ab7c1236a1061df6a6e0cf57b136e641210dcb1.tar.gz w3m-0ab7c1236a1061df6a6e0cf57b136e641210dcb1.zip |
[w3m-dev 03478] mouse action configuration
* display.c (displayBuffer): mouse_menu -> mouse_action.menu_str
mouse_action.lastline_str
(redrawNLine): mouse_menu -> mouse_action.menu_str
* fm.h (MouseMenuMap): deleted
(MouseActionMap): added
(MouseAction): added
(mouse_action): added
* func.c (default_mouse_action): added
(setMouseAction0): added
(setMouseAction1): added
(setMouseAction2): added
(initMouseMenu): deleted
(initMouseAction): added
* funcname.tab (CLOSE_TAB_MOUSE): added
(MENU_MOUSE): added
(MOVE_MOUSE): added
(TAB_MOUSE): added
* main.c (main): initMouseMenu() -> initMouseAction()
mouse_menu -> mouse_action
(posTab): mouse_menu -> mouse_action
check y > LastTab->y
(mouse_menu_action): deleted
(do_mouse_action): added
(process_mouse): mouse_menu -> mouse_action
do_mouse_action()
(movMs): added
(menuMs): added
(tabMs): added
(closeTMs): added
(reinit): initMouseMenu() -> initMouseAction()
resource: MOUSE_MENU -> MOUSE
(calcTabPos): mouse_menu -> mouse_action
* menu.c (mainMn): mouse_menu -> mouse_action
(selMn): mouse_menu -> mouse_action
(tabMn): mouse_menu -> mouse_action
(initMenu): add SelectTag to w3mMenuList
* proto.h (movMs): added
(menuMs): added
(tabMs): added
(closeTMs): added
(initMouseMenu): deleted
(initMouseAction): added
* rc.c (sync_with_option): initMouseMenu() -> initMouseAction()
* doc/README.func (CLOSE_TAB_MOUSE): added
(MENU_MOUSE): added
(MOVE_MOUSE): added
(TAB_MOUSE): added
* doc-jp/README.func (CLOSE_TAB_MOUSE): added
(MENU_MOUSE): added
(MOVE_MOUSE): added
(TAB_MOUSE): added
From: Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
Diffstat (limited to 'func.c')
-rw-r--r-- | func.c | 191 |
1 files changed, 149 insertions, 42 deletions
@@ -1,4 +1,4 @@ -/* $Id: func.c,v 1.14 2002/11/22 15:57:29 ukai Exp $ */ +/* $Id: func.c,v 1.15 2002/11/25 16:57:17 ukai Exp $ */ /* * w3m func.c */ @@ -322,15 +322,125 @@ getQWord(char **str) } #ifdef USE_MOUSE +static MouseAction default_mouse_action = { + NULL, +#if LANG == JA + "ΆγΆ¬Ά", +#else + "<=UpDn", +#endif + 0, 6, FALSE, 0, 0, + { { movMs, NULL }, { backBf, NULL }, { menuMs, NULL } }, /* default */ + { { NULL, NULL }, { NULL, NULL }, { NULL, NULL } }, /* anchor */ + { { followA, NULL }, { NULL, NULL }, { NULL, NULL } }, /* active */ + { { tabMs, NULL }, { closeTMs, NULL }, { NULL, NULL } }, /* tab */ + { NULL, NULL, NULL }, /* menu */ + { NULL, NULL, NULL } /* lastline */ +}; +static MouseActionMap default_lastline_action[6] = { + { backBf, NULL }, + { backBf, NULL }, + { pgBack, NULL }, + { pgBack, NULL }, + { pgFore, NULL }, + { pgFore, NULL } +}; + +static void +setMouseAction0(char **str, int *width, MouseActionMap **map, char *p) +{ + char *s; + int b, w, x; + + s = getQWord(&p); + if (!*s) { + *str = NULL; + width = 0; + for (b = 0; b < 3; b++) + map[b] = NULL; + return; + } + w = *width; + *str = s; + *width = strlen(s); + if (*width >= LIMIT_MOUSE_MENU) + *width = LIMIT_MOUSE_MENU; + if (*width <= w) + return; + for (b = 0; b < 3; b++) { + if (!map[b]) + continue; + map[b] = New_Reuse(MouseActionMap, map[b], *width); + for (x = w + 1; x < *width; x++) { + map[b][x].func = NULL; + map[b][x].data = NULL; + } + } +} + +static void +setMouseAction1(MouseActionMap **map, int width, char *p) +{ + char *s; + int x, x2, f; + + if (!*map) { + *map = New_N(MouseActionMap, width); + for (x = 0; x < width; x++) { + (*map)[x].func = NULL; + (*map)[x].data = NULL; + } + } + s = getWord(&p); + x = atoi(s); + if (!(IS_DIGIT(*s) && x >= 0 && x < width)) + return; /* error */ + s = getWord(&p); + x2 = atoi(s); + if (!(IS_DIGIT(*s) && x2 >= 0 && x2 < width)) + return; /* error */ + s = getWord(&p); + f = getFuncList(s); + s = getQWord(&p); + if (!*s) + s = NULL; + for (; x <= x2; x++) { + (*map)[x].func = (f >= 0) ? w3mFuncList[f].func : NULL; + (*map)[x].data = s; + } +} + +static void +setMouseAction2(MouseActionMap *map, char *p) +{ + char *s; + int f; + + s = getWord(&p); + f = getFuncList(s); + s = getQWord(&p); + if (!*s) + s = NULL; + map->func = (f >= 0) ? w3mFuncList[f].func : NULL; + map->data = s; +} + void -initMouseMenu(void) +initMouseAction(void) { FILE *mf; Str line; char *p, *s; - int f, b, x, x2; + int b, x, width; + MouseActionMap *map; + + bcopy((void *)&default_mouse_action, (void *)&mouse_action, + sizeof(default_mouse_action)); + mouse_action.lastline_map[0] = New_N(MouseActionMap, 6); + bcopy((void *)&default_lastline_action, + (void *)mouse_action.lastline_map[0], + sizeof(default_lastline_action)); - mouse_menu = NULL; if ((mf = fopen(rcFile(MOUSE_FILE), "rt")) == NULL) return; @@ -345,50 +455,47 @@ initMouseMenu(void) if (*s == '#') /* comment */ continue; if (!strcmp(s, "menu")) { - s = getQWord(&p); - if (!*s) - continue; /* error */ - mouse_menu = New(MouseMenu); - mouse_menu->str = s; - mouse_menu->width = strlen(s); - mouse_menu->in_action = FALSE; - if (mouse_menu->width >= LIMIT_MOUSE_MENU) - mouse_menu->width = LIMIT_MOUSE_MENU; - for (b = 0; b < 3; b++) { - mouse_menu->map[b] = New_N(MouseMenuMap, mouse_menu->width); - for (x = 0; x < mouse_menu->width; x++) { - mouse_menu->map[b][x].func = NULL; - mouse_menu->map[b][x].data = NULL; - } - } + setMouseAction0(&mouse_action.menu_str, &mouse_action.menu_width, + mouse_action.menu_map, p); + continue; + } + else if (!strcmp(s, "lastline")) { + setMouseAction0(&mouse_action.lastline_str, + &mouse_action.lastline_width, + mouse_action.lastline_map, p); + continue; } - if (!mouse_menu) - continue; /* "menu" is not set */ if (strcmp(s, "button")) continue; /* error */ s = getWord(&p); - b = atoi(s); - if (!(b >= 1 && b <= 3)) - continue; /* error */ - s = getWord(&p); - x = atoi(s); - if (!(IS_DIGIT(*s) && x >= 0 && x < mouse_menu->width)) - continue; /* error */ - s = getWord(&p); - x2 = atoi(s); - if (!(IS_DIGIT(*s) && x2 >= 0 && x2 < mouse_menu->width)) + b = atoi(s) - 1; + if (!(b >= 0 && b <= 2)) continue; /* error */ - s = getWord(&p); - f = getFuncList(s); - if (f < 0) - continue; /* error */ - s = getQWord(&p); - if (!*s) - s = NULL; - for (; x <= x2; x++) { - mouse_menu->map[b - 1][x].func = w3mFuncList[f].func; - mouse_menu->map[b - 1][x].data = s; + SKIP_BLANKS(p); + if (IS_DIGIT(*p)) + s = "menu"; + else + s = getWord(&p); + if (!strcasecmp(s, "menu")) { + if (!mouse_action.menu_str) + continue; + setMouseAction1(&mouse_action.menu_map[b], mouse_action.menu_width, + p); + } + else if (!strcasecmp(s, "lastline")) { + if (!mouse_action.lastline_str) + continue; + setMouseAction1(&mouse_action.lastline_map[b], + mouse_action.lastline_width, p); } + else if (!strcasecmp(s, "default")) + setMouseAction2(&mouse_action.default_map[b], p); + else if (!strcasecmp(s, "anchor")) + setMouseAction2(&mouse_action.anchor_map[b], p); + else if (!strcasecmp(s, "active")) + setMouseAction2(&mouse_action.active_map[b], p); + else if (!strcasecmp(s, "tab")) + setMouseAction2(&mouse_action.tab_map[b], p); } fclose(mf); } |