w3m

Unnamed repository; edit this file to name it for gitweb.
git clone https://logand.com/git/w3m.git/
Log | Files | Refs | README

commit d25ca0ad4dd73ac485eb11b79ac4a9222335916f
parent fd56cbb434563d991eef762da9856b7fa6c67467
Author: ukai <ukai>
Date:   Mon, 25 Nov 2002 16:57:16 +0000

[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:
MChangeLog | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdisplay.c | 24++++++++++++++----------
Mdoc-jp/README.func | 4++++
Mdoc/README.func | 4++++
Mfm.h | 25+++++++++++++++----------
Mfunc.c | 189++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------
Mfuncname.tab | 4++++
Mmain.c | 244++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
Mmenu.c | 23+++++++++++++----------
Mproto.h | 14+++++++++++++-
Mrc.c | 2+-
11 files changed, 406 insertions(+), 182 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,5 +1,60 @@ 2002-11-26 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> + * [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 + +2002-11-26 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> + * [w3m-dev 03476] Re: Bug#170506: w3m: Unable to use mozilla bugzilla * file.c (HTMLtagproc1): initialize ignore_tag in table_mode (HTMLtagproc0): check table_level diff --git a/display.c b/display.c @@ -254,7 +254,11 @@ displayBuffer(Buffer *buf, int mode) else buf->rootX = 0; buf->COLS = COLS - buf->rootX; - if (nTab > 1 || mouse_menu) { + if (nTab > 1 +#ifdef USE_MOUSE + || mouse_action.menu_str +#endif + ) { ny = LastTab->y + 2; if (ny > LASTLINE) ny = LASTLINE; @@ -318,12 +322,8 @@ displayBuffer(Buffer *buf, int mode) #endif #ifdef USE_MOUSE - if (use_mouse) -#if LANG == JA - msg = Strnew_charp("≪↑↓"); -#else /* LANG != JA */ - msg = Strnew_charp("<=UpDn "); -#endif /* LANG != JA */ + if (use_mouse && mouse_action.lastline_str) + msg = Strnew_charp(mouse_action.lastline_str); else #endif /* not USE_MOUSE */ msg = Strnew(); @@ -445,14 +445,18 @@ redrawNLine(Buffer *buf, int n) #endif /* USE_BG_COLOR */ } #endif /* USE_COLOR */ - if (nTab > 1 || mouse_menu) { + if (nTab > 1 +#ifdef USE_MOUSE + || mouse_action.menu_str +#endif + ) { TabBuffer *t; int l; move(0, 0); #ifdef USE_MOUSE - if (mouse_menu && mouse_menu->str) - addstr(mouse_menu->str); + if (mouse_action.menu_str) + addstr(mouse_action.menu_str); #endif clrtoeolx(); for (t = FirstTab; t; t = t->nextTab) { diff --git a/doc-jp/README.func b/doc-jp/README.func @@ -7,6 +7,7 @@ BOOKMARK CENTER_H カーソルのある位置を行の中央に移動します CENTER_V カーソルのある行を画面の中央に移動します CLOSE_TAB 現在のタブを閉じます +CLOSE_TAB_MOUSE マウスカーソルの位置のタブを閉じます(マウス操作用) COMMAND w3mのコマンドを実行します COOKIE クッキー一覧を表示します DEFINE_KEY キー入力とコマンドの対応を定義します @@ -49,11 +50,13 @@ MARK_MID Message-ID MARK_URL URL風の文字列をリンクにします MARK_WORD カーソルのある語をリンクにします MENU メニューを立ち上げます +MENU_MOUSE マウスカーソルの位置でメニューを立ち上げます(マウス操作用) MOUSE_TOGGLE マウスの有効/無効をトグルする MOVE_DOWN カーソルを下に移動します(改ページ時には半ページスクロール) MOVE_DOWN1 カーソルを下に移動します(改ページ時には1行スクロール) MOVE_LEFT カーソルを左に移動します(左端の場合には半画面分シフト) MOVE_LEFT1 カーソルを左に移動します(左端の場合には1文字分シフト) +MOVE_MOUSE カーソルをマウスカーソルの位置に移動します(マウス操作用) MOVE_RIGHT カーソルを右に移動します(右端の場合には半画面分シフト) MOVE_RIGHT1 カーソルを右に移動します(右端の場合には1文字分シフト) MOVE_UP カーソルを上に移動します(改ページ時には半ページスクロール) @@ -118,6 +121,7 @@ TAB_GOTO_RELATIVE TAB_LEFT 現在のタブを左に移動します TAB_LINK リンクが指す先の文書を新しいタブで開きます TAB_MENU タブ選択メニューを立ち上げます +TAB_MOUSE マウスカーソルの位置のタブに移動します(マウス操作用) TAB_RIGHT 現在のタブを右に移動します UP 画面を1行上にスクロールします VERSION w3m のバージョンを表示します diff --git a/doc/README.func b/doc/README.func @@ -7,6 +7,7 @@ BOOKMARK Read bookmark CENTER_H Move to the center line CENTER_V Move to the center column CLOSE_TAB Close current tab +CLOSE_TAB_MOUSE Close tab on mouse cursor (for mouse action) COMMAND Execute w3m command(s) COOKIE View cookie list DEFINE_KEY Define a binding between a key stroke and a user command @@ -49,11 +50,13 @@ MARK_MID Mark Message-ID-like strings as anchors MARK_URL Mark URL-like strings as anchors MARK_WORD Mark current word as anchor MENU Popup menu +MENU_MOUSE Popup menu at mouse cursor (for mouse action) MOUSE_TOGGLE Toggle activity of mouse MOVE_DOWN Move cursor down (a half screen scroll at the end of screen) MOVE_DOWN1 Move cursor down (1 line scroll at the end of screen) MOVE_LEFT Move cursor left (a half screen shift at the left edge) MOVE_LEFT1 Move cursor left (1 columns shift at the left edge) +MOVE_MOUSE Move cursor to mouse cursor (for mouse action) MOVE_RIGHT Move cursor right (a half screen shift at the right edge) MOVE_RIGHT1 Move cursor right (1 columns shift at the right edge) MOVE_UP Move cursor up (a half screen scroll at the top of screen) @@ -118,6 +121,7 @@ TAB_GOTO_RELATIVE Open relative URL on new tab TAB_LEFT Move current tab left TAB_LINK Open current link on new tab TAB_MENU Popup tab selection menu +TAB_MOUSE Move to tab on mouse cursor (for mouse action) TAB_RIGHT Move current tab right UP Scroll up one line VERSION Display version of w3m diff --git a/fm.h b/fm.h @@ -993,22 +993,27 @@ global int reverse_mouse init(FALSE); global int relative_wheel_scroll init(FALSE); global int fixed_wheel_scroll_count init(5); global int relative_wheel_scroll_ratio init(30); -typedef struct _MouseMenuMap { +typedef struct _MouseActionMap { void (*func) (); char *data; -} MouseMenuMap; -typedef struct _MouseMenu { - char *str; - int width; +} MouseActionMap; +typedef struct _MouseAction { + char *menu_str; + char *lastline_str; + int menu_width; + int lastline_width; int in_action; int cursorX; int cursorY; - MouseMenuMap *map[3]; -} MouseMenu; -global MouseMenu *mouse_menu init(NULL); + MouseActionMap default_map[3]; + MouseActionMap anchor_map[3]; + MouseActionMap active_map[3]; + MouseActionMap tab_map[3]; + MouseActionMap *menu_map[3]; + MouseActionMap *lastline_map[3]; +} MouseAction; +global MouseAction mouse_action; #define LIMIT_MOUSE_MENU 100 -#else -#define mouse_menu NULL #endif /* USE_MOUSE */ #ifdef USE_COOKIE diff --git a/func.c b/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); } diff --git a/funcname.tab b/funcname.tab @@ -11,6 +11,7 @@ BOOKMARK ldBmark CENTER_H ctrCsrH CENTER_V ctrCsrV CLOSE_TAB closeT +CLOSE_TAB_MOUSE closeTMs COMMAND execCmd COOKIE cooLst DEFINE_KEY defKey @@ -54,12 +55,14 @@ MARK_MID chkNMID MARK_URL chkURL MARK_WORD chkWORD MENU mainMn +MENU_MOUSE menuMs MOUSE mouse MOUSE_TOGGLE msToggle MOVE_DOWN movD MOVE_DOWN1 movD1 MOVE_LEFT movL MOVE_LEFT1 movL1 +MOVE_MOUSE movMs MOVE_RIGHT movR MOVE_RIGHT1 movR1 MOVE_UP movU @@ -126,6 +129,7 @@ TAB_GOTO_RELATIVE tabrURL TAB_LEFT tabL TAB_LINK tabA TAB_MENU tabMn +TAB_MOUSE tabMs TAB_RIGHT tabR UP lup1 VERSION dispVer diff --git a/main.c b/main.c @@ -754,7 +754,7 @@ main(int argc, char **argv, char **envp) #endif /* not SIGWINCH */ initKeymap(TRUE); #ifdef USE_MOUSE - initMouseMenu(); + initMouseAction(); #endif /* MOUSE */ #ifdef USE_MENU initMenu(); @@ -1017,8 +1017,7 @@ main(int argc, char **argv, char **envp) CurrentKeyData = NULL; /* get keypress event */ #ifdef USE_MOUSE - if (mouse_menu) - mouse_menu->in_action = FALSE; + mouse_action.in_action = FALSE; if (use_mouse) mouse_active(); #endif /* USE_MOUSE */ @@ -4806,8 +4805,10 @@ posTab(int x, int y) { TabBuffer *tab; - if (mouse_menu && x < mouse_menu->width && y == 0) + if (mouse_action.menu_str && x < mouse_action.menu_width && y == 0) return NO_TABBUFFER; + if (y > LastTab->y) + return NULL; for (tab = FirstTab; tab; tab = tab->nextTab) { if (tab->x1 <= x && x <= tab->x2 && tab->y == y) return tab; @@ -4816,10 +4817,14 @@ posTab(int x, int y) } static void -mouse_menu_action(int btn, int x, int y) +do_mouse_action(int btn, int x, int y) { - if (!mouse_menu) - return; + MouseActionMap *map = NULL; + int ny = -1; + + if (nTab > 1 || mouse_action.menu_str) + ny = LastTab->y + 1; + switch (btn) { case MOUSE_BTN1_DOWN: btn = 0; @@ -4833,14 +4838,54 @@ mouse_menu_action(int btn, int x, int y) default: return; } - if (x >= 0 && x < mouse_menu->width && mouse_menu->map[btn][x].func) { - mouse_menu->in_action = TRUE; - mouse_menu->cursorX = x; - mouse_menu->cursorY = y; + if (y < ny) { + if (mouse_action.menu_str && x >= 0 && x < mouse_action.menu_width) { + if (mouse_action.menu_map[btn]) + map = &mouse_action.menu_map[btn][x]; + } + else + map = &mouse_action.tab_map[btn]; + } + else if (y == LASTLINE) { + if (mouse_action.lastline_str && x >= 0 && + x < mouse_action.lastline_width) { + if (mouse_action.lastline_map[btn]) + map = &mouse_action.lastline_map[btn][x]; + } + } + else if (y > ny) { + if (y == Currentbuf->cursorY + Currentbuf->rootY && + (x == Currentbuf->cursorX + Currentbuf->rootX +#ifdef JP_CHARSET + || (Currentbuf->currentLine != NULL && + (Currentbuf->currentLine->propBuf[Currentbuf->pos] & PC_KANJI1) + && x == Currentbuf->cursorX + Currentbuf->rootX + 1) +#endif /* JP_CHARSET */ + )) { + if (retrieveCurrentAnchor(Currentbuf) || + retrieveCurrentForm(Currentbuf)) + map = &mouse_action.active_map[btn]; + } + else { + int cx = Currentbuf->cursorX, cy = Currentbuf->cursorY; + cursorXY(Currentbuf, x - Currentbuf->rootX, + y - Currentbuf->rootY); + if (retrieveCurrentAnchor(Currentbuf) || + retrieveCurrentForm(Currentbuf)) + map = &mouse_action.anchor_map[btn]; + cursorXY(Currentbuf, cx, cy); + } + } + if (!(map && map->func)) + map = &mouse_action.default_map[btn]; + if (map && map->func) { + mouse_action.in_action = TRUE; + mouse_action.cursorX = x; + mouse_action.cursorY = y; CurrentKey = -1; CurrentKeyData = NULL; - CurrentCmdData = mouse_menu->map[btn][x].data; - (*mouse_menu->map[btn][x].func) (); + CurrentCmdData = map->data; + (*map->func) (); CurrentCmdData = NULL; } } @@ -4851,34 +4896,17 @@ process_mouse(int btn, int x, int y) int delta_x, delta_y, i; static int press_btn = MOUSE_BTN_RESET, press_x, press_y; TabBuffer *t; - int ny = 0; + int ny = -1; - if (nTab > 1 || mouse_menu) + if (nTab > 1 || mouse_action.menu_str) ny = LastTab->y + 1; if (btn == MOUSE_BTN_UP) { switch (press_btn) { case MOUSE_BTN1_DOWN: - if (ny && y < ny) { - if (press_y == y && press_x == x) { -#if 0 - if (y == 0 && x >= COLS - 2) { - deleteTab(CurrentTab); - displayBuffer(Currentbuf, B_FORCE_REDRAW); - return; - } -#endif - t = posTab(x, y); - if (t == NULL) - return; - if (t == NO_TABBUFFER) { - mouse_menu_action(press_btn, x, y); - return; - } - CurrentTab = t; - displayBuffer(Currentbuf, B_FORCE_REDRAW); - return; - } - else if (press_y < ny) { + if (press_y == y && press_x == x) + do_mouse_action(press_btn, x, y); + else if (ny > 0 && y < ny) { + if (press_y < ny) { moveTab(posTab(press_x, press_y), posTab(x, y), (press_y == y) ? (press_x < x) : (press_y < y)); return; @@ -4911,7 +4939,7 @@ process_mouse(int btn, int x, int y) } return; } - if (press_x != x || press_y != y) { + else { delta_x = x - press_x; delta_y = y - press_y; @@ -4940,77 +4968,11 @@ process_mouse(int btn, int x, int y) col1R(); } } - else { - if (y == LASTLINE) { - switch (x) { - case 0: - case 1: - backBf(); - break; - case 2: - case 3: - pgBack(); - break; - case 4: - case 5: - pgFore(); - break; - } - return; - } - if (y == Currentbuf->cursorY + Currentbuf->rootY && - (x == Currentbuf->cursorX + Currentbuf->rootX -#ifdef JP_CHARSET - || (Currentbuf->currentLine != NULL && - (Currentbuf->currentLine-> - propBuf[Currentbuf->pos] & PC_KANJI1) - && x == Currentbuf->cursorX + Currentbuf->rootX + 1) -#endif /* JP_CHARSET */ - )) { - followA(); - return; - } - if (x >= Currentbuf->rootX) - cursorXY(Currentbuf, x - Currentbuf->rootX, - y - Currentbuf->rootY); - displayBuffer(Currentbuf, B_NORMAL); - - } break; case MOUSE_BTN2_DOWN: - if (ny && y < ny) { - if (press_y == y && press_x == x) { - t = posTab(x, y); - if (t == NULL) - return; - if (t == NO_TABBUFFER) { - mouse_menu_action(press_btn, x, y); - return; - } - deleteTab(t); - displayBuffer(Currentbuf, B_FORCE_REDRAW); - } - return; - } - backBf(); - break; case MOUSE_BTN3_DOWN: - if (ny && y < ny) { - if (press_y == y && press_x == x) { - t = posTab(x, y); - if (t == NO_TABBUFFER) { - mouse_menu_action(press_btn, x, y); - return; - } - } - } -#ifdef USE_MENU - if (x >= Currentbuf->rootX && y > ny) - cursorXY(Currentbuf, x - Currentbuf->rootX, - y - Currentbuf->rootY); - onA(); - mainMenu(x, y); -#endif /* USE_MENU */ + if (press_y == y && press_x == x) + do_mouse_action(press_btn, x, y); break; case MOUSE_BTN4_DOWN_RXVT: for (i = 0; i < mouse_scroll_line(); i++) @@ -5131,6 +5093,70 @@ sysm_process_mouse(int x, int y, int nbs, int obs) return 0; } #endif /* USE_SYSMOUSE */ + +void +movMs(void) +{ + if (!mouse_action.in_action) + return; + if ((nTab > 1 || mouse_action.menu_str) && + mouse_action.cursorY < LastTab->y + 1) + return; + else if (mouse_action.cursorX >= Currentbuf->rootX && + mouse_action.cursorY < LASTLINE) { + cursorXY(Currentbuf, mouse_action.cursorX - Currentbuf->rootX, + mouse_action.cursorY - Currentbuf->rootY); + onA(); + } + displayBuffer(Currentbuf, B_NORMAL); +} + +#ifdef USE_MENU +void +menuMs(void) +{ + if (!mouse_action.in_action) + return; + if ((nTab > 1 || mouse_action.menu_str) && + mouse_action.cursorY < LastTab->y + 1) + mouse_action.cursorX -= 2; + else if (mouse_action.cursorX >= Currentbuf->rootX && + mouse_action.cursorY < LASTLINE) { + cursorXY(Currentbuf, mouse_action.cursorX - Currentbuf->rootX, + mouse_action.cursorY - Currentbuf->rootY); + onA(); + } + mainMn(); +} +#endif + +void +tabMs(void) +{ + TabBuffer *tab; + + if (!mouse_action.in_action) + return; + tab = posTab(mouse_action.cursorX, mouse_action.cursorY); + if (!tab || tab == NO_TABBUFFER) + return; + CurrentTab = tab; + displayBuffer(Currentbuf, B_FORCE_REDRAW); +} + +void +closeTMs(void) +{ + TabBuffer *tab; + + if (!mouse_action.in_action) + return; + tab = posTab(mouse_action.cursorX, mouse_action.cursorY); + if (!tab || tab == NO_TABBUFFER) + return; + deleteTab(tab); + displayBuffer(Currentbuf, B_FORCE_REDRAW); +} #endif /* USE_MOUSE */ void @@ -5515,7 +5541,7 @@ reinit() #endif initKeymap(TRUE); #ifdef USE_MOUSE - initMouseMenu(); + initMouseAction(); #endif #ifdef USE_MENU initMenu(); @@ -5547,8 +5573,8 @@ reinit() } #ifdef USE_MOUSE - if (!strcasecmp(resource, "MOUSE_MENU")) { - initMouseMenu(); + if (!strcasecmp(resource, "MOUSE")) { + initMouseAction(); return; } #endif @@ -5674,7 +5700,7 @@ calcTabPos(void) int n1, n2, na, nx, ny, ix, iy; #ifdef USE_MOUSE - lcol = mouse_menu ? mouse_menu->width : 0; + lcol = mouse_action.menu_str ? mouse_action.menu_width : 0; #endif if (nTab <= 0) diff --git a/menu.c b/menu.c @@ -1263,9 +1263,9 @@ mainMn(void) menu = w3mMenuList[n].menu; } #ifdef USE_MOUSE - if (mouse_menu && mouse_menu->in_action) { - x = mouse_menu->cursorX - FRAME_WIDTH - 1; - y = mouse_menu->cursorY; + if (mouse_action.in_action) { + x = mouse_action.cursorX; + y = mouse_action.cursorY; } #endif popupMenu(x, y, menu); @@ -1282,9 +1282,9 @@ selMn(void) y = Currentbuf->cursorY + Currentbuf->rootY; #ifdef USE_MOUSE - if (mouse_menu && mouse_menu->in_action) { - x = mouse_menu->cursorX - FRAME_WIDTH - 1; - y = mouse_menu->cursorY; + if (mouse_action.in_action) { + x = mouse_action.cursorX; + y = mouse_action.cursorY; } #endif popupMenu(x, y, &SelectMenu); @@ -1427,9 +1427,9 @@ tabMn(void) y = Currentbuf->cursorY + Currentbuf->rootY; #ifdef USE_MOUSE - if (mouse_menu && mouse_menu->in_action) { - x = mouse_menu->cursorX - FRAME_WIDTH - 1; - y = mouse_menu->cursorY; + if (mouse_action.in_action) { + x = mouse_action.cursorX; + y = mouse_action.cursorY; } #endif popupMenu(x, y, &SelTabMenu); @@ -1599,7 +1599,10 @@ initMenu(void) w3mMenuList[1].id = "Select"; w3mMenuList[1].menu = &SelectMenu; w3mMenuList[1].item = NULL; - w3mMenuList[2].id = NULL; + w3mMenuList[2].id = "SelectTab"; + w3mMenuList[2].menu = &SelTabMenu; + w3mMenuList[2].item = NULL; + w3mMenuList[3].id = NULL; if ((mf = fopen(rcFile(MENU_FILE), "rt")) == NULL) goto create_menu; diff --git a/proto.h b/proto.h @@ -607,9 +607,21 @@ extern void mouse_end(void); extern void mouse_active(void); extern void mouse_inactive(void); extern void msToggle(void); +extern void movMs(void); +#ifdef USE_MENU +extern void menuMs(void); +#else +#define menuMs nulcmd +#endif +extern void tabMs(void); +extern void closeTMs(void); #else /* not USE_MOUSE */ #define mouse nulcmd #define msToggle nulcmd +#define movMs nulcmd +#define menuMs nulcmd +#define tabMs nulcmd +#define closeTMs nulcmd #endif /* not USE_MOUSE */ #ifdef USE_IMAGE @@ -631,7 +643,7 @@ extern char *getKeyData(int key); extern char *getWord(char **str); extern char *getQWord(char **str); #ifdef USE_MOUSE -extern void initMouseMenu(void); +extern void initMouseAction(void); #endif #ifdef USE_MENU diff --git a/rc.c b/rc.c @@ -1323,7 +1323,7 @@ sync_with_option(void) if (fmInitialized) { initKeymap(FALSE); #ifdef USE_MOUSE - initMouseMenu(); + initMouseAction(); #endif /* MOUSE */ #ifdef USE_MENU initMenu();