Hi team, Thank you for the development of X2go, I'm using Kdrive on the Windows client on a daily basis and very happy with it! I am also using the HTML client but faced limitations with the keyboard that I could fix. I made the changes directly on the compiled JS but it all happens in [x2gohtmlclient.git] / src / x2gokdrivehtmlclient.js CapsLock and AltGr modifier keys were not effective. Fix: @@ -1419,10 +1691,17 @@ X2GoKDriveHTMLClient { v32[1] |= Mod4Mask; } + if (e.getModifierState("AltGraph")) { + v32[1] |= Mod5Mask; + } + if (e.getModifierState("CapsLock")) { + v32[1] |= LockMask; + } v32[2] = this.web2pc105(e.keyCode); // console.log(v32[1], v32[2]); e.preventDefault(); e.stopPropagation(); Minor issue with parsing: @@ -1249,7 +1249,7 @@ X2GoKDriveHTMLClient case 111 : return 106; /// case 106 : - return 63; //* + return 63; // * (putting a space before * here, so that nano/gedit do not get confused with syntax highlighting) case 109 : return 82; //- FYI, since I'm using a French keyboard, I also created a new keymap, but this should probably be written differently and add a UI setting in the HTML to choose the keyboard mapping. - v32[2] = this.web2pc105(e.keyCode); + v32[2] = this.web2pc105fr(e.keyCode); @@ -1312,6 +1312,273 @@ X2GoKDriveHTMLClient return nativeCode; } + web2pc105fr(nativeCode) + { + switch (nativeCode) + { + //1st row + case 222: + return 49; // ² + case 49: + return 10; //1 + case 50: + return 11; //2 + case 51: + return 12; //3 + case 52: + return 13; //4 + case 53: + return 14; //5 + case 54: + return 15; //6 + case 55: + return 16; //7 + case 56: + return 17; //8 + case 57: + return 18; //9 + case 48: + return 19; //0 + case 169: + return 20; //° + case 61: + return 21; //+ + case 8: + return 22; //BSP + + //2 row + case 9 : + return 23; //TAB + case 65: + return 24; //a + case 90: + return 25; //z + case 69 : + return 26; //e + case 82 : + return 27; //r + case 84 : + return 28; //t + case 89: + return 29; //y + case 85: + return 30; //u + case 73: + return 31; //i + case 79: + return 32; //o + case 80: + return 33; //p + case 160: + return 34; //[ + case 164: + return 35; //] + case 13: + return 36; //ENT + + //3 row + case 20 : + return 66; //CAPS + case 81 : + return 38; //q + case 83 : + return 39; //s + case 68 : + return 40; //d + case 70 : + return 41; //f + case 71 : + return 42; //g + case 72 : + return 43; //h + case 74 : + return 44; //j + case 75 : + return 45; //k + case 76 : + return 46; //l + case 77 : + return 47; //m + case 165 : + return 48; //ù + case 170 : + return 51; // * + + //4 row + case 16 : + return 50; //Shift Left + case 60 : + return 94; //< + case 87 : + return 52; //w + case 88 : + return 53; //x + case 67 : + return 54; //c + case 86 : + return 55; //v + case 66 : + return 56; //b + case 78 : + return 57; //n + case 188 : + return 58; //, + case 59 : + return 59; //; + case 58 : + return 60; //: + case 161 : + return 61; //! + case 16 : + return 62; //Shift Right + + + //5 row + case 17 : + return 37; //LCTRL + case 91 : + return 133; //LMETA + case 18 : + return 64; //LALT + case 32 : + return 65; //SPACE + case 18 : + return 108; //RALT +// case 92 : +// return 134; //RMETA +// case 93 : +// return 135; //MENU + case 17 : + return 105; //RCTRL + + + //specials + case 27 : + return 9; //ESC + case 112 : + return 67; //F1 + case 113 : + return 68; //F2 + case 114 : + return 69; //F3 + case 115 : + return 70; //F4 + case 116 : + return 71; //F5 + case 117 : + return 72; //F6 + case 118 : + return 73; //F7 + case 119 : + return 74; //F8 + case 120 : + return 75; //F9 + case 121 : + return 76; //F10 + case 122 : + return 95; //F11 + case 123 : + return 96; //F12 + + case 44 : + return 107; //print +// case 145 : +// return 78; //scroll +// case 19 : +// return 127; //break + + case 45 : + return 118; //ins + case 36 : + return 110; //home + case 33 : + return 112; //pgup + case 46 : + return 119; //del + case 35 : + return 115; //end + case 34 : + return 117; //pgdn + + //arrows + case 38 : + return 111; + case 37 : + return 113; + case 40 : + return 116; + case 39 : + return 114; + + //numlock + case 144 : + return 77; //NLCK + case 111 : + return 106; /// + case 106 : + return 63; // * + case 109 : + return 82; //- + + case 36 : + return 79; //home + case 38 : + return 80; //up + case 33 : + return 81; //pgup + case 107 : + return 86; //+ + + case 37 : + return 83; //left + case 12 : + return 84; //clear + case 39 : + return 85; //right + + case 35 : + return 87; //end + case 40 : + return 88; //dwn + case 34 : + return 89; //pgdn + case 13 : + return 104; //enter + + case 45 : + return 90; //ins + case 46 : + return 91; //del + + case 96 : + return 90; //0 + case 97 : + return 87; //1 + case 98 : + return 88; //2 + case 99 : + return 89; //3 + case 100 : + return 83; //4 + case 101 : + return 84; //5 + case 102 : + return 85; //6 + case 103 : + return 79; //7 + case 104 : + return 80; //8 + case 105 : + return 81; //9 + + case 110 : + return 91; //. + + + } + return nativeCode; + } + Cheers! DjZU
Hi Dj ZU, On Di 20 Aug 2024 18:30:16 CEST, Dj ZU wrote:
Hi team,
Thank you for the development of X2go, I'm using Kdrive on the Windows client on a daily basis and very happy with it! I am also using the HTML client but faced limitations with the keyboard that I could fix. I made the changes directly on the compiled JS but it all happens in [x2gohtmlclient.git] / src / x2gokdrivehtmlclient.js
CapsLock and AltGr modifier keys were not effective. Fix: @@ -1419,10 +1691,17 @@ X2GoKDriveHTMLClient { v32[1] |= Mod4Mask; }
- if (e.getModifierState("AltGraph")) {
- v32[1] |= Mod5Mask;
- }
- if (e.getModifierState("CapsLock")) {
- v32[1] |= LockMask;
} v32[2] = this.web2pc105(e.keyCode);// console.log(v32[1], v32[2]);
e.preventDefault(); e.stopPropagation();Minor issue with parsing: @@ -1249,7 +1249,7 @@ X2GoKDriveHTMLClient case 111 : return 106; /// case 106 :
return 63; //*
nano/gedit do not get confused with syntax highlighting) case 109 : return 82; //-return 63; // * (putting a space before * here, so thatFYI, since I'm using a French keyboard, I also created a new keymap, but this should probably be written differently and add a UI setting in the HTML to choose the keyboard mapping.
v32[2] = this.web2pc105(e.keyCode);
v32[2] = this.web2pc105fr(e.keyCode);@@ -1312,6 +1312,273 @@ X2GoKDriveHTMLClient return nativeCode; }
web2pc105fr(nativeCode)
{
switch (nativeCode){//1st rowcase 222:return 49; // ²case 49:return 10; //1case 50:return 11; //2case 51:return 12; //3case 52:return 13; //4case 53:return 14; //5case 54:return 15; //6case 55:return 16; //7case 56:return 17; //8case 57:return 18; //9case 48:return 19; //0case 169:return 20; //°case 61:return 21; //+case 8:return 22; //BSP//2 rowcase 9 :return 23; //TABcase 65:return 24; //acase 90:return 25; //zcase 69 :return 26; //ecase 82 :return 27; //rcase 84 :return 28; //tcase 89:return 29; //ycase 85:return 30; //ucase 73:return 31; //icase 79:return 32; //ocase 80:return 33; //pcase 160:return 34; //[case 164:return 35; //]case 13:return 36; //ENT//3 rowcase 20 :return 66; //CAPScase 81 :return 38; //qcase 83 :return 39; //scase 68 :return 40; //dcase 70 :return 41; //fcase 71 :return 42; //gcase 72 :return 43; //hcase 74 :return 44; //jcase 75 :return 45; //kcase 76 :return 46; //lcase 77 :return 47; //mcase 165 :return 48; //ùcase 170 :return 51; // *//4 rowcase 16 :return 50; //Shift Leftcase 60 :return 94; //<case 87 :return 52; //wcase 88 :return 53; //xcase 67 :return 54; //ccase 86 :return 55; //vcase 66 :return 56; //bcase 78 :return 57; //ncase 188 :return 58; //,case 59 :return 59; //;case 58 :return 60; //:case 161 :return 61; //!case 16 :return 62; //Shift Right//5 rowcase 17 :return 37; //LCTRLcase 91 :return 133; //LMETAcase 18 :return 64; //LALTcase 32 :return 65; //SPACEcase 18 :return 108; //RALT+// case 92 : +// return 134; //RMETA +// case 93 : +// return 135; //MENU
case 17 :return 105; //RCTRL//specialscase 27 :return 9; //ESCcase 112 :return 67; //F1case 113 :return 68; //F2case 114 :return 69; //F3case 115 :return 70; //F4case 116 :return 71; //F5case 117 :return 72; //F6case 118 :return 73; //F7case 119 :return 74; //F8case 120 :return 75; //F9case 121 :return 76; //F10case 122 :return 95; //F11case 123 :return 96; //F12case 44 :return 107; //print+// case 145 : +// return 78; //scroll +// case 19 : +// return 127; //break
case 45 :return 118; //inscase 36 :return 110; //homecase 33 :return 112; //pgupcase 46 :return 119; //delcase 35 :return 115; //endcase 34 :return 117; //pgdn//arrowscase 38 :return 111;case 37 :return 113;case 40 :return 116;case 39 :return 114;//numlockcase 144 :return 77; //NLCKcase 111 :return 106; ///case 106 :return 63; // *case 109 :return 82; //-case 36 :return 79; //homecase 38 :return 80; //upcase 33 :return 81; //pgupcase 107 :return 86; //+case 37 :return 83; //leftcase 12 :return 84; //clearcase 39 :return 85; //rightcase 35 :return 87; //endcase 40 :return 88; //dwncase 34 :return 89; //pgdncase 13 :return 104; //entercase 45 :return 90; //inscase 46 :return 91; //delcase 96 :return 90; //0case 97 :return 87; //1case 98 :return 88; //2case 99 :return 89; //3case 100 :return 83; //4case 101 :return 84; //5case 102 :return 85; //6case 103 :return 79; //7case 104 :return 80; //8case 105 :return 81; //9case 110 :return 91; //.}return nativeCode;}
Cheers!
DjZU
Could you sign up for gitlab.x2go.org and file a merge request there? https://gitlab.x2go.org/x2go/client/html/x2gohtmlclient Ideally, one MR per observed issue. Let me know if that works for you... Mike -- DAS-NETZWERKTEAM c\o Technik- und Ökologiezentrum Eckernförde Mike Gabriel, Marienthaler Str. 17, 24340 Eckernförde mobile: +49 (1520) 1976 148 landline: +49 (4351) 850 8940 GnuPG Fingerprint: 9BFB AEE8 6C0A A5FF BF22 0782 9AF4 6B30 2577 1B31 mail: mike.gabriel@das-netzwerkteam.de, http://das-netzwerkteam.de