看板Maple
标 题[试试] あ持公拨硎bbs
发信站明月水轩BBS (Sun May 18 12:53:53 2003)
转信站Ptt!news.cs.nthu!news.neu.edu.cn!hightman
各位架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