summaryrefslogtreecommitdiffstats
path: root/windows
diff options
context:
space:
mode:
authordennis <dennis@b9310e46-f624-0410-8ea1-cfbb3a30dc96>2009-02-23 02:19:39 +0000
committerdennis <dennis@b9310e46-f624-0410-8ea1-cfbb3a30dc96>2009-02-23 02:19:39 +0000
commit7241b7eba75de7340ba83e39465b5f18e0920067 (patch)
tree68f0b5d786c8d13271499f0bf0a8a5bc4facc271 /windows
parent01418969fe211ec34b9ada2ea9efe49dea88eee7 (diff)
Inhalt ins Wiki verschoben.
git-svn-id: https://svn.neo-layout.org@1685 b9310e46-f624-0410-8ea1-cfbb3a30dc96
Diffstat (limited to 'windows')
-rw-r--r--windows/neo-vars/Readme.txt150
1 files changed, 4 insertions, 146 deletions
diff --git a/windows/neo-vars/Readme.txt b/windows/neo-vars/Readme.txt
index 778e96d..3c52c17 100644
--- a/windows/neo-vars/Readme.txt
+++ b/windows/neo-vars/Readme.txt
@@ -1,151 +1,9 @@
NEO-vars
========
-NEO-vars ist die nunmehr zweite Implementierung des NEO-Tastaturlayouts
-in der Programmiersprache AutoHotKey (auch AHK), www.autohotkey.com.
-Statt mit langen if-then-else-Bäumen auf getrennten Key-Hooks
-arbeitet neo-vars mit einem globalen, für (fast) alle Tasten
-durchlaufenen Key-Hook (keyhooks.ahk), der nicht nur für key-press
-sondern auch für key-release (up) verwendet wird.
+Die Gebrauchsanweisung für normale Nutzer findet sich hier:
+https://wiki.neo-layout.org/wiki/Neo%20unter%20Windows%20einrichten/NeoVars
-Der Key-Hook durchläuft die Funktion AllStar (varsfunctions.ahk), in
-der der Name der gedrückten Taste (PhysKey, dann ActKey) um die
-aktuelle Ebenennummer erweitert wird und das Ergebnis als Variable
-abgefragt wird. Diese Variable (gespeichert in char) sagt nun, was
-sich hinter dem Tastendruck für ein Zeichen (z.B. „U0041“ für ein
-großes A) oder auch Sonderzeichen (z.B. „SComp“ für Compose), oder
-auch Unterprogrammaufruf (z.B. „P_EHt“ für das Umschalten des
-Einhand-Modus) verbirgt. Dieser „Lookup“, den man in „besseren“
-Programmiersprachen mit assoziativen Hash-Arrays implementiert, wird
-in AHK über dynamische Variablenabfragen gemacht, wobei diese Variablen
-vorher definiert wurden.
-
-Variablen werden aber nicht nur für die Zuweisung Ebene+Taste=Zeichen
-(keydefinitions.ahk) verwendet, sondern auch für Shortcuts
-(shortcuts.ahk), die später dazu dienen, aus abstrakten Zeichen
-wieder von Programmen verwendbare Tastendrücke zu machen: Aus
-„SHome“ wird beispielsweise über »send« wieder „{Home down}“ für den
-Tastendruck und „{Home up}“ für das Loslassen. Auch für Buchstaben
-und Sonderzeichen wird diese Methode verwendet, um größtmögliche
-Kompatibilität mit normalen Programmen zu gewährleisten. Alles,
-wofür es keine Shortcuts gibt, wird als unicode-Zeichen an die
-Applikation geschickt. Ein paar wenige Zeichen können nicht oder nur
-schwer durch getrennte Down-Up-Sequenzen umgesetzt werden; an diesen
-Stellen wird auf den getrennten Key-Release verzichtet und das
-Zeichen bzw. eine dafür notwendige Zeichenfolge über das gute alte
-»send« geschickt.
-
-Zweiter wichtiger und auch für den Benutzer spürbarer Unterschied
-zum alten AHK-Skript ist die Unterstützung von Key-Press und
--Release (down- und up-events), wodurch z.B. manche Programme erst
-benützbar werden wie z.B. Spiele, die die Dauer messen, für die eine
-Taste niedergedrückt ist. Dafür muss sich das Skript aber für jede
-Taste merken, was es bei einem späteren Release für ein Zeichen
-schicken muss, damit keine Taste „hängen“ bleibt. Auch diese
-Informationen werden in Variablen gespeichert, deren Namen mit dem
-Scancode/Virtualcode der Taste zusammenhängen.
-
-Ähnlich werden Compose-Sequenzen unterstützt: Ist eine Variable
-definiert, die darauf hinweist, dass die bisherige Sequenz ein
-Compositum ist, wird dieses dargestellt. Ist eine andere Variable
-definiert, die sagt, dass bis zu einem fertigen Compositum noch mehr
-Zeichen kommen können, wird das aktuelle Zeichen nicht ausgegeben
-und stattdessen dem Compositum angehängt. Die dafür nötigen
-Variablen werden von einem Extra-Skript aus den definierten
-Compose-Sequenzen erstellt und als AHK-Code abgespeichert
-(compose.generated.ahk). Hier ist von Vorteil, dass AHK fast beliebig
-lange Variablennamen unterstützt.
-
-Mit der Verwendung von Unterprogrammen, sowohl beim Drücken von
-Tasten, als auch bei Composita, eröffnen sich interessante
-Möglichkeiten, die z.T. noch garnicht ausgeschöpft sind. Ein paar
-Schmankerln sind aber jetzt schon eingebaut, wofür aber z.T.
-auch Hooks bemüht werden müssen.
-
-Erst diese Key-Hooks an mehreren Stellen machen Spezial-Modi
-möglich: Es gibt einen Physical-Key-Hook, der z.B. für die
-Implementierung des einhand-Neo verwendet wird (einhandneo.ahk). Er
-kann unter entsprechenden Nebenbedingungen, wie hier dem
-Gedrückthalten der Space-Taste, Tastencodes austauschen. Ein weiterer
-Key-Hook ermöglicht das Abfangen sämtlicher Tastendrücke für z.B.
-einen Römische-Zahlen-Modus (tools.ahk), um den gewohnten Ablauf zu
-ändern, um also hier die gedrückten Ziffern als Dezimalzahl zu
-interpretieren und in die für sie nötigen römischen
-Zahlen-Buchstaben umzuwandeln. Ähnlich funktioniert auch der
-generische Unicode-Zeichengenerator über ♫uu.
-
-Eine weitere Stelle für Hooks ist die Ausgabefunktion, die derzeit
-für das Decodieren von Unicode-Zeichen verwendet wird: ♫dd und dann
-ein Zeichen eingeben, das auch über ein Compositum entstanden sein
-kann, und ein kleiner ToolTip gibt den entsprechenden
-Unicode-Codepoint aus (tools.ahk).
-
-Die Bildschirmtastatur (M3+F1) reagiert nunmehr dynamisch auf die
-verschiedenen aktivierten Ebenen, d.h. mit dem Drücken eines
-Modifiers wird automatisch die entsprechende Ebene angezeigt, ohne
-dass man diese manuell wählen müsste. Im CapsLock-Modus funktioniert
-das noch nicht richtig, da sich dort Buchstaben und Sonderzeichen
-unterschiedlich verhalten und wir dafür noch zwei zusätzliche PNG-
-Dateien brauchen. Abgesehen davon gibt es Überlegungen, die
-Bildschirmtastatur komplett dynamisch zu machen, das heißt, dass man
-auch die zu erwartenden Compose-Sequenzen sehen kann. Wenn man also
-das tote Hochkomma ́ tippt, würde die Bildschirmtastatur für die
-solcherart unterstützten Tasten die Buchstaben mit Apostroph
-darstellen. Ob das aber so einfach geht, ist nicht ganz klar:
-Erstens muss die Ausgabe ausreichend gut ausschauen, zweitens muss
-die Existenz eines dafür ausgelegten Unicode-Fonts sichergestellt
-sein, und schließlich muss man die entsprechenden Windows-Funktionen
-umständlich über DLL-Calls aufrufen, um die AHK-Beschränkung auf die
-System-Codepage zu überwinden. Ob diese Funktion dann auch die
-benötigte Performance hat, müsste sich erst weisen.
-
-Das AHK-Skript (leider nicht das EXE) bindet jetzt eine eventuell
-bestehende individuelle Datei aus dem NEO2-Applikationsverzeichnis
-ein (custom.ahk). Überhaupt sind die Spezialmodi wie EinHand-Neo,
-Lernmodus und Lang-s-Tastatur in eigene „Module“ ausgelagert worden,
-die den restlichen Code überhaupt nicht mehr tangieren. Das bedeutet
-einerseits, dass man sie einfacher warten kann, andererseits auch,
-dass sie durch diese leicht zu durchschauende Kapselung als Vorlage
-für individuelle Erweiterungen zur Verfügung stehen. So wäre
-denkbar, dass man auch die normale Belegung in ein Modul packt, das
-dann recht einfach und unabhängig vom restlichen Code gewartet
-werden kann. Auch die etwas eingeschlafene Diskussion über die
-Tastenbelegung von NEO3 kann über diesen übersichtlichen Mechanismus
-schnell wieder aufgenommen werden.
-
-Auf kurze Sicht steht eine automatische Tasten-Layout-Generierung
-auf dem Plan, mit der man über einen Klick die aktuelle
-Tastenbelegung aus der Referenz erzeugen kann. Zuvor sollte ein
-vernünftiges Dateiformat für die Referenz gefunden werden, dann kann
-mit der Erstellung des Konverters begonnen werden.
-
-Last, but not least gehört für die vielen Konfigurationsoptionen ein
-entsprechender Dialog her. Der Kapselung wegen könnten die einzelnen
-Module hier separate Dialogboxen oder Tabs erhalten.
-
-Übrigens stellt neo-vars seine Informationen (z.B. über die
-Aktivierung des Mod4-Lock) über Tray-Tips dar, die mitunter im
-Explorer oder über die Registry aktiviert werden müssen. Diese
-Einstellung zu ändern, wäre auch ein heißer Kandidat für die
-Config-Dialoge.
-
-Nur ein kleiner Teil des Codes wurde vom alten Neo-AHK übernommen,
-darunter die kaum benutzten Keyboard-LEDs und die stark angepassten
-Unicode-Zeichenausgaben und Ebenenfunktionen. Mittlerweile werden
-sogar die Modifier über die normalen Keyboard-Hooks geleitet,
-wodurch man im Prinzip auch diese Zeichen generisch umlegen kann.
-Einen Strich durch die Rechnung macht uns AHK mit einer recht
-unflexiblen Handhabung der Alt-Taste, die zwar ge-hookt aber nicht
-so einfach gesendet werden kann (AHK sendet bona fide automatisch
-Key-release-Events und simuliert Strg-Tastendrücke). Strg, Win und
-Konsorten wären hingegen kein Problem.
-
-Wir hatten recht lang ein generelles Performance-Problem, das zur
-Folge hatte, dass hie und da ein Zeichen nicht vom AHK-Skript
-verarbeitet wurde und stattdessen direkt zur Applikation weiter
-gereicht wurde. Dieses Problem ist offenbar auf AHK und dessen
-Funktion SendInput in seiner derzeitigen Version zurückzuführen. Mit
-SendEvent (bzw. »SendMode Event« am Beginn des Skripts) haben wir
-aber keine Probleme mehr, weshalb neo-vars nun auch die offizielle
-AHK-Version ist.
+Hinweise für Entwickler:
+https://wiki.neo-layout.org/wiki/Treiber-Know-How/NeoVars