Hallo zusammen,

Hier mal meine Vision einer deklarativen Keyboard-Description-Sprache.

1. Die Sprache beschreibt möglichst einfach den kompletten Funktionsumfang von NEO.

2. Da die Beschreibung komplett ist, kann nun für verschiedene Zielsystem (Karabiner Elements, ReoNeo, Keymechs, kanata, ...) eine Konvertierung erfolgen.

3. Da die Sprach ja einfach und deklarativ ist, kann nun jeder Benutzer seine persönlichen Anpassungen einfach am Ende der Konfiguration hinzufügen, und beim nächsten Konvertierungslauf (dynamisch?) ist die Änderung aktiv.

Nebenschauplatz: die Sprache sollte möglichst keine Struktur-Symbole der Länge Eins, wie ( , ) " + ' ; ... enthalten um "Escaping" zu vermeiden
(Um return und space kommt man wohl nicht drum rum)



------ Originalnachricht ------
Von "Erik del Toro Streb" <[email protected]>
An "neo-diskussion" <[email protected]>
Datum 18.09.2025 21:32:04
Betreff [Neo] Re: Keymechs: eine generische Variante von Reneo

Ist das nicht AHK was Du beschreibst? Vielleicht sollte ich erst noch die 
anderen Mails lesen, aber das kam mir da sofort in den Sinn. Gibt es natürlich 
nur für Windows dieses AHK. Aber da vermisst Du es doch. Ok, die einfache 
Konfigurationsdatei ist der wesentliche Vorteil, den Du suchst, nehme ich an.

Grüße,
Erik


El 28/8/25 a las 18:46, qwertfisch escribió:
Hallo zusammen,

bei den ganzen Mails und interessanten Vorschlägen und Erweiterungen des 
Neo-Layouts habe ich bemerkt, dass ein gewisser Bedarf besteht, ein 
Software-Tastaturlayout möglichst einfach konfigurieren zu können, ohne auf 
Programmierkenntnisse zurückzugreifen. Selbst wenn man manches programmieren 
kann, heißt es nicht, dass es einfach ist, noch dass schnelle Anpassungen zum 
Experimentieren drin sind.

Für Windows-Nutzer ist Reneo ein ziemlich gutes Tool. Es hat die Handhabung der 
Neo-Ebenen und ihrer Umschalttasten in sich einkodiert und stellt dazu eine 
JSON-Schnittstelle bereit, um mit Layouts der Neo-Familie zu spielen oder 
eigene Variationen schnell und dauerhaft konfigurieren zu können. Das ist sehr 
praktisch, aber bin bei meinen Ideen bereits auf Features gestoßen, die damit 
nicht realisierbar sind, die wiederum weitere Spezialfälle im Reneo-Code 
erfordern. Das ist nicht wirklich nachhaltig noch besonders schnell oder 
motivierend.

Daher möchte ich hier kurz ein bisschen vorfühlen und weitere Ideen sammeln für 
eine generische Variante von Reneo, die ich Keymechs nenne. Ich trage dieses 
Projekt seit über zwei Jahren mit mir herum und hatte Anfang 2023 auch eine 
erste lauffähige Rohversion (jedoch nicht konfigurierbar). Dann kam das Leben 
dazwischen und die Idee verflog ein wenig. Durch die ganzen Mails hier habe ich 
mich entschieden, sie wieder aufleben zu lassen und weiß nun auch, dass der 
Ansatz nicht über die Implementierung, sondern über die Konfiguration erfolgen 
sollte.


Die Ziele von Keymechs sind:

• wie Reneo ein Programm im Usermode, dass die eingehenden getippten Tasten 
interpretiert und gemäß der aktuellen Layoutkonfiguration „umbaut“, sodass das 
gewünschte Zeichen / Taste / Funktion herauskommt.
• unabhängig vom tatsächlich aktiven Tastaturlayout
• generische Definition von Ebenen, nicht nur auf die Neo-Familie beschränkt
• Ermöglichen verschiedener Verhaltensweisen, darunter auch Mod-Tap
• einfachere Konfiguration als bisher (JSON ist nicht dafür gemacht)
• anpassbar an unterschiedliche Hardware-Layouts (nicht nur ISO/ANSI)


An Reneo finde ich einiges gut, das ich gerne auch übernehmen würde:
• Einlesen und Verwenden von Compose Combinations
• Bildschirmtastatur (hier ggf. auch mit Darstellung von CoCos)
• Konfiguration für Laien


Wenn man sich den Reneo-Code durchschaut (und versteht), wird man einige 
gewachsene Strukturen entdecken. Vieles ist aus Neo einfach hartkodiert drin, 
so dass es umso schwieriger ist, mit den Layer-Umschalttasten andere Dinge zu 
erreichen, oder andere/weitere Layer zu definieren. Manches geht, aber ist dann 
auch wieder explizit einkodiert worden. Auch der Einhandmodus, der eine ganz 
spezielle Mod-Tap-Konfiguration verwendet, ist manuell drin im Code. Dies führt 
zu einer schlechten Erweiterbarkeit und ist wie oben beschrieben der Grund, 
dass ich hier nochmal neu ansetzen möchte, um all diese Sache konfigurierbar zu 
machen, was entsprechend auch mehr Einstellmöglichkeiten braucht.

Ich möchte mich in der Funktionsweise grob an dem orientieren, was ZMK für 
programmierbare Tastaturen bietet, die sogenannten Behaviors: 
https://zmk.dev/docs/keymaps/behaviors
Dies soll nicht (unbedingt) die Syntax zur Konfiguration sein. ZMK setzt an 
einer ganz anderen Stelle an als Reneo, weswegen die Optionen von ZMK hier 
weder komplett möglich noch sinnvoll in dieser Form sind. Doch die Behaviors 
finde ich sehr nützlich und reichen (fast) aus, um mindestens Neo damit 
generisch zu definieren.


Was die Implementierung von Keymechs angeht, habe ich bereits ein 
funktionierendes Konzept erstellt. Ich würde das zwar nochmal überarbeiten (ist 
zwei Jahre her), aber vom Prinzip her klappt es. Die Konfiguration ist dagegen 
das, was mir Schwierigkeiten bereitet. Ich hätte gerne eine „sprechende“, 
direkt verständliche Konfiguration, ohne viel Klimbim und unnötige Optionen. 
Eine die man erstmal so runterschreiben kann und die visuell auf einen Blick 
zeigt, wie eine Ebene ausschaut. Mal ein Beispiel mit 6x3 Tasten:

[Mod3]
… _ [ ] ^ !
\ / { } * ?
# $ | ~ ` +

Dazu kommen noch die Optionen für die Verhaltensweisen von Tasten, um die 
Ebenenumschaltung zu steuern, Locks festzulegen usw. Die machen die Darstellung 
natürlich länger, aber aus meiner Sicht besteht keine Notwendigkeit für elendig 
hässliche Strukturen wie bei JSON.

Ich habe ein paar Ideen für das Konfigurationsformat, welche ich aber in einer 
weiteren Mail schreibe (die hier ist bereits zu lang).


So wie ich das in den letzten Wochen gelesen habe, besteht vermehrt Bedarf. Ich 
würd’s halt auch erstmal nur für Windows entwickeln, halte mir aber eine 
Umsetzung desselben Prinzips für Linux offen (Mac ist eine andere Geschichte). 
Ich weiß auch um bestehende Tools wie bspw. ZMK (keyboard firmware), KMonad, 
Kanata, keyd (nur Linux) oder keymapper (arbeitet auf Tasten statt Ebenen), die 
alle die eine oder andere Sache umsetzen, teils sehr feature-reich sind. Ich 
habe mir viele davon angesehen und bin zu dem Schluss gekommen, dass sie 
entweder nicht geeignet sind, nicht für Windows erhältlich, oder meistens viel 
zu umständlich in der Konfiguration daherkommen. Mächtig, ja, aber wenn ich 
quasi Lisp programmieren muss, um mein Tastaturlayout zu bekommen, dann wünsche 
ich mir lieber eine kompaktere und intutiv verständliche Sprache genau für 
diesen Zweck.

Ich würd’s halt gerne probieren und dabei vor allem für mich lernen, eine 
Konfigurationsdatei einer selbstdefinierten Sprache (DSL) zu parsen. Ich freue 
mich über jegliche Anregung, Kritik, Hinweise.


qwertfisch
_______________________________________________
Diskussion mailing list -- [email protected]
To unsubscribe send an email to [email protected]
_______________________________________________
Diskussion mailing list -- [email protected]
To unsubscribe send an email to [email protected]
_______________________________________________
Diskussion mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Antwort per Email an