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

Antwort per Email an