From 12619cb9a59b292ca68b9eb5543fc6508a5f802b Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sun, 17 Jul 2011 18:15:29 +0200 Subject: [PATCH] kbdfs: mouse button 2 emulation by changing mouse buttonmap when shift is pressed --- sys/src/9/boot/bootrc | 2 +- sys/src/cmd/aux/kbdfs/kbdfs.c | 22 ++++++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/sys/src/9/boot/bootrc b/sys/src/9/boot/bootrc index b064b8fd1..026c91c36 100644 --- a/sys/src/9/boot/bootrc +++ b/sys/src/9/boot/bootrc @@ -5,7 +5,7 @@ bind /root /mnt/broot unmount /root bind -q '#p' /proc -for(i in S f k æ t) +for(i in S f k æ t m) bind -a '#'^$i /dev >/dev/null >[2=1] # make variables settable by copying them from #ec diff --git a/sys/src/cmd/aux/kbdfs/kbdfs.c b/sys/src/cmd/aux/kbdfs/kbdfs.c index 36c635dbe..397eba9e8 100644 --- a/sys/src/cmd/aux/kbdfs/kbdfs.c +++ b/sys/src/cmd/aux/kbdfs/kbdfs.c @@ -88,6 +88,7 @@ char Eintr[] = "interrupted"; int scanfd; int ledsfd; int consfd; +int mctlfd; int kbdopen; int consctlopen; @@ -391,10 +392,21 @@ keyproc(void *) } rb[0] = 'k'; } - if(rb[0] && kbdopen){ - s = utfconv(rb, nb+1); - if(nbsendp(kbdchan, s) <= 0) - free(s); + if(rb[0]){ + if(key.r == Kshift && mctlfd >= 0){ + if(key.down){ + fprint(mctlfd, "buttonmap 132"); + } else { + fprint(mctlfd, "swap"); + fprint(mctlfd, "swap"); + } + } + + if(kbdopen){ + s = utfconv(rb, nb+1); + if(nbsendp(kbdchan, s) <= 0) + free(s); + } } } } @@ -1259,6 +1271,8 @@ threadmain(int argc, char** argv) fprint(2, "%s: warning: can't open /dev/scancode: %r\n", argv0); if((ledsfd = open("/dev/leds", OWRITE)) < 0) fprint(2, "%s: warning: can't open /dev/leds: %r\n", argv0); + if((mctlfd = open("/dev/mousectl", OWRITE)) < 0) + fprint(2, "%s: warning: can't open /dev/mousectl: %r\n", argv0); if(*argv) if((consfd = open(*argv, OREAD)) < 0)