Rojetto / ReNeo

Neo-Tastaturlayouts für Windows
GNU General Public License v3.0
60 stars 11 forks source link

Erweiterung zur Standalone-Version (wie NeoVars) #2

Closed qwertfisch closed 3 years ago

qwertfisch commented 3 years ago

Erläuterung

Die Intention hinter dem Issue ist, mittelfristig die beiden Hauptansätze NeoVars und kbdneo zu konsolidieren. Beide benutzen je ein AHK-Skript, und ReNeo übernimmt (und verbessert) die Rolle des Skripts bei kbdneo. NeoVars leidet dagegen an dem komplizierten Aufbau auf Autohotkey und verhaspelt sich manchmal. Entsprechend gibt es daher auch das alternative Projekt neo2-llkh, welches NeoVars ohne Overhead versucht nachzubauen. Mittelfristig gilt mein Interesse, NeoVars durch eine native und hierauf zugeschnittene Lösung zu ersetzen. Dazu stehen eben neo2-llkh und das vom technischen Ansatz her gleichwertige ReNeo zur Wahl.

Sowohl die Standalone-Lösung (aktuell NeoVars) als auch die Variante mit nativem Layout + Zusatztool sollen bestehen bleiben, denn die Installation des nativen Layouts ist fehleranfällig und nichts zum schnellen Ausprobieren. Es wäre aber schön, wenn man ReNeo für beides nutzen könnte. Dadurch brauchen Features wie z.B. eine Bildschirmtastatur nicht zweimal programmiert werden. Auch könnten Nutzer nach der Ausprobierphase direkt zum nativen Layout + ReNeo umsteigen, ohne auf Dinge verzichten zu müssen.

Die Struktur ist so gewählt, dass ReNeo (mit ein paar Erweiterungen?) auch mit normalen Deutsch/Qwertz-Layout vermutlich funktionieren würde. Es sind dann allerdings andere Tasten abzufangen, die ersten beiden Ebenen, und vielleicht noch ein paar Sonderfälle.

Weitere Features und Projekt-Merge

Ich würde außerdem gerne ReNeo so erweitern, dass die wichtigsten Features aus NeoVars (Bildschirmtastatur, Traysymbol, Umschalten zu NeoQwertz usw.) mit enthalten sind, um einen vollwertigen Ersatz zu bieten. Parallel dazu könnte man schauen, ob/welche Features von neo2-llkh mit auf die Liste sollen. Im anderen Projekt sind einige gute Ideen umgesetzt, gelöst über Konfigurationsdateien. Das ist hier ja auch angedacht, insbesondere um benutzerdefinierte Neo-basierte Layouts zu verwirklichen. Schließlich wäre eine Zusammenarbeit beider Projekte zu überlegen – aber das ist Zukunftsmusik.

qwertfisch commented 3 years ago

Irgendwie ist mir vorhin völlig entgangen, dass der native Treiber zwei wichtige Dinge einstellt:

Das würde also spürbar komplizierter werden, diese Dinge zu berücksichtigen.

Rojetto commented 3 years ago

Halte ich für eine sehr elegante Idee und grundsätzlich auch genau wie du beschrieben hast für umsetzbar.

Die wichtigste Aufgabe wäre also zwei Betriebsmodi einzuführen, zwischen denen man (über das Traymenü?) umschalten kann:

  1. Erweiterung - Je nach ausgewähltem nativen Layout werden höhere Ebenen und Compose abgefangen und in ReNeo umgesetzt
  2. Eigenständig - Natives Layout wird ignoriert, alle Anschläge werden abgefangen und je nach in ReNeo ausgewähltem Layout ersetzt

Technische Details

Es sind dann allerdings andere Tasten abzufangen, die ersten beiden Ebenen, und vielleicht noch ein paar Sonderfälle.

Die Ebenen 1 und 2 sind ja bereits gemappt, dass ReNeo dort nichts macht ist mehr oder weniger nur ein Boolean. Für ein vollständiges Mapping der unteren Ebenen ist gerade aber noch problematisch, dass die „Schlüssel“ gerade Windows Virtual Keys sind und nicht Scancodes (+ dieses lästige Extended Bit). Wenn man auf Scancodes umstellt müsste man den Nutzer auch nicht zwingen, nativ QWERTZ zu benutzen.

Wenn man sich in die Welt der Nischennischenlayouts wie AdNW, KOY etc. begibt sollten Nutzer ihre Tweaks auch selber machen können. Deshalb sollten die Mappings echt nicht mehr harcodet sein sondern in der (zukünftigen) Konfigurationsdatei liegen.

zwei zusätzliche Modifier-Ebenen

Die sind für ReNeo völlig egal. Ich hatte kbdneo mal so entschlackt dass es die nicht mehr gab, und mit ReNeo gingen die oberen Ebenen immer noch.

kein AltGr (d.h. rechtes Alt funktioniert wie das linke)

Das hatte ich noch nicht auf dem Schirm, guter Hinweis. Wenn Windows dort keinen Schabernack treibt (was gerade bei Alt manchmal der Fall zu sein scheint) müsste das aber auch im Tastaturhook gehen.

Weiteres Vorgehen

Um die Übersicht zu wahren teile ich das ganze mal etwas auf und verlinke die zugehörigen Issues hier.

Für den Standalone-Modus als solchen würde ich das hier offen lassen. Sonstige Details werden sich denke ich auftun wenn es mit der Implementierung losgeht.

qwertfisch commented 3 years ago

kein AltGr (d.h. rechtes Alt funktioniert wie das linke)

Das hatte ich noch nicht auf dem Schirm, guter Hinweis. Wenn Windows dort keinen Schabernack treibt (was gerade bei Alt manchmal der Fall zu sein scheint) müsste das aber auch im Tastaturhook gehen.

Das müsste im Treiber auf Strg+Alt gemappt werden. Da NeoVars es hinbekommt, wird in Autohotkey eine funktionierende Lösung vorhanden sein. Dessen Quellcode ist sehr gut kommentiert, sodass man für Fälle wie diesen darauf zurückgreifen kann.

Rojetto commented 3 years ago

Ich habe etwas experimentiert und grundsätzlich funktioniert schon fast alles, wenn man ReNeo einfach alle Ebenen übernehmen lässt. Für Mod4R muss das Fake VK_LCTRL gefiltert werden, ansonsten ist mir bisher nichts schlimmes aufgefallen (schreibe gerade diesen Kommentar im „Standalone“-Modus). Ein bisschen Gehirnstürmung zu den grundsätzlichen Dingen:

Benutzererfahrung

Wie sieht die Unterscheidung Erweiterung/Standalone für den Nutzer aus? Mein aktueller Vorschlag sind zwei (persistierte) Optionen im Traymenü.

  1. „Layout“: Man wählt aus den verfügbaren Neo-verwandten Layouts aus.
  2. „Ersetze QWERTZ“ (Ja/Nein, standard Ja): Soll QWERTZ übernommen und mit dem gewählten Layout ersetzt werden. Analog zum Erweiterungsmodus deaktiviert sich ReNeo dann automatisch wenn nicht QWERTZ ausgewählt ist, und schaltet automatisch in den Erweiterungsmodus wenn z. B. kbdneo aktiv ist. Wenn man sowieso kbdneo benutzt und lieber über die Windows-Layouts zu QWERTZ zurückschaltet kann man die Option „Ersetze QWERTZ“ deaktivieren.

Nicht schön dabei finde ich noch, wie viele verwirrende Aktivierungs- und Deaktivierungsoptionen es dann gibt. Wenn ich nur die Standalone-Variante nutze ist nicht klar, was der Unterschied zwischen „ReNeo deaktivieren“ und „Ersetze QWERTZ” ist. Da muss es bestimmt noch eine bessere Logik geben.

qwertfisch commented 3 years ago

Die Unterscheidung mit Standalone/Extension ist ein schwierigies Thema. Ich finde es noch verwirrend und habe den Menüpunkt „Ersetze Qwertz“ nach mehrmaligem Lesen noch nicht verstanden. Vielleicht sollte man erstmal die Anforderungen klären?

Das manuelle Deaktivieren sollte klar sein und in jeder Konfiguration einfach das Tool abschalten. Dann gilt das gerade aktive Tastaturlayout.

Automatisches Deaktivieren

Automatisches Deaktivieren ist schwierig. Aus meiner Sicht sogar unvereinbar mit einem Kombimodus. In der kbdneo-Version soll ReNeo bei aktivem Neolayout aktiv sein, bei Qwertz stoppen. In der Standalone-Version soll ReNeo umgekehrt nur bei Qwertz aktiv sein. Also … wie denn nun? Das sollte nicht der User in irgendeinem Traymenü adhoc umschalten können, sondern sich vorher (beim Start) entscheiden, in welchem Modus ReNeo arbeitet. Vielleicht ein Aufrufparameter oder in der Config.

Im Standalone-Modus braucht ReNeo an sich keine Automatik – da eh alle Tasten ersetzt werden, sollte es, im Gegensatz zu NeoVars, nicht von Qwertz abhängig sein, sondern auch z.B. mit Englisch, Französisch, Spanisch, Dvorak, Türkisch-F oder gar kbdneo selbst zusammenarbeiten. Oder soll es ausschließlich bei einem aktiven Qwertz-Layout funktionieren? Wie würde sich das ansonsten mit Fernost-Zeicheneingabe verhalten? (Wie ist das bei NeoVars aktuell? Ich schätze nicht so gut.)

Neo-basiertes Layout umschalten

Das wäre wohl deine erstgenannte Option. Aber funktioniert das auch im Extension-Modus? Dann müsste man da nämlich auch die ersten beiden Ebenen mit ersetzen. Sehe ich hier als wenig sinnvoll an, weil man sich bereits aufwendig das gewünschte kbd*-Layout extra installiert hat. Da will man doch kein anderes Layout? Im Standalone-Modus finde ich das dagegen sinnvoll, um experimentieren zu können, oder auch mal zu NeoQwertz zurückzuschalten.

Rojetto commented 3 years ago

Die Verwirrung kann ich voll nachvollziehen, gebe dir Recht dass der ursprüngliche Vorschlag nicht wirklich verständlich ist. Grundsätzlich würde ich schon alles bei einer EXE belassen, für ein Upgrade von ReNeo-Standalone zu kbdneo muss der Nutzer dann nicht viel mehr machen, als halt kbdneo zu installieren. Wie du richtig gesagt hast, sind die zwei Modi aber nicht völlig automatisch vereinbar, da es einen Zielkonflikt gibt. Deswegen ein angepasster Vorschlag:

Wir führen eine Option standaloneMode in der Konfigurationsdatei ein.

Für den globalen Hotkey zum (de)aktivieren habe ich #21 angelegt. Fernostsprachen sind mit NeoVars gerade nicht so zu gebrauchen. Der IME funktioniert zwar weiterhin und die meisten Buchstaben landen an der richtigen Stelle, manche sind aber irgendwie vertauscht oder fehlen.

Update: Bis auf die Erweiterung des Traymenüs ist der Vorschlag jetzt so im Zweig standalone umgesetzt. Das gewünschte Standalone-Layout kann man in der Config einstellen.

qwertfisch commented 3 years ago

Beim Lesen kam mir die Frage auf, an welcher Stelle nun die bisherige automatische Deaktivierung reinspielt. Der Quellcode hat das aufgeklärt: diese ist nur noch im Erweiterungsmodus aktiv (bzw. wenn Standalone gewählt ist, gibt es immer ein Ziellayout).

Sieht nun gut gelöst aus, man kann ReNeo direkt weiter nutzen, wenn man kbdneo/bone nachträglich installiert. Möchte man zusätzlich die Automatik haben, muss man lediglich den Standalone-Modus in der Konfiguration abschalten. Puh, da gilt es, einen einfachen Weg finden, das verwirrungsfrei dem Nutzer zu erklären – aber vom Ablauf her bin ich damit einverstanden.

Wenn du noch nicht angefangen hast, kann ich das Traymenü zur Layoutauswahl umsetzen.

Rojetto commented 3 years ago

Jo, die Erklärung ist wirklich eine kleine Herausforderung. Ich könnte mir sowas vorstellen:

Standardmäßig arbeitet ReNeo im Erweiterungsmodus, ergänzt also den nativ installierten Treiber kbdneo um die beschriebenen Funktionen. Deine anderen Layouts funktionieren dann wie gehabt.

Möchtest Du hingegen keinen nativen Treiber installieren, aktiviere in ReNeo den Standalonemodus. Dann ersetzt ReNeo dein derzeitiges Layout (vermutlich QWERTZ) mit einem Neo-Layout. Ändere dazu in der Datei config.json die entsprechende Zeile zu "standaloneMode": true.

Der Detailkram verwirrt vermutlich mehr, zumindest an der Stelle.

Dem Traymenü kannst du dich sehr gerne annehmen, habe dazu #22 angelegt.

Rojetto commented 3 years ago

Aus »mit ein paar Erweiterungen?« ist doch etwas mehr geworden 😉 Meiner Meinung nach sind die angesprochenen Punkte jetzt aber alle abgearbeitet und der Standalone-Modus wird inzwischen seit Monaten von mehreren Leuten täglich genutzt. Deshalb schließe ich jetzt hier.