Hallo Xand,
Xand <x...@posteo.de> writes: > Ich möchte gerne mit Neo versuchen, flüssig Altgriechisch zu schreiben. > Gibt es dafür die Möglichkeit, die Ebene 5 einzurasten, damit ich nicht > für jeden einzelnen Buchstaben Shift+Caps drücken muss? Auf der Website > habe ich keine Hinweise gefunden, dass dies offiziell unterstützt wird. > Ich nutze den nativen kbdneo-Treiber mit der AHK-Erweiterung unter > Windows 10. > Das ist richtig, so ein Verhalten ist in der Referenz nicht vorgesehen und soweit ich weiß gibt es auch keinen Treiber, der sowas macht. Es sollte aber kein Hexenwerk sein, einen weiteren Lock in einen Treiber einzufügen (beispielsweise durch beide Mod3-Tasten gleichzeitig (de-)aktivierbar). Für ReNeo könnte eine sehr naive Implementierung z.B. so oder so ähnlich aussehen (mangels Wintendo64 nicht getestet): --8<---------------cut here---------------start------------->8--- diff --git a/source/reneo.d b/source/reneo.d index 22fa92e..2949a16 100644 --- a/source/reneo.d +++ b/source/reneo.d @@ -506,6 +506,7 @@ PartialModifierState currentForcedModifiers; bool capslock; bool mod4Lock; +bool grLock; uint previousPatchedLayer = 1; uint activeLayer = 1; @@ -555,6 +556,7 @@ void resetHookStates() nothrow { capslock = false; mod4Lock = false; + grLock = false; setCapslockState(false); setKanaState(false); @@ -595,6 +597,11 @@ bool handleKeyEvent(Scancode scan, bool down) nothrow { mod == Modifier.RMOD4 && !isModifierHeld(Modifier.RMOD4) && isModifierHeld(Modifier.LMOD4)) { mod4Lock = !mod4Lock; } + + if (mod == Modifier.LMOD3 && !isModifierHeld(Modifier.LMOD3) && isModifierHeld(Modifier.RMOD3) || + mod == Modifier.RMOD3 && !isModifierHeld(Modifier.RMOD3) && isModifierHeld(Modifier.LMOD3)) { + grLock = !grLock; + } } if (!(mod in naturalHeldModifiers)) { @@ -657,6 +664,7 @@ bool handleKeyEvent(Scancode scan, bool down) nothrow { bool shiftDown = isModifierHeld(Modifier.LSHIFT) || isModifierHeld(Modifier.RSHIFT); bool mod4Down = isModifierHeld(Modifier.LMOD4) || isModifierHeld(Modifier.RMOD4); + bool mod3Down = isModifierHeld(Modifier.LMOD3) || isModifierHeld(Modifier.RMOD3); // handle capslock if (capslock && isCapslockable(scan)) { @@ -667,6 +675,15 @@ bool handleKeyEvent(Scancode scan, bool down) nothrow { } } + // handle gr lock + if (grLock && isCapslockable(scan)) { + if (shiftDown && layer == 2) { + layer = 6; + } else if (!shiftDown && layer == 1) { + layer = 5; + } + } + // handle mod4 lock if (mod4Lock) { // switch back to layer 1 while holding mod 4 --8<---------------cut here---------------end--------------->8--- Für NeoVars bestimmt grundsätzlich ähnlich, wenn man AutoHotKey lesen kann. Liebe Grüße hrnz _______________________________________________ Diskussion mailing list -- diskussion@neo-layout.org To unsubscribe send an email to diskussion-le...@neo-layout.org