[試試] あ持公撥硎bbs
各位架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
暫時只能顯示簡體界面,各位大大看得過眼,在下就作big5版本。
--
※ Origin: 明月水軒 <bbs.hightman.net>
◆ From: 10.11.26.15
討論串 (同標題文章)
Maple 近期熱門文章
PTT數位生活區 即時熱門文章