Hallo,

die grobe Idee eine deklarativen, intuitiven, mächtigen Beschreibungssprache für Tastaturlayouts finde ich sehr ansprechend. Meine Beweggründe zu Keymechs sind ja Funktionsmächtigkeit und – nachdem ich bemerkte, dass es ohne gute Konfiguration nicht geht – eben gerade eine intuitive Sprache.

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

Für Neo existiert bereits Reneo, und man kann damit Neo-artige Layouts erstellen/anwenden (sogar annehmbar einfach). Mehr geht aber leider nicht: der Nutzer ist nicht völlig frei in der Konfiguration, noch kann alles beliebig reduziert, geändert oder erweitert werden. Und einige Verhaltensweisen sind halt gar nicht möglich (oder fest einkodiert). Die angedachte Sprache soll aber funktionsmächtig und unabhängig sein.


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

Keymechs ist das kanonische Mapping-Tool explizit für diese Sprache. Andere Mapping-Tools können einige Features vielleicht unterstützen, vielleicht nicht. ReNeo ist wie eben beschrieben eingeschränkt. Eine Konvertierung bringt da nicht viel und ist unsinnig, weil die Funktionsweise am Ende exakt dieselbe ist (mehr dazu weiter unten). Da kann man auch gleich Keymechs nehmen. Ich würde soger behaupten, es macht mehr Sinn, ein kleines Konvertierungstool zu haben, was andersherum alte Reneo-Konfigs in die neue Sprache übersetzt.

Kanata, Keyd, Karabiner … das wäre denkbar, ja. Meinem Verständnis nach können Kanata und Keyd ähnliches, vielleicht sogar den ganzen angedachten Funktionsumfang. Hier sehe ich tatsächlich einen Punkt, dass man schauen könnte, ob die Keymechs-Implementierung sinnvoll ist, oder ob man einen Konverter von der Keymechs-Konfiguration nach bspw. Kanata baut. Letzteres erscheint mir auch nicht allzu trivial: der ganze Punkt mit der Parsen der Beschreibungssprache bliebe weiterhin notwendig. Ein Keymechs-Client müsste neben dem Parsen gar nicht soviel mehr tun. Die Implementierung eines Keymappers ist relativ einfach.

Ich würde liebend gerne überhaupt eine Karabiner Elements Konfiguration haben, die fehlerfrei Neo auf macOS abbildet, ohne dass man da noch Neo-Layouts oder dieses ABC-Layout installieren müsste und in sovielen Programmen Bugs erlebt. Doch solange nichtmal das zu bewerkstelligen ist, sehe ich denn Sinn hier noch weniger. Ein Keymechs für macOS wäre cool, aber ich habe keinen Mac und kann daher keine Software dafür entwickeln oder mit der System-API experimentieren. (Und wenn, würde ich damit erst anfangen wollen, wenn eine Windows-Version besteht.)


3. Da die Sprache 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.

„Wir definieren uns eine Sprache S. Sei S einfach und deklarativ …“ ;) Das ist ja gerade das Schwierige an dieser Sache! Zum Konvertieren hab ich beim zweiten Punkt schon entsprechendes geschrieben.

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)

Du brauchst irgendwelche Symbole oder Wörter, um deine Grammatik zu definieren. Das können auch Symbole der Länge 1 sein, solange im aktuellen Kontext klar ist, ob nun Syntax gemeint ist oder ein String (für auszugebende Zeichen). Ich stimme dir zu, dass man Escaping auf einen möglichst kleinen Bereich reduzieren oder besser ganz vermeiden sollte. Ich hab ein paar Ideen im Kopf, kann ich mal in einer anderen Mail vorbringen.



Mir ist bewusst, dass das auch ein bisschen was von xkcd/Standards hat ( https://xkcd.com/927/ ) – wobei es hier nicht wirklich um Standards geht. Aber häufig ist das Konfigurationsformat auch nicht in Hinblick auf den Nutzer und Intuition und Einfachheit ausgewählt, sondern nach Implementierbarkeit. Also technische Gründe. Das halte ich für keine gute Grundlage.


Bei der Aufzählung der äh „Zielsysteme“ fiel mir auf, dass es unterschiedliche Ebenen gibt, auf denen so ein System wirkt. Ganz unten haben wir mit QMK, ZMK, RMK Tastatur-Firmwares, die es ermöglichen, eine physische Tastatur zu konfigurieren. Dabei wird festgelegt, welche Tasten(drücke) zu welchen ausgegebenen Scancodes führen. Inklusive der Möglichkeiten mit verschiedenen Ebenen, Locks, Multitaps, Sequenzen – das regelt die Tastatur, um am Ende Scancodes rauszuhauen. Nur diese werden vom jeweiligen Betriebssystem verarbeitet und anhand eines obligatorischen Grundlayouts in die Zeichen und Nicht-Zeichen-Codes (Pfeiltasten, F-Tasten usw.) umgesetzt.

Eine Konfiguration auf Firmware-Ebene muss notwendigerweise anders gestaltet sein (mit einer anderen Zielsetzung) als eine Konfiguration auf der Ebene, wo Karabiner, Keymechs oder Kanata angesetzt sind. Diese bekommen nämlich die Scancodes (und sogar die bereits vom Betriebssystem umgesetzten virtuellen Keycodes, ggf. die zu generierenden Zeichen). Um dann anhand einer Konfiguration zu sehen, welche Ebene aktiv ist, welche Zeichen / Nicht-Zeichen ausgegeben werden, ob Sequenzen (Compose) verarbeitet werden und andere Dinge. Dabei wird die Arbeit des Betriebssystem-Layouts leider teilweise wieder revidiert – aber die Betriebssysteme geben einem eben nicht die ganze Funktionsmächtigkeit an die Hand.

Es ist nunmal so, Tastatur und Betriebssystem sind zwei Teile, die zusammenspielen. Wenn man keine programmierbare Tastatur hat bleibt nur die Software-Ebene übrig. Und für diese Ebene fehlt mir eben die mächtige und erweiterbare Konfiguration (plus Mapping-Tool).

Es gäbe sogar noch eine dritte logische Ebene. Das sind dann Tools wie keymapper oder AHK, die eher mehr … Shortcuts definieren, um damit z.B. Programme zu starten, oder andere Tastenkombinationen ersetzen, Makros ausführen usw. Sowas könnte man auch für Keymechs in Maßen auch mit einbauen, aber würde ich erstmal auf (viel) später verschieben.


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

Antwort per Email an