[w3m-dev 01225] buffer selection menu

From: $B2,ED (okada@furuno.co.jp)
Date: Sun Oct 22 2000 - 23:58:58 CDT

  • Next message: $B2,ED: "[w3m-dev 01226] Re: buffer selection menu"

    $B2,ED$G$9!#(B

    $B%P%C%U%!A*Br%b!<%I$r!"%a%K%e!<$r;H$C$F<BAu$7$F$_$^$7$?!#%a%K%e!<$HF1$8(B
    $B%-!<A`:n!"%^%&%9A`:n$,$G$-$k$N$G!"0JA0$h$j;H$$$d$9$/$J$C$?$H;W$&$N$G$9(B
    $B$,!"$I$&$G$7$g$&$+!)(B

    w3m-0.1.11-pre-kokb16 $B$+$i$N%Q%C%A$rE:IU$7$^$9!#(B#undef MENU $B$N$H$-$O!"(B
    $B0JA0$N%3!<%I$r;H$&$h$&$K$7$F$"$j$^$9!#(B

    -- 
    Tsutomu Okada <okada@furuno.co.jp>
    

    diff -Nur w3m-0.1.11-pre-kokb16/buffer.c w3m.test/buffer.c --- w3m-0.1.11-pre-kokb16/buffer.c Mon Oct 23 11:44:54 2000 +++ w3m.test/buffer.c Mon Oct 23 13:48:37 2000 @@ -186,8 +186,13 @@ return buf; } +#ifdef MENU_SELECT +static char * +createBufferName(Buffer * buf) +#else static void writeBufferName(Buffer * buf, int n) +#endif { Str msg; int all; @@ -195,7 +200,9 @@ all = buf->allLine; if (all == 0 && buf->lastLine != NULL) all = buf->lastLine->linenumber; +#ifndef MENU_SELECT move(n, 0); +#endif msg = Sprintf("<%s> [%d lines]", cleanup_str(buf->buffername), all); if (buf->filename != NULL) { switch (buf->currentURL.scheme) { @@ -215,7 +222,11 @@ break; } } +#ifdef MENU_SELECT + return msg->ptr; +#else addnstr_sup(msg->ptr, COLS - 1); +#endif } @@ -302,6 +313,7 @@ } +#ifndef MENU_SELECT static Buffer * listBuffer(Buffer * top, Buffer * current) { @@ -348,11 +360,73 @@ refresh(); return buf->nextBuffer; } +#endif /* * Select buffer visually */ +#ifdef MENU_SELECT +void +selectBuffer() +{ + Buffer *buf; + int i, n, selected, init_select, deleted, ok; + char **label; + + for (n = 0, buf = Firstbuf; buf != NULL; n++, buf = buf->nextBuffer); + label = New_N(char *, n + 1); + for (i = 0, buf = Firstbuf; buf != NULL; i++, buf = buf->nextBuffer) { + label[i] = createBufferName(buf); + if (buf == Currentbuf) + init_select = i; + } + label[n] = NULL; + ok = FALSE; + do { + selected = deleted = -1; + standout(); + message("Buffer selection menu: D for delete buffer", 0, 0); + standend(); + + optionMenu(0, 0, label, &selected, init_select, NULL, &deleted); + + if (deleted == -1) + ok = TRUE; + else if (n != 1) { + buf = nthBuffer(Firstbuf, deleted); + if (buf == Currentbuf) + Currentbuf = NULL; + Firstbuf = deleteBuffer(Firstbuf, buf); + if (deleted == n - 1) + init_select = deleted - 1; + else + init_select = deleted; + if (!Currentbuf) { + Currentbuf = nthBuffer(Firstbuf, init_select); + displayBuffer(Currentbuf, B_FORCE_REDRAW); + } + else { + move(n + 1, 0); + clrtoeolx(); + refresh(); + redrawNLine(Currentbuf, n + 1); + } + n--; + for (i = 0, buf = Firstbuf; buf != NULL; i++, buf = buf->nextBuffer) + label[i] = createBufferName(buf); + label[n] = NULL; + } + } while (!ok); + + for (i = 0, buf = Firstbuf; buf != NULL; i++, buf = buf->nextBuffer) { + if (i == selected) { + Currentbuf = nthBuffer(Firstbuf, i); + break; + } + } +} +#else Buffer * selectBuffer(Buffer * firstbuf, Buffer * currentbuf, char *selectchar) { @@ -474,6 +548,7 @@ refresh(); } } +#endif /* diff -Nur w3m-0.1.11-pre-kokb16/form.c w3m.test/form.c --- w3m-0.1.11-pre-kokb16/form.c Mon Oct 23 11:44:58 2000 +++ w3m.test/form.c Mon Oct 23 13:46:34 2000 @@ -560,7 +560,7 @@ } label[n] = NULL; - optionMenu(x, y, label, &selected, init_select, NULL); + optionMenu(x, y, label, &selected, init_select, NULL, NULL); for (i = 0, opt = fi->select_option; opt != NULL; i++, opt = opt->next) { if (i == selected) { diff -Nur w3m-0.1.11-pre-kokb16/main.c w3m.test/main.c --- w3m-0.1.11-pre-kokb16/main.c Mon Oct 23 11:46:54 2000 +++ w3m.test/main.c Mon Oct 23 13:46:35 2000 @@ -1476,6 +1476,11 @@ void selBuf(void) { +#ifdef MENU_SELECT + Buffer *buf; + + selectBuffer(); +#else Buffer *buf; int ok; char cmd; @@ -1508,6 +1513,7 @@ break; } } while (!ok); +#endif if (clear_buffer) { for (buf = Firstbuf; buf != NULL; buf = buf->nextBuffer) diff -Nur w3m-0.1.11-pre-kokb16/map.c w3m.test/map.c --- w3m-0.1.11-pre-kokb16/map.c Mon Oct 23 11:45:04 2000 +++ w3m.test/map.c Mon Oct 23 13:46:35 2000 @@ -30,7 +30,7 @@ label[i] = t->ptr; label[n] = NULL; - optionMenu(x, y, label, &selected, 0, NULL); + optionMenu(x, y, label, &selected, 0, NULL, NULL); if (selected >= 0) return label[selected]; diff -Nur w3m-0.1.11-pre-kokb16/menu.c w3m.test/menu.c --- w3m-0.1.11-pre-kokb16/menu.c Mon Oct 23 11:45:05 2000 +++ w3m.test/menu.c Mon Oct 23 13:49:31 2000 @@ -90,6 +90,7 @@ static int mCancel(char c); static int mClose(char c); static int mSusp(char c); +static int mDel(char c); static int mMouse(char c); #ifdef __EMX__ static int mPc(char c); @@ -117,7 +118,7 @@ /* 8 9 : ; < = > ? */ mNull, mNull, mNull, mNull, mNull, mNull, mNull, mNull, /* @ A B C D E F G */ - mNull, mNull, mNull, mNull, mNull, mNull, mNull, mNull, + mNull, mNull, mNull, mNull, mDel, mNull, mNull, mNull, /* H I J K L M N O */ mNull, mNull, mNull, mNull, mNull, mNull, mNull, mNull, /* P Q R S T U V W */ @@ -337,7 +338,7 @@ #define mvaddnstr(y, x, str, n) (move(y, x), addnstr_sup(str, n)) void -new_menu(Menu * menu, MenuItem * item) +new_menu(Menu * menu, MenuItem * item, int *delete) { int i, l; char *p; @@ -352,6 +353,7 @@ menu->select = 0; menu->offset = 0; menu->active = 0; + menu->delete = delete; if (item == NULL) return; @@ -675,7 +677,8 @@ CurrentMenu = menu; while (active) { active = action_menu(CurrentMenu); - displayBuffer(Currentbuf, B_FORCE_REDRAW); + if(CurrentMenu->delete == NULL || *CurrentMenu->delete == -1) + displayBuffer(Currentbuf, B_FORCE_REDRAW); } menu->active = 0; CurrentMenu = parent; @@ -705,7 +708,7 @@ } void -new_option_menu(Menu * menu, char **label, int *variable, void (*func) ()) +new_option_menu(Menu * menu, char **label, int *variable, void (*func) (), int *delete) { int i, nitem; char **p; @@ -733,7 +736,7 @@ } item[nitem].type = MENU_END; - new_menu(menu, item); + new_menu(menu, item, delete); } /* --- MenuFunctions --- */ @@ -901,6 +904,17 @@ return (MENU_NOTHING); } +static int +mDel(char c) +{ + int select = CurrentMenu->select; + + if (CurrentMenu->delete == NULL) + return (MENU_NOTHING); + *CurrentMenu->delete = select; + return (select); +} + #ifdef MOUSE #define MOUSE_BTN1_DOWN 0 #define MOUSE_BTN2_DOWN 1 @@ -1120,7 +1134,7 @@ label[i] = str->ptr; } - new_option_menu(&SelectMenu, label, &SelectV, smChBuf); + new_option_menu(&SelectMenu, label, &SelectV, smChBuf, NULL); SelectMenu.initial = SelectV; SelectMenu.cursorX = Currentbuf->cursorX; SelectMenu.cursorY = Currentbuf->cursorY; @@ -1147,11 +1161,11 @@ /* --- OptionMenu --- */ void -optionMenu(int x, int y, char **label, int *variable, int initial, void (*func) ()) +optionMenu(int x, int y, char **label, int *variable, int initial, void (*func) (), int *delete) { Menu menu; - new_option_menu(&menu, label, variable, func); + new_option_menu(&menu, label, variable, func, delete); menu.cursorX = COLS - 1; menu.cursorY = LASTLINE; menu.x = x; @@ -1236,7 +1250,7 @@ for (list = w3mMenuList; list->id != NULL; list++) { if (list->item == NULL) continue; - new_menu(list->menu, list->item); + new_menu(list->menu, list->item, NULL); } } diff -Nur w3m-0.1.11-pre-kokb16/menu.h w3m.test/menu.h --- w3m-0.1.11-pre-kokb16/menu.h Mon Oct 23 11:45:05 2000 +++ w3m.test/menu.h Mon Oct 23 13:46:35 2000 @@ -40,6 +40,7 @@ int select; int offset; int active; + int *delete; int (*keymap[128]) (char c); int keyselect[128]; } Menu; diff -Nur w3m-0.1.11-pre-kokb16/proto.h w3m.test/proto.h --- w3m-0.1.11-pre-kokb16/proto.h Mon Oct 23 11:45:06 2000 +++ w3m.test/proto.h Mon Oct 23 13:46:36 2000 @@ -153,7 +153,11 @@ extern Buffer *replaceBuffer(Buffer * first, Buffer * delbuf, Buffer * newbuf); extern void gotoRealLine(Buffer * buf, int n); extern void gotoLine(Buffer * buf, int n); +#ifdef MENU_SELECT +extern void selectBuffer(void); +#else extern Buffer *selectBuffer(Buffer * firstbuf, Buffer * currentbuf, char *selectchar); +#endif extern void reshapeBuffer(Buffer * buf); extern void copyBuffer(Buffer * a, Buffer * b); extern Buffer *prevBuffer(Buffer * first, Buffer * buf); @@ -465,7 +469,7 @@ extern char *getQWord(char **str); #ifdef MENU -extern void new_menu(Menu * menu, MenuItem * item); +extern void new_menu(Menu * menu, MenuItem * item, int *delete); extern void geom_menu(Menu * menu, int x, int y, int select); extern void draw_all_menu(Menu * menu); extern void draw_menu(Menu * menu); @@ -477,7 +481,7 @@ extern int action_menu(Menu * menu); extern void popup_menu(Menu * parent, Menu * menu); extern void guess_menu_xy(Menu * menu, int width, int *x, int *y); -extern void new_option_menu(Menu * menu, char **label, int *variable, void (*func) ()); +extern void new_option_menu(Menu * menu, char **label, int *variable, void (*func) (), int *delete); extern int setMenuItem(MenuItem * item, char *type, char *line); extern int addMenuList(MenuList ** list, char *id); @@ -486,7 +490,7 @@ extern void popupMenu(int x, int y, Menu *menu); extern void mainMenu(int x, int y); extern void mainMn(void); -extern void optionMenu(int x, int y, char **label, int *variable, int initial, void (*func) ()); +extern void optionMenu(int x, int y, char **label, int *variable, int initial, void (*func) (), int *delete); extern void initMenu(void); #else /* not MENU */ #define mainMn nulcmd



    This archive was generated by hypermail 2b29 : Mon Oct 23 2000 - 00:19:15 CDT