📄 imwheel.patch
字号:
diff -ru --exclude=Makefile ./ChangeLog ../imwheel/gpm-imwheel/ChangeLog--- ./ChangeLog Fri Nov 12 08:27:37 1999+++ ../imwheel/gpm-imwheel/ChangeLog Sun Feb 27 16:30:46 2000@@ -346,6 +346,8 @@ <tob@world.std.com> for braindead chords in t-mouse with 2 button mice. +CHANGED 12/16/98 by Jonathan Atkins. updated for imwheel.+ Tue Nov 17 23:10:04 1998 Ian T Zimmerman <itz@transbay.net> * configure.in (release): Step to 1.16.0@@ -806,6 +808,8 @@ Sat Jul 25 21:08:46 1998 Edmund Grimley Evans (edmund@vocalis.com) * mice.c: added M_ms_plus and M_ms_plus_lr++CHANGED 9/8/98 for imwheel by Jonathan Atkins. Diff in imwheel contains changes Mon Jul 6 13:00:23 1998 Robin Houston (robin.houston@guardian.co.uk) Only in ../imwheel/gpm-imwheel: ChangeLog.origdiff -ru --exclude=Makefile ./debuglog.c ../imwheel/gpm-imwheel/debuglog.c--- ./debuglog.c Fri Nov 12 08:27:37 1999+++ ../imwheel/gpm-imwheel/debuglog.c Sun Feb 27 16:30:46 2000@@ -58,6 +58,8 @@ void gpm_debug_log(int level, char* fmt, ...) {+ //printf("level=%d\n",level);+ //printf("gpm_debug_level=%d\n",gpm_debug_level); if (level <= gpm_debug_level) { va_list ap; va_start(ap, fmt);Only in ../imwheel/gpm-imwheel: debuglog.c.origdiff -ru --exclude=Makefile ./gpm.c ../imwheel/gpm-imwheel/gpm.c--- ./gpm.c Fri Nov 12 08:27:36 1999+++ ../imwheel/gpm-imwheel/gpm.c Sun Feb 27 16:30:46 2000@@ -5,6 +5,9 @@ * Copyright 1994-1997 rubini@linux.it (Alessandro Rubini) * Copyright (C) 1998 Ian Zimmerman <itz@rahul.net> *+ * Modified on 9/8/1998 by Jonathan Atkins for use with wheel mice+ * <jcatki@home.com>+ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or@@ -61,6 +64,7 @@ DEF_TYPE, DEF_DEV, DEF_SEQUENCE, DEF_BAUD, DEF_SAMPLE, DEF_DELTA, DEF_ACCEL, DEF_SCALE, 0 /* scaley */, DEF_TIME, DEF_CLUSTER, DEF_THREE, DEF_TOGGLE, DEF_GLIDEPOINT_TAP,+ DEF_WHEEL, DEF_NO_MIDDLE, (Gpm_Type *)NULL }, };@@ -74,6 +78,7 @@ int opt_ptrdrag=DEF_PTRDRAG; int opt_kill=0; int opt_repeater=0, opt_double=0;+int opt_wheel_repeater=0; char* opt_repeater_type = 0; int opt_aged = 0; char *opt_special=NULL; /* special commands, like reboot or such */@@ -86,6 +91,7 @@ struct winsize win; int maxx, maxy; int fifofd=-1;+int wheel_fifofd=-1; int eventFlag=0; Gpm_Cinfo *cinfo[MAX_VC+1];@@ -349,7 +355,7 @@ gpm_debug_log(LOG_NOTICE,"Skipping a data packet (?)"); return NULL; }- gpm_debug_log(LOG_DEBUG,"Data %02x %02x %02x (%02x)",data[0],data[1],data[2],data[3]);+ gpm_debug_log(LOG_DEBUG,"Data %02x %02x %02x (%02x %02x %02x %02x %02x %02x)",data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7],data[8]); return data; } @@ -368,28 +374,52 @@ static struct vt_stat stat; static struct timeval tv1={0,0}, tv2; /* tv1==0: first click is single */ static struct timeval timeout={0,0};+ int stick; fd_set fdSet; static int newB=0, oldB=0, oldT=0; /* old buttons and Type to chain events */ /* static int buttonlock, buttonlockflag; */+ static int wheel_fakeup;+ static unsigned char buttons; #define GET_TIME(tv) (gettimeofday(&tv, (struct timezone *)NULL)) #define DIF_TIME(t1,t2) ((t2.tv_sec -t1.tv_sec) *1000+ \ (t2.tv_usec-t1.tv_usec)/1000) + gpm_debug_log(LOG_DEBUG,"processMouse(%d,%p,%p,%d)",fd,event,type,kd_mode); oldT=event->type;+ wheel_fakeup=0; if (eventFlag) { eventFlag=0; + gpm_debug_log(LOG_DEBUG,"nEvent.dx=%d nEvent.dy=%d",nEvent.dx,nEvent.dy); if (m_type->absolute) /* a pen or other absolute device */ {+ gpm_debug_log(LOG_DEBUG,"absolute coords."); event->x=nEvent.x; event->y=nEvent.y; }+ else+ gpm_debug_log(LOG_DEBUG,"not absolute coords."); event->dx=nEvent.dx; event->dy=nEvent.dy;+ if(opt_wheel)+ {+ gpm_debug_log(LOG_DEBUG,"nEvent.stick_x=%d nEvent.stick_y=%d",nEvent.stick_x,nEvent.stick_y);+ event->stick_x=nEvent.stick_x;+ event->stick_y=nEvent.stick_y;+ }+ if(opt_wheel && nEvent.buttons&(GPM_W_UP|GPM_W_DOWN|GPM_W_RIGHT|GPM_W_LEFT))+ {+ gpm_debug_log(LOG_DEBUG,"Doing wheel button fakeup.");+ event->buttons=nEvent.buttons&7;+ oldB=newB; newB=event->buttons;+ event->type=GPM_UP;+ wheel_fakeup=1;+ }+ else event->buttons=nEvent.buttons; } else@@ -411,9 +441,21 @@ event->modifiers = nEvent.modifiers; /* propagate modifiers */ /* propagate buttons */- nEvent.buttons = opt_sequence[nEvent.buttons]&7; /* change the order */+ gpm_debug_log(LOG_DEBUG,"nEvent.buttons=%d opt_sequence=%d opt_wheel=%d",nEvent.buttons,opt_sequence[nEvent.buttons&7]&7,opt_wheel);+ stick=nEvent.buttons&GPM_STICK;+ nEvent.buttons = (opt_sequence[nEvent.buttons&7]&7)|+ (opt_wheel?((nEvent.buttons&GPM_W_UP)|(nEvent.buttons&GPM_W_DOWN)|+ (nEvent.buttons&GPM_W_RIGHT)|(nEvent.buttons&GPM_W_LEFT))+ :0); oldB=newB; newB=nEvent.buttons;+ gpm_debug_log(LOG_DEBUG,"nEvent.buttons=%d", nEvent.buttons); if (!i) event->buttons=nEvent.buttons;+ if(opt_wheel)+ {+ gpm_debug_log(LOG_DEBUG,"nEvent.stick_x=%d nEvent.stick_y=%d",nEvent.stick_x,nEvent.stick_y);+ event->stick_x=nEvent.stick_x;+ event->stick_y=nEvent.stick_y;+ } if (oldB!=newB) {@@ -425,7 +467,12 @@ if (!(m_type->absolute)) /* mouse */ { if (abs(nEvent.dx)+abs(nEvent.dy) > opt_delta)+ {+ gpm_debug_log(LOG_DEBUG,"opt_delta met."); nEvent.dx*=opt_accel, nEvent.dy*=opt_accel;+ }+ else+ gpm_debug_log(LOG_DEBUG,"opt_delta met."); /* increment the reported dx,dy */ event->dx+=nEvent.dx;@@ -444,9 +491,72 @@ } /* eventFlag */ + if(!wheel_fakeup)+ { /*....................................... update the button number */ if ((event->buttons&GPM_B_MIDDLE) && !opt_three) opt_three++;+ if ((event->buttons&GPM_W_UP || event->buttons&GPM_W_DOWN ||+ event->buttons&GPM_W_LEFT || event->buttons&GPM_W_RIGHT)+ && !opt_wheel)+ opt_wheel++;+ if(opt_wheel && event->buttons&(GPM_W_UP|GPM_W_DOWN))+ gpm_debug_log(LOG_DEBUG,"Wheel - %s%s",(event->buttons&GPM_W_UP?"Up ":""),+ (event->buttons&GPM_W_DOWN?"Down":""));+ if(opt_wheel && (event->stick_x || event->stick_y))+ gpm_debug_log(LOG_DEBUG,"Stick - %d,%d",event->stick_x,event->stick_y);++/* .................................... repeat wheel to special fifo */+ + if(wheel_fifofd)+ {+ char buffer;++ if((event->buttons&(GPM_W_DOWN|GPM_W_UP|GPM_W_LEFT|GPM_W_RIGHT))+ && event->buttons>0)/* button down, not up! (not the wheel motion) */+ {+ event->type=GPM_DOWN;+ if(event->buttons&GPM_W_UP)+ {+ buffer=4;+ gpm_debug_log(LOG_DEBUG,"repeat wheel: %d",buffer);+ write(wheel_fifofd,&buffer,1);+ }+ if(event->buttons&GPM_W_DOWN)+ {+ buffer=5;+ gpm_debug_log(LOG_DEBUG,"repeat wheel: %d",buffer);+ write(wheel_fifofd,&buffer,1);+ }+ if(event->buttons&GPM_W_LEFT)+ {+ buffer=6;+ gpm_debug_log(LOG_DEBUG,"repeat wheel: %d",buffer);+ write(wheel_fifofd,&buffer,1);+ }+ if(event->buttons&GPM_W_RIGHT)+ {+ buffer=7;+ gpm_debug_log(LOG_DEBUG,"repeat wheel: %d",buffer);+ write(wheel_fifofd,&buffer,1);+ }+ }+ else if (stick)+ {+ buffer=8; /* stick x & y delta values follow */+ gpm_debug_log(LOG_DEBUG,"repeat stick: %d",buffer);+ write(wheel_fifofd,&buffer,1);+ buffer=event->stick_x;+ gpm_debug_log(LOG_DEBUG,"repeat wheel: %d",buffer);+ write(wheel_fifofd,&buffer,1);+ buffer=event->stick_y;+ gpm_debug_log(LOG_DEBUG,"repeat wheel: %d",buffer);+ write(wheel_fifofd,&buffer,1);+ event->buttons^=GPM_STICK;+ }+ }+ buttons=event->buttons;+ event->buttons=event->buttons&7; /*....................................... we're a repeater, aren't we? */ @@ -470,6 +580,7 @@ } return 0; /* no events nor information for clients */ }+ event->buttons=buttons; /*....................................... no, we arent a repeater, go on */ @@ -515,11 +626,12 @@ else event->type = (event->buttons > oldB ? GPM_DOWN : GPM_UP); + } switch(event->type) /* now provide the cooked bits */ { case GPM_DOWN: GET_TIME(tv2);- if (tv1.tv_sec && (DIF_TIME(tv1,tv2)<opt_time)) /* check first click */+ if ((!opt_wheel || (event->buttons&7)) && tv1.tv_sec && (DIF_TIME(tv1,tv2)<opt_time)) /* check first click */ statusC++, statusC%=3; /* 0, 1 or 2 */ else statusC=0; event->type|=(GPM_SINGLE<<statusC);@@ -580,7 +692,7 @@ if (opt_special && event->type & GPM_DOWN) return processSpecial(event); - return 1;+ return (!wheel_fakeup); } /*-------------------------------------------------------------------*/@@ -706,6 +818,7 @@ event.vc = stat.v_active; event.x=statusX; event.y=statusY; event.dx=maxx; event.dy=maxy;+ gpm_debug_log(LOG_DEBUG,"statusB=%d", statusB); event.buttons= statusB; event.clicks=statusC; /* fall through */@@ -875,6 +988,8 @@ int maxfd=-1; int pending; Gpm_Event event;+ int wheel_done;+ Gpm_Event eventbuf; prgname=argv[0]; setuid(0); /* just in case... */@@ -1035,7 +1150,7 @@ if (ioctl(fd, KDGETMODE, &kd_mode)<0) oops("ioctl(KDGETMODE)"); close(fd);- if (kd_mode != KD_TEXT && !opt_repeater)+ if (kd_mode != KD_TEXT && !opt_repeater && !opt_wheel_repeater) { wait_text(&mouse_table[1].fd); maxfd=max(maxfd,mouse_table[1].fd);@@ -1056,15 +1171,38 @@ if (FD_ISSET(which_mouse->fd,&selSet)) { FD_CLR(which_mouse->fd,&selSet); pending--;- if (processMouse(which_mouse->fd, &event, m_type, kd_mode))+ wheel_done=0;+ do
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -