diff options
author | nature <nature@blazebone.com> | 2022-04-09 10:29:11 +0000 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2022-04-09 10:29:11 +0000 |
commit | 061ec57021a7c813844582f6f1973dafae6e668b (patch) | |
tree | 9c24a9a8acf17c86b9bd4958ed553e933985d0a3 /sys/src/cmd/vnc | |
parent | f84cf1e60427675514fb056cc1723e45da01e043 (diff) |
vncv: allow the use of the Mod4 (Super) key
Diffstat (limited to 'sys/src/cmd/vnc')
-rw-r--r-- | sys/src/cmd/vnc/kbdv.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/sys/src/cmd/vnc/kbdv.c b/sys/src/cmd/vnc/kbdv.c index 967843b0c..40dd92a43 100644 --- a/sys/src/cmd/vnc/kbdv.c +++ b/sys/src/cmd/vnc/kbdv.c @@ -6,7 +6,8 @@ enum { Xshift = 0xFFE1, Xctl = 0xFFE3, Xmeta = 0xFFE7, - Xalt = 0xFFE9 + Xalt = 0xFFE9, + Xsuper = 0xFFEB, }; static struct { @@ -45,6 +46,7 @@ static struct { {Kshift, Xshift}, {Kalt, Xalt}, {Kaltgr, Xmeta}, + {Kmod4, Xsuper}, {Kctl, Xctl}, }; @@ -95,7 +97,7 @@ readcons(Vnc *v) { char buf[256], k[10]; ulong ks; - int ctlfd, fd, kr, kn, w, shift, ctl, alt; + int ctlfd, fd, kr, kn, w, shift, ctl, alt, super; Rune r; snprint(buf, sizeof buf, "%s/cons", display->devdir); @@ -108,7 +110,7 @@ readcons(Vnc *v) write(ctlfd, "rawon", 5); kn = 0; - shift = alt = ctl = 0; + shift = alt = ctl = super = 0; for(;;){ while(!fullrune(k, kn)){ kr = read(fd, k+kn, sizeof k - kn); @@ -134,6 +136,10 @@ readcons(Vnc *v) shift = !shift; keyevent(v, Xshift, shift); break; + case Kmod4: + super = !super; + keyevent(v, Xsuper, super); + break; default: if(r == ks && r < 0x1A){ /* control key */ keyevent(v, Xctl, 1); @@ -176,6 +182,10 @@ readcons(Vnc *v) keyevent(v, Xshift, 0); shift = 0; } + if(super){ + keyevent(v, Xsuper, 0); + super = 0; + } break; } } @@ -228,6 +238,7 @@ readkbd(Vnc *v) if((r == Kshift) || utfrune(buf+1, Kctl) || utfrune(buf+1, Kalt) || + utfrune(buf+1, Kmod4) || utfrune(buf+1, Kaltgr)) keyevent(v, runetovnc(r), 1); } @@ -241,7 +252,10 @@ readkbd(Vnc *v) } break; case 'c': - if(utfrune(buf2+1, Kctl) || utfrune(buf2+1, Kalt) || utfrune(buf2+1, Kaltgr)) + if(utfrune(buf2+1, Kctl) || + utfrune(buf2+1, Kalt) || + utfrune(buf2+1, Kmod4) || + utfrune(buf2+1, Kaltgr)) continue; chartorune(&r, buf+1); keyevent(v, runetovnc(r), 1); |