!7 // fixes typing "|", "{", "[", "]", "}", "\", "@" and "~" in VNC on German keyboard cmodule2 VNCFixer > DynPrintLogAndEnabled { transient new LS shouldSend; transient S computerID; switchable bool verbose; start { dm_requireLinuxWindowList(); // inZOrder doesn't have to be set anymore dm_startKeyLogger(); dm_vmBus_onMessage keyUp(voidfunc(int keyCode, int modifiers) { if (nempty(shouldSend) && keyCode == 56) { // Alt+Gr released switch to q(); LS sending = getAndClearList(shouldSend); print("Sending " + sending + " to " + computerID); for (S key : sending) dm_evalOnOtherMachine(computerID, "robot_pressAndRelease_" + key + "_englishLayout();"); } }); dm_vmBus_onMessage keyDown_raw(voidfunc(final int rawCode, int modifiers) { if (enabled && modifiers == 128) { switch to q(); //robot_keyRelease(KeyEvent.VK_ALT_GRAPH); // doesn't work, wait for modifier release instead //S activeWindow = getString(first((L) dm_call(dm_linuxWindowList(), 'getData)), 'windowTitle); S activeWindowID = linux_activeWindowID(); S activeWindow = (S) dm_call(dm_linuxWindowList(), 'titleForWindowID, activeWindowID); if (cic(activeWindow, "X desktop (gazelle")) computerID = "ekrmjmnbrukm"; else if (cic(activeWindow, "X desktop (onfire.")) computerID = "jozkyjcghlvl"; else if (cic(activeWindow, "X desktop (vmd41736")) computerID = "whxojlpjdney"; else if (cic(activeWindow, "X desktop (vm13548")) computerID = "hpgrupgrauku"; else if (cic(activeWindow, "X desktop (c8.")) computerID = "mqqgnosmbjvj"; else if (cicOneOf(activeWindow, "X desktop (big", "X desktop (ns57")) computerID = "pzhvpgtvlbxg"; else if (cic(activeWindow, "X desktop (cruddie.")) computerID = "bhatertpkbcr"; else { if (verbose) print("No matching window (" + activeWindowID + "/" + activeWindow + ")"); shouldSend.clear(); ret; } print("Got computer ID: " + computerID + ", rawCode: " + rawCode); if (rawCode == 124) shouldSend.add("vbar"); else if (rawCode == 123 || rawCode == 55) shouldSend.add("openingCurlyBracket"); else if (rawCode == 125 || rawCode == 48) shouldSend.add("closingCurlyBracket"); else if (rawCode == 91) shouldSend.add("openingSquareBracket"); else if (rawCode == 93) shouldSend.add("closingSquareBracket"); else if (rawCode == 64) shouldSend.add("at"); else if (rawCode == 92) shouldSend.add("backslash"); else if (rawCode == 126) shouldSend.add("tilde"); } }); } }