作者fuse.bbs@bbs.hightman.net (保險絲) 看板: plan
標題[試試] 支持鼠標的bbs
時間明月水軒BBS (Sun, 18 May 2003 12:53:53 +0800 CST) Updated: 2003/08/24
各位架bbs的大大應該有用過xwindow上的xterm吧。
有沒有在xterm里面運行mc,就是midnight command。
在xterm中運行mc時,可以用鼠標點東西,點菜單,mc里面的edit還可以
選擇區塊。
我想我們的bbs如果能用鼠標點選,會有好多好玩的東西作出來。
我試著作了一下:
: global.h
#define I_TIMEOUT -31
#define I_OTHERDATA -32
+ /* fuse.030517: xterm-mouse tracking */
+ #define KEY_XTERM 0x8000
: visio.c:vkey()
+ /* fuse.030517: xterm-mouse tracking */
+ int xterm_btn;
+ int xterm_posx;
+ int xterm_posy;
int
vkey()
{
...
...
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') /* fuse.030517: 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)
+ {
+ /* fuse.030517: xterm-mouse tracking */
+ xterm_btn = ch - ' ';
+ mode = 5;
+ }
+ else if (mode == 5)
+ {
+ xterm_posy = ch - ' ' - 1;
+ mode = 6;
+ }
+ else if (mode == 6)
+ {
+ xterm_posx = ch - ' ' - 1;
+ return KEY_XTERM;
+ }
last = ch;
}
}
上面的代碼是在鼠標點擊時捕獲xterm mouse tracking 序列。
即*[M<mb><y><x>
存在xterm_btn, xterm_posx, xterm_posy這三個變量里面。
然后就可以在需要的地方用了,我在xover.c里面是這樣用的:
: xover.c:xover()
void
xover(cmd)
int cmd;
{
int pos, num, zone, sysmode;
XO *xo;
KeyFunc *xcmd, *cb;
+ extern int xterm_btn;
+ extern int xterm_posx;
+ extern int xterm_posy;
+ send(0, "\033[?1000h", 8, 0);
...
...
else if (cmd >= '1' && cmd <= '9')
{
cmd = xo_jump(cmd, zone);
}
+ else if (cmd == KEY_XTERM) /* fuse.030517: xterm-mouse tracking */
+ {
+ if (xterm_btn == 0)
+ {
+ if (xterm_posy < 7) /* Left */
+ {
+ return;
+ }
+ else if (xterm_posy <= 60) /* Move */
+ {
+ cmd = xo->top + (xterm_posx - 3) + XO_MOVE;
+ }
+ else
+ {
+ if (xterm_posx > (b_lines >> 1)) /* PgDn */
+ cmd = pos + XO_TALL + XO_MOVE;
+ else /* PgUp */
+ cmd = pos - XO_TALL + XO_MOVE;
+ }
+ }
+ else
+ {
+ cmd = XO_NONE;
+ }
+ }
else
以上代碼是說:在列表選擇(版面,精華區,文章列表,用戶列表)時
如果鼠標點在10列以左,就是“左鍵”出去
如果鼠標點在10-60列,表示移動到相應行
如果鼠標點在60列以右,在半屏以上點就是向上翻,半屏以下點就是向下翻
--
順便廣告一下我的fterm:
fterm主頁:http://fterm.zj001.net
fterm-big版下載:http://210.83.130.82/~fuse/fterm-big5.zip
界面演示:http://210.83.130.82/~fuse/ftermbig.gif
http://210.83.130.82/~fuse/mcbig.gif
--
※ Origin: 明月水軒 <bbs.hightman.net>
◆ From: 10.11.26.15