Giter Site home page Giter Site logo

reneo's People

Contributors

greybaron avatar maxmitti avatar qwertfisch avatar rojetto avatar vuimuich avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

reneo's Issues

Tray Icon

Hey,

wollte es nur nochmal anbringen wegen "Tray Icon (braucht man das tatsächlich?)".

Ich benutze NEO2 mit kbdneo und dem AHK Skript seit ca. 10 Jahren. Das große Problem dabei (abgesehen davon, dass das Skript teils hängen bleibt und in GTK Programme nichts funktioniert): Spiele kicken oder bannen einen für AHK Skripte. Heißt ich habe mir angewohnt das Skript immer zu beenden bevor ich ein Multiplayer-Spiel starte.

Daher wäre ein Tray-Icon super, macht es auch viel einfacher ReNeo zu deaktivieren oder zu beenden. Und man vergisst nicht so einfach darauf, dass es evtl. gerade läuft.

Da sich ReNeo beim Keyboard einklickt ist hier sicher auch die Gefahr gegeben, dass es evtl. als Cheat angesehen wird?

Parse Escape-Zeichen in Compose richtig

Beispiele:

<dead_diaeresis> <space>         	: "\""   quotedbl # REVERSE SOLIDUS
<Multi_key> <slash> <slash>      	: "\\"   backslash # REVERSE SOLIDUS
<Multi_key> <u> <u> <KP_5> <c> <space> : "\\" U005c # REVERSE SOLIDUS

Add support for the Three Layout aka `3l`

3l is a keyboard layout primarily for English language users inspired by a simplification of the Neo layout: https://github.com/jackrosenthal/threelayout

Seeing as their Windows implementation is AHK based, they probably face similar issues as NeoVars did. They might also profit from the more advanced features we have, e. g. we already handle jackrosenthal/threelayout#22. ReNeo should be able to support this layout with a few simple changes:

  • #72
  • Add 3l to layout.json
  • On-screen-keyboard:
    • Add ANSI layout option
    • Add option to hide the number row
    • Somehow rename M3 and M4 to Sym and Cur
  • Add pre-configured release version with the appropriate settings

Globaler Hotkey zum (De)aktivieren

NeoVars kann man mit Shift+Pause jederzeit aktivieren und deaktivieren. Diese Funktion ist bei uns bis jetzt nur per Traymenü zugänglich, ein solcher Shortcut wäre aber auch schön. Damit wir auch weiterhin den Tastaturhook komplett entfernen können macht es Sinn, die Hotkey-Erkennung eben nicht dort zu machen, sondern über RegisterHotKey oder so.

Standalone-Layout im Traymenü auswählen

Für den Standalone-Modus soll im Traymenü ein weiteres Untermenü hinzugefügt werden, mit dem man zwischen den verfügbaren Layouts wechseln kann. Diese Auswahl soll in einer Datei abgespeichert werden.

In config.json existiert bereits ein Eintrag standaloneLayout der beim Starten geladen wird. Dieser müsste entsprechen überschrieben werden. Problem: Wenn man die JSON-Datei komplett neu schreibt, gehen vermutlich die sorgfältigen Ausrichtungen in den Layouts verloren (in die der Nutzer möglicherweise Zeit gesteckt hat). Vielleicht sollte man zumindest die Layouts deshalb in eine separate layouts.json auslagern, vielleicht ist das aber auch überflüssig. Kann der Implementierer entscheiden 🤷

Fehler irgendwie kommunizieren

Bis jetzt stürzen wir bei Fehlern im Release-Modus einfach ab. Besonders blöd ist das, wenn das beim Lesen einer der JSON-Dateien passiert, da der Nutzer nicht erfährt, wo er etwas falsch eingegeben hat. Wir sollten zumindest eine MessageBox anzeigen, die entweder die Exception ausgibt, oder auf den Debug-Modus verweist. Letzteren kann man vielleicht auch als zweite Binary mit schiffen?

Dynamische Anzahl Von Ebenen

Vorweg: Danke fürs Maintainen von diesem Projekt! Ich hatte öfters Probleme mit NeoVars und bin sehr optimitisch was diese native Implementierung betrifft 😉

Es wäre ziemlich cool, wenn man noch eine 7te/8te/9te Ebene definieren könnte.
Gerade beim Programmieren nutze ich ü, ö, und ä gar nicht.
Ich würde daraus gerne Modifier für weitere Ebenen machen (und mit irgendeinem Shortcut zwischen Layouts wechseln, sodass ich für E-Mails doch wieder die Umlaute habe).

In den Ebenen 7/8/9 würde ich dann F13-F24 mappen, jeweils modifiziert über Alt, Ctrl und Shift.
Damit gibt es dann 12*2^3 = 96 Aktionen, die Shortcuts in Programmen auslösen können (z.B. in VS Code). Diese Aktionen können dann auf die Ebenen 7/8/9 verteilt werden.

Damit kann man beim Programmieren (z.B. in VS Code) eine ganze Reihe von zusätzlichen Befehlen an sehr zentrale Tasten binden.

Feature request: Tastenkombinationen senden

All die nützlichen Tasten in Ebene 4 haben den Vorteil, dass man sie gut erreichen kann, aber auch den Nachteil, dass man immer eine zusätzliche Taste drücken muss (eine der Mod4-Tasten). Das ist zwar kein Problem, wenn man nur BildAuf oder Escape auf Ebene 4 benutzen will. Wenn man aber Strg-Shift-PfeilLinks eingeben will (um das vorherige Wort zu markieren), muss man dafür schon 4 Tasten gleichzeitig drücken.

Deshalb wäre es cool, wenn eine Taste (in einer bestimmten Ebene) eine Kombination (wie Strg-Shift-PfeilLinks) senden könnte. Sowas ist in KMonad (und ich glaube auch in QMK) möglich. In meiner KMonad-Konfiguration nutze ich eine Ebene, über die ich Strg-BildAuf/Ab (=vorheriger/nächster Tab in vielen Programmen), Strg-Tab (=[zeitlich] letzter Tab) oder Strg-Backspace (letztes Wort löschen) senden kann, ohne eine dritte Taste drücken zu müssen.

Diese Funktion wäre insbesondere in Kombination mit #51 sehr nützlich.

Shift-Geklapper auf Ebene 2 und 5 des Nummernblocks

Verhalten: Ich habe Intellij offen, halte Shift gedrückt und rolle auf dem Nummernblock über mehrere Zahlen ab. Das öffnet die Suchleiste statt nur Zeichen einzugeben.

Begründung: Die Suchleiste öffnet sich korrekterweise wenn man zwei mal schnell hintereinander Shift drückt. Eine Windows-Spezialität ist, bei aktiviertem Numlock und gehaltener Shift-Taste Fake Shift Up und Down Events zu senden, bevor man eine Nummerntaste drückt und nachdem man sie loslässt. Siehe https://github.com/Lexikos/AutoHotkey_L/blob/master/source/hook.cpp#L82

Das Up ist mit einem speziellen Scancode als Fake markiert, das Down nicht. Idealerweise sollte gar keins kommen, schließlich halten wir ja die ganze Zeit die Shift-Taste und geben nur Zeichen ein.

Laden von .remove-Modulen bei Compose

Bei Neo lässt sich aus den einzelnen Compose-Modulen ein gemeinsames Modul generieren (die .XCompose). Um Konflikte zu vermeiden (bzw. unerwartete Ergebnisse), können Module auch bereits vorhandene Einträge löschen. Die zu löschenden Zeilen sind in .remove-Dateien enthalten. Näheres zur Umsetzung siehe Neo-Repository#574.

Dies umzusetzen wäre praktisch, da bei ReNeo die gleichen Compose-Module verwendet werden (können), die jedoch interne Überschneidungen besitzen.

Veraltete/Fehlerhafte Version auf neo-layout.org

Hey! Erstmal vielen Dank für ReNeo. Es freut mich sehr, dass Neo wieder ein bisschen Liebe bekommt und bei meinem Umstieg sind direkt einige anstrengende Bugs verschwunden, mit denen ich beim neovars-Treiber immer zu kämpfen hatte.

Allerdings scheint es so, als sei die Version, die auf https://neo-layout.org/Download/ bereitgestellt wird, fehlerhaft oder stark veraltet. (Ich habe nur die ReNeo_Neo-Version getestet.)

Aufgefallen ist es mir anhand der config.json, die bei der Variante, die man auf der Homepage findet, auch direkt so heißt (statt config.default.json). Der Inhalt sieht folgendermaßen aus:

{
    "standaloneLayout": "Neo",
    "standaloneMode": true,
    "sendKeyMode": "fakeNative",
    "osk": {
        "numpad": true,
        "theme": "Grey"
    }
}

zum Vergleich der Inhalt der config.default.json der Github-Version (1.5):

{
    "standaloneLayout": "Neo",
    "standaloneMode": true,
    "filterNeoModifiers": true,
    "autoNumlock": true,
    "osk": {
        "numpad": true,
        "theme": "Grey"
    },
    "hotkeys": {
        "toggleActivation": "Shift+Pause",
        "toggleOSK": null
    }
}

Es scheint aber nicht nur die Configdatei, sondern die Binary der Homepage-Version veraltet zu sein, denn diese Version akzeptiert keine Änderungen der config.json. Ich habe z.B. versucht, dort eine "autoNumlock": false Zeile einzusetzen, aber die Einstellung wird bei Ausführung ignoriert.

`toggleActivation` hotkey schluckt Tasten

Ich habe da jetzt noch nicht wirklich hinterherrecherchiert, was genau das Problem (und der Umfang) ist; aber für meine Konfiguration von Mod3+F5 (well, OEM_102+F5) schluckt ReNeo F5. Auch ohne Mod3 zu drücken kommt kein F5 mehr an.

Probleme mit japanischer IME

Meldung von bored42 aus Neo-IRC:

  1. Das Hin- und Zurückschalten zwischen Bone und JP-Tastatur geht dann nicht korrekt, wenn man im aktivierten Kana-Input etwas getippt hat und danach zurück schaltet:
    Dann ist Ebene 4 (nicht Ebene 3, wie ich gestern fälschlicherweise geschrieben habe) dauerhaft eingerastet und lässt sich auch nicht lösen. Man muss noch einmal auf die JP-Tastatur und zurück wechseln, dann ist wieder Ebene 1 aktiv.
    Das Umschalten funktioniert im Romaji-Modus. Das Problem scheint nur dann aufzutreten, wenn der Kana-Input aktiviert ist. In diesem Modus wird das Tastur-Layout komplett umgebaut, so dass man direkt Kana eingeben kann.
    Der Kana-Input ist standardmäßig nicht aktiviert, und muss zunächst im Kontextmenü der IME aktiviert („Kana-Eingabe“) werden. Danach kann man mit z.B. ALT+^ zwischen QWERTY und Kana hin- und herschalten.
    Die so eingerastete Ebene 4 ist auch nicht vollständig operabel: Die linke Seite (Cursor-Tasten, etc.) reagiert gar nicht mehr – die rechte scheint aber noch zu gehen.
    Der gleiche Effekt tritt auch ohne reneo auf.
  2. Kana-Eingabe funktioniert nicht vollständig:
    Grundsätzlich scheint die Kana-Eingabe nicht vollständig zu funktionieren. Es lässt sich z.B. »ず« nicht eingeben (Tastenfolge »rü« auf einer QWERTZ-beschrifteten Tastatur). Stattdessen kommen, wenn man das »ü« mermals drückt, das »´« Totzeichen. Das »ü« ist auf der Kanatastatur ein »゛« und ebenfalls ein Totzeichen.
    Ohne reneo funktioniert die Kana-Eingabe vollständig.

Die Tests habe ich in notepad++ gemacht.

Mapping basierend aus Scancodes in Konfigurationsdatei

Wenn ReNeo eigenständig das komplette Layout übernehmen soll, ist das Mapping von Virtual Key zu neuer Taste nicht ideal. Sonst wären Nutzer gezwungen, nativ QWERTZ zu benutzen.

Im Zuge dieser Umstellung sollen alle Mappings außerdem in eine Konfigurationsdatei ausgelagert werden. In dieser sollten für jedes Mapping enthalten sein:

  • Name des Layouts
  • Name der nativen DLL (falls existent) für Erweiterungsmodus
  • Zuordnung der Tasten

Dadurch werden auch Layouts wie AdNW, KOY etc. möglich, für die einige Nutzer sowieso ihre eigenen Anpassungen machen wollen.

Weitere Details:

  • Aufpassen, ob das Extended Bit möglicherweise relevant ist, um Tasten richtig zu identifizieren (siehe Nummernblock)
  • Rechtes AltGr ist in Neo ein normales Alt
  • Mod3 und Mod4 sollten auch umkonfigurierbar sein

Backtick auf Neo Z(3) im Standalone-Modus mit fakeNative ist tot

Konfiguration: Standalone-Modus, nativ QWERTZ, fakeNative

Backtick ` auf Neo Z(3) verhält sich wie eine tote Taste. Liegt daran, dass hier die native QWERTZ-Taste gesendet wird, die tot ist. Entweder man markiert diesen Sonderfall irgendwie im Mapping (betrifft evtl auch noch andere Sonderzeichen), oder man versucht herauszufinden, ob eine Taste im nativen Layout tot ist und vermeidet die dann (also sendet stattdessen das Unicode-Symbol).

Update: Betrifft auch Erweiterungsmodus mit fakeNative, da kbdneo eine Tottaste mit dem Zeichen hat

`autoNumlock`-Option wirkungslos

Ich habe autoNumlock auf false gesetzt; ich habe keine Ziffernblock auf der Tastatur, aber meine Maus hat Tasten darauf konfiguriert.

Trotzdem geben die Maustasten mit aktiviertem ReNeo Ziffern (= NumLock an).

Reneo schließt sich nach Eingabe von Zeichen nach Öffnen von cmd.exe, pwsh

SW-Umgebung

  1. W10 Enterprise mit angewandter Gruppenrichtlinie
  2. Systemsprache English, Benutzersprache Deutsch
    Anmerkung: Ich habe es bis jetzt nicht hinbekommen, das US Layout zu deaktivieren. Englisch wird als Systemsprache verwendet und kann daher nicht gelöscht werden; Nur das neo2 Layout ist in Windows Spracheinstellungen eingestellt

Betrifft Versionen
1.5.0, 1.4.6 und evtl. weitere

Auslöser
Verschiedene Einstellungen / Versuche Englisch als Systemsprache zu deaktivieren haben zum ständigen Absturz von reneo geführt.
Zuletzt Anmeldesprache von Englisch auf Deutsch gesetzt
Problem ist: Sobald in pwsh.exe oder Lock-Screen gewechselt wird, ist US Layout eingestellt, daher habe ich versucht, das US Layout zu entfernen, ohne Erfolg. Derzeit liegt eine OS Einstellung vor, die reneo prompt zum Absturz bringt, wenn z.B. in cmd.exe, Jetbrains Tools, pwsh.exe, etc. getippt werden.

Weitere Virtual-Key Codes möglich für hotkeys?

Ich würde gerne meine gewohnten Tastenkürzel auch mit ReNeo benutzen:

    "hotkeys": {
        "toggleActivation": "Shift+Alt+A",
        "toggleOSK": "Ctrl+Alt+Q"
    },

Das scheitert allerdings mit dieser Fehlermeldung: "Beim Starten von ReNeo ist ein Fehler aufgetreten: VKEY does not have a member named 'VK_A'"

Der Text unter Allgemeine Konfiguration beschreibt es sehr genau: "Die Haupttaste ist ein beliebiger VK aus dieser Liste."

Folgendes funktioniert dementsprechend:

        "toggleOSK": "Ctrl+Alt+SPACE"

Ist es möglich, weitere Virtual-Key Codes in Kombination mit den erlaubten Modifiern zu unterstützten?

Ref: #61
Cc: @kaimi

Feature request: Mod-Tap-Tasten

Hallo @Rojetto,

ich hab heute mal ReNeo ausprobiert. Als erstes hab ich natürlich mein persönliches Tastaturlayout hinzugefügt. Das ist zwar recht mühsam (und ich bin auch noch gar nicht fertig damit), aber ich finde es super, dass die layouts.json sehr flexible Konfigurationsmöglichkeiten bietet (d.h. dass man alle Ebenen anpassen kann und auch die Modifier auf andere Tasten legen kann).

Eine Funktion, die ich mir noch wünschen würde, wären Mod-Tap-Tasten wie es sie QMK, KMonad und neo2-llkh gibt. Du hattest geschrieben, dass du sie in neo2-llkh ausprobieren wolltest. Hast du vor, diese Funktion in ReNeo umzusetzen?

In Kombination mit #51 hätte das den Vorteil, dass man somit sehr viele potentielle Modifier-Tasten zur Verfügung hätte.

Strg+Shift+NumPlus Shortcut funktioniert nicht

Gerade entdeckt: in SumatraPDF funktionierte der Shortcut Strg+Shift+NumPlus bzw. Strg+Shift+NumMinus nicht. Wobei es kein Plus oder Minus vom Numpad sein muss: mit dem normalen Minus auf der Strichtaste funktioniert der Shortcut sogar (nicht in der Standalone-Version).

Lag daran, dass nicht der Virtual Key übergeben wurde, sondern das Zeichen direkt. Ich hatte das vor ein paar Wochen zwar gerade zu Char geändert, und jetzt weiß ich auch genau, warum ich das so getan habe: Der Shortcut funktioniert zwar mit dem Virtual Key, aber ein auf Shift+Numpad erzeugtes Zeichen wäre dann z.B. ist statt + (also wie auf E4). Das wiederum liegt nun daran, dass in kbdneo die Ebenen zwei und vier vertauscht sind.

Ich lasse das Issue mal hier, bis mir eine Lösung einfällt (vermutlich die Ebenen in kbdneo selbst richtig setzen).

Windows 10 Eingabeaufforderung: Umlaute u.ä. falsch im Standalone-Modus

In der Windows 10 Eingabeaufforderung (die alte) funktionieren Umlaute und manche andere Sonderzeichen nicht im Standalone-Modus. Scheinbar wird das native Layout falsch erkannt (ähnlich zu #11) und dann falsche native Tastenkombinationen gesendet. Sonderzeichen wie / werden außerdem als Unicode-Paket gesendet, vermutlich auch weil diese als Tastenkombination nicht im nativen Layout gefunden werden.

Weiterer komischer Effekt: Der Shortcut Win+Zahl zum Fensterwechsel geht im Terminal auch nicht, da ReNeo aus irgendeinem Grund ein VK_PACKET statt VK_ZAHL sendet.

Theorie: VkKeyScan liefert aus ähnlichen Gründen wie #11 ein falsches Ergebnis. Stattdessen könnte man VkKeyScanEx mit einem expliziten input locale handle aufrufen, das man in checkKeyboardLayout zwischenspeichert, solange es nicht null ist.

Alternativer Shortcut zum (De)Aktivieren

Besonders Laptop-Tastaturen haben nicht immer eine Pause-Taste. Als alternativer Shortcut könnte zum Beispiel Strg+Alt+F5 ergänzt werden. Alt+F1 und Alt+F2 (auch mit Strg) werden bereits vom Nvidia-Treiber verwendet.

Numlock wird Aktiviert

Wie kann ich verhindern das ReNeo Numloc aktiviert?

Wenn ich das Programm ausführe wird nach dem ersten Tastenanschlag numlock aktiviert, da bei meinem Laptop das numpad auf den Buchstaben liegt, werden an diesen stellen dan Zahlen stat Buchstaben ausgegeben.

ReNeo weiß nichts von Capslock

Wir wissen momentan nicht, welche Tasten eigentlich vom Capslock betroffen sind. Das führt dazu, dass wir im Standalone-Modus bei aktiviertem Capslock nicht die Tasten aus Ebene 2 senden. Außerdem funktionieren CoKos mit Zeichen aus Ebene 2 nicht mit Capslock, sondern nur mit manuellem Shift.

Vorschlag: Für jedes Layout in config.json einen Eintrag capslockableKeys hinzufügen, der eine Liste von Scancodes enthält, die bei Capslock in Ebene 2 schalten sollen. Im Treiber muss das dann entsprechend berücksichtigt werden.

`config.json` zwischen Upgrades nicht zerschießen

Momentan kopiert man beim Upgrade einfach alle Dateien aus der ZIP über sein Installationsverzeichnis. Wenn man nicht manuell merged überschreibt man so seine Einstellungen in config.json.

Im Release sollte deshalb keine config.json mehr enthalten sein, sondern nur eine config.default.json. Führt man dann ReNeo aus, lädt es die existierende config.json (falls bereits vorhanden) und ergänzt fehlende Einträge mit denen aus config.default.json. Dann wird config.json geschrieben, sodass sie ihre alten Einstellungen behält, aber auch die Standardwerte für alle Einstellungen der neuen Version vorhanden sind.

Der Upgrade-Prozess muss in der README dokumentiert werden.

Umlegen Alt+Tasten und andere Backtick Tastenkombinationen

Ich würde gerne EasySwitch und die PowerToys sowie das neuartige Windows Terminal mit ihren backtick: ` standardkeys jeweils normal benutzen.

  • EasySwitch wird normalerweise mit Alt+Scancode: 0x0026: dead_circumflex Taste genutzt.
  • PowerToys bietet eine Übersicht für bestimmte Tastenkombinationen mittels Steuerung+Shift+ Scancode: ``0x000D`: dead_grave.
  • Windows Terminal im »Quake style« öffnen mittels Super+Shift+Scancode: 0x000D: dead_grave.

Für EasySwitch wollte ich als Workaround schon mal die dead_circumflex taste zu einer normalen umlegen, indem ich den keysym und den char jeweils verändert habe, hat leider auch nicht funktioniert. – Da durch den Alt modifier key vermutlich eine andere Taste erzeugt wird.

PowerToys und Windows terminal reagieren mittels reneo nicht.

Vielleicht kann man ja irgendwo wie unter Linux X.org: xmodmap, xbindkeys bestimmte Tastenkombinationen zu einer Taste, wie in diesem Fall eine Backtick-Taste, ummappen?

Grossgeschriebene Umlaute auf de_CH nicht möglich

Mit de_CH kommt bei SHIFT+ü dann ü raus. Mit ö und ä ebenfalls nur kleingeschrieben. Mit de_DE habe ich das nicht und erhalte dort ÜÖÄ.

de_CH SHIFT+ü ohne ReNeo würde ja zu è werden. Und ein Ü wird mit CAPS LOCK und dann ü geschrieben. Ich weiss nicht, wie die Keys mit ReNeo gesendet werden, da ich aber ß senden kann mit de_CH, vermutlich nicht einfach direkt der Keycode (ausser ich verstehe da was falsch). Also sollten wohl auch grosse Umlaute gesendet werden können.

Ich weiss nichtmal, ob de_CH unterstützt sein sollte. Wäre jedenfalls toll :-)

Edit: gleich nach dem Erstellen gemerkt, dass ich mit Mod2 Lock (beide Shift drücken) grosse Umlaute schreiben kann. Aber nur mit SHIFT+Umlaut wäre standard Neo-Verhalten und stört den Schreibfluss nicht so sehr.

Undo/Redo ist nicht implementiert

Auf Ebene 4 ist das Neo-Z mit Undo bzw. Redo (Shift+E4) definiert. Zwar funktioniert Redo auch unter Linux nicht konsistent, aber Undo ließe sich durch Simulation von Strg+Z einbauen.

Layer friert ein beim benutzen der Pfeiltasten oder page up page down

Moin,

Wenn ich die rechte Alt Gr Taste drücke um wie gewohnt den Navigationsblock zu nutzen hängt sich Reneo immer mal wieder auf und die vierte Ebene bleibt eingestellt. Man kann sie danach nicht wieder abgestellen.
Die exe muss dann abgeschossen werden (z.T. mit Taskmanager) und danach muss man z. T. noch mal Alt Gr + NUM LOCK drücken (oder andere Kombinationen, ich weiß es nicht genau) bis sich das verhakte wieder löst.

Gibt es eine Debugoption, welche output generiert, sodass ich euch ein log anhängen kann?

Viele Grüße und danke für eure Arbeit,
David

Programmspezifische Layouts

In manchen Programmen muss man ReNeo für gute Kompatibilität immer deaktivieren, zum Beispiel VcXsrv oder in Spielen. Das soll konfigurierbar automatisch gehen.

Mögliche Faktoren zum Erkennen eines Programms sind der Pfad der Anwendung oder der Fenstertitel (mit Wildcards). Ein Hook für den Fensterwechsel existiert bereits.

Wenn man nicht nur deaktiviert, sondern ein beliebiges Layout einstellen kann, lässt sich so evtl. auch #11 lösen.

Was senden wir für Scancodes und wie funktionieren Sonderzeichen?

Sonderzeichen

Im Erweiterungsmodus senden wir gerade für Sonderzeichen direkt VK_PACKETs. Zur Texteingabe geht das gut, möglicherweise gibt es damit aber nicht 100% Kompatibilität. In Gimp beispielsweise kann ich mit # nicht mehr das Gitter ein- und ausschalten. NeoVars hingegen sendet die QWERTZ-äquivalenten Tastenkombinationen, also z. B. Strg+Alt+Q für @. Die lassen sich auch mit VkKeyScanEx herausbekommen. Damit ist man natürlich darauf angewiesen, dass das native Layout die entsprechenden Zeichen überhaupt hat. Im Erweiterungsmodus machen wir das gerade nicht, weil verschiedene Programme ja die Modifier für die oberen Ebenen falsch verstehen. Im Standalone Modus aufbauend auf QWERTZ könnte man es zumindest für die Zeichen, bei denen es geht, versuchen.

Scancodes

Bisher senden wir immer Scancode 0. Bei VK_PACKETs erübrigt sich das eh, aber was ist mit den normalen Tasten und den Steuertasten auf Ebene 4. Bei 0 bleiben? Den tatsächlichen Scancode der gedrückten Taste senden? Den, der bei QWERTZ käme? Was ist mit Ebene 4 und dem widersprüchlichen Extended Bit für die Navigationstasten? Hier fehlen bisher die Informationen um zu sagen was davon am besten ist.

Was würde NeoVars tun? 🙏

NeoVars sendet die Scancodes der entsprechenden Tasten so wie sie in QWERTZ kämen. Ein „w“ in Neo wird also durch ein VK_W mit Scancode 0x11 manifestiert. Für Sonderzeichen wählt NeoVars auch (wenn möglich) die Tastenkombination, die man in QWERTZ drücken müsste. Das hat jahrelang funktioniert, gerade habe ich festgestellt, dass Sonderzeichen durch Tastenkombinationen zu senden doch nicht ganz optimal ist. Wenn ich mit NeoVars in VS Code // eingebe öffnet sich die Befehlsleiste (die ist auf Doppel-Shift gemappt). Das wollen wir natürlich nicht...

Vorschlag

Wir bieten zwei Optionen, zwischen denen man in config.json umschalten kann:

  1. (Standard) Sonderzeichen werden einfach als VK_PACKET gesendet. Für andere VKs senden wir als Scancode den der tatsächlich gedrückten Taste.
  2. Fake-Qwertz: Wenn möglich senden wir Sonderzeichen als Tastenkombination des aktuellen Layouts (wahrscheinlich QWERTZ), ansonsten als VK_PACKET. Für andere VKs (hauptsächlich Ebene 4) senden wir als Scancode die Taste des „echten“ Layouts, das in Windows ausgewählt ist.

Einhandmodus

Scheinbar besteht doch gelegentlich Bedarf für den Einhandmodus aus NeoVars. Wenn man die Scancode-Spiegelung vor den Rest des Hooks schaltet greift das hoffentlich nicht all zu tief ein.

Potentielle Verbesserungen: Der Modus in NeoVars geht nur rechts einhändig (Spiegelung in die andere Richtung ist aber schwer, wegen ß und y. Man könnte y auf Capslock legen und ß auf Tab). Außerdem funktioniert das beidhändige Tippen schlecht, weil ständig Leertasten geschluckt werden, solange noch nicht alle Buchstaben losgelassen wurden (wobei man da auch einfach den Modus deaktivieren kann, falls das technische Gründe hat).

Was passiert im Erweiterungsmodus? Wäre sinnvoll, wenn dort dann automatisch der Standalone mit dem entsprechenden Layout angeht.

Erweiterung zur Standalone-Version (wie NeoVars)

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.

Ebenen 2 und 5 auf dem Numpad erfordern manuelle Anpassungen

Die Ebenen 2 und 5 (also die mit Nutzung der Shift-Taste) funktionieren auf dem Numpad nicht wie definiert. Stattdessen greift eine (hartkodierte) Variante im Tastaturtreiber, die bei gedrücktem Shift die Navigationsebene auf dem Numblock aktivert (Pos1, Bild↑↓ usw.). Dies betrifft die Tasten Num0–9 und das Num-Komma.

Eventuell kann man sich beim kbdneo-Zusatzskript anschauen, wie die Zeichen auf dem Ziffernblock abgefangen und durch die richtigen ersetzt wurden.

Capslock im Standalone-Modus mit fakeNative verhält sich für manche Sonderzeichen falsch

Beobachtung: Standalone-Modus, nativ QWERTZ, fakeNative. Aktiviere Capslock und drücke dann »ß«. Man erhält ein »\«.

Begründung: ReNeo will ein großes »ẞ« senden und kennt dafür die Tastenkombo Shift+Strg+Alt+ß (von VkKeyScan). Außerdem wissen wir, das Capslock gerade aktiv ist. Deshalb denkt ReNeo, dass kein Shift mehr gesendet werden muss (so ist es zum Beispiel beim »!«). Falsch gedacht! Ob eine Taste von Capslock beeinflusst wird legt das native Layout pro Taste fest. Auf eine ähnliche Art und Weise geht mit Capslock auch »-« schief. Wir wollen eigentlich das Zeichen unverändert, stattdessen kommt »_«.

Lösung: Tja. Variante 1 ist, man kitzelt aus dem nativen Layout heraus, welche Tasten von Capslock beeinflusst werden oder nicht. Keine Ahnung ob das geht. Variante 2 wäre, also natives Layout nur QWERTZ zuzulassen und dafür manuell diese Informationen zu hinterlegen. Oder es gibt eine schlauere Variante 3, auf die ich gerade nicht komme.

Numpad geht nicht in WinUI Anwendungen (Win 10)

Ursprünglich aufgetreten in Taschenrechner App

Eingabe von Zahlen auf dem Numpad (Normal und Ebene 4) hat keine Wirkung. Rechenzeichen gehen.

Mit NeoVars geht es. Sowohl NeoVars als auch ReNeo senden VK_NUMPAD1 und Scancode 4F ohne Extended Bit.

Grund: Mit NeoVars ist Numlock an, wir schalten es hingegen immer aus. Die Taschenrechner-App scheint selber den Numlock-Status zu prüfen. Einfach Numlock einschalten ist aber auch doof wegen #15. Evtl kann man Numlock einschalten, bevor man eine Ebene 1 Numpad Taste sendet, und es danach wieder ausschalten.

Update

Scheint in mehreren WinUI-Anwendungen aufzutreten. In Mail und Fotos bewegt der Nummernblock den Cursor.

Tabulator Ebene 4

Auf Ebene 4 funktioniert zwar die Tabulatortaste auf dem ö der Ebene 1 (im Gegensatz zur AHK-Erweiterung), jedoch nicht die auf der Taste 8.
Vielen Dank für Ihr großartiges Projekt.

Verhalten mit WSL und VcXsrv testen

Scheint Probleme mit höheren Ebenen zu geben, die ReNeo abfängt. Der Layout-Kram wird eigl vollständig von Linux übernommen, solange alle Keyevents durchgelassen werden. Dazu muss auf Linux-Seite setxkbmap de neo ausgeführt werden und in Windows QWERTZ eingestellt sein, mit ReNeo deaktiviert.

manche mathematische Zeichen werden nicht angezeigt

Umgebung:
Reneo 1.5
Windows 11 (21H2)
ReNeo_Neo
standaloneMode: false (mit Treiber)

Reproduktion des Fehlers:
Drücken von M4+M3+o bzw. M4+M3+s
Erwartet: Anzeige Element-von-Zeichen und Summenzeichen
Ergebnis: es wird nichts angezeigt.
Ausprobiert in Word, Outlook, Notepad, Notepad++, Opera Browser
Dito für Omega (E6:w), Kreuzprodukt (E6:k), Verkettungszeichen (E6:ß) und Nabla (E6:y)

Was kann ich tun, um mehr Informationen für die Fehlerbehebung beizusteuern?

Feature Request: Versionsnummer anzeigen/verwalten

Für die Angabe von Bugs wäre es sinnvoll, wenn man herausfinden kann, welche Version von reneo man gerade nutzt. Eine Anzeige in der GUI selbst wäre natürlich ganz nett, aber eine Erwähnung im Readme oder einer eigenen Datei, oder vielleicht eine Commit-ID würden bestimmt auch ausreichen.

Localization into English

There should be a configuration option to switch the program between German and English. Necessary translations include the tray menu, all error messages, as well as the readme file.

Einige Keysym werden noch nicht aus `keysymdef.h` eingelesen

RegEx muss unter anderem für folgende Fälle angepasst werden:

#define XK_containsas                 0x100220B  /* U+220B CONTAINS AS MEMBER */
#define XK_braille_dots_24            0x100280a  /* U+280a BRAILLE PATTERN DOTS-24 */
#define XK_Sinh_oo2           0x1000ddd  /* U+0DDD SINHALA KOMBUVA HAA DIGA AELA-PILLA*/

Smartere Modifier für `fakeNative`

Bei Sonderzeichen, die nativ durch Shift/Strg/Alt erzeugt werden, wird gerade nicht zwischen gleichzeitigen Anschlägen (oder sehr schnell aufeinanderfolgenden Anschlägen ohne zwischendurch loszulassen) mehrerer Tasten abgestimmt. Dazu kommen die "echten" Tastendrücke von Shift/Strg/Alt, die auch nicht (oder bei Shift teilweise) berücksichtigt werden. Die resultierende Abfolge von Keyevents kann daher unrealistisch sein, oder zu verhakten Tasten führen.

»²³« in schneller Abfolge zum Beispiel kann für Strg und Alt die Events down down up up bewirken. Wenn man physisch außerdem Strg hält sind alle diese Events überflüssig (und im Falle von up lassen sie Strg frühzeitig los).

Weiteres Beispiel: »/\« in schneller Abfolge wird zu »/ẞ«

Idee: Ein System ähnlich zum aktuellen heldKeys Konstrukt. Dabei merkt man sich für jeden Modifier, von welchem aktuell gehaltenen char dieser benötigt wird. Nur wenn der Modifier gerade dementsprechend nicht virtuell gedrückt wird, sendet man dann das down Event. Genauso lässt man den Modifier virtuell erst los, wenn der letzte damit verknüpfte char losgelassen wurde. Die physischen Tastenzustände der Modifier müssen ebenfalls einbezogen werden.

Gefahren: Damit schafft man eventuell weiteres Verhakungspotential, insbesondere beim Layout-Wechsel. Vielleicht sollte eine Art Failsafe her (sowas wie „Wenn keine Tasten gedrückt, dann definitiv alle Zustände zurücksetzen“).

Blacklist um native Layouts erweitern

Momentan kann man über die Blacklist Fenster definieren, in denen ReNeo sich automatisch deaktivieren soll. Über den gleichen Modus sollten jetzt auch native Layouts gelistet werden können, bei denen dann kein Neo-Layout aufgeprägt wird. Beispielanwendung ist aktiver Standalone-Modus, aber bei japanischem Layout in Windows soll der Hook ausgehen.

Als Grundlage für das eindeutige Zuordnen von Layouts bieten sich Keyboard IDs an. Diese Liste soll auch in der Readme verlinkt werden.

Bildschirmtastatur à la NeoVars

Als vollwertige Alternative zu NeoVars braucht ReNeo eine Bildschirmtastur, insbesondere für die oberen Ebenen. Für die ersten Wochen der Nutzung hilft diese, Neulernern den Übergang zu erleichtern.

Bisher hat ReNeo keinerlei GUI, hier müsste also zuerst entschieden werden, wie diese umgesetzt werden kann. Eine potentielle Verbesserung gegenüber NeoVars wäre korrekte DPI-Skalierung. In NeoVars muss die manuell umgeschaltet werden damit Windows das übernimmt, dann ist die Tastatur aber pixelig. Die allerwenigsten GUI-Frameworks gehen momentan korrekt damit um.

Eine potentielle GUI-Bibliothek sollte möglichst schmal sein (also das Gegenteil von Qt). Außerdem fände ich es eine schöne Gelegenheit, den Immediate-Mode-GUI-Ansatz auszuprobieren, zum Beispiel mit Nuklear.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.