[試試] あ持公撥硎bbs

看板Maple (BBS架站)作者時間21年前 (2003/05/18 13:17), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/6 (看更多)
各位架bbs的大大應該有用過xwindow上的xterm吧。 有沒有在xterm里面運行mc,就是midnight command。 在xterm中運行mc時,可以用鼠標點東西,點菜單,mc里面的edit還可以 選擇區塊。 我想我們的bbs如果能用鼠標點選,會有好多好玩的東西作出來。 我試著作了一下: global.h 找個地方加這几樣: /* fuse020517 xterm-mouse tracking */ #define KEY_XTERM 0x8000 VAR int xterm_btn; VAR int xterm_posx; VAR int xterm_posy; visio.c里面 line 1966左右: -#undef TRAP_ESC +#define TRAP_ESC #ifdef TRAP_ESC int vkey() { int mode; int ch, last; mode = last = 0; for (;;) { ch = igetch(); if (mode == 0) { if (ch == KEY_ESC) mode = 1; else return ch; /* Normal Key */ } else if (mode == 1) { /* Escape sequence */ if (ch == '[' || ch == 'O') mode = 2; else if (ch == '1' || ch == '4') mode = 3; else { return Meta(ch); } } else if (mode == 2) { /* Cursor key */ if (ch >= 'A' && ch <= 'D') { return KEY_UP - (ch - 'A'); } else if (ch >= '1' && ch <= '6') mode = 3; + else if (ch == 'M') /* fuse020517 xterm-mouse tracking */ + { + mode = 4; + } else return ch; } else if (mode == 3) { /* Ins Del Home End PgUp PgDn */ if (ch == '~') return KEY_HOME - (last - '1'); else return ch; } + else if (mode == 4) + { + /* fuse020517 xterm-mouse tracking */ + xterm_btn = ch - 32; + mode = 5; + } + else if (mode == 5) + { + xterm_posx = ch - 32 - 1; + mode = 6; + } + else if (mode == 6) + { + xterm_posy = ch - 32 - 1; + return KEY_XTERM; + } last = ch; } } 上面的代碼是在鼠標點擊時捕獲xterm mouse tracking 序列。 即*[M<mb><x><y> 存在xterm_btn, xterm_posx, xterm_posy這三個變量里面。 然后就可以在需要的地方用了,我在xover.c里面是這樣用的: xover.c Line 1377左右的void xover(cmd)函數里: 1383行加入: char strInitXterm[20]; strcpy(strInitXterm, "\033[?1000h"); send(0, strInitXterm, strlen(strInitXterm), 0); 大約1630行左右,加入: else if (cmd >= '1' && cmd <= '9') { cmd = xo_jump(cmd, zone); } + else if (cmd == KEY_XTERM) /* fuse020517 xterm-mouse tracking */ + { + if (xterm_btn == 0) { + if (xterm_posx < 7) + return; + else if ((xterm_posx >= 7)&&(xterm_posx <= 60)) { + cmd = xo->top + (xterm_posy - 3) + XO_MOVE; + } + else if (xterm_posx > 60) { + if (xterm_posy > (b_lines / 2)) + cmd = pos + XO_TALL + XO_MOVE; + else + cmd = pos - XO_TALL + XO_MOVE; + } + } + } 以上代碼是說:在列表選擇(版面,精華區,文章列表,用戶列表)時 如果鼠標點在10列以左,就是“左鍵”出去 如果鼠標點在10-60列,表示移動到相應行 如果鼠標點在60列以右,在半屏以上點就是向上翻,半屏以下點就是向下翻 順便廣告一下我的fterm: http://fterm.zj001.net 下載鏈接為:http://210.83.130.82/~fuse/fterm.zip 界面演示:http://210.83.130.82/~fuse/ftermbig.gif
http://210.83.130.82/~fuse/mcbig.gif
暫時只能顯示簡體界面,各位大大看得過眼,在下就作big5版本。 -- ※ Origin: 明月水軒 <bbs.hightman.net> ◆ From: 10.11.26.15
文章代碼(AID): #-nnTE00 (Maple)
文章代碼(AID): #-nnTE00 (Maple)