Changeset 1685

Show
Ignore:
Timestamp:
02/23/09 03:19:39 (4 years ago)
Author:
dennis
Message:

Inhalt ins Wiki verschoben.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • windows/neo-vars/Readme.txt

    r1289 r1685  
    22======== 
    33 
    4 NEO-vars ist die nunmehr zweite Implementierung des NEO-Tastaturlayouts 
    5 in der Programmiersprache AutoHotKey (auch AHK), www.autohotkey.com. 
    6 Statt mit langen if-then-else-Bäumen auf getrennten Key-Hooks 
    7 arbeitet neo-vars mit einem globalen, für (fast) alle Tasten 
    8 durchlaufenen Key-Hook (keyhooks.ahk), der nicht nur für key-press 
    9 sondern auch für key-release (up) verwendet wird. 
     4Die Gebrauchsanweisung für normale Nutzer findet sich hier: 
     5https://wiki.neo-layout.org/wiki/Neo%20unter%20Windows%20einrichten/NeoVars 
    106 
    11 Der Key-Hook durchläuft die Funktion AllStar (varsfunctions.ahk), in 
    12 der der Name der gedrückten Taste (PhysKey, dann ActKey) um die 
    13 aktuelle Ebenennummer erweitert wird und das Ergebnis als Variable 
    14 abgefragt wird. Diese Variable (gespeichert in char) sagt nun, was 
    15 sich hinter dem Tastendruck für ein Zeichen (z.B. „U0041“ für ein 
    16 großes A) oder auch Sonderzeichen (z.B. „SComp“ für Compose), oder 
    17 auch Unterprogrammaufruf (z.B. „P_EHt“ für das Umschalten des 
    18 Einhand-Modus) verbirgt. Dieser „Lookup“, den man in „besseren“ 
    19 Programmiersprachen mit assoziativen Hash-Arrays implementiert, wird 
    20 in AHK über dynamische Variablenabfragen gemacht, wobei diese Variablen 
    21 vorher definiert wurden. 
     7Hinweise für Entwickler: 
     8https://wiki.neo-layout.org/wiki/Treiber-Know-How/NeoVars 
    229 
    23 Variablen werden aber nicht nur für die Zuweisung Ebene+Taste=Zeichen 
    24 (keydefinitions.ahk) verwendet, sondern auch für Shortcuts 
    25 (shortcuts.ahk), die später dazu dienen, aus abstrakten Zeichen 
    26 wieder von Programmen verwendbare Tastendrücke zu machen: Aus 
    27 „SHome“ wird beispielsweise über »send« wieder „{Home down}“ für den 
    28 Tastendruck und „{Home up}“ für das Loslassen. Auch für Buchstaben 
    29 und Sonderzeichen wird diese Methode verwendet, um größtmögliche 
    30 Kompatibilität mit normalen Programmen zu gewährleisten. Alles, 
    31 wofür es keine Shortcuts gibt, wird als unicode-Zeichen an die 
    32 Applikation geschickt. Ein paar wenige Zeichen können nicht oder nur 
    33 schwer durch getrennte Down-Up-Sequenzen umgesetzt werden; an diesen 
    34 Stellen wird auf den getrennten Key-Release verzichtet und das 
    35 Zeichen bzw. eine dafür notwendige Zeichenfolge über das gute alte 
    36 »send« geschickt. 
    37  
    38 Zweiter wichtiger und auch für den Benutzer spürbarer Unterschied 
    39 zum alten AHK-Skript ist die Unterstützung von Key-Press und 
    40 -Release (down- und up-events), wodurch z.B. manche Programme erst 
    41 benützbar werden wie z.B. Spiele, die die Dauer messen, für die eine 
    42 Taste niedergedrückt ist. Dafür muss sich das Skript aber für jede 
    43 Taste merken, was es bei einem späteren Release für ein Zeichen 
    44 schicken muss, damit keine Taste „hängen“ bleibt. Auch diese 
    45 Informationen werden in Variablen gespeichert, deren Namen mit dem 
    46 Scancode/Virtualcode der Taste zusammenhängen. 
    47  
    48 Ähnlich werden Compose-Sequenzen unterstützt: Ist eine Variable 
    49 definiert, die darauf hinweist, dass die bisherige Sequenz ein 
    50 Compositum ist, wird dieses dargestellt. Ist eine andere Variable 
    51 definiert, die sagt, dass bis zu einem fertigen Compositum noch mehr 
    52 Zeichen kommen können, wird das aktuelle Zeichen nicht ausgegeben 
    53 und stattdessen dem Compositum angehängt. Die dafür nötigen 
    54 Variablen werden von einem Extra-Skript aus den definierten 
    55 Compose-Sequenzen erstellt und als AHK-Code abgespeichert 
    56 (compose.generated.ahk). Hier ist von Vorteil, dass AHK fast beliebig 
    57 lange Variablennamen unterstützt. 
    58  
    59 Mit der Verwendung von Unterprogrammen, sowohl beim Drücken von 
    60 Tasten, als auch bei Composita, eröffnen sich interessante 
    61 Möglichkeiten, die z.T. noch garnicht ausgeschöpft sind. Ein paar 
    62 Schmankerln sind aber jetzt schon eingebaut, wofür aber z.T. 
    63 auch Hooks bemüht werden müssen. 
    64  
    65 Erst diese Key-Hooks an mehreren Stellen machen Spezial-Modi 
    66 möglich: Es gibt einen Physical-Key-Hook, der z.B. für die 
    67 Implementierung des einhand-Neo verwendet wird (einhandneo.ahk). Er 
    68 kann unter entsprechenden Nebenbedingungen, wie hier dem 
    69 Gedrückthalten der Space-Taste, Tastencodes austauschen. Ein weiterer 
    70 Key-Hook ermöglicht das Abfangen sämtlicher Tastendrücke für z.B. 
    71 einen Römische-Zahlen-Modus (tools.ahk), um den gewohnten Ablauf zu 
    72 ändern, um also hier die gedrückten Ziffern als Dezimalzahl zu 
    73 interpretieren und in die für sie nötigen römischen 
    74 Zahlen-Buchstaben umzuwandeln. Ähnlich funktioniert auch der 
    75 generische Unicode-Zeichengenerator über ♫uu. 
    76  
    77 Eine weitere Stelle für Hooks ist die Ausgabefunktion, die derzeit 
    78 für das Decodieren von Unicode-Zeichen verwendet wird: ♫dd und dann 
    79 ein Zeichen eingeben, das auch über ein Compositum entstanden sein 
    80 kann, und ein kleiner ToolTip gibt den entsprechenden 
    81 Unicode-Codepoint aus (tools.ahk). 
    82  
    83 Die Bildschirmtastatur (M3+F1) reagiert nunmehr dynamisch auf die 
    84 verschiedenen aktivierten Ebenen, d.h. mit dem Drücken eines 
    85 Modifiers wird automatisch die entsprechende Ebene angezeigt, ohne 
    86 dass man diese manuell wählen müsste. Im CapsLock-Modus funktioniert 
    87 das noch nicht richtig, da sich dort Buchstaben und Sonderzeichen 
    88 unterschiedlich verhalten und wir dafür noch zwei zusätzliche PNG- 
    89 Dateien brauchen. Abgesehen davon gibt es Überlegungen, die 
    90 Bildschirmtastatur komplett dynamisch zu machen, das heißt, dass man 
    91 auch die zu erwartenden Compose-Sequenzen sehen kann. Wenn man also 
    92 das tote Hochkomma ́ tippt, würde die Bildschirmtastatur für die 
    93 solcherart unterstützten Tasten die Buchstaben mit Apostroph 
    94 darstellen. Ob das aber so einfach geht, ist nicht ganz klar: 
    95 Erstens muss die Ausgabe ausreichend gut ausschauen, zweitens muss 
    96 die Existenz eines dafür ausgelegten Unicode-Fonts sichergestellt 
    97 sein, und schließlich muss man die entsprechenden Windows-Funktionen 
    98 umständlich über DLL-Calls aufrufen, um die AHK-Beschränkung auf die 
    99 System-Codepage zu überwinden. Ob diese Funktion dann auch die 
    100 benötigte Performance hat, müsste sich erst weisen. 
    101  
    102 Das AHK-Skript (leider nicht das EXE) bindet jetzt eine eventuell 
    103 bestehende individuelle Datei aus dem NEO2-Applikationsverzeichnis 
    104 ein (custom.ahk). Überhaupt sind die Spezialmodi wie EinHand-Neo, 
    105 Lernmodus und Lang-s-Tastatur in eigene „Module“ ausgelagert worden, 
    106 die den restlichen Code überhaupt nicht mehr tangieren. Das bedeutet 
    107 einerseits, dass man sie einfacher warten kann, andererseits auch, 
    108 dass sie durch diese leicht zu durchschauende Kapselung als Vorlage 
    109 für individuelle Erweiterungen zur Verfügung stehen. So wäre 
    110 denkbar, dass man auch die normale Belegung in ein Modul packt, das 
    111 dann recht einfach und unabhängig vom restlichen Code gewartet 
    112 werden kann. Auch die etwas eingeschlafene Diskussion über die 
    113 Tastenbelegung von NEO3 kann über diesen übersichtlichen Mechanismus 
    114 schnell wieder aufgenommen werden. 
    115  
    116 Auf kurze Sicht steht eine automatische Tasten-Layout-Generierung 
    117 auf dem Plan, mit der man über einen Klick die aktuelle 
    118 Tastenbelegung aus der Referenz erzeugen kann. Zuvor sollte ein 
    119 vernünftiges Dateiformat für die Referenz gefunden werden, dann kann 
    120 mit der Erstellung des Konverters begonnen werden. 
    121  
    122 Last, but not least gehört für die vielen Konfigurationsoptionen ein 
    123 entsprechender Dialog her. Der Kapselung wegen könnten die einzelnen 
    124 Module hier separate Dialogboxen oder Tabs erhalten. 
    125  
    126 Übrigens stellt neo-vars seine Informationen (z.B. über die 
    127 Aktivierung des Mod4-Lock) über Tray-Tips dar, die mitunter im 
    128 Explorer oder über die Registry aktiviert werden müssen. Diese 
    129 Einstellung zu ändern, wäre auch ein heißer Kandidat für die 
    130 Config-Dialoge. 
    131  
    132 Nur ein kleiner Teil des Codes wurde vom alten Neo-AHK übernommen, 
    133 darunter die kaum benutzten Keyboard-LEDs und die stark angepassten 
    134 Unicode-Zeichenausgaben und Ebenenfunktionen. Mittlerweile werden 
    135 sogar die Modifier über die normalen Keyboard-Hooks geleitet, 
    136 wodurch man im Prinzip auch diese Zeichen generisch umlegen kann. 
    137 Einen Strich durch die Rechnung macht uns AHK mit einer recht 
    138 unflexiblen Handhabung der Alt-Taste, die zwar ge-hookt aber nicht 
    139 so einfach gesendet werden kann (AHK sendet bona fide automatisch 
    140 Key-release-Events und simuliert Strg-Tastendrücke). Strg, Win und 
    141 Konsorten wären hingegen kein Problem. 
    142  
    143 Wir hatten recht lang ein generelles Performance-Problem, das zur 
    144 Folge hatte, dass hie und da ein Zeichen nicht vom AHK-Skript 
    145 verarbeitet wurde und stattdessen direkt zur Applikation weiter 
    146 gereicht wurde. Dieses Problem ist offenbar auf AHK und dessen 
    147 Funktion SendInput in seiner derzeitigen Version zurückzuführen. Mit 
    148 SendEvent (bzw. »SendMode Event« am Beginn des Skripts) haben wir 
    149 aber keine Probleme mehr, weshalb neo-vars nun auch die offizielle 
    150 AHK-Version ist. 
    151