Commit Diff


commit - b4cc38f94321c71e8d19fbbd4691e72f7c0d817b
commit + d25d0ca1a3682d97df67f62789767562aa5bf1b3
blob - 8b9656d55db5b68c589522f75517bea2fdf1463c
blob + b8535fb655719305bec3c1bbec8d669cddee1fee
--- include/drawfcall.h
+++ include/drawfcall.h
@@ -22,8 +22,11 @@ tag[1] Rbouncemouse
 tag[1] Trdkbd
 tag[1] Rrdkbd rune[2]
 
+tag[1] Trdkbd4
+tag[1] Rrdkbd4 rune[4]
+
 tag[1] Tlabel label[s]
-tag[1] Rlabel 
+tag[1] Rlabel
 
 tag[1] Tctxt wsysid[s]
 tag[1] Rctxt
@@ -31,7 +34,7 @@ tag[1] Rctxt
 tag[1] Tinit winsize[s] label[s] font[s]
 tag[1] Rinit
 
-tag[1] Trdsnarf 
+tag[1] Trdsnarf
 tag[1] Rrdsnarf snarf[s]
 
 tag[1] Twrsnarf snarf[s]
@@ -47,7 +50,7 @@ tag[1] Ttop
 tag[1] Rtop
 
 tag[1] Tresize rect[4*4]
-tag[1] Rresize 
+tag[1] Rresize
 */
 
 
@@ -99,6 +102,8 @@ enum {
 	Rcursor2,
 	Tctxt = 30,
 	Rctxt,
+	Trdkbd4 = 32,
+	Rrdkbd4,
 	Tmax,
 };
 
blob - a1574a365f1a7e8c2b52882cb38ca0095e08647e
blob + 1a0e85a50485f9914b3c55a14277032a067f8790
--- lib/keyboard
+++ lib/keyboard
@@ -584,3 +584,4 @@
 F015  ZA          	raw alt (plan 9 specific)
 F016  ZS          	raw shift (plan 9 specific)
 F017  ZC          	raw ctl (plan 9 specific)
+1F602 :,          😂 face with tears of joy
blob - db34b6ecebc5c8fe646ae3c6cff752f3fda79474
blob + 50dd26b05d70602b347b054e5144aa2d3977ece2
--- src/cmd/devdraw/mklatinkbd.c
+++ src/cmd/devdraw/mklatinkbd.c
@@ -191,7 +191,7 @@ readfile(char *fname)
 
 		r = strtol(line, nil, 16);
 		p = strchr(line, ' ');
-		if(r == 0 || p != line+4 || p[0] != ' ' || p[1] != ' ') {
+		if(r == 0 || (p != line+4 && p != line+5) || p[0] != ' ' || (p == line+4 && p[1] != ' ')) {
 			fprint(2, "%s:%d: cannot parse line\n", fname, lineno);
 			continue;
 		}
blob - bdfc16547e755ed27311bbdffa0b347352447dcc
blob + 05a08fda4ea7306aba7ee492fa74c4697ecd7a94
--- src/cmd/devdraw/srv.c
+++ src/cmd/devdraw/srv.c
@@ -229,6 +229,7 @@ runmsg(Client *c, Wsysmsg *m)
 		break;
 
 	case Trdkbd:
+	case Trdkbd4:
 		qlock(&c->eventlk);
 		if((c->kbdtags.wi+1)%nelem(c->kbdtags.t) == c->kbdtags.ri) {
 			qunlock(&c->eventlk);
@@ -236,7 +237,7 @@ runmsg(Client *c, Wsysmsg *m)
 			replyerror(c, m);
 			break;
 		}
-		c->kbdtags.t[c->kbdtags.wi++] = m->tag;
+		c->kbdtags.t[c->kbdtags.wi++] = (m->tag<<1) | (m->type==Trdkbd4);
 		if(c->kbdtags.wi == nelem(c->kbdtags.t))
 			c->kbdtags.wi = 0;
 		c->kbd.stall = 0;
@@ -357,13 +358,17 @@ replymsg(Client *c, Wsysmsg *m)
 static void
 matchkbd(Client *c)
 {
+	int tag;
 	Wsysmsg m;
 
 	if(c->kbd.stall)
 		return;
 	while(c->kbd.ri != c->kbd.wi && c->kbdtags.ri != c->kbdtags.wi){
+		tag = c->kbdtags.t[c->kbdtags.ri++];
 		m.type = Rrdkbd;
-		m.tag = c->kbdtags.t[c->kbdtags.ri++];
+		if(tag&1)
+			m.type = Rrdkbd4;
+		m.tag = tag>>1;
 		if(c->kbdtags.ri == nelem(c->kbdtags.t))
 			c->kbdtags.ri = 0;
 		m.rune = c->kbd.r[c->kbd.ri++];
blob - 9376f9c00958cf19f755850320077dfe11a96a09
blob + c38f4801b5adb7f2da660751f59582d04066d853
--- src/libdraw/drawclient.c
+++ src/libdraw/drawclient.c
@@ -333,7 +333,7 @@ _displayrdkbd(Display *d, Rune *r)
 {
 	Wsysmsg tx, rx;
 
-	tx.type = Trdkbd;
+	tx.type = Trdkbd4;
 	if(displayrpc(d, &tx, &rx, nil) < 0)
 		return -1;
 	*r = rx.rune;
blob - eea140956f54bba15c9d5a34954527879b72752a
blob + 941153844eaed56b801f447e1b4847cdfd38f96c
--- src/libdraw/drawfcall.c
+++ src/libdraw/drawfcall.c
@@ -50,6 +50,7 @@ sizeW2M(Wsysmsg *m)
 	case Rcursor:
 	case Rcursor2:
 	case Trdkbd:
+	case Trdkbd4:
 	case Rlabel:
 	case Rctxt:
 	case Rinit:
@@ -73,6 +74,8 @@ sizeW2M(Wsysmsg *m)
 		return 4+1+1+_stringsize(m->error);
 	case Rrdkbd:
 		return 4+1+1+2;
+	case Rrdkbd4:
+		return 4+1+1+4;
 	case Tlabel:
 		return 4+1+1+_stringsize(m->label);
 	case Tctxt:
@@ -117,6 +120,7 @@ convW2M(Wsysmsg *m, uchar *p, uint n)
 	case Rcursor:
 	case Rcursor2:
 	case Trdkbd:
+	case Trdkbd4:
 	case Rlabel:
 	case Rctxt:
 	case Rinit:
@@ -166,6 +170,9 @@ convW2M(Wsysmsg *m, uchar *p, uint n)
 	case Rrdkbd:
 		PUT2(p+6, m->rune);
 		break;
+	case Rrdkbd4:
+		PUT(p+6, m->rune);
+		break;
 	case Tlabel:
 		PUTSTRING(p+6, m->label);
 		break;
@@ -221,6 +228,7 @@ convM2W(uchar *p, uint n, Wsysmsg *m)
 	case Rcursor:
 	case Rcursor2:
 	case Trdkbd:
+	case Trdkbd4:
 	case Rlabel:
 	case Rctxt:
 	case Rinit:
@@ -270,6 +278,9 @@ convM2W(uchar *p, uint n, Wsysmsg *m)
 	case Rrdkbd:
 		GET2(p+6, m->rune);
 		break;
+	case Rrdkbd4:
+		GET(p+6, m->rune);
+		break;
 	case Tlabel:
 		GETSTRING(p+6, &m->label);
 		break;
@@ -360,6 +371,10 @@ drawfcallfmt(Fmt *fmt)
 		return fmtprint(fmt, "Trdkbd");
 	case Rrdkbd:
 		return fmtprint(fmt, "Rrdkbd rune=%C", m->rune);
+	case Trdkbd4:
+		return fmtprint(fmt, "Trdkbd4");
+	case Rrdkbd4:
+		return fmtprint(fmt, "Rrdkbd4 rune=%C", m->rune);
 	case Tlabel:
 		return fmtprint(fmt, "Tlabel label='%s'", m->label);
 	case Rlabel:
blob - 9d7e10c23607cf5f624ed3368150ce72bf128064
blob + e2d5f70724177b3b87937676e77125e6c0a0aa60
--- src/libdraw/event.c
+++ src/libdraw/event.c
@@ -284,7 +284,7 @@ extract(int canblock)
 			}
 		}else if(i == Skeyboard){
 			if(eslave[i].rpc == nil)
-				eslave[i].rpc = startrpc(Trdkbd);
+				eslave[i].rpc = startrpc(Trdkbd4);
 			if(eslave[i].rpc){
 				/* if ready, don't block in select */
 				if(eslave[i].rpc->p)