Rojetto / ReNeo

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

Umlegen Alt+Tasten und andere Backtick Tastenkombinationen #69

Closed vansoest closed 1 year ago

vansoest commented 3 years ago

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

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?

Rojetto commented 3 years ago

Habe ein bisschen herumprobiert mit folgenden Ergebnissen:

Zuallererst wollte ich die angesprochenen Programme in "Reinstform" ausprobieren, d. h. ohne ReNeo, mit US-Layout.

Ein kleiner Einschub zur Nomenklatur: Unter Scancode verstehe ich die Tastencodes, die der physischen Position auf der Tastatur entsprechen, siehe hier. Programme nutzen die meistens nicht, Hotkeys werden fast immer auf Basis des Virtual-Key Codes definiert (in ReNeo mit vk abgekürzt).

Der Backtick ` auf der US-Tastatur entspricht dann VK_OEM_3, im QWERTZ-Layout ist der gleiche VK mit dem Buchstaben ö belegt. Der Slash / auf der US-Tastatur enspricht VK_OEM_2, im QWERTZ-Layout ist das die Raute #.

Im Standalone-Modus drückt ReNeo bei Sonderzeichen unter der Haube die entsprechende Taste des nativen Layouts (vermutlich QWERTZ). Heißt konkret für ReNeo-Standalone+nativ QWERTZ: Wenn das Terminal einen Backtick will, musst du Win+ö drücken ("ö" im Neo-Layout). Die Tastenübersicht der PowerToys bekomme ich so leider nicht auf, da das Raute-Symbol auf Ebene 3 liegt, zusammen mit Shift landet man aber auf Ebene 5.

Du kannst dir aber in der layouts.json an eine passende Stelle (persönliche Präferenz) ein Mapping für den VK_OEM_2 und VK_OEM_3 legen. Wichtig dabei ist, als keysym auf keinen Fall dead_irgendwas einzustellen, da die Taste dann vom ReNeo-Compose-Modul geschluckt wird. Am besten stattdessen "keysym": "VoidSymbol" einstellen.

Hoffe das hilft mehr als es verwirrt, bei dem Zusammenspiel von Tasten, Layouts und Tastencodes kann man leicht durcheinander kommen 😃

vansoest commented 3 years ago

Vielen Dank für die schnelle Antwort und Hilfe!

Ein kleiner Einschub zur Nomenklatur: Unter Scancode verstehe ich die Tastencodes, die der physischen Position auf der Tastatur entsprechen

Jo genau, deswegen hab ich die da zusätzlich hingeschrieben, weil das manchmal total verwirrend sein kann und scancodes eindeutiger die Taste beschreiben.

EasySwitch funktioniert schon mal und das composing funktioniert auf der Taste auch noch:

"29": [{"keysym": "VoidSymbol", "vk": "VK_OEM_5", "char": "^", "label": "\u02c6"},   {"keysym": "dead_caron", "char": "\u02c7"},                     {"keysym": "U21BB", "char": "\u21bb"},                      {"keysym": "dead_abovedot", "char": "\u02d9"},                  {"keysym": "U02DE", "char": "\u02de"},                              {"keysym": "dead_belowdot", "char": "."}],

Und der QuakeMode umgemappt jetzt auch:

"actions": [
        {
            "command": {
                "action": "quakeMode"
            },
            "keys": "win+^"
        }
],
Rojetto commented 3 years ago

Sehr schön! Eine Anmerkung zu der Anpassung in layouts.json: du solltest entweder vk oder char definieren, aber nicht beides. Im ersten Fall sendet ReNeo direkt diesen VK, im zweiten wird im nativen Layout nachgeschaut, mit welchem VK (oder welcher Tastenkombination) das gewünschte Zeichen erzeugt werden kann und dann das gesendet. Heißt hier also einfach "char": "^" weglassen.

Wenn die PowerToys wie gewünscht laufen, kannst du dich ja nochmal melden.

Edit: Ach ja, wenn die Tastenkombination Shift enthält, musst du außerdem aufpassen, dass du im Layout den VK auch auf der zweiten Ebene definierst.

qwertfisch commented 3 years ago

Eine Anmerkung zu der Anpassung in layouts.json: du solltest entweder vk oder char definieren, aber nicht beides.

Wenn vk definiert ist, wird die Definition bei char aber ignoriert, sehe ich das richtig? (mapping.d Zeile 330ff.)

Und wenn man weder vk noch char setzt, legt man die Taste auch still … hm, kann ja so gewollt sein. Sehe ich nicht als Fehler im Ablauf.

Rojetto commented 3 years ago

Mit der aktuellen Implementierung funktioniert es schon, da hast du Recht. Beides zu spezifizieren macht meiner Meinung nach aber keinen Sinn; vielleicht komme ich irgendwann auch auf die blöde Idee, da einen Fehler zu schmeißen. Also lieber nur eins eintragen :)