Changeset 776

Show
Ignore:
Timestamp:
08/18/08 21:25:20 (5 years ago)
Author:
martin_r
Message:

Modularisierung des AHK konsequent weitergeführt.
neo20.txt: Ebenen 7 und 8 ergänzt, Ebenen 2 und 4 des Numpads vertauscht.
Methods-Layers.ahk: Mod3-Lock abgeschafft, CapsLock neu geschrieben.
+ Viele kleine Änderungen.

Files:
1 removed
17 modified

Legend:

Unmodified
Added
Removed
  • A-REFERENZ-A/neo20.txt

    r764 r776  
    1 ------------------------------------------------------------------------------- 
     1------------------------------------------------------------------------------- 
    22ACHTUNG:  
    33Damit alles ordentlich dargestellt wird, muss man für die Darstellung z. B. im 
     
    1919│1 3 5│ 3 … 3. Ebene (Mod3)         │ 6 … 6. Ebene (Mod3+Mod4) 
    2020└─────┘ 
    21 • Ebene 1: Kleinbuchstaben                   (kein Mod) 
     21• Ebene 1: Kleinbuchstaben                   (kein Mod)  
    2222• Ebene 2: Großbuchstaben                    (Umschalt) 
    2323• Ebene 3: Sonderzeichen                     (Mod3) 
     
    249249=== Legende – Ziffernblock === 
    250250┌─────┐ 1 … 1. Ebene (kein Mod) 
    251 2 4 │ 2 … 2. Ebene (Umschalt) 
     2514 2 │ 2 … 2. Ebene (Umschalt) 
    252252│ 1 3 │ 3 … 3. Ebene (Mod3) 
    253253└─────┘ 4 … 5. Ebene (Mod3+Umschalt) 
     
    302302=== Zweite Ebene – Miniatur === 
    303303┌───┬───┬───┬───┐ 
    304 │ ≠ │ / │ * │ - │ 
    305 ├───┼───┼───┼───┤ 
    306 │Hom│KP↑│PgU│   │ 
    307 ├───┼───┼───┤   │ 
    308 │KP←│Beg│KP→│ + │ 
    309 ├───┼───┼───┼───┤ 
    310 │End│KP↓│PgD│   │ 
    311 ├───┴───┼───┤   │ 
    312 │ Ins   │Del│Ent│ 
    313 └───────┴───┴───┘ 
    314  
    315  
    316 === Dritte Ebene – Miniatur === 
    317 ┌───┬───┬───┬───┐ 
    318 │ ≈ │ ÷ │ ∙ │ - │ 
    319 ├───┼───┼───┼───┤ 
    320 │ ↕ │ ↑ │ ∋ │   │ 
    321 ├───┼───┼───┤   │ 
    322 │ ← │ ∞ │ → │ ± │ 
    323 ├───┼───┼───┼───┤ 
    324 │ ↔ │ ↓ │ ⇌ │   │ 
    325 ├───┴───┼───┤   │ 
    326 │ %     │ . │Ent│ 
    327 └───────┴───┴───┘ 
    328  
    329 === Vierte Ebene – Miniatur ===  
    330 ┌───┬───┬───┬───┐ 
    331304│ ⍓ │frc│ × │ − │ ⍓ turns on/off the keyboard mouse control 
    332305├───┼───┼───┼───┤ frc means fraction slash ⁄ 
     
    338311├───┴───┼───┤   │ 
    339312│ ‰     │,/.│Ent│ 
     313└───────┴───┴───┘ 
     314 
     315=== Dritte Ebene – Miniatur === 
     316┌───┬───┬───┬───┐ 
     317│ ≈ │ ÷ │ ∙ │ - │ 
     318├───┼───┼───┼───┤ 
     319│ ↕ │ ↑ │ ∋ │   │ 
     320├───┼───┼───┤   │ 
     321│ ← │ ∞ │ → │ ± │ 
     322├───┼───┼───┼───┤ 
     323│ ↔ │ ↓ │ ⇌ │   │ 
     324├───┴───┼───┤   │ 
     325│ %     │ . │Ent│ 
     326└───────┴───┴───┘ 
     327 
     328=== Vierte Ebene – Miniatur ===  
     329┌───┬───┬───┬───┐ 
     330│ ≠ │ / │ * │ - │ 
     331├───┼───┼───┼───┤ 
     332│Hom│KP↑│PgU│   │ 
     333├───┼───┼───┤   │ 
     334│KP←│Beg│KP→│ + │ 
     335├───┼───┼───┼───┤ 
     336│End│KP↓│PgD│   │ 
     337├───┴───┼───┤   │ 
     338│ Ins   │Del│Ent│ 
    340339└───────┴───┴───┘ 
    341340 
  • Subversion-Anleitung.txt

    r772 r776  
    1 ------------------------------------------------------------------------------ 
     1------------------------------------------------------------------------------ 
    22Diese Datei beschreibt den Umgang mit dem Subversion Kommandozeilenclient. 
    33------------------------------------------------------------------------------ 
     
    551. Voraussetzung 
    661.1 Welche Software brauche ich? 
    7 1.2 Dateien im SVN ändern 
     71.2 Dateien im SVN ndern 
    881.3 Terminologie 
    9 2. Verschiedene Arbeitsabläufe (Was will ich machen?) 
     92. Verschiedene Arbeitsablufe (Was will ich machen?) 
    10102.1 Das Repository lokal auf meinem Rechner haben 
    11112.2 Das Repository auf meinem Rechner auf den neuesten Stand bringen 
    12 2.3 Dateien im Repository ändern 
    13 2.4 Dem Repository neue Dateien hinzufügen 
     122.3 Dateien im Repository ndern 
     132.4 Dem Repository neue Dateien hinzufgen 
    14142.5 Dateien im Repository umbenennen 
    15 2.6 Dateien aus dem Repository löschen 
    16 2.7 Änderungen ins Repository hochladen 
    17 3 Ratschläge / »best practice SVN usage« 
     152.6 Dateien aus dem Repository lschen 
     162.7 nderungen ins Repository hochladen 
     173. Ratschl�ge / �best practice SVN usage� 
    1818------------------------------------------------------------------------------ 
    19191. Voraussetzung 
     
    21211.1 Welche Software brauche ich? 
    2222 
    23 Benötigt wird das Programm subversion für die Kommandozeile: 
     23Ben�tigt wird das Programm subversion f�r die Kommandozeile: 
    2424Download: http://svn.tigris.org 
    2525 
    26 Alternativ liegt für Windows auch ein komfortabler SVN-Client vor, der sich in die normale Dateiverwaltung integriert: 
     26Alternativ liegt fr Windows auch ein komfortabler SVN-Client vor, der sich in die normale Dateiverwaltung integriert: 
    2727http://www.tortoisesvn.net/ 
    2828 
    29 Die weiteren Erläuterung beziehen sich auf den Kommandozeilen-Client, können aber sinngemäß auf einen graphischen Client übertragen werden. 
     29Die weiteren Erl�uterung beziehen sich auf den Kommandozeilen-Client, k�nnen aber sinngem�� auf einen graphischen Client �bertragen werden. 
    3030 
    3131------------------------------------------------------------------------------ 
    32 1.2 Dateien im SVN ändern 
     321.2 Dateien im SVN ndern 
    3333 
    34 Will man auch Dateien im Repostiory ändern, braucht man einen Schreibzugang mit Namen und Passwort. 
    35         Ben fragen! 
    36 Wenn es vorrausſichtlich bei einer einzigen Änderung bleiben wird, kann alternativ auch auf der Mailingliste Unterstützung für ein einmaliges »Einchecken« erbeten werden. 
     34Will man auch Dateien im Repostiory ndern, braucht man einen Schreibzugang mit Namen und Passwort. 
     35        ? Ben fragen! 
     36Wenn es voraussichtlich bei einer einzigen �nderung bleiben wird, kann alternativ auch auf der Mailingliste Unterst�tzung f�r ein einmaliges �Einchecken� erbeten werden. 
    3737 
    3838------------------------------------------------------------------------------ 
    39391.3 Terminologie 
    4040 
    41 $REPOSITORY_HOME Das Verzeichnis in dem das ausgecheckte Repository liegt 
     41$REPOSITORY_HOME Das Verzeichnis in dem das ausgecheckte Repository liegt 
    4242 
    4343------------------------------------------------------------------------------ 
     
    46462.1 Das Repository lokal auf meinem Rechner haben 
    4747 
    48 Angenommen ich möchte neo in das Verzeichnis „$VERZEICHNIS/$NEO“ runterladen: 
     48Angenommen ich m�chte Neo in das Verzeichnis �$VERZEICHNIS/$NEO� runterladen: 
    4949 
    5050  cd $VERZEICHNIS 
     
    6060 
    6161------------------------------------------------------------------------------ 
    62 2.3 Dateien im Repository ändern 
     622.3 Dateien im Repository ndern 
    6363 
    64 Einfach die Datei ändern und weiter gehts mit Abschnitt 2.7. 
     64Einfach die Datei �ndern und weiter geht�s mit Abschnitt 2.7. 
    6565 
    6666------------------------------------------------------------------------------ 
    67 2.4 Dem Repository neue Dateien hinzufügen 
     672.4 Dem Repository neue Dateien hinzufgen 
    6868 
    6969Nachdem man die Datei in der lokalen Repositorykopie erstellt hat: 
     
    7878 
    7979------------------------------------------------------------------------------ 
    80 2.6 Dateien aus dem Repository löschen 
     802.6 Dateien aus dem Repository lschen 
    8181 
    8282  svn rm $DATEI 
     
    8484 
    8585------------------------------------------------------------------------------ 
    86 2.7 Änderungen ins Repository hochladen 
     862.7 nderungen ins Repository hochladen 
    8787 
    8888  cd $REPOSITORY_HOME 
    89   svn commit -m "$ÄNDERUNGSBESCHREIBUNG" --username $USER 
     89  svn commit -m "$NDERUNGSBESCHREIBUNG" --username $USER 
    9090 
    9191Wenn man das Repository mit seinem Nutzernamen ausgecheckt hat,  
    92 kann „--username $USER“ weggelassen werden. 
     92kann �--username $USER� weggelassen werden. 
    9393Statt auschecken wie in Abschnitt 2.1 beschrieben: 
    9494  cd $VERZEICHNIS_WO_NEO_REIN_SOLL 
     
    9696 
    9797------------------------------------------------------------------------------ 
    98 3. Ratschläge / »best practice« 
     983. Ratschl�ge / �best practice� 
    9999------------------------------------------------------------------------------ 
    100 In diesem Abschnitt geht es weniger um technische Fragen, sondern eher darum wie man sinnvoll/empfohlenerweise mit einem SVN arbeiten sollte. Diese Ratschläge haben sich in der Praxis als sinnvoll erwiesen: 
     100In diesem Abschnitt geht es weniger um technische Fragen, sondern eher darum, wie man sinnvoll/empfohlenerweise mit einem SVN arbeiten sollte. Diese Ratschl�ge haben sich in der Praxis als sinnvoll erwiesen: 
    101101 
    102 • Bevor man beginnt, die eigene SVN-Kopie zu bearbeiten, sollte immer erst ein Update durchgeführt werden (insbesondere, wenn das letzte Auschecken schon länger her liegt). Dies vermeidet mögliche Konflikte. 
    103 • Es ist vorteilhaft, inhaltlich Zusammengehörendes auch gemeinsam zu committen, und Dinge, die voneinander unabhängig sind, auch einzeln einzuchecken. 
    104 • Die Änderungsbeschreibung sollte immer eingegeben werden. 
    105 • Längere Änderungsbeschreibungen sollten mit einer kurzen Zusammmenfassung der Form »[Adjektiv] Subjekt Prädikat: …« begonnen werden, etwa »Neues Feature: …«, »Caps-Lock-Fehler behoben: …«, »Dokumentation ergänzt: …« 
    106 • Inhaltliche (bzw. »programmiertechnische«) Änderungen (oder Fehlerkorrekturen) sollten unabhängig von ästhetischen Korrekturen (wie Einrückungen oder der Korrektur von Rechtschreibfehlern) eingecheckt werden. Mögliche Änderungsbeschreibungen wären etwa: [Revision 698:] »Doku erweitert: Wie man NEO auf dem C64 installieren kann«, [Revision 699:] »Formatierung korregiert: Leere Zeiten entfernt, Einrückung angeglichen (r698)« 
    107 • Grössere Commits können auch aufgeteilt werden, wenn die Intention dazu aus den Änderungsbeschreibungen hervor geht.  
    108 • Wenn man Angst um kostbare Änderungen durch einen Headcrash während einer intensiven Change-Session hat, muss man halt einen Branch für den Zeitraum der Änderungen eröffnen. 
    109 • … 
     102� Bevor man beginnt, die eigene SVN-Kopie zu bearbeiten, sollte immer erst ein Update durchgef�hrt werden (insbesondere, wenn das letzte Auschecken schon l�nger her liegt). Dies vermeidet m�gliche Konflikte. 
     103� Es ist vorteilhaft, inhaltlich Zusammengeh�rendes auch gemeinsam zu committen, und Dinge, die voneinander unabh�ngig sind, auch einzeln einzuchecken. 
     104� Die �nderungsbeschreibung sollte immer eingegeben werden. 
     105� L�ngere �nderungsbeschreibungen sollten mit einer kurzen Zusammenfassung der Form �[Adjektiv] Subjekt Pr�dikat: �� begonnen werden, etwa �Neues Feature: ��, �Caps-Lock-Fehler behoben: ��, �Dokumentation erg�nzt: �� 
     106� Inhaltliche (bzw. �programmiertechnische�) �nderungen (oder Fehlerkorrekturen) sollten unabh�ngig von �sthetischen Korrekturen (wie Einr�ckungen oder der Korrektur von Rechtschreibfehlern) eingecheckt werden. M�gliche �nderungsbeschreibungen w�ren etwa: [Revision 698:] �Doku erweitert: Wie man NEO auf dem C64 installieren kann�, [Revision 699:] �Formatierung korrigiert: Leere Zeilen entfernt, Einr�ckung angeglichen (r698)� 
     107� Gr��ere Commits k�nnen auch aufgeteilt werden, wenn die Intention dazu aus den �nderungsbeschreibungen hervor geht.  
     108� Wenn man Angst um kostbare �nderungen durch einen Headcrash w�hrend einer intensiven Change-Session hat, muss man einen Branch f�r den Zeitraum der �nderungen er�ffnen. 
     109� � 
    110110 
    111111------------------------------------------------------------------------------ 
  • windows/autohotkey/Build-Update.bat

    r771 r776  
    11@echo off 
    2  
    3 echo Setting local path variables 
    4  
    5 REM The path to the AutoHotkey program 
    6 set ahk=C:\Programme\AutoHotkey 
    7  
    8 REM The path to the AutoHohotkey directory in the local svn copy 
    9 set svn=. 
    10  
    11 REM Just some useful shortcuts: 
    12 set scr="%svn%\Source" 
     2cd Source 
    133set fn=neo20 
    144 
    15 echo Killing the old (AHK)Driver 
     5rem echo Killing the old (AHK)Driver 
    166REM tskill neo20-all-in-one 
    177 
    188echo Creating a new Driver from the Source code 
    199REM The order *is* important! 
    20 copy "%scr%\Warning.ahk" + "%scr%\Global-Part.ahk" + "%scr%\Methods-Layers.ahk" + "%scr%\Keys-Qwert-to-Neo.ahk" + "%scr%\Keys-Neo.ahk" + "%scr%\Methods-Lights.ahk" + "%scr%\Methods-Other.ahk" + "%scr%\Methods-Unicode.ahk" + "%scr%\Methods-ScreenKeyboard.ahk" "%svn%\%fn%.ahk" 
    21 REM if exist "%svn%\Compose\Compose-all-in-one.ahk" copy "%svn%\%fn%.ahk" + "%svn%\Compose\Compose-all-in-one.ahk" "%svn%\%fn%.ahk" 
     10copy "Global-Part.ahk" + "Methods-Layers.ahk" + "Keys-Qwert-to-Neo.ahk" + "Keys-Neo.ahk" + "Methods-Lights.ahk" + "Methods-Other.ahk" + "Methods-Unicode.ahk" + "Methods-ScreenKeyboard.ahk" "..\%fn%.ahk" 
     11REM if exist "..\Compose\Compose-all-in-one.ahk" copy "..\%fn%.ahk" + "..\Compose\Compose-all-in-one.ahk" "..\%fn%.ahk" 
    2212 
    23 echo Compiling the new Driver using AutoHotkey 
    24 "%ahk%\Compiler\Ahk2Exe.exe" /in "%svn%\%fn%.ahk" /out "%svn%\%fn%.exe" /icon "%svn%\neo.ico" 
     13echo Compiling the new Driver using AutoHotkey... 
     14"C:\Programme\AutoHotkey\Compiler\Ahk2Exe.exe" /in "..\%fn%.ahk" /out "..\%fn%.exe" /icon "..\neo.ico" 
    2515echo Driver Update complete! You can now close this log-window. 
    2616 
    2717REM Start the new Driver 
    28 %fn%.exe 
     18rem %fn%.exe 
    2919 
    3020rem wie kann man hier mit der Skriptabarbeitung weitermachen? 
    3121rem Unter Windows XP scheint es nicht m�glich zu sein, dies mit "Bordmitteln" zu erreichen, es gibt hierf�r jedoch extere Programme, etwa 
    3222REM echo Start the new driver asynchronously, using "Hidden Start" (hstart.exe) from http://www.ntwind.com/software/utilities/hstart/ 
    33 REM hstart.exe  /NOCONSOLE /D="%exe%" "%exe%\%fn%.exe" 
     23REM hstart.exe /NOCONSOLE /D="." "%fn%.exe" 
  • windows/autohotkey/Changelog-and-Todo.txt

    r771 r776  
    1 == NEO 2.0 (beta) AutoHotkey-Treiber == 
     1== NEO 2.0 (beta) AutoHotkey-Treiber == 
    22 
    33 
    44=== Autoren === 
    5 Alle E-Mail-Adressen sind »kodiert«, um die Erfassung durch E-Mail-Spider (und darauf folgenden Spam) zu vermeiden: 
     5Alle E-Mail-Adressen sind �kodiert�, um die Erfassung durch E-Mail-Spider (und darauf folgenden Spam) zu vermeiden: 
    66 
    77Stefan Mayer <stm (at) neo-layout. o r g> 
    8 Nora Geißler <nora_geissler (at) yahoo. d e> 
     8Nora Geiler <nora_geissler (at) yahoo. d e> 
    99Matthias Berg <neo (at) matthias-berg. e u> 
    1010Martin Roppelt <m.p.roppelt (at) web. d e> 
    1111Dennis Heidsiek <HeidsiekB (at) aol. c o m> 
    12 Matthias Wächter <matthias (at) waechter.wiz. a t> 
     12Matthias Wchter <matthias (at) waechter.wiz. a t> 
    1313 
    1414 
    1515=== To Do === 
    16 - Ausgiebig testen... (besonders Vollständigkeit bei Deadkeys). 
    17 - Compose vollständig implementieren (Welche Methode ist hierzu am besten geeignet?). 
    18 - Bessere Lösung für das Leeren von PriorDeadKey finden, damit die Sondertasten nicht mehr abgefangen werden müssen. 
    19 - Testen, ob die Capslocklösung (siehe *1:: Ebene 1) auch für Numpad gebraucht wird. 
     16- Ausgiebig testen... (besonders Vollstndigkeit bei Deadkeys). 
     17- Compose vollstndig implementieren (Welche Methode ist hierzu am besten geeignet?). 
     18- Bessere L�sung f�r das Leeren von PriorDeadKey finden, damit die Sondertasten nicht mehr abgefangen werden m�ssen. 
     19- Testen, ob die Capslockl�sung (siehe *1:: Ebene 1) auch f�r Numpad gebraucht wird. 
    2020- Die Ebenen vom Tastenblock an die neue Referenz anpassen (wenn da ein Konsens gefunden wurde). 
    2121- Blindes Compose implementieren. 
     22- CompKey in Abh�ngigkeit von CapsLock setzen. 
     23- CapsLock-Abh�ngigkeiten entfernen. 
    2224 
    23  
    24 === Ideen und Vorschläge === 
    25 - Die Varianten (lernModus, einHandNeo, Lang-s-Tastatur, Qwertz/pausieren) sollten einheitlich (de-)aktiviert werden, etwa über M4+F9-F12. 
    26 - Modi für vertauschte Ziffern in der Zahlenreihe und auf der 4. Ebene. 
     25=== Ideen und Vorschl�ge === 
     26- Modi f�r vertauschte Ziffern in der Zahlenreihe und auf der 4. Ebene. 
    2727- Die Compose-Kombinationen sollten automatisch aus den Referenzdateien im Compose-Verzeichnis erzeugt werden. 
    2828 
    2929 
    30 === Änderungshistorie === 
     30=== nderungshistorie === 
    3131 
     32Revision 776 (von Martin Roppelt) 
     33- Global-Part.ahk, Keys-Neo.ahk: ZeigeLockBoxen in ZeigeLockBox umbenannt. 
     34- Keys-Neo.ahk: Fehler ausgebessert, Quelltext neu ausgerichtet, Numpad an die Referenz angeglichen, Ebenen 7 und 8 erg�nzt; 
     35- Methods-Layers.ahk: Mod3-Lock abgeschafft 
    3236Revision 749 (von Dennis Heidsiek) 
    33 - »?« und »¿« funktionieren wieder (Klammer vergessen). 
     37- �?� und ��� funktionieren wieder (Klammer vergessen). 
    3438Revision 748 (von Dennis Heidsiek) 
    35 - Neue globale Variable »zeigeLockBoxen«: Soll mit MsgBoxen explizit auf das Ein- und Ausschalten des Mod{3,4}-Locks hingewiesen werden? 
     39- Neue globale Variable �zeigeLockBoxen�: Soll mit MsgBoxen explizit auf das Ein- und Ausschalten des Mod{3,4}-Locks hingewiesen werden? 
    3640Revision 746 (von Martin Roppelt) 
    37 - Zurücksetzen der Tastatur über M4+Esc. 
    38 - #[2] sendet nicht mehr »'«. 
    39 - Variablen Ebene7 und Ebene8 zum Abfragen eingeführt. 
    40 - s(12)[2s]-Bug von Matthias Wächter behoben (= Lang-s-Tastatur repariert). 
     41- Zur�cksetzen der Tastatur �ber M4+Esc. 
     42- #[2] sendet nicht mehr �'�. 
     43- Variablen Ebene7 und Ebene8 zum Abfragen eingefhrt. 
     44- s(12)[2s]-Bug von Matthias Wchter behoben (= Lang-s-Tastatur repariert). 
    4145Revision 744 (von Stefan Mayer) 
    4246- Ebene4-Ziffernblock: auf neo_d nun Komma (wie Referenz), "NumPadKomma" gibt es nicht. 
    43 Revision 743 (von Matthias Wächter) 
     47Revision 743 (von Matthias Wchter) 
    4448- Ebene4-Ziffernblock: NumPadAdd und NumPadSub korrigiert. 
    45 Revision 740 (von Matthias Wächter) - "Mega-Patch" 
     49Revision 740 (von Matthias Wchter) - "Mega-Patch" 
    4650- Straffung der Syntax bei der Abfrage der Ebenen und der Behandlung der toten Tasten und der Compose. 
    4751- Umstellung auf Virtual-Key-Scancodes, umgeht den AHK-Bug, dass Scancodemarken durch SendUnicodeChar angesprungen werden. 
    48 - Die Scancodes für das Numpad (jeweils für ein- und ausgeschaltetes NumLock) haben jetzt paarweise Sprungmarken um die Tastenbehandlung untereinander konsistent zu halten. 
     52- Die Scancodes f�r das Numpad (jeweils f�r ein- und ausgeschaltetes NumLock) haben jetzt paarweise Sprungmarken um die Tastenbehandlung untereinander konsistent zu halten. 
    4953- Wiederherstellung der Modifier-Locks. 
    5054- Reparatur der Bildschirmtastatur in der All.ahk. 
     
    5357- Blinde Compose auf M4+F10 (Toggle) (noch nicht implementiert). 
    5458Revision 728 (von Dennis Heidsiek): 
    55 - Ist die Datei %APPDATA%\NEO2\NEO2.ini vorhanden, werden dort eventuell vorhandene Werte für die Globalen Schalter beim Start übernommen. 
    56 - »LangSTastaturStandardmäßigEingeschaltet.ahk« wird nicht mehr unterstützt, weil sonst immer neu kompiliert werden muss. 
     59- Ist die Datei %APPDATA%\NEO2\NEO2.ini vorhanden, werden dort eventuell vorhandene Werte f�r die Globalen Schalter beim Start �bernommen. 
     60- �LangSTastaturStandardm��igEingeschaltet.ahk� wird nicht mehr unterst�tzt, weil sonst immer neu kompiliert werden muss. 
    5761Revision 707 (von Dennis Heidsiek): 
    5862- Die Resourcen-Dateien (PNGs, ICOs) werden nun nach %TEMP%\NEO2\ extrahiert und nicht mehr in das Verzeichnis, in dem sich die EXE befindet. 
    59 - Die doppelten französischen Anführungszeichen werden nun ebenfalls über SendUnicodeChar gesendet. 
     63- Die doppelten franz�sischen Anf�hrungszeichen werden nun ebenfalls �ber SendUnicodeChar gesendet. 
    6064Revision 694 (von Martin Roppelt): 
    6165- LangSTastatur auf M4+F11. 
    62 - Entwickler können durch das Erstellen einer Datei »LangSTastaturStandardmäßigEingeschaltet.ahk« mit dem Inhalt »LangSTastatur := 1« diese standardmäßig aktivieren. 
     66- Entwickler k�nnen durch das Erstellen einer Datei �LangSTastaturStandardm��igEingeschaltet.ahk� mit dem Inhalt �LangSTastatur := 1� diese standardm��ig aktivieren. 
    6367- Interne Darstellung der Ebenen (4 und 5 bei den toton Tasten wieder richtig getauscht. 
    6468Revision 687 (von Dennis Heidsiek): 
    65 - Die SendUnicodeChar-Methode um den GDK-Workarround von Matthias Wächter ergänzt. 
     69- Die SendUnicodeChar-Methode um den GDK-Workarround von Matthias W�chter erg�nzt. 
    6670- (An/Aus) Icons an Favicon der neuen Homepage angepasst. 
    6771Revision 645 (von Martin Roppelt): 
    68 - Ellipse zusätzlich auf M3+x. 
     72- Ellipse zustzlich auf M3+x. 
    6973- Lang-s-Tastatur probeweise auf M4+Esc. 
    7074Revision 640 (von Dennis Heidsiek): 
     
    7579- Spitze Klammern (bra und ket) auf M5+8/9. 
    7680Revision 624 (von Martin Roppelt): 
    77 - Lang-s-Tastatur (ein- und auszuschalten durch Mod4+ß). 
     81- Lang-s-Tastatur (ein- und auszuschalten durch Mod4+). 
    7882Revision 616 (von Dennis Heidsiek): 
    7983- Der nicht funktionierende Mod5-Lock-Fix wurde wieder entfernt, da er sogar neue Fehler produzierte. 
     
    8185- Erfolgloser Versuch, den Mod4-Lock wiederherzustellen (durch eine Tilde vor den Scancodes der Bildschirmtastatur). 
    8286- Rechtschreibfehler korrigiert. 
    83 - Zwei AHK-Links eingefügt. 
     87- Zwei AHK-Links eingefgt. 
    8488Revision 609 (von Dennis Heidsiek): 
    85 - Vorläufiger Abschluss der AHK-Modularisierung. 
    86 - Bessere Testmöglichkeit »All.ahk« für AHK-Entwickler hinzugefügt, bei der sich die Zeilenangaben in Fehlermeldungen auf die tatsächlichen Module und nicht auf das große »vereinigte« Skript beziehen. 
     89- Vorlufiger Abschluss der AHK-Modularisierung. 
     90- Bessere Testm�glichkeit �All.ahk� f�r AHK-Entwickler hinzugef�gt, bei der sich die Zeilenangaben in Fehlermeldungen auf die tats�chlichen Module und nicht auf das gro�e �vereinigte� Skript beziehen. 
    8791Revision 608 (von Martin Roppelt): 
    8892- Rechtschreibfehler korrigiert und Dateinamen aktualisiert und sortiert. 
     
    9195- Neue Batch-Datei Build-Update.bat zur einfachen Aktualisierung der EXE-Datei. 
    9296Revision 583 (von Dennis Heidsiek): 
    93 - Kleinere Korrekturen ((5)(3), (5)(5) und (9)(3) stimmen wieder mit der Referenz überein). 
     97- Kleinere Korrekturen ((5)(3), (5)(5) und (9)(3) stimmen wieder mit der Referenz berein). 
    9498Revision 580 (von Matthias Berg): 
    9599- Bildschirmtastatur jetzt mit Mod4+F* statt Strg+F*, dies deaktiviert jedoch leider den Mod4-Lock. 
    96100Revision 570 (von Matthias Berg): 
    97 - Hotkeys für einHandNeo und lernModus durch entsprechende ScanCodes ersetzt  
     101- Hotkeys fr einHandNeo und lernModus durch entsprechende ScanCodes ersetzt  
    98102Revision 568 (von Matthias Berg): 
    99103- Sonderzeichen, Umlaute, z und y durch ScanCodes ersetzt. 
    100   • jetzt wird auch bei eingestelltem US Layout Neo verwendet (z.B. für Chinesische InputMethodEditors). 
    101   rechter Mod3 geht noch nicht bei US-Layout (weder ScanCode noch "\"). 
     104  � jetzt wird auch bei eingestelltem US Layout Neo verwendet (z.B. f�r Chinesische InputMethodEditors). 
     105  rechter Mod3 geht noch nicht bei US-Layout (weder ScanCode noch "\"). 
    102106Revision 567 (von Dennis Heidsiek): 
    103 - Aktivierter Mod4-Lock wird jetzt über die Rollen-LED des Keybord angezeigt (analog zu CapsLock), die Num-LED behält ihr bisheriges Verhalten. 
     107- Aktivierter Mod4-Lock wird jetzt �ber die Rollen-LED des Keybord angezeigt (analog zu CapsLock), die Num-LED beh�lt ihr bisheriges Verhalten. 
    104108- Neue Option im Skript: UseMod4Light. 
    105109Revision 561 (von Matthias Berg): 
    106 - M4+Tab verhält sich jetzt wie das andere Tab dank "goto neo_tab". 
     110- M4+Tab verhlt sich jetzt wie das andere Tab dank "goto neo_tab". 
    107111Revision 560 (von Dennis Heidsiek): 
    108112- Neue Option im Skript: bildschirmTastaturEinbinden bindet die PNG-Bilder der Bildschirmtastur mit in die exe-Datei ein, so dass sich der Benutzer nur eine Datei herunterladen muss. 
    109113Revision 559 (von Matthias Berg): 
    110 - Shift+Alt+Tab Problem gelöst (muss noch mehr auf Nebeneffekte getestet werden). 
     114- Shift+Alt+Tab Problem gelst (muss noch mehr auf Nebeneffekte getestet werden). 
    111115Revision 558 (von Matthias Berg): 
    112116- Icon-Bug behoben 
    113   • Hotkeys dürfen nicht vor der folgenden Zeile stehen: "menu, tray, icon, neo.ico,,1" 
     117  � Hotkeys d�rfen nicht vor der folgenden Zeile stehen: "menu, tray, icon, neo.ico,,1" 
    114118- lernModus-Konfigurations-Bug behoben: or statt and(not). 
    115 - Ein paar leere Else-Fälle eingebaut (Verständlichkeit, mögliche Compilerprobleme vermeiden). 
     119- Ein paar leere Else-F�lle eingebaut (Verst�ndlichkeit, m�gliche Compilerprobleme vermeiden). 
    116120Revision 556 (von Matthias Berg): 
    117121- lernModus (an/aus mit Strg+Komma) 
    118   im Skript konfigurierbar. 
    119   Schaltet z.B. Qwertz Tasten aus, die es auf der 4. Ebene gibt (Return, Backspace,...). 
    120   Kann auch Backspace und/oder Entfernen der 4. Ebene ausschalten (gut zum Lernen, richtig zu schreiben). 
     122  im Skript konfigurierbar. 
     123  Schaltet z.B. Qwertz Tasten aus, die es auf der 4. Ebene gibt (Return, Backspace,...). 
     124  Kann auch Backspace und/oder Entfernen der 4. Ebene ausschalten (gut zum Lernen, richtig zu schreiben). 
    121125- Bug aufgetaucht: Icons werden nicht mehr angezeigt. 
    122126Revision 544 (von Stefan Mayer): 
     
    126130- Bei EinHandNeo ist jetzt Space+y auch Mod4. 
    127131- AltGr-Bug  hoffentlich wieder behoben. Diesmal mit extra altGrPressed Variable. 
    128 - nurEbenenFuenfUndSechs umbenannt in ahkTreiberKombi und auf Ebene 4 statt 5 und 6 geändert. 
     132- nurEbenenFuenfUndSechs umbenannt in ahkTreiberKombi und auf Ebene 4 statt 5 und 6 gendert. 
    129133Revision 540 (von Matthias Berg): 
    130 - Stark überarbeitet um Wartbarkeit zu erhöhen und Redundanz zu verringern. 
     134- Stark �berarbeitet um Wartbarkeit zu erh�hen und Redundanz zu verringern. 
    131135- nurEbenenFuenfUndSechs sollte nun auch auf Neo Treiber statt Qwertz laufen. 
    132   aber es muss noch jemand testen. 
    133   • Problem: was kann man abfangen, wenn eine tote Taste gedrückt wird. 
     136  aber es muss noch jemand testen. 
     137  � Problem: was kann man abfangen, wenn eine tote Taste gedr�ckt wird. 
    134138- einHandNeo: 
    135   An-/Ausschalten mit Strg+Punkt. 
    136   Buchstaben der rechten Hand werden mit Space zur linken Hand. 
    137   Nebeneffekt: es gibt beim Festhalten von Space keine wiederholten Leerzeichen mehr. 
     139  An-/Ausschalten mit Strg+Punkt. 
     140  Buchstaben der rechten Hand werden mit Space zur linken Hand. 
     141  Nebeneffekt: es gibt beim Festhalten von Space keine wiederholten Leerzeichen mehr. 
    138142Revision 532 (von Matthias Berg): 
    139143- BildschirmTastatur  
    140   aktiviert mit Strg+F1 bis 7, schaltet Keyboard ein oder aus. 
    141   Strg+F7 zeigt die zuletzt angezeigte Ebene an (und wieder aus). 
    142   Strg+F8 schaltet AlwaysOnTop um. 
     144  aktiviert mit Strg+F1 bis 7, schaltet Keyboard ein oder aus. 
     145  Strg+F7 zeigt die zuletzt angezeigte Ebene an (und wieder aus). 
     146  Strg+F8 schaltet AlwaysOnTop um. 
    143147Revision 529 (von Stefan Mayer): 
    144148- Icon wird automatisch geladen, falls .ico-Dateien im selbem Ordner. 
     
    146150Revision 528 (von Matthias Berg): 
    147151- Neo-Icon. 
    148 - Neo-Prozess jetzt automatisch auf hoher Priorität (siehe globale Schalter). 
    149 - Mod3-Lock (nur wenn rechtes Mod3 zuerst gedrückt wird, andere Lösung führte zum Caps-Bug). 
    150 - Mod4-Lock (nur wenn das linke Mod4 zuerst gedrückt wird, andere Lösung führte zum AltGr-Bug). 
     152- Neo-Prozess jetzt automatisch auf hoher Prioritt (siehe globale Schalter). 
     153- Mod3-Lock (nur wenn rechtes Mod3 zuerst gedr�ckt wird, andere L�sung f�hrte zum Caps-Bug). 
     154- Mod4-Lock (nur wenn das linke Mod4 zuerst gedr�ckt wird, andere L�sung f�hrte zum AltGr-Bug). 
    151155- Ein paar falsche Zeichen korrigiert. 
    152156Revision 527 (von Matthias Berg): 
     
    157161- Mod4-Lock durch Mod4+Mod4. 
    158162- EbenenAktualisierung neu geschrieben. 
    159 - Ebene 6 über Mod3+Mod4. 
    160 - Ebenen (besonders Matheebene) an Referenz angepasst (allerdings kaum um Ebenen 1&2 gekümmert, besonders Compose könnte noch überholt werden). 
     163- Ebene 6 ber Mod3+Mod4. 
     164- Ebenen (besonders Matheebene) an Referenz angepasst (allerdings kaum um Ebenen 1&2 gek�mmert, besonders Compose k�nnte noch �berholt werden). 
    161165Revision 525 (von Matthias Berg): 
    162 - Capslock bei Zahlen und Sonderzeichen berücksichtigt. 
     166- Capslock bei Zahlen und Sonderzeichen bercksichtigt. 
    163167Revision 524 (von Matthias Berg): 
    164 - umgekehrtes ^ für o, a, ü,i  sowie für die grossen vokale ( 3. ton chinesisch). 
    165   • damit wird jetzt PinYin vollständig unterstützt caron, macron, akut, grave auf uiaeoü. 
     168- umgekehrtes ^ f�r o, a, �,i  sowie f�r die grossen vokale ( 3. ton chinesisch). 
     169  � damit wird jetzt PinYin vollst�ndig unterst�tzt caron, macron, akut, grave auf uiaeo�. 
    166170- Sonderzeichen senden wieder blind -> Shortcuts funktionieren, Capslock ist leider Shiftlock. 
    167171Revision 523 (von Matthias Berg): 
    168172- CapsLock geht jetzt auch bei allen Zeichen ('send Zeichen' statt 'send {blind} Zeichen'). 
    169173- vertikale Ellipse eingebaut. 
    170 - Umschalt+Umschalt für Capslock statt Mod3+Mod3. 
     174- Umschalt+Umschalt fr Capslock statt Mod3+Mod3. 
    171175- bei Suspend wird jetzt wirklich togglesuspend aufgerufen (auch beim Aktivieren per shift+pause). 
    172176Revsion 490 (von Stefan Mayer):  
    173177- SUBSCRIPT von 0 bis 9 sowie (auf Ziffernblock) + und - 
    174   auch bei Ziffernblock auf der 5. Ebene 
    175 - Kein Parsen über die Zwischenablage mehr. 
     178  auch bei Ziffernblock auf der 5. Ebene 
     179- Kein Parsen ber die Zwischenablage mehr. 
    176180- Vista-kompatibel. 
    177181- Compose-Taste 
    178   • Brüche (auf Zahlenreihe und Hardware-Ziffernblock). 
    179   • römische Zahlen. 
    180   Ligaturen und Copyright. 
     182  � Br�che (auf Zahlenreihe und Hardware-Ziffernblock). 
     183  � r�mische Zahlen. 
     184  Ligaturen und Copyright. 
    181185 
    182186 
  • windows/autohotkey/README.txt

    r774 r776  
    1 == Neo 2.0 Autohotkey-Treiber für Windows == 
     1== Neo 2.0 Autohotkey-Treiber f�r Windows == 
    22 
    33 
    4 == Hinweise für Nutzer == 
     4== Hinweise fr Nutzer == 
    55 
    66=== Direkte Installation ===  
    7 Einfach die Datei neo20.exe herunterladen und irgendwo speichern (bspw. auf dem Desktop oder in dem Order »Eigenen Dateien«). Nach einem einfachen Doppelklick auf diese .exe-Datei steht Neo in voller Funktionalität zur Verfügung! Das alles geht ohne Administrator-Rechte und ist auf jedem Rechner sofort ausführbar. 
     7Einfach die Datei neo20.exe herunterladen und irgendwo speichern (bspw. auf dem Desktop oder in dem Order �Eigenen Dateien�). Nach einem einfachen Doppelklick auf diese .exe-Datei steht Neo in voller Funktionalit�t zur Verf�gung! Das alles geht ohne Administrator-Rechte und ist auf jedem Rechner sofort ausf�hrbar. 
    88 
    9 === Rückkehr zum normalen Tastaturlayout === 
    10 Um kurzzeitig zwischen QWERTZ und Neo hin- und herzuwechseln, kann mit der Tastenkombination Shift+Pause das Skript pausiert bzw. wieder gestartet werden. Gleiches erreicht man auch über einen Doppelklick auf das rote/weiße Neo-Icon im Traybereich (bei der Uhr). 
     9=== Rckkehr zum normalen Tastaturlayout === 
     10Um kurzzeitig zwischen QWERTZ und Neo hin- und herzuwechseln, kann mit der Tastenkombination Shift+Pause das Skript pausiert bzw. wieder gestartet werden. Gleiches erreicht man auch �ber einen Doppelklick auf das rote/wei�e Neo-Icon im Traybereich (bei der Uhr). 
    1111 
    12 === Bildschirmtastatur oder: Wo ist bloß XYZ abgeblieben? === 
    13 Mit den Tastenkominationen Mod4+F1 bis Mod4+F8 (Mod4 ist beim normalen Tastaturlayout AltGr oder die "<" Taste rechts neben der linken Großschreibetaste) erhält man eine graphische Zusammenfassung der Neo-Tastatur. Sie erleichert das Finden eines noch nicht so vertrauten Zeichens und hilft zudem beim Erlernen des Blindschreibens, da der Blick auf den Bildschirm und nicht auf die Tastatur gerichtet ist. 
     12=== Bildschirmtastatur oder: Wo ist blo� XYZ abgeblieben? === 
     13Mit den Tastenkominationen Mod4+F1 bis Mod4+F8 (Mod4 ist beim normalen Tastaturlayout AltGr oder die "<" Taste rechts neben der linken Gro�schreibetaste) erh�lt man eine graphische Zusammenfassung der Neo-Tastatur. Sie erleichert das Finden eines noch nicht so vertrauten Zeichens und hilft zudem beim Erlernen des Blindschreibens, da der Blick auf den Bildschirm und nicht auf die Tastatur gerichtet ist. 
     14 
     15=== Globale Schalter und die Neo2.ini === 
     16Es besteht die M�glichkeit, beim Starten des AHK-Treibers individuelle Anfangswerte f�r die globalen Schalter des Programms vorzugeben. 
     17 
     18Dies geschieht �ber die Konfigurationsdatei Neo2.ini (diese muss im gebr�uchlichen INI-Format vorliegen, also insbesondere ANSI-kodiert sein).  
     19Eine Neo2.ini, die alle Werte auf die Standardwerte ��ndert�, s�he etwa so aus: 
     20[Global] 
     21# Im folgenden gilt (soweit nicht anders angegeben) Ja = 1, Nein = 0: 
     22 
     23ahkTreiberKombi=0 
     24einHandNeo=0 
     25lernModus=0 
     26zeigeLockBox=1 
     27UseMod4Light=1 
     28LangSTastatur=0 
     29DeadSilence=0 
     30DeadCompose=0 
     31 
     32Diese Datei muss manuell (etwa mit Notepad) in dem richtigen Verzeichnis innerhalb der Anwendungsdaten des aktuellen Nutzers angelegt werden. Unter Windows Vista ist dies etwa das Verzeichnis 
     33C:\Users\<BENUTZERNAME>\AppData\Roaming\Neo2\Neo2.ini 
     34unter Windows XP hingegen das Verzeichnis 
     35C:\Dokumente und Einstellungen\<BENUTZERNAME>\Anwendungsdaten\Neo2\Neo2.ini  
     36usw. 
    1437 
    1538=== Automatischer Start === 
    16 Bei Bedarf kann man sich eine Verknüpfung mit neo20.exe in den Autostart-Ordner im Startmenü legen, dann hat man die Belegung direkt nach der Anmeldung. In diesem Fall sollte man jedoch auch einen Umstieg auf den nativen kbdNeo2-Treiber erwägen. 
     39Bei Bedarf kann man sich eine Verkn�pfung mit neo20.exe in den Autostart-Ordner im Startmen� legen, dann hat man die Belegung direkt nach der Anmeldung. In diesem Fall sollte man jedoch auch einen Umstieg auf den nativen kbdNeo2-Treiber erw�gen (der jedoch noch nicht vollst�ndig umgesetzt ist). 
    1740 
    18 === Temporäre Dateien und gründliche Deinstallation === 
    19 Die .exe-Datei entpackt beim Ausführen Bilder für die Tray-Icons und die Bildschirmtastatur in einen Neo2-Unterordner des temporären Windows(Umgebungsvariablen-)Ordners (unter Windows XP ist dies etwa C:\Dokumente und Einstellungen\Mario Mustermann\Lokale Einstellungen\Temp\Neo2). Diese Dateien bitte während der Dateiausführung nicht verschieben oder löschen, ansonsten können Laufzeitfehler auftreten. 
     41=== Tempor�re Dateien und gr�ndliche Deinstallation === 
     42Die .exe-Datei entpackt beim Ausf�hren Bilder f�r die Tray-Icons und die Bildschirmtastatur in einen Neo2-Unterordner des tempor�ren Windows(Umgebungsvariablen-)Ordners (unter Windows XP ist dies etwa C:\Dokumente und Einstellungen\Mario Mustermann\Lokale Einstellungen\Temp\Neo2). Diese Dateien bitte w�hrend der Dateiausf�hrung nicht verschieben oder l�schen, ansonsten k�nnen Laufzeitfehler auftreten. 
     43 
     44=== Lang-S-Tastatur === 
     45Um den korrekten Satz des langen S (�?�) zu erleichtern, wurde der Lang-S-Modus geschaffen. Er ist �ber die Tastenkombination Mod4+F11 ein- und ausschaltbar. Er vertauscht zyklisch s ? � ? ? ? s. 
    2046 
    2147=== FAQ === 
    22 Bei vielen Problemen hilt es weiter, zunächst in die allgemeine Neo-FAQ zu schauen; viele bekannte Probleme und Fragen sind dort mit entsprechendene Lösungshinweisen dokumentiert. 
     48Bei vielen Problemen hilt es weiter, zun�chst in die allgemeine Neo-FAQ zu schauen; viele bekannte Probleme und Fragen sind dort mit entsprechendenen L�sungshinweisen dokumentiert. 
    2349 
    24 === Hinweis zur Aktualität === 
    25 Achtung: Da sich Neo in aktiver Weiterentwicklung befindet, kann es vorkommen, dass die Bildschirmtastatur oder die neo20.exe mit der aktuellen Referenz (noch) nicht übereinstimmt. Scheuen Sie sich nicht, uns über die Homepage des Neo-Layouts (http://neo-layout.org) Verbesserungsvorschläge zukommen zu lassen! 
     50=== Hinweis zur Aktualitt === 
     51Achtung: Da sich Neo in aktiver Weiterentwicklung befindet, kann es vorkommen, dass die Bildschirmtastatur oder die neo20.exe mit der aktuellen Referenz (noch) nicht �bereinstimmt. Scheuen Sie sich nicht, uns �ber die Homepage des Neo-Layouts (http://neo-layout.org) Verbesserungsvorschl�ge zukommen zu lassen! 
    2652 
    2753=== Was noch nicht funktioniert === 
     
    2955 
    3056 
    31 == Hinweise für Entwickler == 
     57== Hinweise fr Entwickler == 
    3258 
    33 === Autohotkey herunter laden === 
    34 Man sollte als erstes das Programm namens »Autohotkey« (http://www.autohotkey.com/download/AutohotkeyInstall.exe) herunterlanden. Es wird empfohlen, dieses Programm möglichst in dem vorgeschlagenen Standardverzeichnis zu installieren. 
    35 Wenn man jedoch über KEINE Administratorrechte verfügt, kann man das Programm beispielsweise auch in das Verzeichnis »Eigene Dateien/Neo«  (oder in ein anderes Verzeichnis, für das man Schreibrechte hat) installieren. 
    36 In diesem Fall muss dann für eine Kompilierung des Skriptes noch die Datei Build-Update.bat lokal entsprechend angepasst werden (diese lokale Änderung der Build-Update.bat aber bitte nicht einchecken, da die allermeisten Entwickler Autohotkey im vorgeschlagenen Standardverzeichnis installiert haben!). 
     59=== AutoHotkey herunter laden === 
     60Man sollte als erstes das Programm namens �AutoHotkey� (http://www.autohotkey.com/download/AutoHotkeyInstall.exe) herunterlanden. Es wird empfohlen, dieses Programm m�glichst in dem vorgeschlagenen Standardverzeichnis zu installieren. 
     61Wenn man jedoch �ber KEINE Administratorrechte verf�gt, kann man das Programm beispielsweise auch in das Verzeichnis �Eigene Dateien/Neo�  (oder in ein anderes Verzeichnis, f�r das man Schreibrechte hat) installieren. 
     62In diesem Fall muss dann f�r eine Kompilierung des Skriptes noch die Datei Build-Update.bat lokal entsprechend angepasst werden (diese lokale �nderung der Build-Update.bat aber bitte nicht einchecken, da die allermeisten Entwickler Autohotkey im vorgeschlagenen Standardverzeichnis installiert haben!). 
    3763 
    38 === Die ausführbare Datei aktualisieren === 
     64=== Die ausfhrbare Datei aktualisieren === 
    3965Um die neo20.exe auf den neuesten Stand zu bringen, reicht (wenn Autohotkey im Standardverzeichnis installiert wurde) ein Doppelklick auf die Batch-Datei Build-Update.bat 
    40 Es ist empfehlenswert, diese Batch-Datei stets vor einem Commit auszuführen, damit die .exe-Datei immer auf dem aktuellsten Stand ist. 
     66Es ist empfehlenswert, diese Batch-Datei stets vor einem Commit auszufhren, damit die .exe-Datei immer auf dem aktuellsten Stand ist. 
    4167 
    4268=== Den Sourcecode bearbeiten === 
    43 Die Datei neo20.ahk sollte auf keinen Fall mehr direkt bearbeitet werden, da sie inzwischen automatisch generiert und regelmäßig überschrieben wird. 
     69Die Datei neo20.ahk sollte auf keinen Fall mehr direkt bearbeitet werden, da sie inzwischen automatisch generiert und regelm��ig �berschrieben wird. 
    4470 
    45 Stattdessen müssen die Dateien/Module im Source-Unterverzeichnis bearbeitet werden, etwa: 
     71Stattdessen mssen die Dateien/Module im Source-Unterverzeichnis bearbeitet werden, etwa: 
    4672Source\Keys-Neo.ahk 
    4773Source\Keys-Qwert-to-Neo.ahk 
     
    4975Source\Methods-Lights.ahk 
    5076 
    51 Um die gemachten Änderungen zu testen, sollte die Datei 
    52 Source\All.ahk 
    53 verwendet werden, die alle Module einbindet und regulär durch einen Doppelklick mit dem AHK-Interpreter gestartet werden kann. 
     77Um die gemachten �nderungen zu testen, sollte die Datei Source\All.ahk verwendet werden, die alle Module einbindet und regul�r durch einen Doppelklick mit dem AHK-Interpreter gestartet werden kann. 
    5478 
    55 Der große Vorteil dieser Methode liegt darin, dass sich die Zeilennummern eventueller Fehlermeldungen nicht mehr auf die große »vereinigte« AHK-Datei, sondern auf die tatsächlich relevanten Module beziehen, z.B. : 
     79Der gro�e Vorteil dieser Methode liegt darin, dass sich die Zeilennummern eventueller Fehlermeldungen nicht mehr auf die gro�e �vereinigte� AHK-Datei, sondern auf die tats�chlich relevanten Module beziehen, z.�B.�: 
    5680Error at line 64 in #include file "C:\...\autohotkey\Source\Methods-Lights.ahk" 
    5781Line Text: CTL_CODE_LED(p_device_type, p_function, p_method, p_access) 
     
    5983The programm will exit. 
    6084 
    61 Zudem ist angedacht, den AHK-Treiber in voneinander möglichst unabhängige Teile aufzusplitten, um so die Übersichtlichkeit zu erhöhen und die Komplexität des Codes zu verringern. 
     85Zudem ist angedacht, den AHK-Treiber in voneinander m�glichst unabh�ngige Teile aufzusplitten, um so die �bersichtlichkeit zu erh�hen und die Komplexit�t des Codes zu verringern. 
    6286 
    6387=== Links zur AHK/Autohotkey-Skriptsprache === 
    64 Eine kurze Einführung (Installation und Beispielscipt) findet man etwa auf 
     88Eine kurze Einf�hrung (Installation und Beispielskript) findet man etwa auf 
    6589http://www.kikizas.net/en/usbapps.ahk.html 
    6690 
     
    7195Das Programm kann alle Tastendrucke abfangen und stattdessen andere Tasten simulieren. Die Zeile 
    7296a::send b 
    73 fängt z. B. die Taste »a« ab und sendet stattdessen ein »b«. Die AHK-Dateien lassen sich mit einem Texteditor bearbeiten, man muss dann nur das Skript neu starten, um die Änderungen zu übernehmen. 
    74  
    75 ==== Bekannte Fehler ==== 
    76 Bisher reagieren nur die Buchstaben der 1. und 2. Ebene richtig auf CapsLock (also immer groß schreiben – CapsLock erreicht man unter Neo, wenn man beide Shift-Tasten gleichzeitig drückt). 
    77  
    78 == Ziffernblock == 
    79 Der Ziffernblock reagiert nicht auf Tastenkombinationen mit Strg, Alt usw. 
    80  
    81 Der Ziffernblock auf der 2. Ebene ist wahlweise 
    82 - bei AUSgeschaltetem Numlock 
    83 - bei EINgeschaltetem Numlock mit Shift 
    84 zu erreichen. 
    85 Der Ziffernblock auf der 3. Ebene funktioniert bei EINgeschaltetem Numlock mit Mod3 (Caps/#). 
    86 Der Ziffernblock auf der 4. Ebene ist wahlweise 
    87 - bei AUSgeschaltetem Numlock mit Mod3 + Shift 
    88 - bei EINgeschaltetem Numlock über Mod4 
    89 zu erreichen. 
    90 Da die 2. Ebene über Shift ebenfalls bei EINgeschaltetem Numlock funktioniert, ist das Ausschalten des Ziffernblocks nicht unbedingt nötig. 
    91  
    92 ==== Besonderheiten bei der AHK-Windowsversion von Neo ==== 
    93 Ebene 5 des Ziffernblocks lässt sich außer über Mod3+Shift auch über 
    94 Mod4 ansprechen. 
    95  
    96 ==== Warnung ==== 
    97 ACHTUNG! Unter Windows ist folgendes festgelegt: 
    98 AltGr + Pos1 = Abmelden 
    99 AltGr + Ende = Computer ausschalten 
    100 --> diese Kombinationen treten auf bei AUSgeschaltetem Numlock mit Mod4. 
    101  
    102 === Globale Schalter und die Neo2.ini === 
    103 Es besteht die Möglichkeit, beim Starten des AHK-Treibers individuelle Anfangswerte für die globalen Schalter des Programms vorzugeben. 
    104  
    105 Dies geschieht über die Konfigurationsdatei Neo2.ini (diese muss im gebräuchlichen INI-Format vorliegen, also insbesondere ANSI-kodiert sein).  
    106 Eine Neo2.ini, die alle Werte auf die Standardwerte »ändert«, sähe etwa so aus: 
    107 [Global] 
    108 # Im folgenden gilt (soweit nicht anders angegeben) Ja = 1, Nein = 0: 
    109 ahkTreiberKombi=0 
    110 einHandNeo=0 
    111 lernModus=0 
    112 zeigeLockBoxen=1 
    113 UseMod4Light=1 
    114 LangSTastatur=0 
    115 DeadSilence=0 
    116 DeadCompose=0 
    117  
    118 Diese Datei muss manuell (etwa mit dem Notepad) in dem richtigen Verzeichnis innerhalb der Anwendungsdaten des aktuellen Nutzers angelegt werden. Unter Windows Vista ist dies etwa das Verzeichnis 
    119 C:\Users\<BENUTZERNAME>\AppData\Roaming\Neo2\Neo2.ini 
    120 unter Windows XP hingegen das Verzeichnis 
    121 C:\Dokumente und Einstellungen\<BENUTZERNAME>\Anwendungsdaten\Neo2\Neo2.ini  
    122 usw. 
     97f�ngt z.?B. die Taste �a� ab und sendet stattdessen ein �b�. Die AHK-Dateien lassen sich mit einem Texteditor bearbeiten, man muss dann nur das Skript neu starten, um die �nderungen zu �bernehmen. 
    12398 
    12499=== ... === 
  • windows/autohotkey/Source/All.ahk

    r771 r776  
    11/*  
    22   ------------------------------------------------------ 
    3    Liste der Module 
    4     
     3   All.ahk: 
     4   Diese Datei ist f�r Entwickler zum schnellen Testen von �nderungen vorgesehen. Bei Syntaxfehlern bietet sie zudem den Vorteil, dass die Zeilennummern relativ zu den einzelnen Modulen angezeigt werden. 
     5 
    56   Die Reihenfolge der Includes *ist* relevant! 
    6     
     7   Denn: Vor dem Men� in der Global-Part.ahk d�rfen keine Tastenkombinationen definiert werden. Ansonsten k�nnen Sie die Dateien hier beliebig anordnen. :-) 
     8 
    79   Siehe auch: 
    810   http://www.autohotkey.com/docs/commands/_Include.htm 
  • windows/autohotkey/Source/Global-Part.ahk

    r748 r776  
    1  
     1SetNumLockState AlwaysOff 
    22 
    33/**************** 
     
    3737IniRead, lernModus, %ApplicationFolder%\NEO2.ini, Global, lernModus, 0 
    3838 
    39 ; Soll mit MessageBoxen explizit auf das Ein- und Ausschalten des Mod{3,4}-Locks hingewiesen werden? 
    40 IniRead, zeigeLockBoxen, %ApplicationFolder%\NEO2.ini, Global, zeigeLockBoxen, 1 
     39; Soll mit einer MsgBox explizit auf das Ein- und Ausschalten des Mod4-Locks hingewiesen werden? 
     40IniRead, zeigeLockBox, %ApplicationFolder%\NEO2.ini, Global, zeigeLockBox, 1 
    4141 
    4242; Soll aktivierter Mod4-Lock �ber die Rollen-LED des Keybord angezeigt werden (analog zu CapsLock)? 
     
    261261    send {blind}{Esc} 
    262262return 
     263 
     264/* 
     265   ------------------------------------------------------ 
     266   Shift+Pause "pausiert" das Skript. 
     267   ------------------------------------------------------ 
     268*/ 
     269 
     270*pause:: 
     271Suspend, Permit 
     272   if isshiftpressed() 
     273     goto togglesuspend 
     274   else 
     275     send {blind}{pause} 
     276return 
     277 
     278; ------------------------------------ 
     279 
     280^.::einHandNeo := not(einHandNeo)  ; Punkt 
     281^,::lernModus := not(lernModus)    ; Komma 
     282 
     283 
     284 
     285togglesuspend: 
     286   if A_IsSuspended 
     287   { 
     288      menu, tray, rename, %enable%, %disable% 
     289      menu, tray, tip, %name% 
     290      if (iconBenutzen) 
     291          menu, tray, icon, %ResourceFolder%\neo.ico,,1   
     292      suspend , off ; Schaltet Suspend aus -> NEO 
     293   } 
     294   else 
     295   { 
     296      menu, tray, rename, %disable%, %enable% 
     297      menu, tray, tip, %name% : Deaktiviert 
     298      if (iconBenutzen) 
     299         menu, tray, icon, %ResourceFolder%\neo_disabled.ico,,1 
     300      suspend , on  ; Schaltet Suspend ein -> QWERTZ  
     301   } 
     302 
     303return 
     304 
     305 
     306help: 
     307   Run, %A_WinDir%\hh mk:@MSITStore:autohotkey.chm 
     308return 
     309 
     310 
     311about: 
     312   msgbox, 64, %name% � Ergonomische Tastaturbelegung,  
     313   ( 
     314   %name%  
     315   `nDas Neo-Layout ersetzt das �bliche deutsche  
     316   Tastaturlayout mit der Alternative Neo,  
     317   beschrieben auf http://neo-layout.org/.  
     318   `nDazu sind keine Administratorrechte n�tig.  
     319   `nWenn Autohotkey aktiviert ist, werden alle Tastendrucke  
     320   abgefangen und statt dessen eine �bersetzung weitergeschickt.  
     321   `nDies geschieht transparent f�r den Anwender,  
     322   es muss nichts installiert werden.  
     323   `nDie Zeichen�bersetzung kann leicht �ber das Icon im  
     324   Systemtray deaktiviert werden.  `n 
     325   ) 
     326return 
     327 
     328 
     329neo: 
     330   run http://neo-layout.org/ 
     331return 
     332 
     333autohotkey: 
     334   run http://autohotkey.com/ 
     335return 
     336 
     337open: 
     338   ListLines ; shows the Autohotkey window 
     339return 
     340 
     341edit: 
     342   edit 
     343return 
     344 
     345reload: 
     346   Reload 
     347return 
     348 
     349hide: 
     350   menu, tray, noicon 
     351return 
     352 
     353exitprogram: 
     354   exitapp 
     355return 
     356 
     357 
     358 
  • windows/autohotkey/Source/Keys-Neo.ahk

    r756 r776  
    33 
    44  Ablauf bei toten Tasten: 
    5   1. Ebene Aktualisieren 
    6   2. Abh�ngig von der Variablen "Ebene" Zeichen ausgeben und die Variable "PriorDeadKey" setzen 
     5  1. Ebene Aktualisieren. 
     6  2. Abh�ngig von der Variablen "Ebene" Zeichen ausgeben und die Variable "PriorDeadKey" setzen. 
    77 
    88  Ablauf bei "untoten" Tasten: 
    9   1. Ebene Aktualisieren 
    10   2. Abh�ngig von den Variablen "Ebene" und "PriorDeadKey" Zeichen ausgeben 
    11   3. "PriorDeadKey" mit leerem String �berschreiben 
     9  1. Ebene Aktualisieren. 
     10  2. Abh�ngig von den Variablen "Ebene" und "PriorDeadKey" Zeichen ausgeben. 
     11  3. "PriorDeadKey" mit leerem String �berschreiben. 
    1212 
    1313  Reihe 1 
     
    3939  else if (Ebene = 5) 
    4040  { 
    41     deadAsc("-")    ; Querstrich, tot 
     41    deadUni(0x002D) ; Querstrich, tot 
    4242    DeadKey := "c5" 
    4343  } 
    4444  else if (Ebene = 6) 
    4545  { 
    46     deadAsc(".")    ; Punkt drunter (Colon), tot 
     46    deadUni(0x002E) ; Punkt drunter (Colon), tot 
    4747    DeadKey := "c6" 
    4848  } 
     
    7373      send � 
    7474   else if (Ebene = 3) 
    75       SendUnicodeChar(0x00B9) ; 2 Hochgestellte 
     75      SendUnicodeChar(0x00B9) ; Hochgestellte 2 
    7676   else if (Ebene = 4) 
    77       SendUnicodeChar(0x2022) ; bullet 
     77      SendUnicodeChar(0x2022) ; Bullet 
    7878   else if (Ebene = 5) 
    7979      SendUnicodeChar(0x2640) ; Piktogramm weiblich 
     
    101101  } 
    102102  else if (Ebene = 2) 
    103     SendUnicodeChar(0x2116) ; numero 
    104   else if (Ebene = 3) 
    105     SendUnicodeChar(0x00B2) ; 2 Hochgestellte 
    106   else if (Ebene = 4) 
    107     SendUnicodeChar(0x2023) ; aufzaehlungspfeil 
     103    SendUnicodeChar(0x2116) ; Numero 
     104  else if (Ebene = 3) 
     105    SendUnicodeChar(0x00B2) ; Hochgestellte 2 
     106  else if (Ebene = 4) 
     107    SendUnicodeChar(0x2023) ; Aufz�hlungspfeil 
    108108  else if (Ebene = 5) 
    109109    SendUnicodeChar(0x26A5) ; Piktogramm Zwitter 
     
    133133    send � 
    134134  else if (Ebene = 3) 
    135     SendUnicodeChar(0x00B3) ; 3 Hochgestellte 
     135    SendUnicodeChar(0x00B3) ; Hochgestellte 3 
    136136  else if (Ebene = 4) 
    137137  { 
     
    162162  } 
    163163  else if (Ebene = 2) 
    164     SendUnicodeChar(0x00BB) ; �, Double guillemot right 
     164    SendUnicodeChar(0x00BB) ; Double guillemot right 
    165165   else if (Ebene = 3) 
    166166    Send {blind}�           ; Single guillemot right 
    167167  else if (Ebene = 4) 
    168     Send {blind}{PgUp}      ; Prev 
     168    Send {blind}{PgUp} 
    169169  else if (Ebene = 5) 
    170170    SendUnicodeChar(0x2113) ; Script small L 
     
    296296    Send {blind}{NumpadDiv} 
    297297  else if (Ebene = 5) 
    298     SendUnicodeChar(0x27E8) ;bra (�ffnende spitze klammer) 
     298    SendUnicodeChar(0x27E8) ; bra (�ffnende spitze Klammer) 
    299299  else if (Ebene = 6) 
    300300    SendUnicodeChar(0x2204) ; es existiert nicht 
     
    324324    Send {blind}{NumpadMult} 
    325325  else if (Ebene = 5) 
    326     SendUnicodeChar(0x27E9) ;ket (schlie�ende spitze klammer) 
     326    SendUnicodeChar(0x27E9) ; ket (schlie�ende spitze Klammer) 
    327327  else if (Ebene = 6) 
    328328    SendUnicodeChar(0x2226) ; nicht parallel 
     
    371371  else if (Ebene = 3) 
    372372    SendUnicodeChar(0x2014) ; Englischer Gedankenstrich (Geviertstrich) 
    373   else if (Ebene = 4) 
     373  else if (Ebene = 4)       ; leer 
    374374  { 
    375375     CompKey := PriorCompKey 
    376376     DeadKey := PriorDeadKey 
    377   } ; leer 
     377  } 
    378378  else if (Ebene = 5) 
    379379    SendUnicodeChar(0x2011) ; gesch�tzter Bindestrich (Bindestrich ohne Zeilenumbruch) 
     
    448448    if (not(lernModus) or lernModus_neo_Backspace) 
    449449      Send {blind}{Backspace} 
    450     else 
     450    else                    ; leer 
    451451    { 
    452452       CompKey := PriorCompKey 
    453453       DeadKey := PriorDeadKey 
    454     } ; leer 
     454    } 
    455455  else if (Ebene = 6) 
    456456    SendUnicodeChar(0x2259) ; estimates 
     
    462462  EbeneAktualisieren() 
    463463  if (Ebene12 and !(CheckDeadUni12("a1",0x013A,0x0139) 
    464             or CheckDeadUni12("a3",0x013C,0x013B) 
    465             or CheckDeadUni12("c2",0x013E,0x013D) 
    466             or CheckDeadUni12("c4",0x0140,0x013F) 
    467             or CheckDeadUni12("c6",0x1E37,0x1E36) 
    468             or CheckDeadUni12("t4",0x0142,0x0141))) 
     464                 or CheckDeadUni12("a3",0x013C,0x013B) 
     465                 or CheckDeadUni12("c2",0x013E,0x013D) 
     466                 or CheckDeadUni12("c4",0x0140,0x013F) 
     467                 or CheckDeadUni12("c6",0x1E37,0x1E36) 
     468                 or CheckDeadUni12("t4",0x0142,0x0141))) 
    469469    OutputChar("l","L") 
    470470  else if (Ebene = 3) 
     
    482482  EbeneAktualisieren() 
    483483  if (Ebene12 and !(CheckDeadUni12("a1",0x0107,0x0106) 
    484             or CheckDeadUni12("a3",0x00E7,0x00E6) 
    485             or CheckDeadUni12("a4",0x010B,0x010A) 
    486             or CheckDeadUni12("c1",0x0109,0x0108) 
    487             or CheckDeadUni12("c2",0x010D,0x010C) 
    488             or CheckCompAsc12("o","�","�") 
    489             or CheckCompAsc12("O","�","�"))) 
     484                 or CheckDeadUni12("a3",0x00E7,0x00E6) 
     485                 or CheckDeadUni12("a4",0x010B,0x010A) 
     486                 or CheckDeadUni12("c1",0x0109,0x0108) 
     487                 or CheckDeadUni12("c2",0x010D,0x010C) 
     488                 or CheckCompAsc("o","�"))) 
    490489    OutputChar("c","C") 
    491490  else if (Ebene = 3) 
     
    494493    if (not(lernModus) or lernModus_neo_Entf) 
    495494      Send {blind}{Del} 
    496     else 
     495    else                    ; leer 
    497496    { 
    498497       CompKey := PriorCompKey 
    499498       DeadKey := PriorDeadKey 
    500     } ; leer 
    501   else if (Ebene = 5) 
    502     SendUnicodeChar(0x03C7) ;chi 
    503   else if (Ebene = 6) 
    504     SendUnicodeChar(0x2102)  ; C (Komplexe Zahlen) 
     499    } 
     500  else if (Ebene = 5) 
     501    SendUnicodeChar(0x03C7) ; chi 
     502  else if (Ebene = 6) 
     503    SendUnicodeChar(0x2102) ; C (Komplexe Zahlen) 
    505504return 
    506505 
     
    510509    OutputChar("w","W") 
    511510  else if (Ebene = 3) 
    512     SendUnicodeChar(0x005E) ; untotes ^ - Unicode-Name: CIRCUMFLEX ACCENT 
    513       ;send {^}{space}      ; Funktioniert nicht unter Java-Programmen 
    514   else if (Ebene = 4) 
    515     Send {blind}{Insert} 
     511    SendUnicodeChar(0x005E) ; Zirkumflex 
     512  else if (Ebene = 4) 
     513    Send {blind}{Insert}    ; Einfg 
    516514  else if (Ebene = 5) 
    517515    SendUnicodeChar(0x03C9) ; omega 
     
    523521  EbeneAktualisieren() 
    524522  if (Ebene12 and !(CheckDeadUni12("a3",0x0137,0x0136) 
    525             or CheckDeadUni12("c6",0x1E33,0x1E32))) 
     523                 or CheckDeadUni12("c6",0x1E33,0x1E32))) 
    526524    OutputChar("k","K") 
    527525  else if (Ebene = 3) 
     
    538536  EbeneAktualisieren() 
    539537  if (Ebene12 and !(CheckDeadUni12("a4",0x1E23,0x1E22) 
    540             or CheckDeadUni12("c1",0x0125,0x0124) 
    541             or CheckDeadUni12("c5",0x0127,0x0126) 
    542             or CheckDeadUni12("c6",0x1E25,0x1E24))) 
     538                 or CheckDeadUni12("c1",0x0125,0x0124) 
     539                 or CheckDeadUni12("c5",0x0127,0x0126) 
     540                 or CheckDeadUni12("c6",0x1E25,0x1E24))) 
    543541    OutputChar("h","H") 
    544542  else if ((Ebene = 3) and !(CheckDeadUni("c5",0x2264))) ; kleiner gleich 
     
    548546    Send {blind}{NumPad7} 
    549547  else if (Ebene = 5) 
    550     SendUnicodeChar(0x03C8) ;psi 
    551   else if (Ebene = 6) 
    552     SendUnicodeChar(0x03A8)  ; Psi 
     548    SendUnicodeChar(0x03C8) ; psi 
     549  else if (Ebene = 6) 
     550    SendUnicodeChar(0x03A8) ; Psi 
    553551return 
    554552 
     
    556554  EbeneAktualisieren() 
    557555  if (Ebene12 and !(CheckDeadUni12("a3",0x0123,0x0122) 
    558             or CheckDeadUni12("a4",0x0121,0x0120) 
    559             or CheckDeadUni12("c1",0x011D,0x011C) 
    560             or CheckDeadUni12("c3",0x011F,0x011E))) 
     556                 or CheckDeadUni12("a4",0x0121,0x0120) 
     557                 or CheckDeadUni12("c1",0x011D,0x011C) 
     558                 or CheckDeadUni12("c3",0x011F,0x011E))) 
    561559    OutputChar("g","G") 
    562   else if ((Ebene = 3) and !(CheckDeadUni("c5",0x2265))) ; gr��er gleich 
    563     send {blind}> 
     560  else if ((Ebene = 3) and !(CheckDeadUni("c5",0x2265))) 
     561    send {blind}>           ; gr��er gleich 
    564562  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2078) 
    565                   or CheckDeadUni("c5",0x2088))) 
     563                          or CheckDeadUni("c5",0x2088))) 
    566564    Send {blind}{NumPad8} 
    567565  else if (Ebene = 5) 
    568     SendUnicodeChar(0x03B3) ;gamma 
    569   else if (Ebene = 6) 
    570     SendUnicodeChar(0x0393)  ; Gamma 
     566    SendUnicodeChar(0x03B3) ; gamma 
     567  else if (Ebene = 6) 
     568    SendUnicodeChar(0x0393) ; Gamma 
    571569return 
    572570 
     
    577575    OutputChar("f","F") 
    578576  else if ((Ebene = 3) and !(CheckDeadUni("a6",0x2257)   ; ring equal to 
    579                or CheckDeadUni("c1",0x2259)   ; entspricht 
    580                or CheckDeadUni("c2",0x225A)   ; EQUIANGULAR TO 
    581                or CheckDeadUni("c5",0x2261)   ; identisch 
    582                or CheckDeadUni("t1",0x2245)   ; ungef�hr gleich 
    583                or CheckDeadUni("t4",0x2260))) ; ungleich 
     577                          or CheckDeadUni("c1",0x2259)   ; entspricht 
     578                          or CheckDeadUni("c2",0x225A)   ; EQUIANGULAR TO 
     579                          or CheckDeadUni("c5",0x2261)   ; identisch 
     580                          or CheckDeadUni("t1",0x2245)   ; ungef�hr gleich 
     581                          or CheckDeadUni("t4",0x2260))) ; ungleich 
    584582    send {blind}`= 
    585583  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2079) 
    586                   or CheckDeadUni("c5",0x2089))) 
    587     Send {blind}{NumPad9} 
     584                          or CheckDeadUni("c5",0x2089))) 
     585    send {blind}{NumPad9} 
    588586  else if (Ebene = 5) 
    589587    SendUnicodeChar(0x03C6) ; phi 
    590588  else if (Ebene = 6) 
    591     SendUnicodeChar(0x03A6)  ; Phi 
     589    SendUnicodeChar(0x03A6) ; Phi 
    592590return 
    593591 
     
    612610    if (GetKeyState("CapsLock","T")) 
    613611      SendUnicodeChar(0x1E9E) ; versal-� 
    614     else if (LangSTastatur = 1) 
     612    else if LangSTastatur 
    615613      send {blind}s 
    616614    else 
     
    618616  else if (Ebene = 2) 
    619617    if (GetKeyState("CapsLock","T")) 
    620       if (LangSTastatur = 1) 
     618      if LangSTastatur 
    621619        send {blind}s 
    622620      else 
     
    625623      SendUnicodeChar(0x1E9E) ; versal-� 
    626624  else if (Ebene = 3) 
    627     if (LangSTastatur = 1) 
     625    if LangSTastatur 
    628626      send � 
    629627    else 
    630628      SendUnicodeChar(0x017F) ; langes s 
    631629  else if (Ebene = 5) 
    632     SendUnicodeChar(0x03C2) ; varsigma 
    633   else if (Ebene = 6) 
    634     SendUnicodeChar(0x2218) ; Verkn�pfungsoperator 
     630    SendUnicodeChar(0x03C2)   ; varsigma 
     631  else if (Ebene = 6) 
     632    SendUnicodeChar(0x2218)   ; Verkn�pfungsoperator 
    635633return 
    636634 
     
    640638  if (Ebene = 1) 
    641639  { 
    642     deadUni(0x02DC)  ;Tilde, tot 
     640    deadUni(0x02DC)  ; Tilde, tot 
    643641    DeadKey := "t1" 
    644642  } 
     
    660658  else if (Ebene = 5) 
    661659  { 
    662     deadUni(0x02DD)  ;Doppelakut 
     660    deadUni(0x02DD)  ; Doppelakut 
    663661    DeadKey := "t5" 
    664662  } 
     
    681679  EbeneAktualisieren() 
    682680  if (Ebene12 and !(CheckDeadUni12("a1",0x00FA,0x00DA) 
    683             or CheckDeadUni12("a2",0x00F9,0x00D9) 
    684             or CheckDeadUni12("a5",0x0173,0x0172) 
    685             or CheckDeadUni12("a6",0x016F,0x016E) 
    686             or CheckDeadUni12("c1",0x00FB,0x00DB) 
    687             or CheckDeadUni12("c2",0x01D4,0x01D3) 
    688             or CheckDeadUni12("c3",0x016D,0x016C) 
    689             or CheckDeadUni12("t1",0x0169,0x0168) 
    690             or CheckDeadUni12("t2",0x016B,0x016A) 
    691             or CheckDeadAsc12("t3","�","�") 
    692             or CheckDeadUni12("t5",0x0171,0x0170))) 
     681                 or CheckDeadUni12("a2",0x00F9,0x00D9) 
     682                 or CheckDeadUni12("a5",0x0173,0x0172) 
     683                 or CheckDeadUni12("a6",0x016F,0x016E) 
     684                 or CheckDeadUni12("c1",0x00FB,0x00DB) 
     685                 or CheckDeadUni12("c2",0x01D4,0x01D3) 
     686                 or CheckDeadUni12("c3",0x016D,0x016C) 
     687                 or CheckDeadUni12("t1",0x0169,0x0168) 
     688                 or CheckDeadUni12("t2",0x016B,0x016A) 
     689                 or CheckDeadAsc12("t3","�","�") 
     690                 or CheckDeadUni12("t5",0x0171,0x0170))) 
    693691    OutputChar("u","U") 
    694692  else if (Ebene = 3) 
     
    696694  else if (Ebene = 4) 
    697695    Send {blind}{Home} 
    698   else if (Ebene = 5) 
     696  else if (Ebene = 5)       ; leer 
    699697  { 
    700698     CompKey := PriorCompKey 
    701699     DeadKey := PriorDeadKey 
    702   } ; leer 
     700  } 
    703701  else if (Ebene = 6) 
    704702    SendUnicodeChar(0x222E) ; contour integral 
     
    708706  EbeneAktualisieren() 
    709707  if (Ebene12 and !(CheckDeadUni12("a1",0x00ED,0x00CD) 
    710             or CheckDeadUni12("a2",0x00EC,0x00CC) 
    711             or CheckDeadUni12("a4",0x012F,0x012E) 
    712             or CheckDeadUni12("a5",0x0131,0x0130) 
    713             or CheckDeadUni12("c1",0x00EE,0x00CE) 
    714             or CheckDeadUni12("c2",0x01D0,0x01CF) 
    715             or CheckDeadUni12("c3",0x012D,0x012C) 
    716             or CheckDeadUni12("t1",0x0129,0x0128) 
    717             or CheckDeadUni12("t2",0x012B,0x012A) 
    718             or CheckDeadAsc12("t3","�","�"))) 
     708                 or CheckDeadUni12("a2",0x00EC,0x00CC) 
     709                 or CheckDeadUni12("a4",0x012F,0x012E) 
     710                 or CheckDeadUni12("a5",0x0131,0x0130) 
     711                 or CheckDeadUni12("c1",0x00EE,0x00CE) 
     712                 or CheckDeadUni12("c2",0x01D0,0x01CF) 
     713                 or CheckDeadUni12("c3",0x012D,0x012C) 
     714                 or CheckDeadUni12("t1",0x0129,0x0128) 
     715                 or CheckDeadUni12("t2",0x012B,0x012A) 
     716                 or CheckDeadAsc12("t3","�","�"))) 
    719717    OutputChar("i","I") 
    720718  else if (Ebene = 3) 
     
    722720  else if (Ebene = 4) 
    723721    Send {Blind}{Left} 
    724   else if (Ebene = 5   ) 
     722  else if (Ebene = 5) 
    725723    SendUnicodeChar(0x03B9) ; iota 
    726724  else if (Ebene = 6) 
     
    731729  EbeneAktualisieren() 
    732730  if (Ebene12 and !(CheckDeadUni12("a1",0x00E1,0x00C1) 
    733             or CheckDeadUni12("a2",0x00E0,0x00C0) 
    734             or CheckDeadUni12("a5",0x0105,0x0104) 
    735             or CheckDeadAsc12("a6","�","�") 
    736             or CheckDeadUni12("c1",0x00E2,0x00C2) 
    737             or CheckDeadUni12("c2",0x01CE,0x01CD) 
    738             or CheckDeadUni12("c3",0x0103,0x0102) 
    739             or CheckDeadUni12("t1",0x00E3,0x00C3) 
    740             or CheckDeadUni12("t2",0x0101,0x0100) 
    741             or CheckDeadAsc12("t3","�","�"))) 
     731                 or CheckDeadUni12("a2",0x00E0,0x00C0) 
     732                 or CheckDeadUni12("a5",0x0105,0x0104) 
     733                 or CheckDeadAsc12("a6","�","�") 
     734                 or CheckDeadUni12("c1",0x00E2,0x00C2) 
     735                 or CheckDeadUni12("c2",0x01CE,0x01CD) 
     736                 or CheckDeadUni12("c3",0x0103,0x0102) 
     737                 or CheckDeadUni12("t1",0x00E3,0x00C3) 
     738                 or CheckDeadUni12("t2",0x0101,0x0100) 
     739                 or CheckDeadAsc12("t3","�","�"))) 
    742740    OutputChar("a","A") 
    743741  else if (Ebene = 3) 
     
    746744    Send {Blind}{Down} 
    747745  else if (Ebene = 5) 
    748     SendUnicodeChar(0x03B1) ;alpha 
    749   else if (Ebene = 6) 
    750     SendUnicodeChar(0x2200) ;f�r alle 
     746    SendUnicodeChar(0x03B1) ; alpha 
     747  else if (Ebene = 6) 
     748    SendUnicodeChar(0x2200) ; f�r alle 
    751749return 
    752750 
     
    754752  EbeneAktualisieren() 
    755753  if (Ebene12 and !(CheckDeadUni12("a1",0x00E9,0x00C9) 
    756             or CheckDeadUni12("a2",0x00E8,0x00C8) 
    757             or CheckDeadUni12("a4",0x0117,0x0116) 
    758             or CheckDeadUni12("a5",0x0119,0x0118) 
    759             or CheckDeadUni12("c1",0x00EA,0x00CA) 
    760             or CheckDeadUni12("c2",0x011B,0x011A) 
    761             or CheckDeadUni12("c3",0x0115,0x0114) 
    762             or CheckDeadUni12("t2",0x0113,0x0112) 
    763             or CheckDeadAsc12("t3","�","�") 
    764             or CheckCompAsc12("a","�","�") 
    765             or CheckCompAsc12("A","�","�") 
    766             or CheckCompAsc12("o","�","�") 
    767             or CheckCompAsc12("O","�","�"))) 
     754                 or CheckDeadUni12("a2",0x00E8,0x00C8) 
     755                 or CheckDeadUni12("a4",0x0117,0x0116) 
     756                 or CheckDeadUni12("a5",0x0119,0x0118) 
     757                 or CheckDeadUni12("c1",0x00EA,0x00CA) 
     758                 or CheckDeadUni12("c2",0x011B,0x011A) 
     759                 or CheckDeadUni12("c3",0x0115,0x0114) 
     760                 or CheckDeadUni12("t2",0x0113,0x0112) 
     761                 or CheckDeadAsc12("t3","�","�") 
     762                 or CheckCompAsc12("a","�","�") 
     763                 or CheckCompAsc12("A","�","�") 
     764                 or CheckCompAsc12("o","�","�") 
     765                 or CheckCompAsc12("O","�","�"))) 
    768766    OutputChar("e","E") 
    769   else if (Ebene = 3)    ; { 
     767  else if (Ebene = 3) 
    770768    send {blind}{}} 
    771769  else if (Ebene = 4) 
    772770    Send {Blind}{Right} 
    773771  else if (Ebene = 5) 
    774       SendUnicodeChar(0x03B5) ;epsilon 
    775   else if (Ebene = 6) 
    776       SendUnicodeChar(0x2203) ;es existiert 
     772      SendUnicodeChar(0x03B5) ; epsilon 
     773  else if (Ebene = 6) 
     774      SendUnicodeChar(0x2203) ; es existiert 
    777775return 
    778776 
     
    780778  EbeneAktualisieren() 
    781779  if (Ebene12 and !(CheckDeadUni12("a1",0x00F3,0x00D3) 
    782             or CheckDeadUni12("a2",0x00F2,0x00D2) 
    783             or CheckDeadUni12("a5",0x01EB,0x01EA) 
    784             or CheckDeadUni12("c1",0x00F4,0x00D4) 
    785             or CheckDeadUni12("c2",0x01D2,0x01D1) 
    786             or CheckDeadUni12("c3",0x014F,0x014E) 
    787             or CheckDeadUni12("t1",0x00F5,0x00D5) 
    788             or CheckDeadUni12("t2",0x014D,0x014C) 
    789             or CheckDeadAsc12("t3","�","�") 
    790             or CheckDeadUni12("t4",0x00F8,0x00D8) 
    791             or CheckDeadUni12("t5",0x0151,0x0150))) 
     780                 or CheckDeadUni12("a2",0x00F2,0x00D2) 
     781                 or CheckDeadUni12("a5",0x01EB,0x01EA) 
     782                 or CheckDeadUni12("c1",0x00F4,0x00D4) 
     783                 or CheckDeadUni12("c2",0x01D2,0x01D1) 
     784                 or CheckDeadUni12("c3",0x014F,0x014E) 
     785                 or CheckDeadUni12("t1",0x00F5,0x00D5) 
     786                 or CheckDeadUni12("t2",0x014D,0x014C) 
     787                 or CheckDeadAsc12("t3","�","�") 
     788                 or CheckDeadUni12("t4",0x00F8,0x00D8) 
     789                 or CheckDeadUni12("t5",0x0151,0x0150))) 
    792790    OutputChar("o","O") 
    793791  else if (Ebene = 3) 
     
    804802  EbeneAktualisieren() 
    805803  if (Ebene12 and !(CheckDeadUni12("a1",0x015B,0x015A) 
    806               or CheckDeadUni12("a3",0x015F,0x015E) 
    807               or CheckDeadUni12("a4",0x1E61,0x1E60) 
    808               or CheckDeadUni12("c1",0x015D,0x015C) 
    809               or CheckDeadUni12("c2",0x0161,0x0160) 
    810               or CheckDeadUni12("c6",0x1E63,0x1A62))) 
     804                   or CheckDeadUni12("a3",0x015F,0x015E) 
     805                   or CheckDeadUni12("a4",0x1E61,0x1E60) 
     806                   or CheckDeadUni12("c1",0x015D,0x015C) 
     807                   or CheckDeadUni12("c2",0x0161,0x0160) 
     808                   or CheckDeadUni12("c6",0x1E63,0x1A62))) 
    811809   { 
    812810      if (Ebene = 1) 
     
    814812        if LangSTastatur 
    815813          if (GetKeyState("CapsLock","T")) 
     814          { 
    816815            send {blind}s 
     816            if (PriorDeadKey = "comp") 
     817              Compkey := "s" 
     818          } 
    817819          else 
     820          { 
    818821            SendUnicodeChar(0x017F) ;langes S 
     822            if (PriorDeadKey = "comp") 
     823              CompKey := "lang_s" 
     824          } 
    819825        else 
     826        { 
    820827          send {blind}s 
    821         if (PriorDeadKey = "comp") 
    822           CompKey := "s" 
     828          if (PriorDeadKey = "comp") 
     829            CompKey := "s" 
     830        } 
    823831      } 
    824832      else if (Ebene = 2) 
     
    826834        if LangSTastatur 
    827835          if (GetKeyState("CapsLock","T")) 
     836          { 
    828837            SendUnicodeChar(0x017F) ;langes S 
     838            if (PriorDeadKey = "comp") 
     839              CompKey := "lang_s" 
     840          } 
    829841          else 
     842          { 
    830843            send {blind}S 
     844            if (PriorDeadKey = "comp") 
     845              CompKey := "s" 
     846          } 
    831847        else 
     848        { 
    832849          send {blind}S 
    833         if (PriorDeadKey = "comp") 
    834           CompKey := "S" 
     850          if (PriorDeadKey = "comp") 
     851            CompKey := "S" 
     852        } 
    835853      } 
    836854  } 
     
    842860    SendUnicodeChar(0x03C3) ;sigma 
    843861  else if (Ebene = 6) 
    844     SendUnicodeChar(0x03A3)  ; Sigma 
     862    SendUnicodeChar(0x03A3) ;Sigma 
    845863return 
    846864 
     
    848866  EbeneAktualisieren() 
    849867  if (Ebene12 and !(CheckDeadUni12("a1",0x0144,0x0143) 
    850             or CheckDeadUni12("a3",0x0146,0x0145) 
    851             or CheckDeadUni12("a4",0x1E45,0x1E44) 
    852             or CheckDeadUni12("c2",0x0148,0x0147) 
    853             or CheckDeadUni12("t1",0x00F1,0x00D1))) 
     868                 or CheckDeadUni12("a3",0x0146,0x0145) 
     869                 or CheckDeadUni12("a4",0x1E45,0x1E44) 
     870                 or CheckDeadUni12("c2",0x0148,0x0147) 
     871                 or CheckDeadUni12("t1",0x00F1,0x00D1))) 
    854872    OutputChar("n","N") 
    855873  else if (Ebene = 3) 
    856     send {blind}(            ; ) 
     874    send {blind}( 
    857875  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2074) 
    858                   or CheckDeadUni("c5",0x2084))) 
     876                          or CheckDeadUni("c5",0x2084))) 
    859877    Send {blind}{NumPad4} 
    860878  else if (Ebene = 5) 
     
    867885  EbeneAktualisieren() 
    868886  if (Ebene12 and !(CheckDeadUni12("a1",0x0155,0x0154) 
    869             or CheckDeadUni12("a3",0x0157,0x0156) 
    870             or CheckDeadUni12("a4",0x0E59,0x0E58) 
    871             or CheckDeadUni12("c2",0x0159,0x0158) 
    872             or CheckDeadUni12("c6",0x1E5B,0x1E5A) 
    873             or CheckCompAsc12("o","�","�") 
    874             or CheckCompAsc12("O","�","�"))) 
     887                 or CheckDeadUni12("a3",0x0157,0x0156) 
     888                 or CheckDeadUni12("a4",0x0E59,0x0E58) 
     889                 or CheckDeadUni12("c2",0x0159,0x0158) 
     890                 or CheckDeadUni12("c6",0x1E5B,0x1E5A) 
     891                 or CheckCompAsc12("o","�","�") 
     892                 or CheckCompAsc12("O","�","�"))) 
    875893    OutputChar("r","R") 
    876   else if (Ebene = 3)           ;( 
     894  else if (Ebene = 3) 
    877895    send {blind}) 
    878896  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2075) 
    879                   or CheckDeadUni("c5",0x2085))) 
     897                          or CheckDeadUni("c5",0x2085))) 
    880898    Send {blind}{NumPad5} 
    881899  else if (Ebene = 5) 
     
    888906  EbeneAktualisieren() 
    889907  if (Ebene12 and !(CheckDeadUni12("a3",0x0163,0x0162) 
    890             or CheckDeadUni12("a4",0x1E6B,0x1E6A) 
    891             or CheckDeadUni12("c2",0x0165,0x0164) 
    892             or CheckDeadUni12("c5",0x0167,0x0166) 
    893             or CheckDeadUni12("c6",0x1E6D,0x1E6C))) 
     908                 or CheckDeadUni12("a4",0x1E6B,0x1E6A) 
     909                 or CheckDeadUni12("c2",0x0165,0x0164) 
     910                 or CheckDeadUni12("c5",0x0167,0x0166) 
     911                 or CheckDeadUni12("c6",0x1E6D,0x1E6C))) 
    894912    OutputChar("t","T") 
    895913  else if (Ebene = 3) 
    896     send {blind}- ; Bis 
     914    send {blind}-           ; Bisstrich 
    897915  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2076) 
    898916                  or CheckDeadUni("c5",0x2086))) 
     
    901919    SendUnicodeChar(0x03C4) ; tau 
    902920  else if (Ebene = 6) 
    903     SendUnicodeChar(0x2202 ) ; partielle Ableitung 
     921    SendUnicodeChar(0x2202) ; partielle Ableitung 
    904922return 
    905923 
     
    917935                send `, 
    918936   else if (Ebene = 5) 
    919       SendUnicodeChar(0x03B4) ;delta 
     937      SendUnicodeChar(0x03B4) ; delta 
    920938   else if (Ebene = 6) 
    921       SendUnicodeChar(0x0394)  ; Delta 
     939      SendUnicodeChar(0x0394) ; Delta 
    922940return 
    923941 
     
    925943  EbeneAktualisieren() 
    926944  if (Ebene12 and !(CheckDeadUni12("a1",0x00FD,0x00DD) 
    927             or CheckDeadUni12("c1",0x0177,0x0176) 
    928             or CheckDeadAsc12("t3","�",�))) 
     945                 or CheckDeadUni12("c1",0x0177,0x0176) 
     946                 or CheckDeadAsc12("t3","�","�"))) 
    929947    OutputChar("y","Y") 
    930948  else if (Ebene = 3) 
     
    947965  EbeneAktualisieren() 
    948966  if (Ebene12 and !(CheckDeadUni12("a1",0x01D8,0x01D7) 
    949             or CheckDeadUni12("a2",0x01DC,0x01DB) 
    950             or CheckDeadUni12("c2",0x01DA,0x01D9) 
    951             or CheckDeadUni12("t2",0x01D6,0x01D5))) 
     967                 or CheckDeadUni12("a2",0x01DC,0x01DB) 
     968                 or CheckDeadUni12("c2",0x01DA,0x01D9) 
     969                 or CheckDeadUni12("t2",0x01D6,0x01D5))) 
    952970    OutputChar("�","�") 
    953971  else if (Ebene = 3) 
     
    955973  else if (Ebene = 4) 
    956974    Send {blind}{Esc} 
     975  else if (Ebene = 5)       ; leer 
     976  { 
     977    DeadKey := PriorDeadKey 
     978    CompKey := PriorCompKey 
     979  } 
     980  else if (Ebene = 6) 
     981    SendUnicodeChar(0x221D) ; proportional 
     982return 
     983 
     984neo_�: 
     985  EbeneAktualisieren() 
     986  if (Ebene12 and !(CheckDeadUni12("t2",0x022B,0x022A))) 
     987    OutputChar("�","�") 
     988  else if (Ebene = 3) 
     989    send {blind}$ 
     990  else if (Ebene = 4) 
     991    send {blind}{Tab} 
    957992  else if (Ebene = 5) 
    958993  { 
     
    961996  } ; leer 
    962997  else if (Ebene = 6) 
    963     SendUnicodeChar(0x221D) ; proportional 
    964 return 
    965  
    966 neo_�: 
    967   EbeneAktualisieren() 
    968   if (Ebene12 and !(CheckDeadUni12("t2",0x022B,0x022A))) 
    969     OutputChar("�","�") 
    970   else if (Ebene = 3) 
    971     send {blind}$ 
    972   else if (Ebene = 4) 
    973     send {blind}{Tab} 
    974   else if (Ebene = 5) 
    975   { 
    976     DeadKey := PriorDeadKey 
    977     CompKey := PriorCompKey 
    978   } ; leer 
    979   else if (Ebene = 6) 
    980998    SendUnicodeChar(0x2111) ; Fraktur I 
    981999return 
     
    9881006    send {blind}| 
    9891007  else if (Ebene = 4) 
    990     Send {blind}{PgDn}   ; Next 
     1008    Send {blind}{PgDn}      ; Next 
    9911009  else if (Ebene = 5) 
    9921010    SendUnicodeChar(0x03B7) ; eta 
    9931011  else if (Ebene = 6) 
    994     SendUnicodeChar(0x211C) ; altes R 
     1012    SendUnicodeChar(0x211C) ; Fraktur R 
    9951013return 
    9961014 
     
    10041022      Send {blind}{Enter} 
    10051023  else if (Ebene = 5) 
    1006     SendUnicodeChar(0x03C0) ;pi 
    1007   else if (Ebene = 6) 
    1008     SendUnicodeChar(0x03A0)  ; Pi 
     1024    SendUnicodeChar(0x03C0) ; pi 
     1025  else if (Ebene = 6) 
     1026    SendUnicodeChar(0x03A0) ; Pi 
    10091027return 
    10101028 
     
    10121030  EbeneAktualisieren() 
    10131031  if (Ebene12 and !(CheckDeadUni12("a1",0x017A,0x0179) 
    1014             or CheckDeadUni12("a4",0x017C,0x017B) 
    1015             or CheckDeadUni12("c2",0x017E,0x017D) 
    1016             or CheckDeadUni12("c6",0x1E93,0x1E92))) 
     1032                 or CheckDeadUni12("a4",0x017C,0x017B) 
     1033                 or CheckDeadUni12("c2",0x017E,0x017D) 
     1034                 or CheckDeadUni12("c6",0x1E93,0x1E92))) 
    10171035    OutputChar("z","Z") 
    10181036  else if (Ebene = 3) 
    1019     send ``{space} ; untot 
     1037    send ``{space}          ; untot 
    10201038  else if (Ebene = 4) 
    10211039  { 
     
    10241042  } ; leer 
    10251043  else if (Ebene = 5) 
    1026     SendUnicodeChar(0x03B6) ;zeta 
    1027   else if (Ebene = 6) 
    1028     SendUnicodeChar(0x2124)  ; Z (ganze Zahlen) 
     1044    SendUnicodeChar(0x03B6) ; zeta 
     1045  else if (Ebene = 6) 
     1046    SendUnicodeChar(0x2124) ; Z (ganze Zahlen) 
    10291047return 
    10301048 
     
    10461064  EbeneAktualisieren() 
    10471065  if (Ebene12 and !(CheckDeadUni12("a4",0x1E41,0x1E40) 
    1048             or CheckDeadUni12("c6",0x1E43,0x1E42) 
    1049             or CheckCompUni12("t",0x2122,0x2122)      ; TM 
    1050             or CheckCompUni12("T",0x2122,0x2122)      ; TM 
    1051             or CheckCompUni12("s",0x2120,0x2120)      ; SM 
    1052             or CheckCompUni12("S",0x2120,0x2120)))    ; SM 
    1053  
     1066                      or CheckDeadUni12("c6",0x1E43,0x1E42) 
     1067                      or CheckCompUni12("t",0x2122,0x2122)      ; TM 
     1068                      or CheckCompUni12("s",0x2120,0x2120)))    ; SM 
    10541069    OutputChar("m","M") 
    10551070  else if (Ebene = 3) 
    10561071    send {blind}`% 
    10571072  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B9) 
    1058                   or CheckDeadUni("c5",0x2081))) 
     1073                          or CheckDeadUni("c5",0x2081))) 
    10591074    Send {blind}{NumPad1} 
    10601075  else if (Ebene = 5) 
     
    10761091    send {blind}" 
    10771092  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B2) 
    1078                   or CheckDeadUni("c5",0x2082))) 
     1093                          or CheckDeadUni("c5",0x2082))) 
    10791094    Send {blind}{NumPad2} 
    10801095  else if (Ebene = 5) 
     
    10961111    send {blind}' 
    10971112  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B3) 
    1098                   or CheckDeadUni("c5",0x2083))) 
     1113                          or CheckDeadUni("c5",0x2083))) 
    10991114    Send {blind}{NumPad3} 
    11001115  else if (Ebene = 5) 
    11011116    SendUnicodeChar(0x03D1) ; theta symbol (vartheta) 
    11021117  else if (Ebene = 6) 
    1103     SendUnicodeChar(0x0398)  ; Theta 
     1118    SendUnicodeChar(0x0398) ; Theta 
    11041119return 
    11051120 
     
    11091124  if (Ebene12 and !(CheckDeadUni12("c1",0x0135,0x0134) 
    11101125            or CheckDeadUni12("c2",0x01F0,"") 
    1111             or CheckCompUni12("i",0x0133,"")       ; ij 
    1112             or CheckCompUni12("I","",0x0132)       ; IJ 
    1113             or CheckCompUni12("l",0x01C9,"")       ; lj 
    1114             or CheckCompUni12("L",0x01C8,0x01C7)    ; Lj/LJ 
    1115             or CheckCompUni12("n",0x01CC,"")       ; nj 
    1116             or CheckCompUni12("N",0x01CB,0x01CA)))   ; Nj/NJ 
     1126            or CheckCompUni("i",0x0133)            ; ij 
     1127            or CheckCompUni("l",0x01C9)            ; lj 
     1128            or CheckCompUni("n",0x01CC)            ; nj 
     1129            or CheckCompUni("I",0x0132)            ; IJ 
     1130            or CheckCompUni12("L",0x01C8,0x01C7)   ; Lj/LJ 
     1131            or CheckCompUni12("N",0x01CB,0x01CA))) ; Nj/NJ 
    11171132    OutputChar("j","J") 
    11181133  else if (Ebene = 3) 
     
    11301145  Numpad 
    11311146 
    1132  
    1133   folgende Tasten verhalten sich bei ein- und ausgeschaltetem 
    1134   NumLock gleich: 
    11351147*/ 
    11361148 
     1149neo_NumLock: 
     1150  EbeneAktualisieren() 
     1151  if (Ebene = 1) 
     1152    send `= 
     1153  if (Ebene = 2)            ; Funktioniert nicht 
     1154  { 
     1155    SetNumLockState 
     1156    send {NumLock} 
     1157  } 
     1158  if (Ebene = 3) 
     1159    SendUnicodeChar(0x2248) ; Fast gleich 
     1160  if (Ebene = 4) 
     1161    SendUnicodeChar(0x2260) ; Ungleich zu 
     1162return 
     1163 
    11371164neo_NumpadDiv: 
    11381165  EbeneAktualisieren() 
    1139   if ((Ebene = 1) or (Ebene = 2)) 
     1166  if Ebene14 
    11401167    send {blind}{NumpadDiv} 
     1168  else if (Ebene = 2) 
     1169    SendUnicodeChar(0x2215)  ; Slash 
    11411170  else if (Ebene = 3) 
    11421171    send {blind}� 
    1143   else if ((Ebene = 4) or (Ebene = 5)) 
    1144     SendUnicodeChar(0x2215)  ; slash 
    11451172return 
    11461173 
    11471174neo_NumpadMult: 
    11481175  EbeneAktualisieren() 
    1149   if ((Ebene = 1) or (Ebene = 2)) 
     1176  if Ebene14 
    11501177    send {blind}{NumpadMult} 
     1178  else if (Ebene = 2) 
     1179    SendUnicodeChar(0x22C5)  ; Cdot 
    11511180  else if (Ebene = 3) 
    11521181    send {blind}� 
    1153   else if ((Ebene = 4) or (Ebene = 5)) 
    1154     SendUnicodeChar(0x22C5)  ; cdot 
    11551182return 
    11561183 
    11571184neo_NumpadSub: 
    11581185  EbeneAktualisieren() 
    1159   if (((Ebene = 1) or (Ebene = 2)) and !(CheckDeadUni("c1",0x207B) 
    1160                           or CheckDeadUni("c5",0x208B))) 
     1186  if (Ebene14 and !(CheckDeadUni("c1",0x207B) 
     1187                 or CheckDeadUni("c5",0x208B))) 
    11611188    send {blind}{NumpadSub} 
    11621189  else if (Ebene = 3) 
    1163     SendUnicodeChar(0x2212) ; echtes minus 
     1190    SendUnicodeChar(0x2212) ; Echtes Minus 
    11641191return 
    11651192 
    11661193neo_NumpadAdd: 
    11671194  EbeneAktualisieren() 
    1168   if (((Ebene = 1) or (Ebene = 2)) and !(CheckDeadUni("c1",0x207A) 
    1169                           or CheckDeadUni("c5",0x208A))) 
     1195  if (Ebene14 and !(CheckDeadUni("c1",0x207A) 
     1196                 or CheckDeadUni("c5",0x208A))) 
    11701197    send {blind}{NumpadAdd} 
    11711198  else if (Ebene = 3) 
    11721199    send {blind}� 
    1173   else if ((Ebene = 4) or (Ebene = 5)) 
    1174     SendUnicodeChar(0x2213)  ; -+ 
     1200  else if (Ebene = 2) 
     1201    SendUnicodeChar(0x2213)  ; Inverses � 
    11751202return 
    11761203 
    11771204neo_NumpadEnter: 
    1178   EbeneAktualisieren() 
    1179   if ((Ebene = 1) or (Ebene = 2)) 
    1180     send {blind}{NumpadEnter} 
    1181   else if (Ebene = 3) 
    1182     SendUnicodeChar(0x2260) ; neq 
    1183   else if ((Ebene = 4) or (Ebene = 5)) 
    1184     SendUnicodeChar(0x2248) ; approx 
    1185 return 
     1205  send {blind}{NumpadEnter} 
     1206return 
     1207 
     1208neo_Numpad7: 
     1209  EbeneAktualisieren() 
     1210  if (Ebene = 1) 
     1211  { 
     1212    if NumLock 
     1213      send {blind}{Numpad7} 
     1214    else 
     1215      send {blind){Shift up}{Numpad7} 
     1216    if (PriorDeadKey = "comp") 
     1217      CompKey := "7" 
     1218  } 
     1219  else if (Ebene = 2) 
     1220    SendUnicodeChar(0x2020) ; Kreuz 
     1221  else if (Ebene = 3) 
     1222    SendUnicodeChar(0x2195) ; Hoch-Runter-Pfeil 
     1223  else if (Ebene = 4) 
     1224    if NumLock 
     1225      send {blind}{Shift up}{NumpadHome} 
     1226    else 
     1227      send {blind}{NumpadHome} 
     1228return 
     1229 
     1230neo_Numpad8: 
     1231  EbeneAktualisieren() 
     1232  if ((Ebene = 1) and !(CheckCompUni("1",0x215B)   ; 1/8 
     1233                     or CheckCompUni("3",0x215C)   ; 3/8 
     1234                     or CheckCompUni("5",0x215D)   ; 5/8 
     1235                     or CheckCompUni("7",0x215E))) ; 7/8 
     1236  { 
     1237    if NumLock 
     1238      send {blind}{Numpad8} 
     1239    else 
     1240      send {blind){Shift up}{Numpad8} 
     1241    if (PriorDeadKey = "comp") 
     1242      CompKey := "8" 
     1243  } 
     1244  else if (Ebene = 2) 
     1245    SendUnicodeChar(0x2229) ; Durchschnitt 
     1246  else if (Ebene = 3) 
     1247    SendUnicodeChar(0x2191) ; Hochpfeil 
     1248  else if (Ebene = 4) 
     1249    if NumLock 
     1250      send {blind}{Shift up}{NumpadUp} 
     1251    else 
     1252      send {blind}{NumpadUp} 
     1253return 
     1254 
     1255neo_Numpad9: 
     1256  EbeneAktualisieren() 
     1257  if (Ebene = 1) 
     1258  { 
     1259    if NumLock 
     1260      send {blind}{Numpad9} 
     1261    else 
     1262      send {blind){Shift up}{Numpad9} 
     1263    if (PriorDeadKey = "comp") 
     1264      CompKey := "9" 
     1265  } 
     1266  else if (Ebene = 2) 
     1267    SendUnicodeChar(0x2297) ; Tensorprodukt / Vektor in die Ebene zeigend 
     1268  else if (Ebene = 3) 
     1269    SendUnicodeChar(0x220D) ; Kleines umgekehrtes Elementzeichen 
     1270  else if (Ebene = 4) 
     1271    if NumLock 
     1272      send {blind}{Shift up}{NumpadPgUp} 
     1273    else 
     1274      send {blind}{NumpadPgUp} 
     1275return 
     1276 
     1277neo_Numpad4: 
     1278  EbeneAktualisieren() 
     1279  if ((Ebene = 1) and !(CheckCompUni("1",0x00BC)   ; 1/4 
     1280                     or CheckCompUni("3",0x00BE)))   ; 3/4 
     1281  { 
     1282    if NumLock 
     1283      send {blind}{Numpad4} 
     1284    else 
     1285      send {blind){Shift up}{Numpad4} 
     1286    if (PriorDeadKey = "comp") 
     1287      CompKey := "4" 
     1288  } 
     1289  else if (Ebene = 2) 
     1290    SendUnicodeChar(0x2282) ; Teilmenge 
     1291  else if (Ebene = 3) 
     1292    SendUnicodeChar(0x2190) ; Linkspfeil 
     1293  else if (Ebene = 4) 
     1294    if NumLock 
     1295      send {blind}{Shift up}{NumpadLeft} 
     1296    else 
     1297      send {blind}{NumpadLeft} 
     1298return 
     1299 
     1300neo_Numpad5: 
     1301  EbeneAktualisieren() 
     1302  if ((Ebene = 1) and !(CheckCompUni("1",0x2155)   ; 1/5 
     1303                     or CheckCompUni("2",0x2156)   ; 2/5 
     1304                     or CheckCompUni("3",0x2157)   ; 3/5 
     1305                     or CheckCompUni("4",0x2158))) ; 4/5 
     1306  { 
     1307    if NumLock 
     1308      send {blind}{Numpad5} 
     1309    else 
     1310      send {blind){Shift up}{Numpad5} 
     1311    if (PriorDeadKey = "comp") 
     1312      CompKey := "5" 
     1313  } 
     1314  else if (Ebene = 3) 
     1315    SendUnicodeChar(0x221E) ; Unendlich 
     1316  else if (Ebene = 2) 
     1317    SendUnicodeChar(0x20AC) ; Euro 
     1318  else if (Ebene = 4)       ; Beg 
     1319    if NumLock 
     1320      send {NumPad5} 
     1321    else 
     1322      send {Shift}{Numpad5} 
     1323return 
     1324 
     1325neo_Numpad6: 
     1326  EbeneAktualisieren() 
     1327  if ((Ebene = 1) and !(CheckCompUni("1",0x2159)   ; 1/6 
     1328                     or CheckCompUni("5",0x215a))) ; 5/6 
     1329  { 
     1330    if NumLock 
     1331      send {blind}{Numpad6} 
     1332    else 
     1333      send {blind){Shift up}{Numpad6} 
     1334    if (PriorDeadKey = "comp") 
     1335      CompKey := "6" 
     1336  } 
     1337  else if (Ebene = 2) 
     1338    SendUnicodeChar(0x2283) ; Obermenge 
     1339  else if (Ebene = 3) 
     1340    SendUnicodeChar(0x2192) ; Rechtspfeil 
     1341  else if (Ebene = 4) 
     1342    if NumLock 
     1343      send {blind}{Shift up}{NumpadRight} 
     1344    else 
     1345      send {blind}{NumpadRight} 
     1346return 
     1347 
     1348neo_Numpad1: 
     1349  EbeneAktualisieren() 
     1350  if (Ebene = 1) 
     1351  { 
     1352    if NumLock 
     1353      send {blind}{Numpad1} 
     1354    else 
     1355      send {blind){Shift up}{Numpad1} 
     1356    if (PriorDeadKey = "comp") 
     1357      CompKey := "1" 
     1358  } 
     1359  else if (Ebene = 2) 
     1360    SendUnicodeChar(0x2714) ; H�kchen 
     1361  else if (Ebene = 3) 
     1362    SendUnicodeChar(0x2194) ; Links-Rechts-Pfeil 
     1363  else if (Ebene = 4) 
     1364    if NumLock 
     1365      send {blind}{Shift up}{NumpadEnd} 
     1366    else 
     1367      send {blind}{NumpadEnd} 
     1368return 
     1369 
     1370neo_Numpad2: 
     1371  EbeneAktualisieren() 
     1372  if ((Ebene = 1) and !(CheckCompUni("1",0x00BD))) ; 1/2 
     1373  { 
     1374    if NumLock 
     1375      send {blind}{Numpad2} 
     1376    else 
     1377      send {blind){Shift up}{Numpad2} 
     1378    if (PriorDeadKey = "comp") 
     1379      CompKey := "2" 
     1380  } 
     1381  else if (Ebene = 2) 
     1382    SendUnicodeChar(0x222A) ; Vereinigung 
     1383  else if (Ebene = 3) 
     1384    SendUnicodeChar(0x2192) ; Untenpfeil 
     1385  else if (Ebene = 4) 
     1386    if NumLock 
     1387      send {blind}{Shift up}{NumpadDown} 
     1388    else 
     1389      send {blind}{NumpadDown} 
     1390return 
     1391 
     1392neo_Numpad3: 
     1393  EbeneAktualisieren() 
     1394  if ((Ebene = 1) and !(CheckCompUni("1",0x2153)   ; 1/3 
     1395                     or CheckCompUni("5",0x2154))) ; 2/3 
     1396  { 
     1397    if NumLock 
     1398      send {blind}{Numpad3} 
     1399    else 
     1400      send {blind){Shift up}{Numpad3} 
     1401    if (PriorDeadKey = "comp") 
     1402      CompKey := "3" 
     1403  } 
     1404  else if (Ebene = 2) 
     1405    SendUnicodeChar(0x2718) ; Kreuzchen 
     1406  else if (Ebene = 3) 
     1407    SendUnicodeChar(0x2192) ; Rechtspfeil 
     1408  else if (Ebene = 4) 
     1409    if NumLock 
     1410      send {blind}{Shift up}{NumpadPgDn} 
     1411    else 
     1412      send {blind}{NumpadPgDn} 
     1413return 
     1414 
     1415neo_Numpad0: 
     1416  EbeneAktualisieren() 
     1417  if (Ebene = 1) 
     1418  { 
     1419    if NumLock 
     1420      send {blind}{Numpad0} 
     1421    else 
     1422      send {blind){Shift up}{Numpad0} 
     1423    if (PriorDeadKey = "comp") 
     1424      CompKey := "0" 
     1425  } 
     1426  else if (Ebene = 2) 
     1427    SendUnicodeChar(0x2030) ; Promille 
     1428  else if (Ebene = 3) 
     1429    SendUnicodeChar(0x0025) ; Prozent 
     1430  else if (Ebene = 4) 
     1431    if NumLock 
     1432      send {blind}{Shift up}{NumpadIns} 
     1433    else 
     1434      send {blind}{NumpadIns} 
     1435return 
     1436 
     1437neo_NumpadDot: 
     1438  EbeneAktualisieren() 
     1439  if (Ebene = 1) 
     1440  { 
     1441    if NumLock 
     1442      send {blind}{NumpadDot} 
     1443    else         
     1444      send {blind){Shift up}{NumpadDot} 
     1445  } 
     1446  else if (Ebene = 2) 
     1447    send `, 
     1448  else if (Ebene = 3) 
     1449    send {blind}. 
     1450  else if (Ebene = 4) 
     1451    if NumLock 
     1452      send {blind}{Shift up}{NumpadDel} 
     1453    else 
     1454      send {blind}{NumpadDel} 
     1455return 
     1456 
     1457 
     1458 
    11861459 
    11871460/* 
    1188   folgende Tasten verhalten sich bei ein- und ausgeschaltetem NumLock 
    1189   unterschiedlich 
     1461 
     1462  Sondertasten 
     1463 
    11901464*/ 
    11911465 
    1192  
    1193  
    1194 neo_Numpad7: 
    1195   EbeneAktualisieren() 
    1196   if    ((Ebene = 1) and (NumLock = 0)) 
    1197     send {blind}{NumpadHome} 
    1198   else if ((Ebene = 2) and (NumLock = 1)) 
    1199     send {blind}{Shift up}{NumpadHome}{Shift down} 
    1200   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    1201   { 
    1202     if (Ebene = 1) 
    1203       send {blind}{Numpad7} 
    1204     else 
    1205       send {blind){Shift up}{Numpad7}{Shift down} 
    1206  
    1207     if (PriorDeadKey = "comp") 
    1208       CompKey := "Num_7" 
    1209   } 
    1210   else if (Ebene = 3) 
    1211     SendUnicodeChar(0x2195)  ; Hoch-Runter-Pfeil 
    1212   else if ((Ebene = 4) or (Ebene = 5)) 
    1213     SendUnicodeChar(0x226A)  ; ll 
    1214 return 
    1215  
    1216 neo_Numpad8: 
    1217   EbeneAktualisieren() 
    1218   if    ((Ebene = 1) and (NumLock = 0)) 
    1219     send {blind}{NumpadUp} 
    1220   else if ((Ebene = 2) and (NumLock = 1)) 
    1221     send {blind}{Shift up}{NumpadUp}{Shift down} 
    1222   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    1223   { 
    1224     if !(CheckCompUni("Num_1",0x215B) ; 1/8 
    1225       or CheckCompUni("1",0x215B)    ; 1/8 
    1226       or CheckCompUni("Num_3",0x215C) ; 3/8 
    1227       or CheckCompUni("3",0x215C)    ; 3/8 
    1228       or CheckCompUni("Num_5",0x215D) ; 3/8 
    1229       or CheckCompUni("5",0x215D)    ; 5/8 
    1230       or CheckCompUni("Num_7",0x215E) ; 7/8 
    1231       or CheckCompUni("7",0x215E))   ; 7/8 
    1232       if (Ebene = 1) 
    1233         send {blind}{Numpad8} 
    1234       else 
    1235         send {blind){Shift up}{Numpad8}{Shift down} 
    1236  
    1237     if (PriorDeadKey = "comp") 
    1238       CompKey := "Num_8" 
    1239   } 
    1240   else if (Ebene = 3) 
    1241     SendUnicodeChar(0x2191)    ; uparrow 
    1242   else if ((Ebene = 4) or (Ebene = 5)) 
    1243     SendUnicodeChar(0x2229)   ; intersection 
    1244 return 
    1245  
    1246 neo_Numpad9: 
    1247   EbeneAktualisieren() 
    1248   if    ((Ebene = 1) and (NumLock = 0)) 
    1249     send {blind}{NumpadPgUp} 
    1250   else if ((Ebene = 2) and (NumLock = 1)) 
    1251     send {blind}{Shift up}{NumpadPgUp}{Shift down} 
    1252   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    1253   { 
    1254     if (Ebene = 1) 
    1255       send {blind}{Numpad9} 
    1256     else 
    1257       send {blind){Shift up}{Numpad9}{Shift down} 
    1258  
    1259     if (PriorDeadKey = "comp") 
    1260       CompKey := "Num_9" 
    1261   } 
    1262   else if (Ebene = 3) 
    1263     SendUnicodeChar(0x2297) ; Tensorprodukt ; Vektor in die Ebene zeigend 
    1264   else if ((Ebene = 4) or (Ebene = 5)) 
    1265     SendUnicodeChar(0x226B)  ; gg 
    1266 return 
    1267  
    1268  
    1269  
    1270 neo_Numpad4: 
    1271   EbeneAktualisieren() 
    1272   if    ((Ebene = 1) and (NumLock = 0)) 
    1273     send {blind}{NumpadLeft} 
    1274   else if ((Ebene = 2) and (NumLock = 1)) 
    1275     send {blind}{Shift up}{NumpadLeft}{Shift down} 
    1276   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    1277   { 
    1278     if !(CheckCompUni("Num_1",0x00BC) ; 1/4 
    1279       or CheckCompUni("1",0x00BE)    ; 1/4 
    1280       or CheckCompUni("Num_3",0x00BE) ; 3/4 
    1281       or CheckCompUni("3",0x00BE))   ; 3/4 
    1282       if (Ebene = 1) 
    1283         send {blind}{Numpad4} 
    1284       else 
    1285         send {blind){Shift up}{Numpad4}{Shift down} 
    1286  
    1287     if (PriorDeadKey = "comp") 
    1288       CompKey := "Num_4" 
    1289   } 
    1290   else if (Ebene = 3) 
    1291     SendUnicodeChar(0x2190)    ; leftarrow 
    1292   else if ((Ebene = 4) or (Ebene = 5)) 
    1293     SendUnicodeChar(0x2282)  ; subset of 
    1294 return 
    1295  
    1296 neo_Numpad5: 
    1297   EbeneAktualisieren() 
    1298   if    ((Ebene = 1) and (NumLock = 0)) 
    1299     send {blind}{NumpadClear} 
    1300   else if ((Ebene = 2) and (NumLock = 1)) 
    1301     send {blind}{Shift up}{NumpadClear}{Shift down} 
    1302   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    1303   { 
    1304     if !(CheckCompUni("Num_1",0x2155) ; 1/5 
    1305       or CheckCompUni("1",0x2155)    ; 1/5 
    1306       or CheckCompUni("Num_2",0x2156) ; 2/5 
    1307       or CheckCompUni("2",0x2156)    ; 2/5 
    1308       or CheckCompUni("Num_3",0x2157) ; 3/5 
    1309       or CheckCompUni("3",0x2157)    ; 3/5 
    1310       or CheckCompUni("Num_4",0x2158) ; 4/5 
    1311       or CheckCompUni("4",0x2158))   ; 4/5 
    1312       if (Ebene = 1) 
    1313         send {blind}{Numpad5} 
    1314       else 
    1315         send {blind){Shift up}{Numpad5}{Shift down} 
    1316  
    1317     if (PriorDeadKey = "comp") 
    1318       CompKey := "Num_5" 
    1319   } 
    1320   else if (Ebene = 3) 
    1321     SendUnicodeChar(0x221E) ; INFINITY 
    1322   else if ((Ebene = 4) or (Ebene = 5)) 
    1323     SendUnicodeChar(0x220B) ; enth�lt das Element 
    1324 return 
    1325  
    1326 neo_Numpad6: 
    1327   EbeneAktualisieren() 
    1328   if    ((Ebene = 1) and (NumLock = 0)) 
    1329     send {blind}{NumpadRight} 
    1330   else if ((Ebene = 2) and (NumLock = 1)) 
    1331     send {blind}{Shift up}{NumpadRight}{Shift down} 
    1332   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    1333   { 
    1334     if !(CheckCompUni("Num_1",0x2159) ; 1/6 
    1335       or CheckCompUni("1",0x2159)    ; 1/6 
    1336       or CheckCompUni("Num_5",0x215A) ; 5/6 
    1337       or CheckCompUni("5",0x215A))   ; 5/6 
    1338       if (Ebene = 1) 
    1339         send {blind}{Numpad6} 
    1340       else 
    1341         send {blind){Shift up}{Numpad6}{Shift down} 
    1342  
    1343     if (PriorDeadKey = "comp") 
    1344       CompKey := "Num_6" 
    1345   } 
    1346   else if (Ebene = 3) 
    1347     SendUnicodeChar(0x2192)    ; rightarrow 
    1348   else if ((Ebene = 4) or (Ebene = 5)) 
    1349     SendUnicodeChar(0x2283) ; superset of 
    1350 return 
    1351  
    1352 neo_Numpad1: 
    1353   EbeneAktualisieren() 
    1354   if    ((Ebene = 1) and (NumLock = 0)) 
    1355     send {blind}{NumpadEnd} 
    1356   else if ((Ebene = 2) and (NumLock = 1)) 
    1357     send {blind}{Shift up}{NumpadEnd}{Shift down} 
    1358   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    1359   { 
    1360     if (Ebene = 1) 
    1361       send {blind}{Numpad1} 
    1362     else 
    1363       send {blind){Shift up}{Numpad1}{Shift down} 
    1364  
    1365     if (PriorDeadKey = "comp") 
    1366       CompKey := "Num_1" 
    1367   } 
    1368   else if (Ebene = 3) 
    1369     SendUnicodeChar(0x2194) ; Links-Rechts-Pfeil 
    1370   else if ((Ebene = 4) or (Ebene = 5)) 
    1371     SendUnicodeChar(0x2264)  ; leq 
    1372 return 
    1373  
    1374 neo_Numpad2: 
    1375   EbeneAktualisieren() 
    1376   if    ((Ebene = 1) and (NumLock = 0)) 
    1377     send {blind}{NumpadDown} 
    1378   else if ((Ebene = 2) and (NumLock = 1)) 
    1379     send {blind}{Shift up}{NumpadDown}{Shift down} 
    1380   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    1381   { 
    1382     if !(CheckCompUni("Num_1",0x00BD) ; 1/2 
    1383       or CheckCompUni("1",0x00BD))   ; 1/2 
    1384       if (Ebene = 1) 
    1385         send {blind}{Numpad2} 
    1386       else 
    1387         send {blind){Shift up}{Numpad2}{Shift down} 
    1388  
    1389     if (PriorDeadKey = "comp") 
    1390       CompKey := "Num_2" 
    1391   } 
    1392   else if (Ebene = 3) 
    1393     SendUnicodeChar(0x2193)    ; downarrow 
    1394   else if ((Ebene = 4) or (Ebene = 5)) 
    1395     SendUnicodeChar(0x222A)  ; vereinigt 
    1396 return 
    1397  
    1398 neo_Numpad3: 
    1399   EbeneAktualisieren() 
    1400   if    ((Ebene = 1) and (NumLock = 0)) 
    1401     send {blind}{NumpadPgDn} 
    1402   else if ((Ebene = 2) and (NumLock = 1)) 
    1403     send {blind}{Shift up}{NumpadPgDn}{Shift down} 
    1404   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    1405   { 
    1406     if !(CheckCompUni("Num_1",0x2153) ; 1/3 
    1407       or CheckCompUni("1",0x2154)    ; 1/3 
    1408       or CheckCompUni("Num_2",0x2154) ; 2/3 
    1409       or CheckCompUni("2",0x2154))   ; 2/3 
    1410       if (Ebene = 1) 
    1411         send {blind}{Numpad3} 
    1412       else 
    1413         send {blind){Shift up}{Numpad3}{Shift down} 
    1414  
    1415     if (PriorDeadKey = "comp") 
    1416       CompKey := "Num_3" 
    1417   } 
    1418   else if (Ebene = 3) 
    1419     SendUnicodeChar(0x21CC) ; RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON 
    1420   else if ((Ebene = 4) or (Ebene = 5)) 
    1421     SendUnicodeChar(0x2265)  ; geq 
    1422 return 
    1423  
    1424 neo_Numpad0: 
    1425   EbeneAktualisieren() 
    1426   if    ((Ebene = 1) and (NumLock = 0)) 
    1427     send {blind}{NumpadIns} 
    1428   else if ((Ebene = 2) and (NumLock = 1)) 
    1429     send {blind}{Shift up}{NumpadIns}{Shift down} 
    1430   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    1431   { 
    1432     if (Ebene = 1) 
    1433       send {blind}{Numpad0} 
    1434     else 
    1435       send {blind){Shift up}{Numpad0}{Shift down} 
    1436  
    1437     if (PriorDeadKey = "comp") 
    1438       CompKey := "Num_0" 
    1439   } 
    1440   else if (Ebene = 3) 
    1441     send {blind}`% 
    1442   else if ((Ebene = 4) or (Ebene = 5)) 
    1443     send � 
    1444 return 
    1445  
    1446 neo_NumpadDot: 
    1447   EbeneAktualisieren() 
    1448   if    ((Ebene = 1) and (NumLock = 0)) 
    1449     send {blind}{NumpadDel} 
    1450   else if ((Ebene = 2) and (NumLock = 1)) 
    1451     send {blind}{Shift up}{NumpadDel}{Shift down} 
    1452   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    1453     if (Ebene = 1) 
    1454       send {blind}{NumpadDot} 
    1455     else 
    1456       send {blind){Shift up}{NumpadDot}{Shift down} 
    1457   else if (Ebene = 3) 
    1458     send {blind}. 
    1459   else if ((Ebene = 4) or (Ebene = 5)) 
    1460     send `, 
    1461 return 
    1462  
    1463  
    1464 /* 
    1465  
    1466   Sondertasten 
    1467  
    1468 */ 
    14691466*space:: 
    14701467  if ((einHandNeo)) 
     
    15131510  Folgende Tasten sind nur aufgef�hrt, um PriorDeadKey zu leeren. 
    15141511  Irgendwie sieht das noch nicht sch�n aus. Vielleicht l�sst sich dieses 
    1515   Problem irgendwie eleganter l�sen... 
    1516  
    1517   Nachtrag: 
    1518   Weil es mit Alt+Tab Probleme gab, wird hier jetzt erstmal rumgeflickschustert, 
    1519   bis eine allgemeinere L�sung gefunden wurde. 
     1512  Problem auch eleganter l�sen... 
    15201513*/ 
    15211514 
     
    15351528  } 
    15361529return 
     1530 
    15371531 
    15381532*Del:: 
  • windows/autohotkey/Source/Keys-Qwert-to-Neo.ahk

    r740 r776  
    444444 
    445445; Numpad 
     446*VK90SC145::goto neo_NumLock 
    446447*VK6FSC135::goto neo_NumpadDiv 
    447448*VK6ASC037::goto neo_NumpadMult 
  • windows/autohotkey/Source/Methods-Layers.ahk

    r748 r776  
    1 /* 
    2    ------------------------------------------------------ 
    3    Modifier 
    4    ------------------------------------------------------ 
    5 */ 
    6  
    7  
    8 ;LShift+RShift == CapsLock (simuliert) 
     1; LShift+RShift == CapsLock (simuliert) 
    92; Es werden nur die beiden Tastenkombinationen abgefragt, 
    103; daher kommen LShift und RShift ungehindert bis in die 
     
    136; Hilfe beschrieben, eigentlich nicht mehr bis zur App 
    147; durchkommen sollten. 
     8; KeyboardLED(4,"switch") hatte ich zuerst genommen, aber 
     9; das schaltet, oh Wunder, die LED nicht wieder aus. 
    1510 
     11isMod2Locked = 0 
    1612VKA1SC136 & VKA0SC02A:: ; RShift, dann LShift 
    1713VKA0SC02A & VKA1SC136:: ; LShift, dann RShift 
    18 ; 
    19 ; mit diesen funktioniert das automatische �bernehmen der 
    20 ; gedr�ckten Shift-Tasten nicht, also z.B. Shift-Ins, wenn Ins 
    21 ; bei gedr�ckter Shift-Taste {blind} gesendet wird 
    22 ; *VKA1SC136:: 
    23 ; *VKA0SC02A:: 
    24    if (GetKeyState("VKA1SC136", "P") and GetKeyState("VKA0SC02A", "P")) 
    25       send {blind}{CapsLock} 
     14  if (GetKeyState("VKA1SC136", "P") and GetKeyState("VKA0SC02A", "P")) 
     15  { 
     16    if isMod2Locked 
     17    { 
     18      isMod2Locked = 0 
     19      KeyboardLED(4,"off") 
     20    } 
     21    else 
     22    { 
     23      isMod2Locked = 1 
     24      KeyBoardLED(4,"on") 
     25    } 
     26  } 
    2627return 
    2728 
    28  
    29 ; Mod3+Mod3 == Mod3-Lock 
    30 ; Im Gegensatz zu LShift+RShift werden die beiden Tasten 
    31 ; _nicht_ zur Applikation weitergeleitet, da '#' kein 
    32 ; Modifier ist und CapsLock sonst den CapsLock-Status 
    33 ; beeinflusst. Daf�r werden s�mtliche Events dieser 
    34 ; Tasten abgefangen, und nur bei gleichzeitigem Dr�cken 
    35 ; wird der Mod3-Lock aktiviert und angezeigt. 
    36  
    37 IsMod3Locked := 0 
    38 ; VKBFSC02B & VK14SC03A:: 
    39 ; VK14SC03A & VKBFSC02B:: 
     29;Mod3-Tasten (Wichtig, sie werden sonst nicht verarbeitet!) 
    4030*VKBFSC02B:: ; # 
    4131*VK14SC03A:: ; CapsLock 
    42    if (GetKeyState("VKBFSC02B", "P") and GetKeyState("VK14SC03A", "P")) 
    43    { 
    44       if (IsMod3Locked)  
    45       { 
    46          IsMod3Locked = 0 
    47          if (zeigeLockBoxen==1) 
    48          { 
    49             MsgBox Mod3-Feststellung aufgebehoben! 
    50          } 
    51       } 
    52       else 
    53       { 
    54          IsMod3Locked = 1 
    55          if (zeigeLockBoxen==1) 
    56          { 
    57             MsgBox Mod3 festgestellt: Um Mod3 wieder zu l�sen dr�cke beide Mod3 Tasten gleichzeitig! 
    58          } 
    59           
    60       } 
    61    } 
    6232return 
    6333 
    64 ; Mod4+Mod4 == Mod4-Lock 
    65 ; Wie bei Mod3-Lock werden im Gegensatz zu LShift+RShift  
    66 ; die beiden Tasten _nicht_ zur Applikation weitergeleitet, 
    67 ; und nur bei gleichzeitigem Dr�cken wird der Mod4-Lock 
    68 ; aktiviert und angezeigt. 
     34;Mod4+Mod4 == Mod4-Lock 
     35; Im Gegensatz zu LShift+RShift werden die beiden Tasten 
     36; _nicht_ zur Applikation weitergeleitet, und nur bei 
     37; gleichzeitigem Dr�cken wird der Mod4-Lock aktiviert und 
     38; angezeigt. 
    6939 
    7040IsMod4Locked := 0 
    71 ; VKA5SC138 & VKE2SC056:: ; AltGr, dann < 
    72 ; VKE2SC056 & VKA5SC138:: ; <, dann AltGr 
    7341*VKA5SC138:: 
    7442*VKE2SC056:: 
    75    if (GetKeyState("VKA5SC138", "P") and GetKeyState("VKE2SC056", "P")) 
    76    { 
    77       ; Mod4-Lock durch Mod4(rechts)+Mod4(links) 
    78       if (IsMod4Locked)  
    79       { 
    80          if (zeigeLockBoxen==1) 
    81          { 
    82             MsgBox Mod4-Feststellung aufgebehoben! 
    83          } 
    84          IsMod4Locked = 0 
    85          if (UseMod4Light==1) 
    86          { 
    87             KeyboardLED(1,"off") 
    88          } 
    89       } 
    90       else 
    91       { 
    92          if (zeigeLockBoxen==1) 
    93          { 
    94             MsgBox Mod4 festgestellt: Um Mod4 wieder zu l�sen dr�cke beide Mod3 Tasten gleichzeitig! 
    95          } 
    96          IsMod4Locked = 1 
    97          if (UseMod4Light==1) 
    98          { 
    99             KeyboardLED(1,"on") 
    100          } 
    101       } 
    102    } 
     43  if (GetKeyState("VKA5SC138", "P") and GetKeyState("VKE2SC056", "P")) 
     44  { 
     45    if IsMod4Locked 
     46    { 
     47      if zeigeLockBox 
     48        MsgBox Mod4-Feststellung aufgebehoben! 
     49       IsMod4Locked = 0 
     50      if UseMod4Light 
     51        KeyboardLED(1,"off") 
     52    } 
     53    else 
     54    { 
     55      if zeigeLockBox 
     56        MsgBox Mod4 festgestellt: Um Mod4 wieder zu l�sen, dr�cke beide Mod4-Tasten gleichzeitig! 
     57      IsMod4Locked = 1 
     58      if UseMod4Light 
     59        KeyboardLED(1,"on") 
     60    } 
     61  } 
    10362return 
     63 
     64Ebene12 := 0 
     65Ebene7 := 0 
     66Ebene8 := 0 
     67 
     68EbeneAktualisieren() 
     69{ 
     70  global 
     71  PriorDeadKey := DeadKey 
     72  PriorCompKey := CompKey 
     73  DeadKey := "" 
     74  CompKey := "" 
     75  Modstate := IsMod4Pressed() . IsMod3Pressed() . IsShiftPressed() 
     76  if ahkTreiberKombi 
     77    if ( Modstate = "001") 
     78      Ebene = 6 
     79    else 
     80      Ebene = -1 
     81  else 
     82    if      (Modstate = "000") ; Ebene 1: Ohne Mod 
     83      Ebene = 1 
     84    else if (Modstate = "001") ; Ebene 2: Shift 
     85      Ebene = 2 
     86    else if (Modstate = "010") ; Ebene 3: Mod3 
     87      Ebene = 3 
     88    else if (Modstate = "100") ; Ebene 4: Mod4 
     89      Ebene = 4 
     90    else if (Modstate = "011") ; Ebene 5: Shift+Mod3 
     91      Ebene = 5 
     92    else if (Modstate = "110") ; Ebene 6: Mod3+Mod4 
     93      Ebene = 6 
     94    else if (Modstate = "101") ; Ebene 7: Shift+Mod4 impliziert Ebene 4 
     95    { 
     96      Ebene = 4 
     97      Ebene7 = 1 
     98    } 
     99    else if (Modstate = "111") ; Ebene 8: Shift+Mod3+Mod4 impliziert Ebene 6 
     100    { 
     101      Ebene = 6 
     102      Ebene8 = 1 
     103    } 
     104  Ebene12 := ((Ebene = 1) or (Ebene = 2)) 
     105  Ebene14 := ((Ebene = 1) or (Ebene = 4)) 
     106  GetKeyState("NumLock","T") 
     107} 
     108 
     109 
     110IsShiftPressed() 
     111{aAAA 
     112  global 
     113  return ((GetKeyState("Shift","P")) = !(isMod2Locked)) ;xor 
     114} 
     115 
     116IsMod3Pressed() 
     117{ 
     118   global 
     119   return ((GetKeyState("CapsLock","P")) or (GetKeyState("#","P"))) 
     120} 
     121 
     122IsMod4Pressed() 
     123{ 
     124   global 
     125   if( not(einHandNeo) or not(spacepressed)) 
     126     if IsMod4Locked 
     127         return (not ( GetKeyState("<","P") or GetKeyState("SC138","P"))) 
     128     else 
     129         return ( GetKeyState("<","P") or GetKeyState("SC138","P")) 
     130   else 
     131     if IsMod4Lock 
     132       return (not ( GetKeyState("<","P") or GetKeyState("SC138","P") or GetKeyState("�","P"))) 
     133     else 
     134       return ( GetKeyState("<","P") or GetKeyState("SC138","P") or GetKeyState("�","P")) 
     135} 
     136 
     137 
  • windows/autohotkey/Source/Methods-Lights.ahk

    r591 r776  
    77   KeyboardLED(LEDvalue,"Cmd"), wobei 
    88   Cmd = on/off/switch, 
    9    LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4 
     9   LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4, 
    1010   bzw. eine beliebige Summe dieser Werte: 
    1111   AlleAus=0, CapsLock+NumLock=6, etc. 
     
    1515    
    1616   Um eventuelle Wechselwirkungen mit dem bestehenden 
    17    Code (insb. der Unicode-Konvertierung) auszuschie�en, 
     17   Code (insb. der Unicode-Konvertierung) auszuschlie�en, 
    1818   sind auch alle (Hilfsmethoden) mit dem Postfix LED 
    1919   versehen worden. 
  • windows/autohotkey/Source/Methods-Other.ahk

    r746 r776  
    1 /* 
    2   Funktionen 
    3 */ 
    4  
    5 /* 
    6 Ebenen laut Referenz: 
    7 1. Ebene (kein Mod)      4. Ebene (Mod4) 
    8 2. Ebene (Umschalt)      5. Ebene (Umschalt+Mod3) 
    9 3. Ebene (Mod3)          6. Ebene (Mod3+Mod4) 
    10 */ 
    11  
    12 EbeneAktualisieren() 
    13 { 
    14    global 
    15    PriorDeadKey := DeadKey 
    16    PriorCompKey := CompKey 
    17    DeadKey := "" 
    18    CompKey := "" 
    19    Ebene12 := 0 
    20    Ebene7 := 0 
    21    Ebene8 := 0 
    22    Modstate := IsShiftPressed() . IsMod3Pressed() . IsMod4Pressed() 
    23  
    24    if (ahkTreiberKombi) 
    25       if ( Modstate = "001") 
    26          Ebene = 6       
    27       else 
    28          Ebene = -1 
    29    else  
    30      if      (Modstate = "000") 
    31          Ebene = 1                 ; Ebene 1: Ohne Mod 
    32      else if (Modstate = "100") 
    33          Ebene = 2                 ; Ebene 2: Shift 
    34      else if (Modstate = "010") 
    35          Ebene = 3                 ; Ebene 3: Mod3 
    36      else if (Modstate = "001") 
    37          Ebene = 4                 ; Ebene 4: Mod4 
    38      else if (Modstate = "110") 
    39          Ebene = 5                 ; Ebene 5: Shift+Mod3 
    40      else if (Modstate = "011") 
    41          Ebene = 6                 ; Ebene 6: Mod3+Mod4 
    42      else if (Modstate = "101") 
    43      { 
    44          Ebene = 4                 ; Ebene 7: Shift+Mod4 impliziert Ebene 4 
    45          Ebene7 = 1 
    46      } 
    47      else if (Modstate = "111") 
    48      { 
    49          Ebene = 6                 ; Ebene 8: Shift+Mod3+Mod4 impliziert Ebene 6 
    50          Ebene8 = 1 
    51      } 
    52  
    53    Ebene12 := ((Ebene = 1) or (Ebene = 2)) 
    54  
    55    if GetKeyState("NumLock","T") 
    56      NumLock = 1 
    57    else 
    58      NumLock = 0 
    59 } 
    60  
    61  
    62 IsShiftPressed() 
    63 { 
    64   return GetKeyState("Shift","P") 
    65 } 
    66  
    67 IsMod3Pressed() 
    68 { 
    69    global 
    70    if (IsMod3Locked)  
    71    { 
    72        return (not ( GetKeyState("CapsLock","P") or GetKeyState("#","P") ))  ; # = SC02B 
    73    } 
    74    else { 
    75       return ( GetKeyState("CapsLock","P") or GetKeyState("#","P") )  ; # = SC02B 
    76    } 
    77 } 
    78  
    79 IsMod4Pressed() 
    80 { 
    81    global 
    82    if( not(einHandNeo) or not(spacepressed) ) 
    83    { 
    84      if (IsMod4Locked)  
    85      { 
    86          return (not ( GetKeyState("<","P") or GetKeyState("SC138","P"))) 
    87      } 
    88      else { 
    89          return ( GetKeyState("<","P") or GetKeyState("SC138","P")) 
    90      } 
    91    } 
    92    else 
    93    { 
    94      if (IsMod4Locked)  
    95      { 
    96          return (not ( GetKeyState("<","P") or GetKeyState("SC138","P") or GetKeyState("�","P"))) 
    97      } 
    98      else { 
    99          return ( GetKeyState("<","P") or GetKeyState("SC138","P") or GetKeyState("�","P")) 
    100      } 
    101    } 
    102     
    103 } 
    104  
    105  
    106 SendUnicodeChar(charCode) 
    107 { 
    108    IfWinActive, ahk_class gdkWindowToplevel 
    109    { 
    110       StringLower, charCode, charCode 
    111       send % "^+u" . SubStr(charCode,3) . " " 
    112    } else { 
    113       VarSetCapacity(ki, 28 * 2, 0) 
    114  
    115       EncodeInteger(&ki + 0, 1) 
    116       EncodeInteger(&ki + 6, charCode) 
    117       EncodeInteger(&ki + 8, 4) 
    118       EncodeInteger(&ki +28, 1) 
    119       EncodeInteger(&ki +34, charCode) 
    120       EncodeInteger(&ki +36, 4|2) 
    121  
    122       DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28) 
    123    } 
    124 } 
    125 /* 
    126 �ber den GTK-Workaround: 
    127 Dieser basiert auf http://www.autohotkey.com/forum/topic32947.html 
    128  
    129 Der Aufruf von �SubStr(charCode,3)� geht davon aus, dass alle charCodes in Hex mit f�hrendem �0x� angegeben sind. Die abenteuerliche �^+u�-Konstruktion ben�tigt im �brigen den Hex-Wert in Kleinschrift, was derzeit nicht bei den Zeichendefinitionen umgesetzt ist, daher zentral und weniger fehlertr�chtig an dieser Stelle. Au�erdem ein abschlie�end gesendetes Space, sonst bleibt der �eingetippte� Unicode-Wert noch kurz sichtbar stehen, bevor er sich GTK-sei-dank in das gew�nschte Zeichen verwandelt. 
    130 */ 
    131  
    132  
    1331BSSendUnicodeChar(charCode) 
    1342{ 
     
    14715   send {bs}{bs} 
    14816   SendUnicodeChar(charCode) 
    149 } 
    150  
    151  
    152 EncodeInteger(ref, val) 
    153 { 
    154    DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val) 
    15517} 
    15618 
  • windows/autohotkey/Source/Methods-ScreenKeyboard.ahk

    r740 r776  
    174174    } 
    175175Return 
    176  ; Ende der BildschirmTastatur 
    177176 
    178  
    179 /* 
    180    ------------------------------------------------------ 
    181    Shift+Pause "pausiert" das Script. 
    182    ------------------------------------------------------ 
    183 */ 
    184  
    185 *pause:: 
    186 Suspend, Permit 
    187    if isshiftpressed() 
    188      goto togglesuspend 
    189    else 
    190      send {blind}{pause} 
    191 return 
    192  
    193 ; ------------------------------------ 
    194  
    195 ^.::einHandNeo := not(einHandNeo)  ; Punkt 
    196 ^,::lernModus := not(lernModus)    ; Komma 
    197  
    198  
    199  
    200 togglesuspend: 
    201    if A_IsSuspended 
    202    { 
    203       menu, tray, rename, %enable%, %disable% 
    204       menu, tray, tip, %name% 
    205       if (iconBenutzen) 
    206           menu, tray, icon, %ResourceFolder%\neo.ico,,1   
    207       suspend , off ; Schaltet Suspend aus -> NEO 
    208    } 
    209    else 
    210    { 
    211       menu, tray, rename, %disable%, %enable% 
    212       menu, tray, tip, %name% : Deaktiviert 
    213       if (iconBenutzen) 
    214          menu, tray, icon, %ResourceFolder%\neo_disabled.ico,,1 
    215       suspend , on  ; Schaltet Suspend ein -> QWERTZ  
    216    } 
    217  
    218 return 
    219  
    220  
    221 help: 
    222    Run, %A_WinDir%\hh mk:@MSITStore:autohotkey.chm 
    223 return 
    224  
    225  
    226 about: 
    227    msgbox, 64, %name% � Ergonomische Tastaturbelegung,  
    228    ( 
    229    %name%  
    230    `nDas Neo-Layout ersetzt das �bliche deutsche  
    231    Tastaturlayout mit der Alternative Neo,  
    232    beschrieben auf http://neo-layout.org/.  
    233    `nDazu sind keine Administratorrechte n�tig.  
    234    `nWenn Autohotkey aktiviert ist, werden alle Tastendrucke  
    235    abgefangen und statt dessen eine �bersetzung weitergeschickt.  
    236    `nDies geschieht transparent f�r den Anwender,  
    237    es muss nichts installiert werden.  
    238    `nDie Zeichen�bersetzung kann leicht �ber das Icon im  
    239    Systemtray deaktiviert werden.  `n 
    240    ) 
    241 return 
    242  
    243  
    244 neo: 
    245    run http://neo-layout.org/ 
    246 return 
    247  
    248 autohotkey: 
    249    run http://autohotkey.com/ 
    250 return 
    251  
    252 open: 
    253    ListLines ; shows the Autohotkey window 
    254 return 
    255  
    256 edit: 
    257    edit 
    258 return 
    259  
    260 reload: 
    261    Reload 
    262 return 
    263  
    264 hide: 
    265    menu, tray, noicon 
    266 return 
    267  
    268 exitprogram: 
    269    exitapp 
    270 return 
  • windows/autohotkey/Source/Methods-Unicode.ahk

    r690 r776  
    3333************************************************************/ 
    3434 
     35/* 
     36�ber den GTK-Workaround: 
     37Dieser basiert auf http://www.autohotkey.com/forum/topic32947.html 
     38Der Aufruf von �SubStr(charCode,3)� geht davon aus, dass alle charCodes in Hex mit f�hrendem �0x� angegeben sind. Die abenteuerliche �^+u�-Konstruktion ben�tigt im �brigen den Hex-Wert in Kleinschrift, was derzeit nicht bei den Zeichendefinitionen umgesetzt ist, daher zentral und weniger fehlertr�chtig an dieser Stelle. Au�erdem ein abschlie�end gesendetes Space, sonst bleibt der �eingetippte� Unicode-Wert noch kurz sichtbar stehen, bevor er sich GTK-sei-dank in das gew�nschte Zeichen verwandelt. 
     39*/ 
    3540 
     41SendUnicodeChar(charCode) 
     42{ 
     43   IfWinActive, ahk_class gdkWindowToplevel 
     44   { 
     45      StringLower, charCode, charCode 
     46      send % "^+u" . SubStr(charCode,3) . " " 
     47   } else { 
     48      VarSetCapacity(ki, 28 * 2, 0) 
    3649 
     50      EncodeInteger(&ki + 0, 1) 
     51      EncodeInteger(&ki + 6, charCode) 
     52      EncodeInteger(&ki + 8, 4) 
     53      EncodeInteger(&ki +28, 1) 
     54      EncodeInteger(&ki +34, charCode) 
     55      EncodeInteger(&ki +36, 4|2) 
     56 
     57      DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28) 
     58   } 
     59} 
     60 
     61EncodeInteger(ref, val) 
     62{ 
     63   DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val) 
     64} 
     65 
  • windows/autohotkey/Source/Warning.ahk

    r746 r776  
    1111in der Datei README.txt!   
    1212******************************************* 
    13 */ 
    1413 
    1514 
     
    2928 
    3029 
    31 /* 
     30 
     31 
     32 
    3233******************************************* 
    3334Das war die letzte WARNUNG, ich hoffe nur dass 
  • windows/autohotkey/neo20.ahk

    r749 r776  
    1 /* 
    2 ******************************************* 
    3 WICHTIGE WARNUNG: 
    4  
    5 Dies ist inzwischen eine automatisch generierte 
    6 Datei! Sie wird regelm��ig �berschrieben und 
    7 sollte deshalb nicht mehr direkt bearbeitet werden! 
    8  
    9 Alle weiterf�hrende Informationen finden sich im Abschnitt  
    10 == Hinweise f�r Entwickler == 
    11 in der Datei README.txt!   
    12 ******************************************* 
    13 */ 
    14  
    15  
    16  
    17  
    18  
    19  
    20  
    21  
    22  
    23  
    24  
    25  
    26  
    27  
    28  
    29  
    30  
    31 /* 
    32 ******************************************* 
    33 Das war die letzte WARNUNG, ich hoffe nur dass 
    34 Sie wirklich wissen was Sie hier tun wollen ... 
    35 ******************************************* 
    36 */ 
    37  
    38  
    39 /************************************ 
    40 * NEO 2.0 (beta) AutoHotkey-Treiber * 
    41 ************************************* 
    42  
    43 Autoren: 
    44 Stefan Mayer <stm (at) neo-layout. o r g> 
    45 Nora Gei�ler <nora_geissler (at) yahoo. d e> 
    46 Matthias Berg <neo (at) matthias-berg. e u> 
    47 Martin Roppelt <m.p.roppelt (at) web. d e> 
    48 Dennis Heidsiek <HeidsiekB (at) aol. c o m> 
    49 Matthias W�chter <matthias (at) waechter.wiz. a t> 
    50 ... 
    51  
    52 ********* 
    53 * TODO: * 
    54 ********* 
    55 - Compose vollst�ndig implementieren (Welche Methode ist hierzu am besten geeignet?) 
    56 - ausgiebig testen... (besonders Vollst�ndigkeit bei Deadkeys) 
    57 - Bessere L�sung f�r das Leeren von PriorDeadKey finden, damit die Sondertasten nicht mehr abgefangen werden m�ssen. 
    58 - Testen, ob die Capslockl�sung (siehe *1:: ebene 1) auch f�r Numpad gebraucht wird 
    59 - Die Ebenen vom Tastenblock an die neue Referenz anpassen (wenn da ein Konsens gefunden wurde) 
    60  
    61 ********** 
    62 * IDEEN: * 
    63 ********** 
    64 - Die Varianten (lernModus, einHandNeo, Lang-s-Tastatur, Qwertz/pausieren) sollten einheitlich (de-)aktiviert werden, etwa �ber M4+F9-F12 
    65  
    66 ****************** 
    67 * CHANGEHISTORY: * 
    68 ****************** 
    69  
    70 Revision 748 (von Dennis Heidsiek) 
    71 - Neue Globale Variable �zeigeLockBoxen�: Soll mit MessageBoxen explizit auf das Ein- und Ausschalten des Mod{3,4}-Locks hingewiesen werden? 
    72 Revision 746 (von Martin Roppelt) 
    73 - Zur�cksetzen der Tastatur �ber M4+Esc 
    74 - #(2L) sendet nicht mehr ' 
    75 - Variablen Ebene7 und Ebene8 zum Abfragen eingef�hrt 
    76 - s(12)(2L)-Bug von Matthias W�chter behoben 
    77 Revision 744 (von Stefan Mayer) 
    78 - Ebene4-Ziffernblock: auf neo_d nun Komma (wie Referenz), "NumPadKomma" gibt es nicht 
    79 Revision 743 (von Matthias W�chter, commit durch Stefan Mayer) 
    80 - Ebene4-Ziffernblock: NumPadAdd und NumPadSub korrigiert 
    81 Revision 740 (von Matthias W�chter, commit durch HCW) 
    82 - "Mega-Patch" (Skript verk�rzt, Ebenenabfrage ver�ndert, ...), siehe CHANGES.txt 
    83 - Blinde tote Tasten auf M4+F9 (Toggle) 
    84 - Blinde Compose auf M4+F10 (Toggle) 
    85 Revision 728 (von Dennis Heidsiek): 
    86 - Ist die Datei %APPDATA%\NEO2\NEO2.ini vorhanden, werden dort eventuell vorhandene Werte f�r die Globalen Schalter beim Start �bernommen 
    87 - �LangSTastaturStandardm��igEingeschaltet.ahk� wird nicht mehr unterst�tzt, weil sonst immer neu kompiliert werden muss 
    88 Revision 707 (von Dennis Heidsiek): 
    89 - Die Resourcen-Dateien (PNGs, ICOs) werden nun nach %TEMP%\NEO2\ extrahiert und nicht mehr in das Verzeichnis, in dem sich die EXE befindet 
    90 - Die doppelten franz�sischen Anf�hrungszeichen werden nun ebenfalls �ber SendUnicodeChar gesendet 
    91 Revision 694 (von Martin Roppelt): 
    92 - LangSTastatur auf M4+F11 
    93 - Entwickler k�nnen durch das Erstellen einer Datei �LangSTastaturStandardm��igEingeschaltet.ahk� mit dem Inhalt �LangSTastatur := 1� diese standardm��ig aktivieren 
    94 - Mehrere DeadKeys aktualisiert (T*, Ebene 4 und T*, Ebene 5) 
    95 Revision 687 (von Dennis Heidsiek): 
    96 - Die SendUnicodeChar-Methode um den GDK-Workarround von Matthias W�chter erg�nzt 
    97 - (An/Aus) Icons an Favicon der neuen Homepage angepasst 
    98 Revision 645 (von Martin Roppelt): 
    99 - Ellipse zus�tzlich auf M3+x 
    100 - Lang-s-Tastatur probeweise auf M4+Esc 
    101 Revision 640 (von Dennis Heidsiek): 
    102 - Der untote Zirkumflex (^) auf Ebene 3 funktioniert jetzt auch in Java-Programmen 
    103 Revision 639 (von Martin Roppelt): 
    104 - Lang-s-Tastatur kann nicht mehr durch einen Hotkey aktiviert werden 
    105 Revision 629 (von Martin Roppelt): 
    106 - Spitze Klammern (bra und ket) auf M5+8/9 
    107 Revision 624 (von Martin Roppelt): 
    108 - Lang-s-Tastatur (ein- und auszuschalten durch Mod4+�) 
    109 Revision 616 (von Dennis Heidsiek): 
    110 - Der nicht funktionierende Mod5-Lock-Fix wurde wieder entfernt, da er sogar neue Fehler produzierte 
    111 Revision 615 (von Dennis Heidsiek): 
    112 - Erfolgloser Versuch, den Mod4-Lock wiederherzustellen (durch eine Tilde vor den Scancodes der Bildschirmtastatur) 
    113 - Rechtschreibfehler korrigiert 
    114 - Zwei AHK-Links eingef�gt 
    115 Revision 609 (von Dennis Heidsiek): 
    116 - Vorl�ufiger Abschluss der AHK-Modularisierung 
    117 - Bessere Testm�glichkeit �All.ahk� f�r AHK-Entwickler hinzugef�gt, bei der sich die Zeilenangaben in Fehlermeldungen auf die tats�chlichen Module und nicht auf das gro�e �vereinigte� Skript beziehen 
    118 Revision 608 (von Martin Roppelt): 
    119 - Rechtschreibfehler korrigiert und Dateinamen aktualisiert und sortiert 
    120 Revision 590 (von Dennis Heidsiek): 
    121 - Erste technische Vorarbeiten zur logischen Modularisierung des viel zu lange gewordenen AHK-Quellcodes 
    122 - Neue Batch-Datei Build-Update.bat zur einfachen Aktualisierung der EXE-Datei 
    123 Revision 583 (von Dennis Heidsiek): 
    124 - Kleinere Korrekturen (M3+NP5, M5+NP5 und M3+NP9 stimmen wieder mit der Referenz �berein) 
    125 Revision 580 (von Matthias Berg): 
    126 - Bildschirmtastatur jetzt mit Mod4+F* statt Strg+F*, dies deaktiviert jedoch leider den Mod4-Lock 
    127 Revision 570 (von Matthias Berg): 
    128 - Hotkeys f�r einHandNeo und lernModus durch entsprechende ScanCodes ersetzt  
    129 Revision 568 (von Matthias Berg): 
    130 - Sonderzeichen, Umlaute, z und y durch ScanCodes ersetzt 
    131   * jetzt wird auch bei eingestelltem US Layout Neo verwendet (z.B. f�r Chinesische InputMethodEditors) 
    132   * rechter Mod3 geht noch nicht bei US-Layout (weder ScanCode noch "\") 
    133 Revision 567 (von Dennis Heidsiek): 
    134 - Aktivierter Mod4-Lock wird jetzt �ber die Rollen-LED des Keybord angezeigt (analog zu CapsLock), die Num-LED beh�lt ihr bisheriges Verhalten 
    135 - Neue Option im Skript: UseMod4Light 
    136 Revision 561 (von Matthias Berg): 
    137 - M4+Tab verh�lt sich jetzt wie das andere Tab dank "goto neo_tab" 
    138 Revision 560 (von Dennis Heidsiek): 
    139 - Neue Option im Skript: bildschirmTastaturEinbinden bindet die PNG-Bilder der Bildschirmtastur mit in die exe-Datei ein, so dass sich der Benutzer nur eine Datei herunterladen muss 
    140 Revision 559 (von Matthias Berg): 
    141 - Shift+Alt+Tab Problem gel�st (muss noch mehr auf Nebeneffekte getestet werden) 
    142 Revision 558 (von Matthias Berg): 
    143 - Icon-Bug behoben 
    144   * Hotkeys d�rfen nicht vor der folgenden Zeile stehen: 
    145    "menu, tray, icon, neo.ico,,1" 
    146 - lernModus-Konfigurations-Bug behoben: or statt and(not) 
    147 - Ein paar leere Else-F�lle eingebaut (Verst�ndlichkeit, m�gliche Compilerprobleme vermeiden)    
    148 Revision 556 (von Matthias Berg): 
    149 - lernModus (an/aus mit Strg+Komma) 
    150   * im Skript konfigurierbar 
    151   * Schaltet z.B. Qwertz Tasten aus, die es auf der 4. Ebene gibt (Return, Backspace,...) 
    152   * Kann auch Backspace und/oder Entfernen der 4. Ebene ausschalten (gut zum Lernen, richtig zu schreiben) 
    153 - Bug aufgetaucht: Icons werden nicht mehr angezeigt 
    154 Revision 544 (von Stefan Mayer): 
    155 - ,.:; auf dem Mod4-Ziffernblock an die aktuelle Referenz angepasst 
    156 - Versionen von rho, theta, kappa und phi an die aktuelle Referenz angepasst 
    157 Revision 542 (von Matthias Berg): 
    158 - bei EinHandNeo ist jetzt Space+y auch Mod4 
    159 - AltGr-Bug  hoffentlich wieder behoben. Diesmal mit extra altGrPressed Variable 
    160 - nurEbenenFuenfUndSechs umbenannt in ahkTreiberKombi und auf Ebene 4 statt 5 und 6 ge�ndert 
    161 Revision 540 (von Matthias Berg): 
    162 - stark �berarbeitet um Wartbarkeit zu erh�hen und Redundanz zu verringern 
    163 - nurEbenenFuenfUndSechs sollte nun auch auf Neo Treiber statt Qwertz laufen 
    164   * aber es muss noch jemand testen 
    165   * Problem: was kann man abfangen, wenn eine tote Taste gedr�ckt wird 
    166 - einHandNeo: 
    167   * An-/Ausschalten mit Strg+Punkt 
    168   * Buchstaben der rechten Hand werden mit Space zur linken Hand 
    169   * Nebeneffekt: es gibt beim Festhalten von Space keine wiederholten Leerzeichen mehr 
    170 Revision 532 (von Matthias Berg): 
    171 - BildschirmTastatur  
    172   * aktiviert mit Strg+F1 bis 7, schaltet Keyboard ein oder aus 
    173   * Strg+F7 zeigt die zuletzt angezeigte Ebene an (und wieder aus) 
    174   * Strg+F8 schaltet AlwaysOnTop um     
    175 Revision 529 (von Stefan Mayer): 
    176 - Icon wird automatisch geladen, falls .ico-Dateien im selbem Ordner 
    177 - In der .exe sind die .ico mitgespeichert und werden geladen 
    178 Revision 528 (von Matthias Berg): 
    179 - Neo-Icon 
    180 - Neo-Prozess jetzt automatisch auf hoher Prioritaet 
    181   (siehe globale Schalter) 
    182 - Mod3-Lock (nur wenn rechtes Mod3 zuerst gedr�ckt wird, andere L�sung f�hrte zum Caps-Bug) 
    183 - Mod4-Lock (nur wenn das linke Mod4 zuerst gedr�ckt wird, andere L�sung f�hrte zum AltGr-Bug) 
    184 - Ein paar falsche Zeichen korrigiert 
    185 Revision 527 (von Matthias Berg): 
    186 - AltGr-Problem hoffentlich behoben 
    187 - Umschalt+Mod4-Bug behoben 
    188 Revision 526 (von Matthias Berg): 
    189 - Ebenen 1 bis 4 ausschalten per Umschalter siehe erste Codezeile nurEbenenFuenfUndSechs = 0 
    190 - Mod4-Lock durch Mod4+Mod4 
    191 - EbenenAktualisierung neu geschrieben 
    192 - Ebene 6 �ber Mod3+Mod4 
    193 - Ebenen (besonders Matheebene) an Referenz angepasst (allerdings kaum um Ebenen 1&2 gek�mmert, besonders Compose k�nnte noch �berholt werden) 
    194 Revision 525 (von Matthias Berg): 
    195 - Capslock bei Zahlen und Sonderzeichen ber�cksichtigt 
    196 Revision 524 (von Matthias Berg): 
    197 - umgekehrtes ^ f�r o, a, �,i  sowie f�r die grossen vokale ( 3. ton chinesisch) 
    198   � damit wird jetzt PinYin vollst�ndig unterst�tzt caron, macron, akut, grave auf uiaeo� 
    199 - Sonderzeichen senden wieder blind -> Shortcuts funktionieren, Capslock ist leider Shiftlock 
    200 Revision 523 (von Matthias Berg): 
    201 - CapsLock geht jetzt auch bei allen Zeichen ('send Zeichen' statt 'send {blind} Zeichen') 
    202 - vertikale Ellipse eingebaut 
    203 - Umschalt+Umschalt f�r Capslock statt Mod3+Mod3 
    204 - bei Suspend wird jetzt wirklich togglesuspend aufgerufen (auch beim Aktivieren per shift+pause) 
    205 Revsion 490 (von Stefan Mayer):  
    206 - SUBSCRIPT von 0 bis 9 sowie (auf Ziffernblock) + und - 
    207   � auch bei Ziffernblock auf der 5. Ebene 
    208 - Kein Parsen �ber die Zwischenablage mehr 
    209 - Vista-kompatibel 
    210 - Compose-Taste 
    211   � Br�che (auf Zahlenreihe und Hardware-Ziffernblock) 
    212   � r�mische Zahlen 
    213   � Ligaturen und Copyright 
    214 */ 
    215  
    216  
     1SetNumLockState AlwaysOff 
    2172 
    2183/**************** 
     
    25237IniRead, lernModus, %ApplicationFolder%\NEO2.ini, Global, lernModus, 0 
    25338 
    254 ; Soll mit MessageBoxen explizit auf das Ein- und Ausschalten des Mod{3,4}-Locks hingewiesen werden? 
    255 IniRead, zeigeLockBoxen, %ApplicationFolder%\NEO2.ini, Global, zeigeLockBoxen, 1 
     39; Soll mit einer MsgBox explizit auf das Ein- und Ausschalten des Mod4-Locks hingewiesen werden? 
     40IniRead, zeigeLockBox, %ApplicationFolder%\NEO2.ini, Global, zeigeLockBox, 1 
    25641 
    25742; Soll aktivierter Mod4-Lock �ber die Rollen-LED des Keybord angezeigt werden (analog zu CapsLock)? 
     
    476261    send {blind}{Esc} 
    477262return 
     263 
    478264/* 
    479265   ------------------------------------------------------ 
    480    Modifier 
     266   Shift+Pause "pausiert" das Skript. 
    481267   ------------------------------------------------------ 
    482268*/ 
    483269 
    484  
    485 ;LShift+RShift == CapsLock (simuliert) 
     270*pause:: 
     271Suspend, Permit 
     272   if isshiftpressed() 
     273     goto togglesuspend 
     274   else 
     275     send {blind}{pause} 
     276return 
     277 
     278; ------------------------------------ 
     279 
     280^.::einHandNeo := not(einHandNeo)  ; Punkt 
     281^,::lernModus := not(lernModus)    ; Komma 
     282 
     283 
     284 
     285togglesuspend: 
     286   if A_IsSuspended 
     287   { 
     288      menu, tray, rename, %enable%, %disable% 
     289      menu, tray, tip, %name% 
     290      if (iconBenutzen) 
     291          menu, tray, icon, %ResourceFolder%\neo.ico,,1   
     292      suspend , off ; Schaltet Suspend aus -> NEO 
     293   } 
     294   else 
     295   { 
     296      menu, tray, rename, %disable%, %enable% 
     297      menu, tray, tip, %name% : Deaktiviert 
     298      if (iconBenutzen) 
     299         menu, tray, icon, %ResourceFolder%\neo_disabled.ico,,1 
     300      suspend , on  ; Schaltet Suspend ein -> QWERTZ  
     301   } 
     302 
     303return 
     304 
     305 
     306help: 
     307   Run, %A_WinDir%\hh mk:@MSITStore:autohotkey.chm 
     308return 
     309 
     310 
     311about: 
     312   msgbox, 64, %name% � Ergonomische Tastaturbelegung,  
     313   ( 
     314   %name%  
     315   `nDas Neo-Layout ersetzt das �bliche deutsche  
     316   Tastaturlayout mit der Alternative Neo,  
     317   beschrieben auf http://neo-layout.org/.  
     318   `nDazu sind keine Administratorrechte n�tig.  
     319   `nWenn Autohotkey aktiviert ist, werden alle Tastendrucke  
     320   abgefangen und statt dessen eine �bersetzung weitergeschickt.  
     321   `nDies geschieht transparent f�r den Anwender,  
     322   es muss nichts installiert werden.  
     323   `nDie Zeichen�bersetzung kann leicht �ber das Icon im  
     324   Systemtray deaktiviert werden.  `n 
     325   ) 
     326return 
     327 
     328 
     329neo: 
     330   run http://neo-layout.org/ 
     331return 
     332 
     333autohotkey: 
     334   run http://autohotkey.com/ 
     335return 
     336 
     337open: 
     338   ListLines ; shows the Autohotkey window 
     339return 
     340 
     341edit: 
     342   edit 
     343return 
     344 
     345reload: 
     346   Reload 
     347return 
     348 
     349hide: 
     350   menu, tray, noicon 
     351return 
     352 
     353exitprogram: 
     354   exitapp 
     355return 
     356 
     357 
     358; LShift+RShift == CapsLock (simuliert) 
    486359; Es werden nur die beiden Tastenkombinationen abgefragt, 
    487360; daher kommen LShift und RShift ungehindert bis in die 
     
    490363; Hilfe beschrieben, eigentlich nicht mehr bis zur App 
    491364; durchkommen sollten. 
    492  
     365; KeyboardLED(4,"switch") hatte ich zuerst genommen, aber 
     366; das schaltet, oh Wunder, die LED nicht wieder aus. 
     367 
     368isMod2Locked = 0 
    493369VKA1SC136 & VKA0SC02A:: ; RShift, dann LShift 
    494370VKA0SC02A & VKA1SC136:: ; LShift, dann RShift 
    495 ; 
    496 ; mit diesen funktioniert das automatische �bernehmen der 
    497 ; gedr�ckten Shift-Tasten nicht, also z.B. Shift-Ins, wenn Ins 
    498 ; bei gedr�ckter Shift-Taste {blind} gesendet wird 
    499 ; *VKA1SC136:: 
    500 ; *VKA0SC02A:: 
    501    if (GetKeyState("VKA1SC136", "P") and GetKeyState("VKA0SC02A", "P")) 
    502       send {blind}{CapsLock} 
    503 return 
    504  
    505  
    506 ; Mod3+Mod3 == Mod3-Lock 
    507 ; Im Gegensatz zu LShift+RShift werden die beiden Tasten 
    508 ; _nicht_ zur Applikation weitergeleitet, da '#' kein 
    509 ; Modifier ist und CapsLock sonst den CapsLock-Status 
    510 ; beeinflusst. Daf�r werden s�mtliche Events dieser 
    511 ; Tasten abgefangen, und nur bei gleichzeitigem Dr�cken 
    512 ; wird der Mod3-Lock aktiviert und angezeigt. 
    513  
    514 IsMod3Locked := 0 
    515 ; VKBFSC02B & VK14SC03A:: 
    516 ; VK14SC03A & VKBFSC02B:: 
     371  if (GetKeyState("VKA1SC136", "P") and GetKeyState("VKA0SC02A", "P")) 
     372  { 
     373    if isMod2Locked 
     374    { 
     375      isMod2Locked = 0 
     376      KeyboardLED(4,"off") 
     377    } 
     378    else 
     379    { 
     380      isMod2Locked = 1 
     381      KeyBoardLED(4,"on") 
     382    } 
     383  } 
     384return 
     385 
     386;Mod3-Tasten (Wichtig, sie werden sonst nicht verarbeitet!) 
    517387*VKBFSC02B:: ; # 
    518388*VK14SC03A:: ; CapsLock 
    519    if (GetKeyState("VKBFSC02B", "P") and GetKeyState("VK14SC03A", "P")) 
    520    { 
    521       if (IsMod3Locked)  
    522       { 
    523          IsMod3Locked = 0 
    524          if (zeigeLockBoxen==1) 
    525          { 
    526             MsgBox Mod3-Feststellung aufgebehoben! 
    527          } 
    528       } 
    529       else 
    530       { 
    531          IsMod3Locked = 1 
    532          if (zeigeLockBoxen==1) 
    533          { 
    534             MsgBox Mod3 festgestellt: Um Mod3 wieder zu l�sen dr�cke beide Mod3 Tasten gleichzeitig! 
    535          } 
    536           
    537       } 
    538    } 
    539 return 
    540  
    541 ; Mod4+Mod4 == Mod4-Lock 
    542 ; Wie bei Mod3-Lock werden im Gegensatz zu LShift+RShift  
    543 ; die beiden Tasten _nicht_ zur Applikation weitergeleitet, 
    544 ; und nur bei gleichzeitigem Dr�cken wird der Mod4-Lock 
    545 ; aktiviert und angezeigt. 
     389return 
     390 
     391;Mod4+Mod4 == Mod4-Lock 
     392; Im Gegensatz zu LShift+RShift werden die beiden Tasten 
     393; _nicht_ zur Applikation weitergeleitet, und nur bei 
     394; gleichzeitigem Dr�cken wird der Mod4-Lock aktiviert und 
     395; angezeigt. 
    546396 
    547397IsMod4Locked := 0 
    548 ; VKA5SC138 & VKE2SC056:: ; AltGr, dann < 
    549 ; VKE2SC056 & VKA5SC138:: ; <, dann AltGr 
    550398*VKA5SC138:: 
    551399*VKE2SC056:: 
    552    if (GetKeyState("VKA5SC138", "P") and GetKeyState("VKE2SC056", "P")) 
    553    { 
    554       ; Mod4-Lock durch Mod4(rechts)+Mod4(links) 
    555       if (IsMod4Locked)  
    556       { 
    557          if (zeigeLockBoxen==1) 
    558          { 
    559             MsgBox Mod4-Feststellung aufgebehoben! 
    560          } 
    561          IsMod4Locked = 0 
    562          if (UseMod4Light==1) 
    563          { 
    564             KeyboardLED(1,"off") 
    565          } 
    566       } 
    567       else 
    568       { 
    569          if (zeigeLockBoxen==1) 
    570          { 
    571             MsgBox Mod4 festgestellt: Um Mod4 wieder zu l�sen dr�cke beide Mod3 Tasten gleichzeitig! 
    572          } 
    573          IsMod4Locked = 1 
    574          if (UseMod4Light==1) 
    575          { 
    576             KeyboardLED(1,"on") 
    577          } 
    578       } 
    579    } 
    580 return 
     400  if (GetKeyState("VKA5SC138", "P") and GetKeyState("VKE2SC056", "P")) 
     401  { 
     402    if IsMod4Locked 
     403    { 
     404      if zeigeLockBox 
     405        MsgBox Mod4-Feststellung aufgebehoben! 
     406       IsMod4Locked = 0 
     407      if UseMod4Light 
     408        KeyboardLED(1,"off") 
     409    } 
     410    else 
     411    { 
     412      if zeigeLockBox 
     413        MsgBox Mod4 festgestellt: Um Mod4 wieder zu l�sen, dr�cke beide Mod4-Tasten gleichzeitig! 
     414      IsMod4Locked = 1 
     415      if UseMod4Light 
     416        KeyboardLED(1,"on") 
     417    } 
     418  } 
     419return 
     420 
     421Ebene12 := 0 
     422Ebene7 := 0 
     423Ebene8 := 0 
     424 
     425EbeneAktualisieren() 
     426{ 
     427  global 
     428  PriorDeadKey := DeadKey 
     429  PriorCompKey := CompKey 
     430  DeadKey := "" 
     431  CompKey := "" 
     432  Modstate := IsMod4Pressed() . IsMod3Pressed() . IsShiftPressed() 
     433  if ahkTreiberKombi 
     434    if ( Modstate = "001") 
     435      Ebene = 6 
     436    else 
     437      Ebene = -1 
     438  else 
     439    if      (Modstate = "000") ; Ebene 1: Ohne Mod 
     440      Ebene = 1 
     441    else if (Modstate = "001") ; Ebene 2: Shift 
     442      Ebene = 2 
     443    else if (Modstate = "010") ; Ebene 3: Mod3 
     444      Ebene = 3 
     445    else if (Modstate = "100") ; Ebene 4: Mod4 
     446      Ebene = 4 
     447    else if (Modstate = "011") ; Ebene 5: Shift+Mod3 
     448      Ebene = 5 
     449    else if (Modstate = "110") ; Ebene 6: Mod3+Mod4 
     450      Ebene = 6 
     451    else if (Modstate = "101") ; Ebene 7: Shift+Mod4 impliziert Ebene 4 
     452    { 
     453      Ebene = 4 
     454      Ebene7 = 1 
     455    } 
     456    else if (Modstate = "111") ; Ebene 8: Shift+Mod3+Mod4 impliziert Ebene 6 
     457    { 
     458      Ebene = 6 
     459      Ebene8 = 1 
     460    } 
     461  Ebene12 := ((Ebene = 1) or (Ebene = 2)) 
     462  Ebene14 := ((Ebene = 1) or (Ebene = 4)) 
     463  GetKeyState("NumLock","T") 
     464} 
     465 
     466 
     467IsShiftPressed() 
     468{aAAA 
     469  global 
     470  return ((GetKeyState("Shift","P")) = !(isMod2Locked)) ;xor 
     471} 
     472 
     473IsMod3Pressed() 
     474{ 
     475   global 
     476   return ((GetKeyState("CapsLock","P")) or (GetKeyState("#","P"))) 
     477} 
     478 
     479IsMod4Pressed() 
     480{ 
     481   global 
     482   if( not(einHandNeo) or not(spacepressed)) 
     483     if IsMod4Locked 
     484         return (not ( GetKeyState("<","P") or GetKeyState("SC138","P"))) 
     485     else 
     486         return ( GetKeyState("<","P") or GetKeyState("SC138","P")) 
     487   else 
     488     if IsMod4Lock 
     489       return (not ( GetKeyState("<","P") or GetKeyState("SC138","P") or GetKeyState("�","P"))) 
     490     else 
     491       return ( GetKeyState("<","P") or GetKeyState("SC138","P") or GetKeyState("�","P")) 
     492} 
     493 
     494 
    581495/* 
    582496   ------------------------------------------------------ 
     
    1024938 
    1025939; Numpad 
     940*VK90SC145::goto neo_NumLock 
    1026941*VK6FSC135::goto neo_NumpadDiv 
    1027942*VK6ASC037::goto neo_NumpadMult 
     
    1066981 
    1067982  Ablauf bei toten Tasten: 
    1068   1. Ebene Aktualisieren 
    1069   2. Abh�ngig von der Variablen "Ebene" Zeichen ausgeben und die Variable "PriorDeadKey" setzen 
     983  1. Ebene Aktualisieren. 
     984  2. Abh�ngig von der Variablen "Ebene" Zeichen ausgeben und die Variable "PriorDeadKey" setzen. 
    1070985 
    1071986  Ablauf bei "untoten" Tasten: 
    1072   1. Ebene Aktualisieren 
    1073   2. Abh�ngig von den Variablen "Ebene" und "PriorDeadKey" Zeichen ausgeben 
    1074   3. "PriorDeadKey" mit leerem String �berschreiben 
     987  1. Ebene Aktualisieren. 
     988  2. Abh�ngig von den Variablen "Ebene" und "PriorDeadKey" Zeichen ausgeben. 
     989  3. "PriorDeadKey" mit leerem String �berschreiben. 
    1075990 
    1076991  Reihe 1 
     
    11021017  else if (Ebene = 5) 
    11031018  { 
    1104     deadAsc("-")    ; Querstrich, tot 
     1019    deadUni(0x002D) ; Querstrich, tot 
    11051020    DeadKey := "c5" 
    11061021  } 
    11071022  else if (Ebene = 6) 
    11081023  { 
    1109     deadAsc(".")    ; Punkt drunter (Colon), tot 
     1024    deadUni(0x002E) ; Punkt drunter (Colon), tot 
    11101025    DeadKey := "c6" 
    11111026  } 
     
    11361051      send � 
    11371052   else if (Ebene = 3) 
    1138       SendUnicodeChar(0x00B9) ; 2 Hochgestellte 
     1053      SendUnicodeChar(0x00B9) ; Hochgestellte 2 
    11391054   else if (Ebene = 4) 
    1140       SendUnicodeChar(0x2022) ; bullet 
     1055      SendUnicodeChar(0x2022) ; Bullet 
    11411056   else if (Ebene = 5) 
    11421057      SendUnicodeChar(0x2640) ; Piktogramm weiblich 
     
    11641079  } 
    11651080  else if (Ebene = 2) 
    1166     SendUnicodeChar(0x2116) ; numero 
    1167   else if (Ebene = 3) 
    1168     SendUnicodeChar(0x00B2) ; 2 Hochgestellte 
    1169   else if (Ebene = 4) 
    1170     SendUnicodeChar(0x2023) ; aufzaehlungspfeil 
     1081    SendUnicodeChar(0x2116) ; Numero 
     1082  else if (Ebene = 3) 
     1083    SendUnicodeChar(0x00B2) ; Hochgestellte 2 
     1084  else if (Ebene = 4) 
     1085    SendUnicodeChar(0x2023) ; Aufz�hlungspfeil 
    11711086  else if (Ebene = 5) 
    11721087    SendUnicodeChar(0x26A5) ; Piktogramm Zwitter 
     
    11961111    send � 
    11971112  else if (Ebene = 3) 
    1198     SendUnicodeChar(0x00B3) ; 3 Hochgestellte 
     1113    SendUnicodeChar(0x00B3) ; Hochgestellte 3 
    11991114  else if (Ebene = 4) 
    12001115  { 
     
    12251140  } 
    12261141  else if (Ebene = 2) 
    1227     SendUnicodeChar(0x00BB) ; �, Double guillemot right 
     1142    SendUnicodeChar(0x00BB) ; Double guillemot right 
    12281143   else if (Ebene = 3) 
    12291144    Send {blind}�           ; Single guillemot right 
    12301145  else if (Ebene = 4) 
    1231     Send {blind}{PgUp}      ; Prev 
     1146    Send {blind}{PgUp} 
    12321147  else if (Ebene = 5) 
    12331148    SendUnicodeChar(0x2113) ; Script small L 
     
    13591274    Send {blind}{NumpadDiv} 
    13601275  else if (Ebene = 5) 
    1361     SendUnicodeChar(0x27E8) ;bra (�ffnende spitze klammer) 
     1276    SendUnicodeChar(0x27E8) ; bra (�ffnende spitze Klammer) 
    13621277  else if (Ebene = 6) 
    13631278    SendUnicodeChar(0x2204) ; es existiert nicht 
     
    13871302    Send {blind}{NumpadMult} 
    13881303  else if (Ebene = 5) 
    1389     SendUnicodeChar(0x27E9) ;ket (schlie�ende spitze klammer) 
     1304    SendUnicodeChar(0x27E9) ; ket (schlie�ende spitze Klammer) 
    13901305  else if (Ebene = 6) 
    13911306    SendUnicodeChar(0x2226) ; nicht parallel 
     
    14341349  else if (Ebene = 3) 
    14351350    SendUnicodeChar(0x2014) ; Englischer Gedankenstrich (Geviertstrich) 
    1436   else if (Ebene = 4) 
     1351  else if (Ebene = 4)       ; leer 
    14371352  { 
    14381353     CompKey := PriorCompKey 
    14391354     DeadKey := PriorDeadKey 
    1440   } ; leer 
     1355  } 
    14411356  else if (Ebene = 5) 
    14421357    SendUnicodeChar(0x2011) ; gesch�tzter Bindestrich (Bindestrich ohne Zeilenumbruch) 
     
    14921407    OutputChar("x","X") 
    14931408  else if (Ebene = 3) 
    1494     SendUnicodeChar(0x2026) ;Ellipse 
     1409    SendUnicodeChar(0x2026) ;Ellipse horizontal 
     1410  else if (Ebene = 4) 
     1411    SendUnicodeChar(0x22EE) ;Ellipse vertikal 
    14951412  else if (Ebene = 5) 
    14961413    SendUnicodeChar(0x03BE) ;xi 
    14971414  else if (Ebene = 6) 
    1498     SendUnicodeChar(0x039E)  ; Xi 
     1415    SendUnicodeChar(0x039E) ;Xi 
    14991416return 
    15001417 
     
    15091426    if (not(lernModus) or lernModus_neo_Backspace) 
    15101427      Send {blind}{Backspace} 
    1511     else 
     1428    else                    ; leer 
    15121429    { 
    15131430       CompKey := PriorCompKey 
    15141431       DeadKey := PriorDeadKey 
    1515     } ; leer 
     1432    } 
    15161433  else if (Ebene = 6) 
    15171434    SendUnicodeChar(0x2259) ; estimates 
     
    15231440  EbeneAktualisieren() 
    15241441  if (Ebene12 and !(CheckDeadUni12("a1",0x013A,0x0139) 
    1525             or CheckDeadUni12("a3",0x013C,0x013B) 
    1526             or CheckDeadUni12("c2",0x013E,0x013D) 
    1527             or CheckDeadUni12("c4",0x0140,0x013F) 
    1528             or CheckDeadUni12("c6",0x1E37,0x1E36) 
    1529             or CheckDeadUni12("t4",0x0142,0x0141))) 
     1442                 or CheckDeadUni12("a3",0x013C,0x013B) 
     1443                 or CheckDeadUni12("c2",0x013E,0x013D) 
     1444                 or CheckDeadUni12("c4",0x0140,0x013F) 
     1445                 or CheckDeadUni12("c6",0x1E37,0x1E36) 
     1446                 or CheckDeadUni12("t4",0x0142,0x0141))) 
    15301447    OutputChar("l","L") 
    15311448  else if (Ebene = 3) 
     
    15431460  EbeneAktualisieren() 
    15441461  if (Ebene12 and !(CheckDeadUni12("a1",0x0107,0x0106) 
    1545             or CheckDeadUni12("a3",0x00E7,0x00E6) 
    1546             or CheckDeadUni12("a4",0x010B,0x010A) 
    1547             or CheckDeadUni12("c1",0x0109,0x0108) 
    1548             or CheckDeadUni12("c2",0x010D,0x010C) 
    1549             or CheckCompAsc12("o","�","�") 
    1550             or CheckCompAsc12("O","�","�"))) 
     1462                 or CheckDeadUni12("a3",0x00E7,0x00E6) 
     1463                 or CheckDeadUni12("a4",0x010B,0x010A) 
     1464                 or CheckDeadUni12("c1",0x0109,0x0108) 
     1465                 or CheckDeadUni12("c2",0x010D,0x010C) 
     1466                 or CheckCompAsc("o","�"))) 
    15511467    OutputChar("c","C") 
    15521468  else if (Ebene = 3) 
     
    15551471    if (not(lernModus) or lernModus_neo_Entf) 
    15561472      Send {blind}{Del} 
    1557     else 
     1473    else                    ; leer 
    15581474    { 
    15591475       CompKey := PriorCompKey 
    15601476       DeadKey := PriorDeadKey 
    1561     } ; leer 
    1562   else if (Ebene = 5) 
    1563     SendUnicodeChar(0x03C7) ;chi 
    1564   else if (Ebene = 6) 
    1565     SendUnicodeChar(0x2102)  ; C (Komplexe Zahlen) 
     1477    } 
     1478  else if (Ebene = 5) 
     1479    SendUnicodeChar(0x03C7) ; chi 
     1480  else if (Ebene = 6) 
     1481    SendUnicodeChar(0x2102) ; C (Komplexe Zahlen) 
    15661482return 
    15671483 
     
    15711487    OutputChar("w","W") 
    15721488  else if (Ebene = 3) 
    1573     SendUnicodeChar(0x005E) ; untotes ^ - Unicode-Name: CIRCUMFLEX ACCENT 
    1574       ;send {^}{space}      ; Funktioniert nicht unter Java-Programmen 
    1575   else if (Ebene = 4) 
    1576     Send {blind}{Insert} 
     1489    SendUnicodeChar(0x005E) ; Zirkumflex 
     1490  else if (Ebene = 4) 
     1491    Send {blind}{Insert}    ; Einfg 
    15771492  else if (Ebene = 5) 
    15781493    SendUnicodeChar(0x03C9) ; omega 
     
    15841499  EbeneAktualisieren() 
    15851500  if (Ebene12 and !(CheckDeadUni12("a3",0x0137,0x0136) 
    1586             or CheckDeadUni12("c6",0x1E33,0x1E32))) 
     1501                 or CheckDeadUni12("c6",0x1E33,0x1E32))) 
    15871502    OutputChar("k","K") 
    15881503  else if (Ebene = 3) 
     
    15991514  EbeneAktualisieren() 
    16001515  if (Ebene12 and !(CheckDeadUni12("a4",0x1E23,0x1E22) 
    1601             or CheckDeadUni12("c1",0x0125,0x0124) 
    1602             or CheckDeadUni12("c5",0x0127,0x0126) 
    1603             or CheckDeadUni12("c6",0x1E25,0x1E24))) 
     1516                 or CheckDeadUni12("c1",0x0125,0x0124) 
     1517                 or CheckDeadUni12("c5",0x0127,0x0126) 
     1518                 or CheckDeadUni12("c6",0x1E25,0x1E24))) 
    16041519    OutputChar("h","H") 
    16051520  else if ((Ebene = 3) and !(CheckDeadUni("c5",0x2264))) ; kleiner gleich 
     
    16091524    Send {blind}{NumPad7} 
    16101525  else if (Ebene = 5) 
    1611     SendUnicodeChar(0x03C8) ;psi 
    1612   else if (Ebene = 6) 
    1613     SendUnicodeChar(0x03A8)  ; Psi 
     1526    SendUnicodeChar(0x03C8) ; psi 
     1527  else if (Ebene = 6) 
     1528    SendUnicodeChar(0x03A8) ; Psi 
    16141529return 
    16151530 
     
    16171532  EbeneAktualisieren() 
    16181533  if (Ebene12 and !(CheckDeadUni12("a3",0x0123,0x0122) 
    1619             or CheckDeadUni12("a4",0x0121,0x0120) 
    1620             or CheckDeadUni12("c1",0x011D,0x011C) 
    1621             or CheckDeadUni12("c3",0x011F,0x011E))) 
     1534                 or CheckDeadUni12("a4",0x0121,0x0120) 
     1535                 or CheckDeadUni12("c1",0x011D,0x011C) 
     1536                 or CheckDeadUni12("c3",0x011F,0x011E))) 
    16221537    OutputChar("g","G") 
    1623   else if ((Ebene = 3) and !(CheckDeadUni("c5",0x2265))) ; gr��er gleich 
    1624     send {blind}> 
     1538  else if ((Ebene = 3) and !(CheckDeadUni("c5",0x2265))) 
     1539    send {blind}>           ; gr��er gleich 
    16251540  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2078) 
    1626                   or CheckDeadUni("c5",0x2088))) 
     1541                          or CheckDeadUni("c5",0x2088))) 
    16271542    Send {blind}{NumPad8} 
    16281543  else if (Ebene = 5) 
    1629     SendUnicodeChar(0x03B3) ;gamma 
    1630   else if (Ebene = 6) 
    1631     SendUnicodeChar(0x0393)  ; Gamma 
     1544    SendUnicodeChar(0x03B3) ; gamma 
     1545  else if (Ebene = 6) 
     1546    SendUnicodeChar(0x0393) ; Gamma 
    16321547return 
    16331548 
     
    16381553    OutputChar("f","F") 
    16391554  else if ((Ebene = 3) and !(CheckDeadUni("a6",0x2257)   ; ring equal to 
    1640                or CheckDeadUni("c1",0x2259)   ; entspricht 
    1641                or CheckDeadUni("c2",0x225A)   ; EQUIANGULAR TO 
    1642                or CheckDeadUni("c5",0x2261)   ; identisch 
    1643                or CheckDeadUni("t1",0x2245)   ; ungef�hr gleich 
    1644                or CheckDeadUni("t4",0x2260))) ; ungleich 
     1555                          or CheckDeadUni("c1",0x2259)   ; entspricht 
     1556                          or CheckDeadUni("c2",0x225A)   ; EQUIANGULAR TO 
     1557                          or CheckDeadUni("c5",0x2261)   ; identisch 
     1558                          or CheckDeadUni("t1",0x2245)   ; ungef�hr gleich 
     1559                          or CheckDeadUni("t4",0x2260))) ; ungleich 
    16451560    send {blind}`= 
    16461561  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2079) 
    1647                   or CheckDeadUni("c5",0x2089))) 
    1648     Send {blind}{NumPad9} 
     1562                          or CheckDeadUni("c5",0x2089))) 
     1563    send {blind}{NumPad9} 
    16491564  else if (Ebene = 5) 
    16501565    SendUnicodeChar(0x03C6) ; phi 
    16511566  else if (Ebene = 6) 
    1652     SendUnicodeChar(0x03A6)  ; Phi 
     1567    SendUnicodeChar(0x03A6) ; Phi 
    16531568return 
    16541569 
     
    16731588    if (GetKeyState("CapsLock","T")) 
    16741589      SendUnicodeChar(0x1E9E) ; versal-� 
    1675     else if (LangSTastatur = 1) 
     1590    else if LangSTastatur 
    16761591      send {blind}s 
    16771592    else 
     
    16791594  else if (Ebene = 2) 
    16801595    if (GetKeyState("CapsLock","T")) 
    1681       if (LangSTastatur = 1) 
     1596      if LangSTastatur 
    16821597        send {blind}s 
    16831598      else 
     
    16861601      SendUnicodeChar(0x1E9E) ; versal-� 
    16871602  else if (Ebene = 3) 
    1688     if (LangSTastatur = 1) 
     1603    if LangSTastatur 
    16891604      send � 
    16901605    else 
    16911606      SendUnicodeChar(0x017F) ; langes s 
    16921607  else if (Ebene = 5) 
    1693     SendUnicodeChar(0x03C2) ; varsigma 
    1694   else if (Ebene = 6) 
    1695     SendUnicodeChar(0x2218) ; Verkn�pfungsoperator 
     1608    SendUnicodeChar(0x03C2)   ; varsigma 
     1609  else if (Ebene = 6) 
     1610    SendUnicodeChar(0x2218)   ; Verkn�pfungsoperator 
    16961611return 
    16971612 
     
    17011616  if (Ebene = 1) 
    17021617  { 
    1703     deadUni(0x02DC)  ;Tilde, tot 
     1618    deadUni(0x02DC)  ; Tilde, tot 
    17041619    DeadKey := "t1" 
    17051620  } 
     
    17211636  else if (Ebene = 5) 
    17221637  { 
    1723     deadUni(0x02DD)  ;Doppelakut 
     1638    deadUni(0x02DD)  ; Doppelakut 
    17241639    DeadKey := "t5" 
    17251640  } 
     
    17421657  EbeneAktualisieren() 
    17431658  if (Ebene12 and !(CheckDeadUni12("a1",0x00FA,0x00DA) 
    1744             or CheckDeadUni12("a2",0x00F9,0x00D9) 
    1745             or CheckDeadUni12("a5",0x0173,0x0172) 
    1746             or CheckDeadUni12("a6",0x016F,0x016E) 
    1747             or CheckDeadUni12("c1",0x00FB,0x00DB) 
    1748             or CheckDeadUni12("c2",0x01D4,0x01D3) 
    1749             or CheckDeadUni12("c3",0x016D,0x016C) 
    1750             or CheckDeadUni12("t1",0x0169,0x0168) 
    1751             or CheckDeadUni12("t2",0x016B,0x016A) 
    1752             or CheckDeadAsc12("t3","�","�") 
    1753             or CheckDeadUni12("t5",0x0171,0x0170))) 
     1659                 or CheckDeadUni12("a2",0x00F9,0x00D9) 
     1660                 or CheckDeadUni12("a5",0x0173,0x0172) 
     1661                 or CheckDeadUni12("a6",0x016F,0x016E) 
     1662                 or CheckDeadUni12("c1",0x00FB,0x00DB) 
     1663                 or CheckDeadUni12("c2",0x01D4,0x01D3) 
     1664                 or CheckDeadUni12("c3",0x016D,0x016C) 
     1665                 or CheckDeadUni12("t1",0x0169,0x0168) 
     1666                 or CheckDeadUni12("t2",0x016B,0x016A) 
     1667                 or CheckDeadAsc12("t3","�","�") 
     1668                 or CheckDeadUni12("t5",0x0171,0x0170))) 
    17541669    OutputChar("u","U") 
    17551670  else if (Ebene = 3) 
     
    17571672  else if (Ebene = 4) 
    17581673    Send {blind}{Home} 
    1759   else if (Ebene = 5) 
     1674  else if (Ebene = 5)       ; leer 
    17601675  { 
    17611676     CompKey := PriorCompKey 
    17621677     DeadKey := PriorDeadKey 
    1763   } ; leer 
     1678  } 
    17641679  else if (Ebene = 6) 
    17651680    SendUnicodeChar(0x222E) ; contour integral 
     
    17691684  EbeneAktualisieren() 
    17701685  if (Ebene12 and !(CheckDeadUni12("a1",0x00ED,0x00CD) 
    1771             or CheckDeadUni12("a2",0x00EC,0x00CC) 
    1772             or CheckDeadUni12("a4",0x012F,0x012E) 
    1773             or CheckDeadUni12("a5",0x0131,0x0130) 
    1774             or CheckDeadUni12("c1",0x00EE,0x00CE) 
    1775             or CheckDeadUni12("c2",0x01D0,0x01CF) 
    1776             or CheckDeadUni12("c3",0x012D,0x012C) 
    1777             or CheckDeadUni12("t1",0x0129,0x0128) 
    1778             or CheckDeadUni12("t2",0x012B,0x012A) 
    1779             or CheckDeadAsc12("t3","�","�"))) 
     1686                 or CheckDeadUni12("a2",0x00EC,0x00CC) 
     1687                 or CheckDeadUni12("a4",0x012F,0x012E) 
     1688                 or CheckDeadUni12("a5",0x0131,0x0130) 
     1689                 or CheckDeadUni12("c1",0x00EE,0x00CE) 
     1690                 or CheckDeadUni12("c2",0x01D0,0x01CF) 
     1691                 or CheckDeadUni12("c3",0x012D,0x012C) 
     1692                 or CheckDeadUni12("t1",0x0129,0x0128) 
     1693                 or CheckDeadUni12("t2",0x012B,0x012A) 
     1694                 or CheckDeadAsc12("t3","�","�"))) 
    17801695    OutputChar("i","I") 
    17811696  else if (Ebene = 3) 
     
    17831698  else if (Ebene = 4) 
    17841699    Send {Blind}{Left} 
    1785   else if (Ebene = 5   ) 
     1700  else if (Ebene = 5) 
    17861701    SendUnicodeChar(0x03B9) ; iota 
    17871702  else if (Ebene = 6) 
     
    17921707  EbeneAktualisieren() 
    17931708  if (Ebene12 and !(CheckDeadUni12("a1",0x00E1,0x00C1) 
    1794             or CheckDeadUni12("a2",0x00E0,0x00C0) 
    1795             or CheckDeadUni12("a5",0x0105,0x0104) 
    1796             or CheckDeadAsc12("a6","�","�") 
    1797             or CheckDeadUni12("c1",0x00E2,0x00C2) 
    1798             or CheckDeadUni12("c2",0x01CE,0x01CD) 
    1799             or CheckDeadUni12("c3",0x0103,0x0102) 
    1800             or CheckDeadUni12("t1",0x00E3,0x00C3) 
    1801             or CheckDeadUni12("t2",0x0101,0x0100) 
    1802             or CheckDeadAsc12("t3","�","�"))) 
     1709                 or CheckDeadUni12("a2",0x00E0,0x00C0) 
     1710                 or CheckDeadUni12("a5",0x0105,0x0104) 
     1711                 or CheckDeadAsc12("a6","�","�") 
     1712                 or CheckDeadUni12("c1",0x00E2,0x00C2) 
     1713                 or CheckDeadUni12("c2",0x01CE,0x01CD) 
     1714                 or CheckDeadUni12("c3",0x0103,0x0102) 
     1715                 or CheckDeadUni12("t1",0x00E3,0x00C3) 
     1716                 or CheckDeadUni12("t2",0x0101,0x0100) 
     1717                 or CheckDeadAsc12("t3","�","�"))) 
    18031718    OutputChar("a","A") 
    18041719  else if (Ebene = 3) 
     
    18071722    Send {Blind}{Down} 
    18081723  else if (Ebene = 5) 
    1809     SendUnicodeChar(0x03B1) ;alpha 
    1810   else if (Ebene = 6) 
    1811     SendUnicodeChar(0x2200) ;f�r alle 
     1724    SendUnicodeChar(0x03B1) ; alpha 
     1725  else if (Ebene = 6) 
     1726    SendUnicodeChar(0x2200) ; f�r alle 
    18121727return 
    18131728 
     
    18151730  EbeneAktualisieren() 
    18161731  if (Ebene12 and !(CheckDeadUni12("a1",0x00E9,0x00C9) 
    1817             or CheckDeadUni12("a2",0x00E8,0x00C8) 
    1818             or CheckDeadUni12("a4",0x0117,0x0116) 
    1819             or CheckDeadUni12("a5",0x0119,0x0118) 
    1820             or CheckDeadUni12("c1",0x00EA,0x00CA) 
    1821             or CheckDeadUni12("c2",0x011B,0x011A) 
    1822             or CheckDeadUni12("c3",0x0115,0x0114) 
    1823             or CheckDeadUni12("t2",0x0113,0x0112) 
    1824             or CheckDeadAsc12("t3","�","�") 
    1825             or CheckCompAsc12("a","�","�") 
    1826             or CheckCompAsc12("A","�","�") 
    1827             or CheckCompAsc12("o","�","�") 
    1828             or CheckCompAsc12("O","�","�"))) 
     1732                 or CheckDeadUni12("a2",0x00E8,0x00C8) 
     1733                 or CheckDeadUni12("a4",0x0117,0x0116) 
     1734                 or CheckDeadUni12("a5",0x0119,0x0118) 
     1735                 or CheckDeadUni12("c1",0x00EA,0x00CA) 
     1736                 or CheckDeadUni12("c2",0x011B,0x011A) 
     1737                 or CheckDeadUni12("c3",0x0115,0x0114) 
     1738                 or CheckDeadUni12("t2",0x0113,0x0112) 
     1739                 or CheckDeadAsc12("t3","�","�") 
     1740                 or CheckCompAsc12("a","�","�") 
     1741                 or CheckCompAsc12("A","�","�") 
     1742                 or CheckCompAsc12("o","�","�") 
     1743                 or CheckCompAsc12("O","�","�"))) 
    18291744    OutputChar("e","E") 
    1830   else if (Ebene = 3)    ; { 
     1745  else if (Ebene = 3) 
    18311746    send {blind}{}} 
    18321747  else if (Ebene = 4) 
    18331748    Send {Blind}{Right} 
    18341749  else if (Ebene = 5) 
    1835       SendUnicodeChar(0x03B5) ;epsilon 
    1836   else if (Ebene = 6) 
    1837       SendUnicodeChar(0x2203) ;es existiert 
     1750      SendUnicodeChar(0x03B5) ; epsilon 
     1751  else if (Ebene = 6) 
     1752      SendUnicodeChar(0x2203) ; es existiert 
    18381753return 
    18391754 
     
    18411756  EbeneAktualisieren() 
    18421757  if (Ebene12 and !(CheckDeadUni12("a1",0x00F3,0x00D3) 
    1843             or CheckDeadUni12("a2",0x00F2,0x00D2) 
    1844             or CheckDeadUni12("a5",0x01EB,0x01EA) 
    1845             or CheckDeadUni12("c1",0x00F4,0x00D4) 
    1846             or CheckDeadUni12("c2",0x01D2,0x01D1) 
    1847             or CheckDeadUni12("c3",0x014F,0x014E) 
    1848             or CheckDeadUni12("t1",0x00F5,0x00D5) 
    1849             or CheckDeadUni12("t2",0x014D,0x014C) 
    1850             or CheckDeadAsc12("t3","�","�") 
    1851             or CheckDeadUni12("t4",0x00F8,0x00D8) 
    1852             or CheckDeadUni12("t5",0x0151,0x0150))) 
     1758                 or CheckDeadUni12("a2",0x00F2,0x00D2) 
     1759                 or CheckDeadUni12("a5",0x01EB,0x01EA) 
     1760                 or CheckDeadUni12("c1",0x00F4,0x00D4) 
     1761                 or CheckDeadUni12("c2",0x01D2,0x01D1) 
     1762                 or CheckDeadUni12("c3",0x014F,0x014E) 
     1763                 or CheckDeadUni12("t1",0x00F5,0x00D5) 
     1764                 or CheckDeadUni12("t2",0x014D,0x014C) 
     1765                 or CheckDeadAsc12("t3","�","�") 
     1766                 or CheckDeadUni12("t4",0x00F8,0x00D8) 
     1767                 or CheckDeadUni12("t5",0x0151,0x0150))) 
    18531768    OutputChar("o","O") 
    18541769  else if (Ebene = 3) 
     
    18651780  EbeneAktualisieren() 
    18661781  if (Ebene12 and !(CheckDeadUni12("a1",0x015B,0x015A) 
    1867               or CheckDeadUni12("a3",0x015F,0x015E) 
    1868               or CheckDeadUni12("a4",0x1E61,0x1E60) 
    1869               or CheckDeadUni12("c1",0x015D,0x015C) 
    1870               or CheckDeadUni12("c2",0x0161,0x0160) 
    1871               or CheckDeadUni12("c6",0x1E63,0x1A62))) 
     1782                   or CheckDeadUni12("a3",0x015F,0x015E) 
     1783                   or CheckDeadUni12("a4",0x1E61,0x1E60) 
     1784                   or CheckDeadUni12("c1",0x015D,0x015C) 
     1785                   or CheckDeadUni12("c2",0x0161,0x0160) 
     1786                   or CheckDeadUni12("c6",0x1E63,0x1A62))) 
    18721787   { 
    18731788      if (Ebene = 1) 
     
    18751790        if LangSTastatur 
    18761791          if (GetKeyState("CapsLock","T")) 
     1792          { 
    18771793            send {blind}s 
     1794            if (PriorDeadKey = "comp") 
     1795              Compkey := "s" 
     1796          } 
    18781797          else 
     1798          { 
    18791799            SendUnicodeChar(0x017F) ;langes S 
     1800            if (PriorDeadKey = "comp") 
     1801              CompKey := "lang_s" 
     1802          } 
    18801803        else 
     1804        { 
    18811805          send {blind}s 
    1882         if (PriorDeadKey = "comp") 
    1883           CompKey := "s" 
     1806          if (PriorDeadKey = "comp") 
     1807            CompKey := "s" 
     1808        } 
    18841809      } 
    18851810      else if (Ebene = 2) 
     
    18871812        if LangSTastatur 
    18881813          if (GetKeyState("CapsLock","T")) 
     1814          { 
    18891815            SendUnicodeChar(0x017F) ;langes S 
     1816            if (PriorDeadKey = "comp") 
     1817              CompKey := "lang_s" 
     1818          } 
    18901819          else 
     1820          { 
    18911821            send {blind}S 
     1822            if (PriorDeadKey = "comp") 
     1823              CompKey := "s" 
     1824          } 
    18921825        else 
     1826        { 
    18931827          send {blind}S 
    1894         if (PriorDeadKey = "comp") 
    1895           CompKey := "S" 
     1828          if (PriorDeadKey = "comp") 
     1829            CompKey := "S" 
     1830        } 
    18961831      } 
    18971832  } 
     
    19031838    SendUnicodeChar(0x03C3) ;sigma 
    19041839  else if (Ebene = 6) 
    1905     SendUnicodeChar(0x03A3)  ; Sigma 
     1840    SendUnicodeChar(0x03A3) ;Sigma 
    19061841return 
    19071842 
     
    19091844  EbeneAktualisieren() 
    19101845  if (Ebene12 and !(CheckDeadUni12("a1",0x0144,0x0143) 
    1911             or CheckDeadUni12("a3",0x0146,0x0145) 
    1912             or CheckDeadUni12("a4",0x1E45,0x1E44) 
    1913             or CheckDeadUni12("c2",0x0148,0x0147) 
    1914             or CheckDeadUni12("t1",0x00F1,0x00D1))) 
     1846                 or CheckDeadUni12("a3",0x0146,0x0145) 
     1847                 or CheckDeadUni12("a4",0x1E45,0x1E44) 
     1848                 or CheckDeadUni12("c2",0x0148,0x0147) 
     1849                 or CheckDeadUni12("t1",0x00F1,0x00D1))) 
    19151850    OutputChar("n","N") 
    19161851  else if (Ebene = 3) 
    1917     send {blind}(            ; ) 
     1852    send {blind}( 
    19181853  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2074) 
    1919                   or CheckDeadUni("c5",0x2084))) 
     1854                          or CheckDeadUni("c5",0x2084))) 
    19201855    Send {blind}{NumPad4} 
    19211856  else if (Ebene = 5) 
     
    19281863  EbeneAktualisieren() 
    19291864  if (Ebene12 and !(CheckDeadUni12("a1",0x0155,0x0154) 
    1930             or CheckDeadUni12("a3",0x0157,0x0156) 
    1931             or CheckDeadUni12("a4",0x0E59,0x0E58) 
    1932             or CheckDeadUni12("c2",0x0159,0x0158) 
    1933             or CheckDeadUni12("c6",0x1E5B,0x1E5A) 
    1934             or CheckCompAsc12("o","�","�") 
    1935             or CheckCompAsc12("O","�","�"))) 
     1865                 or CheckDeadUni12("a3",0x0157,0x0156) 
     1866                 or CheckDeadUni12("a4",0x0E59,0x0E58) 
     1867                 or CheckDeadUni12("c2",0x0159,0x0158) 
     1868                 or CheckDeadUni12("c6",0x1E5B,0x1E5A) 
     1869                 or CheckCompAsc12("o","�","�") 
     1870                 or CheckCompAsc12("O","�","�"))) 
    19361871    OutputChar("r","R") 
    1937   else if (Ebene = 3)           ;( 
     1872  else if (Ebene = 3) 
    19381873    send {blind}) 
    19391874  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2075) 
    1940                   or CheckDeadUni("c5",0x2085))) 
     1875                          or CheckDeadUni("c5",0x2085))) 
    19411876    Send {blind}{NumPad5} 
    19421877  else if (Ebene = 5) 
     
    19491884  EbeneAktualisieren() 
    19501885  if (Ebene12 and !(CheckDeadUni12("a3",0x0163,0x0162) 
    1951             or CheckDeadUni12("a4",0x1E6B,0x1E6A) 
    1952             or CheckDeadUni12("c2",0x0165,0x0164) 
    1953             or CheckDeadUni12("c5",0x0167,0x0166) 
    1954             or CheckDeadUni12("c6",0x1E6D,0x1E6C))) 
     1886                 or CheckDeadUni12("a4",0x1E6B,0x1E6A) 
     1887                 or CheckDeadUni12("c2",0x0165,0x0164) 
     1888                 or CheckDeadUni12("c5",0x0167,0x0166) 
     1889                 or CheckDeadUni12("c6",0x1E6D,0x1E6C))) 
    19551890    OutputChar("t","T") 
    19561891  else if (Ebene = 3) 
    1957     send {blind}- ; Bis 
     1892    send {blind}-           ; Bisstrich 
    19581893  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2076) 
    19591894                  or CheckDeadUni("c5",0x2086))) 
     
    19621897    SendUnicodeChar(0x03C4) ; tau 
    19631898  else if (Ebene = 6) 
    1964     SendUnicodeChar(0x2202 ) ; partielle Ableitung 
     1899    SendUnicodeChar(0x2202) ; partielle Ableitung 
    19651900return 
    19661901 
     
    19781913                send `, 
    19791914   else if (Ebene = 5) 
    1980       SendUnicodeChar(0x03B4) ;delta 
     1915      SendUnicodeChar(0x03B4) ; delta 
    19811916   else if (Ebene = 6) 
    1982       SendUnicodeChar(0x0394)  ; Delta 
     1917      SendUnicodeChar(0x0394) ; Delta 
    19831918return 
    19841919 
     
    19861921  EbeneAktualisieren() 
    19871922  if (Ebene12 and !(CheckDeadUni12("a1",0x00FD,0x00DD) 
    1988             or CheckDeadUni12("c1",0x0177,0x0176) 
    1989             or CheckDeadAsc12("t3","�",�))) 
     1923                 or CheckDeadUni12("c1",0x0177,0x0176) 
     1924                 or CheckDeadAsc12("t3","�","�"))) 
    19901925    OutputChar("y","Y") 
    19911926  else if (Ebene = 3) 
     
    20081943  EbeneAktualisieren() 
    20091944  if (Ebene12 and !(CheckDeadUni12("a1",0x01D8,0x01D7) 
    2010             or CheckDeadUni12("a2",0x01DC,0x01DB) 
    2011             or CheckDeadUni12("c2",0x01DA,0x01D9) 
    2012             or CheckDeadUni12("t2",0x01D6,0x01D5))) 
     1945                 or CheckDeadUni12("a2",0x01DC,0x01DB) 
     1946                 or CheckDeadUni12("c2",0x01DA,0x01D9) 
     1947                 or CheckDeadUni12("t2",0x01D6,0x01D5))) 
    20131948    OutputChar("�","�") 
    20141949  else if (Ebene = 3) 
     
    20161951  else if (Ebene = 4) 
    20171952    Send {blind}{Esc} 
     1953  else if (Ebene = 5)       ; leer 
     1954  { 
     1955    DeadKey := PriorDeadKey 
     1956    CompKey := PriorCompKey 
     1957  } 
     1958  else if (Ebene = 6) 
     1959    SendUnicodeChar(0x221D) ; proportional 
     1960return 
     1961 
     1962neo_�: 
     1963  EbeneAktualisieren() 
     1964  if (Ebene12 and !(CheckDeadUni12("t2",0x022B,0x022A))) 
     1965    OutputChar("�","�") 
     1966  else if (Ebene = 3) 
     1967    send {blind}$ 
     1968  else if (Ebene = 4) 
     1969    send {blind}{Tab} 
    20181970  else if (Ebene = 5) 
    20191971  { 
     
    20221974  } ; leer 
    20231975  else if (Ebene = 6) 
    2024     SendUnicodeChar(0x221D) ; proportional 
    2025 return 
    2026  
    2027 neo_�: 
    2028   EbeneAktualisieren() 
    2029   if (Ebene12 and !(CheckDeadUni12("t2",0x022B,0x022A))) 
    2030     OutputChar("�","�") 
    2031   else if (Ebene = 3) 
    2032     send {blind}$ 
    2033   else if (Ebene = 4) 
    2034     send {blind}{Tab} 
    2035   else if (Ebene = 5) 
    2036   { 
    2037     DeadKey := PriorDeadKey 
    2038     CompKey := PriorCompKey 
    2039   } ; leer 
    2040   else if (Ebene = 6) 
    20411976    SendUnicodeChar(0x2111) ; Fraktur I 
    20421977return 
     
    20491984    send {blind}| 
    20501985  else if (Ebene = 4) 
    2051     Send {blind}{PgDn}   ; Next 
     1986    Send {blind}{PgDn}      ; Next 
    20521987  else if (Ebene = 5) 
    20531988    SendUnicodeChar(0x03B7) ; eta 
    20541989  else if (Ebene = 6) 
    2055     SendUnicodeChar(0x211C) ; altes R 
     1990    SendUnicodeChar(0x211C) ; Fraktur R 
    20561991return 
    20571992 
     
    20652000      Send {blind}{Enter} 
    20662001  else if (Ebene = 5) 
    2067     SendUnicodeChar(0x03C0) ;pi 
    2068   else if (Ebene = 6) 
    2069     SendUnicodeChar(0x03A0)  ; Pi 
     2002    SendUnicodeChar(0x03C0) ; pi 
     2003  else if (Ebene = 6) 
     2004    SendUnicodeChar(0x03A0) ; Pi 
    20702005return 
    20712006 
     
    20732008  EbeneAktualisieren() 
    20742009  if (Ebene12 and !(CheckDeadUni12("a1",0x017A,0x0179) 
    2075             or CheckDeadUni12("a4",0x017C,0x017B) 
    2076             or CheckDeadUni12("c2",0x017E,0x017D) 
    2077             or CheckDeadUni12("c6",0x1E93,0x1E92))) 
     2010                 or CheckDeadUni12("a4",0x017C,0x017B) 
     2011                 or CheckDeadUni12("c2",0x017E,0x017D) 
     2012                 or CheckDeadUni12("c6",0x1E93,0x1E92))) 
    20782013    OutputChar("z","Z") 
    20792014  else if (Ebene = 3) 
    2080     send ``{space} ; untot 
     2015    send ``{space}          ; untot 
    20812016  else if (Ebene = 4) 
    20822017  { 
     
    20852020  } ; leer 
    20862021  else if (Ebene = 5) 
    2087     SendUnicodeChar(0x03B6) ;zeta 
    2088   else if (Ebene = 6) 
    2089     SendUnicodeChar(0x2124)  ; Z (ganze Zahlen) 
     2022    SendUnicodeChar(0x03B6) ; zeta 
     2023  else if (Ebene = 6) 
     2024    SendUnicodeChar(0x2124) ; Z (ganze Zahlen) 
    20902025return 
    20912026 
     
    21072042  EbeneAktualisieren() 
    21082043  if (Ebene12 and !(CheckDeadUni12("a4",0x1E41,0x1E40) 
    2109             or CheckDeadUni12("c6",0x1E43,0x1E42) 
    2110             or CheckCompUni12("t",0x2122,0x2122)      ; TM 
    2111             or CheckCompUni12("T",0x2122,0x2122)      ; TM 
    2112             or CheckCompUni12("s",0x2120,0x2120)      ; SM 
    2113             or CheckCompUni12("S",0x2120,0x2120)))    ; SM 
    2114  
     2044                      or CheckDeadUni12("c6",0x1E43,0x1E42) 
     2045                      or CheckCompUni12("t",0x2122,0x2122)      ; TM 
     2046                      or CheckCompUni12("s",0x2120,0x2120)))    ; SM 
    21152047    OutputChar("m","M") 
    21162048  else if (Ebene = 3) 
    21172049    send {blind}`% 
    21182050  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B9) 
    2119                   or CheckDeadUni("c5",0x2081))) 
     2051                          or CheckDeadUni("c5",0x2081))) 
    21202052    Send {blind}{NumPad1} 
    21212053  else if (Ebene = 5) 
     
    21372069    send {blind}" 
    21382070  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B2) 
    2139                   or CheckDeadUni("c5",0x2082))) 
     2071                          or CheckDeadUni("c5",0x2082))) 
    21402072    Send {blind}{NumPad2} 
    21412073  else if (Ebene = 5) 
     
    21572089    send {blind}' 
    21582090  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B3) 
    2159                   or CheckDeadUni("c5",0x2083))) 
     2091                          or CheckDeadUni("c5",0x2083))) 
    21602092    Send {blind}{NumPad3} 
    21612093  else if (Ebene = 5) 
    21622094    SendUnicodeChar(0x03D1) ; theta symbol (vartheta) 
    21632095  else if (Ebene = 6) 
    2164     SendUnicodeChar(0x0398)  ; Theta 
     2096    SendUnicodeChar(0x0398) ; Theta 
    21652097return 
    21662098 
     
    21702102  if (Ebene12 and !(CheckDeadUni12("c1",0x0135,0x0134) 
    21712103            or CheckDeadUni12("c2",0x01F0,"") 
    2172             or CheckCompUni12("i",0x0133,"")       ; ij 
    2173             or CheckCompUni12("I","",0x0132)       ; IJ 
    2174             or CheckCompUni12("l",0x01C9,"")       ; lj 
    2175             or CheckCompUni12("L",0x01C8,0x01C7)    ; Lj/LJ 
    2176             or CheckCompUni12("n",0x01CC,"")       ; nj 
    2177             or CheckCompUni12("N",0x01CB,0x01CA)))   ; Nj/NJ 
     2104            or CheckCompUni("i",0x0133)            ; ij 
     2105            or CheckCompUni("l",0x01C9)            ; lj 
     2106            or CheckCompUni("n",0x01CC)            ; nj 
     2107            or CheckCompUni("I",0x0132)            ; IJ 
     2108            or CheckCompUni12("L",0x01C8,0x01C7)   ; Lj/LJ 
     2109            or CheckCompUni12("N",0x01CB,0x01CA))) ; Nj/NJ 
    21782110    OutputChar("j","J") 
    21792111  else if (Ebene = 3) 
     
    21912123  Numpad 
    21922124 
    2193  
    2194   folgende Tasten verhalten sich bei ein- und ausgeschaltetem 
    2195   NumLock gleich: 
    21962125*/ 
    21972126 
     2127neo_NumLock: 
     2128  EbeneAktualisieren() 
     2129  if (Ebene = 1) 
     2130    send `= 
     2131  if (Ebene = 2)            ; Funktioniert nicht 
     2132  { 
     2133    SetNumLockState 
     2134    send {NumLock} 
     2135  } 
     2136  if (Ebene = 3) 
     2137    SendUnicodeChar(0x2248) ; Fast gleich 
     2138  if (Ebene = 4) 
     2139    SendUnicodeChar(0x2260) ; Ungleich zu 
     2140return 
     2141 
    21982142neo_NumpadDiv: 
    21992143  EbeneAktualisieren() 
    2200   if ((Ebene = 1) or (Ebene = 2)) 
     2144  if Ebene14 
    22012145    send {blind}{NumpadDiv} 
     2146  else if (Ebene = 2) 
     2147    SendUnicodeChar(0x2215)  ; Slash 
    22022148  else if (Ebene = 3) 
    22032149    send {blind}� 
    2204   else if ((Ebene = 4) or (Ebene = 5)) 
    2205     SendUnicodeChar(0x2215)  ; slash 
    22062150return 
    22072151 
    22082152neo_NumpadMult: 
    22092153  EbeneAktualisieren() 
    2210   if ((Ebene = 1) or (Ebene = 2)) 
     2154  if Ebene14 
    22112155    send {blind}{NumpadMult} 
     2156  else if (Ebene = 2) 
     2157    SendUnicodeChar(0x22C5)  ; Cdot 
    22122158  else if (Ebene = 3) 
    22132159    send {blind}� 
    2214   else if ((Ebene = 4) or (Ebene = 5)) 
    2215     SendUnicodeChar(0x22C5)  ; cdot 
    22162160return 
    22172161 
    22182162neo_NumpadSub: 
    22192163  EbeneAktualisieren() 
    2220   if (((Ebene = 1) or (Ebene = 2)) and !(CheckDeadUni("c1",0x207B) 
    2221                           or CheckDeadUni("c5",0x208B))) 
     2164  if (Ebene14 and !(CheckDeadUni("c1",0x207B) 
     2165                 or CheckDeadUni("c5",0x208B))) 
    22222166    send {blind}{NumpadSub} 
    22232167  else if (Ebene = 3) 
    2224     SendUnicodeChar(0x2212) ; echtes minus 
     2168    SendUnicodeChar(0x2212) ; Echtes Minus 
    22252169return 
    22262170 
    22272171neo_NumpadAdd: 
    22282172  EbeneAktualisieren() 
    2229   if (((Ebene = 1) or (Ebene = 2)) and !(CheckDeadUni("c1",0x207A) 
    2230                           or CheckDeadUni("c5",0x208A))) 
     2173  if (Ebene14 and !(CheckDeadUni("c1",0x207A) 
     2174                 or CheckDeadUni("c5",0x208A))) 
    22312175    send {blind}{NumpadAdd} 
    22322176  else if (Ebene = 3) 
    22332177    send {blind}� 
    2234   else if ((Ebene = 4) or (Ebene = 5)) 
    2235     SendUnicodeChar(0x2213)  ; -+ 
     2178  else if (Ebene = 2) 
     2179    SendUnicodeChar(0x2213)  ; Inverses � 
    22362180return 
    22372181 
    22382182neo_NumpadEnter: 
    2239   EbeneAktualisieren() 
    2240   if ((Ebene = 1) or (Ebene = 2)) 
    2241     send {blind}{NumpadEnter} 
    2242   else if (Ebene = 3) 
    2243     SendUnicodeChar(0x2260) ; neq 
    2244   else if ((Ebene = 4) or (Ebene = 5)) 
    2245     SendUnicodeChar(0x2248) ; approx 
    2246 return 
    2247  
    2248 /* 
    2249   folgende Tasten verhalten sich bei ein- und ausgeschaltetem NumLock 
    2250   unterschiedlich 
    2251 */ 
    2252  
    2253  
     2183  send {blind}{NumpadEnter} 
     2184return 
    22542185 
    22552186neo_Numpad7: 
    22562187  EbeneAktualisieren() 
    2257   if    ((Ebene = 1) and (NumLock = 0)) 
    2258     send {blind}{NumpadHome} 
    2259   else if ((Ebene = 2) and (NumLock = 1)) 
    2260     send {blind}{Shift up}{NumpadHome}{Shift down} 
    2261   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    2262   { 
    2263     if (Ebene = 1) 
     2188  if (Ebene = 1) 
     2189  { 
     2190    if NumLock 
    22642191      send {blind}{Numpad7} 
    22652192    else 
    2266       send {blind){Shift up}{Numpad7}{Shift down} 
    2267  
     2193      send {blind){Shift up}{Numpad7} 
    22682194    if (PriorDeadKey = "comp") 
    2269       CompKey := "Num_7" 
    2270   } 
    2271   else if (Ebene = 3) 
    2272     SendUnicodeChar(0x2195)  ; Hoch-Runter-Pfeil 
    2273   else if ((Ebene = 4) or (Ebene = 5)) 
    2274     SendUnicodeChar(0x226A)  ; ll 
     2195      CompKey := "7" 
     2196  } 
     2197  else if (Ebene = 2) 
     2198    SendUnicodeChar(0x2020) ; Kreuz 
     2199  else if (Ebene = 3) 
     2200    SendUnicodeChar(0x2195) ; Hoch-Runter-Pfeil 
     2201  else if (Ebene = 4) 
     2202    if NumLock 
     2203      send {blind}{Shift up}{NumpadHome} 
     2204    else 
     2205      send {blind}{NumpadHome} 
    22752206return 
    22762207 
    22772208neo_Numpad8: 
    22782209  EbeneAktualisieren() 
    2279   if    ((Ebene = 1) and (NumLock = 0)) 
    2280     send {blind}{NumpadUp} 
    2281   else if ((Ebene = 2) and (NumLock = 1)) 
    2282     send {blind}{Shift up}{NumpadUp}{Shift down} 
    2283   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    2284   { 
    2285     if !(CheckCompUni("Num_1",0x215B) ; 1/8 
    2286       or CheckCompUni("1",0x215B)    ; 1/8 
    2287       or CheckCompUni("Num_3",0x215C) ; 3/8 
    2288       or CheckCompUni("3",0x215C)    ; 3/8 
    2289       or CheckCompUni("Num_5",0x215D) ; 3/8 
    2290       or CheckCompUni("5",0x215D)    ; 5/8 
    2291       or CheckCompUni("Num_7",0x215E) ; 7/8 
    2292       or CheckCompUni("7",0x215E))   ; 7/8 
    2293       if (Ebene = 1) 
    2294         send {blind}{Numpad8} 
    2295       else 
    2296         send {blind){Shift up}{Numpad8}{Shift down} 
    2297  
     2210  if ((Ebene = 1) and !(CheckCompUni("1",0x215B)   ; 1/8 
     2211                     or CheckCompUni("3",0x215C)   ; 3/8 
     2212                     or CheckCompUni("5",0x215D)   ; 5/8 
     2213                     or CheckCompUni("7",0x215E))) ; 7/8 
     2214  { 
     2215    if NumLock 
     2216      send {blind}{Numpad8} 
     2217    else 
     2218      send {blind){Shift up}{Numpad8} 
    22982219    if (PriorDeadKey = "comp") 
    2299       CompKey := "Num_8" 
    2300   } 
    2301   else if (Ebene = 3) 
    2302     SendUnicodeChar(0x2191)    ; uparrow 
    2303   else if ((Ebene = 4) or (Ebene = 5)) 
    2304     SendUnicodeChar(0x2229)   ; intersection 
     2220      CompKey := "8" 
     2221  } 
     2222  else if (Ebene = 2) 
     2223    SendUnicodeChar(0x2229) ; Durchschnitt 
     2224  else if (Ebene = 3) 
     2225    SendUnicodeChar(0x2191) ; Hochpfeil 
     2226  else if (Ebene = 4) 
     2227    if NumLock 
     2228      send {blind}{Shift up}{NumpadUp} 
     2229    else 
     2230      send {blind}{NumpadUp} 
    23052231return 
    23062232 
    23072233neo_Numpad9: 
    23082234  EbeneAktualisieren() 
    2309   if    ((Ebene = 1) and (NumLock = 0)) 
    2310     send {blind}{NumpadPgUp} 
    2311   else if ((Ebene = 2) and (NumLock = 1)) 
    2312     send {blind}{Shift up}{NumpadPgUp}{Shift down} 
    2313   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    2314   { 
    2315     if (Ebene = 1) 
     2235  if (Ebene = 1) 
     2236  { 
     2237    if NumLock 
    23162238      send {blind}{Numpad9} 
    23172239    else 
    2318       send {blind){Shift up}{Numpad9}{Shift down} 
    2319  
     2240      send {blind){Shift up}{Numpad9} 
    23202241    if (PriorDeadKey = "comp") 
    2321       CompKey := "Num_9" 
    2322   } 
    2323   else if (Ebene = 3) 
    2324     SendUnicodeChar(0x2297) ; Tensorprodukt ; Vektor in die Ebene zeigend 
    2325   else if ((Ebene = 4) or (Ebene = 5)) 
    2326     SendUnicodeChar(0x226B)  ; gg 
    2327 return 
    2328  
    2329  
     2242      CompKey := "9" 
     2243  } 
     2244  else if (Ebene = 2) 
     2245    SendUnicodeChar(0x2297) ; Tensorprodukt / Vektor in die Ebene zeigend 
     2246  else if (Ebene = 3) 
     2247    SendUnicodeChar(0x220D) ; Kleines umgekehrtes Elementzeichen 
     2248  else if (Ebene = 4) 
     2249    if NumLock 
     2250      send {blind}{Shift up}{NumpadPgUp} 
     2251    else 
     2252      send {blind}{NumpadPgUp} 
     2253return 
    23302254 
    23312255neo_Numpad4: 
    23322256  EbeneAktualisieren() 
    2333   if    ((Ebene = 1) and (NumLock = 0)) 
    2334     send {blind}{NumpadLeft} 
    2335   else if ((Ebene = 2) and (NumLock = 1)) 
    2336     send {blind}{Shift up}{NumpadLeft}{Shift down} 
    2337   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    2338   { 
    2339     if !(CheckCompUni("Num_1",0x00BC) ; 1/4 
    2340       or CheckCompUni("1",0x00BE)    ; 1/4 
    2341       or CheckCompUni("Num_3",0x00BE) ; 3/4 
    2342       or CheckCompUni("3",0x00BE))   ; 3/4 
    2343       if (Ebene = 1) 
    2344         send {blind}{Numpad4} 
    2345       else 
    2346         send {blind){Shift up}{Numpad4}{Shift down} 
    2347  
     2257  if ((Ebene = 1) and !(CheckCompUni("1",0x00BC)   ; 1/4 
     2258                     or CheckCompUni("3",0x00BE)))   ; 3/4 
     2259  { 
     2260    if NumLock 
     2261      send {blind}{Numpad4} 
     2262    else 
     2263      send {blind){Shift up}{Numpad4} 
    23482264    if (PriorDeadKey = "comp") 
    2349       CompKey := "Num_4" 
    2350   } 
    2351   else if (Ebene = 3) 
    2352     SendUnicodeChar(0x2190)    ; leftarrow 
    2353   else if ((Ebene = 4) or (Ebene = 5)) 
    2354     SendUnicodeChar(0x2282)  ; subset of 
     2265      CompKey := "4" 
     2266  } 
     2267  else if (Ebene = 2) 
     2268    SendUnicodeChar(0x2282) ; Teilmenge 
     2269  else if (Ebene = 3) 
     2270    SendUnicodeChar(0x2190) ; Linkspfeil 
     2271  else if (Ebene = 4) 
     2272    if NumLock 
     2273      send {blind}{Shift up}{NumpadLeft} 
     2274    else 
     2275      send {blind}{NumpadLeft} 
    23552276return 
    23562277 
    23572278neo_Numpad5: 
    23582279  EbeneAktualisieren() 
    2359   if    ((Ebene = 1) and (NumLock = 0)) 
    2360     send {blind}{NumpadClear} 
    2361   else if ((Ebene = 2) and (NumLock = 1)) 
    2362     send {blind}{Shift up}{NumpadClear}{Shift down} 
    2363   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    2364   { 
    2365     if !(CheckCompUni("Num_1",0x2155) ; 1/5 
    2366       or CheckCompUni("1",0x2155)    ; 1/5 
    2367       or CheckCompUni("Num_2",0x2156) ; 2/5 
    2368       or CheckCompUni("2",0x2156)    ; 2/5 
    2369       or CheckCompUni("Num_3",0x2157) ; 3/5 
    2370       or CheckCompUni("3",0x2157)    ; 3/5 
    2371       or CheckCompUni("Num_4",0x2158) ; 4/5 
    2372       or CheckCompUni("4",0x2158))   ; 4/5 
    2373       if (Ebene = 1) 
    2374         send {blind}{Numpad5} 
    2375       else 
    2376         send {blind){Shift up}{Numpad5}{Shift down} 
    2377  
     2280  if ((Ebene = 1) and !(CheckCompUni("1",0x2155)   ; 1/5 
     2281                     or CheckCompUni("2",0x2156)   ; 2/5 
     2282                     or CheckCompUni("3",0x2157)   ; 3/5 
     2283                     or CheckCompUni("4",0x2158))) ; 4/5 
     2284  { 
     2285    if NumLock 
     2286      send {blind}{Numpad5} 
     2287    else 
     2288      send {blind){Shift up}{Numpad5} 
    23782289    if (PriorDeadKey = "comp") 
    2379       CompKey := "Num_5" 
    2380   } 
    2381   else if (Ebene = 3) 
    2382     SendUnicodeChar(0x221E) ; INFINITY 
    2383   else if ((Ebene = 4) or (Ebene = 5)) 
    2384     SendUnicodeChar(0x220B) ; enth�lt das Element 
     2290      CompKey := "5" 
     2291  } 
     2292  else if (Ebene = 3) 
     2293    SendUnicodeChar(0x221E) ; Unendlich 
     2294  else if (Ebene = 2) 
     2295    SendUnicodeChar(0x20AC) ; Euro 
     2296  else if (Ebene = 4)       ; Beg 
     2297    if NumLock 
     2298      send {NumPad5} 
     2299    else 
     2300      send {Shift}{Numpad5} 
    23852301return 
    23862302 
    23872303neo_Numpad6: 
    23882304  EbeneAktualisieren() 
    2389   if    ((Ebene = 1) and (NumLock = 0)) 
    2390     send {blind}{NumpadRight} 
    2391   else if ((Ebene = 2) and (NumLock = 1)) 
    2392     send {blind}{Shift up}{NumpadRight}{Shift down} 
    2393   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    2394   { 
    2395     if !(CheckCompUni("Num_1",0x2159) ; 1/6 
    2396       or CheckCompUni("1",0x2159)    ; 1/6 
    2397       or CheckCompUni("Num_5",0x215A) ; 5/6 
    2398       or CheckCompUni("5",0x215A))   ; 5/6 
    2399       if (Ebene = 1) 
    2400         send {blind}{Numpad6} 
    2401       else 
    2402         send {blind){Shift up}{Numpad6}{Shift down} 
    2403  
     2305  if ((Ebene = 1) and !(CheckCompUni("1",0x2159)   ; 1/6 
     2306                     or CheckCompUni("5",0x215a))) ; 5/6 
     2307  { 
     2308    if NumLock 
     2309      send {blind}{Numpad6} 
     2310    else 
     2311      send {blind){Shift up}{Numpad6} 
    24042312    if (PriorDeadKey = "comp") 
    2405       CompKey := "Num_6" 
    2406   } 
    2407   else if (Ebene = 3) 
    2408     SendUnicodeChar(0x2192)    ; rightarrow 
    2409   else if ((Ebene = 4) or (Ebene = 5)) 
    2410     SendUnicodeChar(0x2283) ; superset of 
     2313      CompKey := "6" 
     2314  } 
     2315  else if (Ebene = 2) 
     2316    SendUnicodeChar(0x2283) ; Obermenge 
     2317  else if (Ebene = 3) 
     2318    SendUnicodeChar(0x2192) ; Rechtspfeil 
     2319  else if (Ebene = 4) 
     2320    if NumLock 
     2321      send {blind}{Shift up}{NumpadRight} 
     2322    else 
     2323      send {blind}{NumpadRight} 
    24112324return 
    24122325 
    24132326neo_Numpad1: 
    24142327  EbeneAktualisieren() 
    2415   if    ((Ebene = 1) and (NumLock = 0)) 
    2416     send {blind}{NumpadEnd} 
    2417   else if ((Ebene = 2) and (NumLock = 1)) 
    2418     send {blind}{Shift up}{NumpadEnd}{Shift down} 
    2419   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    2420   { 
    2421     if (Ebene = 1) 
     2328  if (Ebene = 1) 
     2329  { 
     2330    if NumLock 
    24222331      send {blind}{Numpad1} 
    24232332    else 
    2424       send {blind){Shift up}{Numpad1}{Shift down} 
    2425  
     2333      send {blind){Shift up}{Numpad1} 
    24262334    if (PriorDeadKey = "comp") 
    2427       CompKey := "Num_1" 
    2428   } 
     2335      CompKey := "1" 
     2336  } 
     2337  else if (Ebene = 2) 
     2338    SendUnicodeChar(0x2714) ; H�kchen 
    24292339  else if (Ebene = 3) 
    24302340    SendUnicodeChar(0x2194) ; Links-Rechts-Pfeil 
    2431   else if ((Ebene = 4) or (Ebene = 5)) 
    2432     SendUnicodeChar(0x2264)  ; leq 
     2341  else if (Ebene = 4) 
     2342    if NumLock 
     2343      send {blind}{Shift up}{NumpadEnd} 
     2344    else 
     2345      send {blind}{NumpadEnd} 
    24332346return 
    24342347 
    24352348neo_Numpad2: 
    24362349  EbeneAktualisieren() 
    2437   if    ((Ebene = 1) and (NumLock = 0)) 
    2438     send {blind}{NumpadDown} 
    2439   else if ((Ebene = 2) and (NumLock = 1)) 
    2440     send {blind}{Shift up}{NumpadDown}{Shift down} 
    2441   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    2442   { 
    2443     if !(CheckCompUni("Num_1",0x00BD) ; 1/2 
    2444       or CheckCompUni("1",0x00BD))   ; 1/2 
    2445       if (Ebene = 1) 
    2446         send {blind}{Numpad2} 
    2447       else 
    2448         send {blind){Shift up}{Numpad2}{Shift down} 
    2449  
     2350  if ((Ebene = 1) and !(CheckCompUni("1",0x00BD))) ; 1/2 
     2351  { 
     2352    if NumLock 
     2353      send {blind}{Numpad2} 
     2354    else 
     2355      send {blind){Shift up}{Numpad2} 
    24502356    if (PriorDeadKey = "comp") 
    2451       CompKey := "Num_2" 
    2452   } 
    2453   else if (Ebene = 3) 
    2454     SendUnicodeChar(0x2193)    ; downarrow 
    2455   else if ((Ebene = 4) or (Ebene = 5)) 
    2456     SendUnicodeChar(0x222A)  ; vereinigt 
     2357      CompKey := "2" 
     2358  } 
     2359  else if (Ebene = 2) 
     2360    SendUnicodeChar(0x222A) ; Vereinigung 
     2361  else if (Ebene = 3) 
     2362    SendUnicodeChar(0x2192) ; Untenpfeil 
     2363  else if (Ebene = 4) 
     2364    if NumLock 
     2365      send {blind}{Shift up}{NumpadDown} 
     2366    else 
     2367      send {blind}{NumpadDown} 
    24572368return 
    24582369 
    24592370neo_Numpad3: 
    24602371  EbeneAktualisieren() 
    2461   if    ((Ebene = 1) and (NumLock = 0)) 
    2462     send {blind}{NumpadPgDn} 
    2463   else if ((Ebene = 2) and (NumLock = 1)) 
    2464     send {blind}{Shift up}{NumpadPgDn}{Shift down} 
    2465   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    2466   { 
    2467     if !(CheckCompUni("Num_1",0x2153) ; 1/3 
    2468       or CheckCompUni("1",0x2154)    ; 1/3 
    2469       or CheckCompUni("Num_2",0x2154) ; 2/3 
    2470       or CheckCompUni("2",0x2154))   ; 2/3 
    2471       if (Ebene = 1) 
    2472         send {blind}{Numpad3} 
    2473       else 
    2474         send {blind){Shift up}{Numpad3}{Shift down} 
    2475  
     2372  if ((Ebene = 1) and !(CheckCompUni("1",0x2153)   ; 1/3 
     2373                     or CheckCompUni("5",0x2154))) ; 2/3 
     2374  { 
     2375    if NumLock 
     2376      send {blind}{Numpad3} 
     2377    else 
     2378      send {blind){Shift up}{Numpad3} 
    24762379    if (PriorDeadKey = "comp") 
    2477       CompKey := "Num_3" 
    2478   } 
    2479   else if (Ebene = 3) 
    2480     SendUnicodeChar(0x21CC) ; RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON 
    2481   else if ((Ebene = 4) or (Ebene = 5)) 
    2482     SendUnicodeChar(0x2265)  ; geq 
     2380      CompKey := "3" 
     2381  } 
     2382  else if (Ebene = 2) 
     2383    SendUnicodeChar(0x2718) ; Kreuzchen 
     2384  else if (Ebene = 3) 
     2385    SendUnicodeChar(0x2192) ; Rechtspfeil 
     2386  else if (Ebene = 4) 
     2387    if NumLock 
     2388      send {blind}{Shift up}{NumpadPgDn} 
     2389    else 
     2390      send {blind}{NumpadPgDn} 
    24832391return 
    24842392 
    24852393neo_Numpad0: 
    24862394  EbeneAktualisieren() 
    2487   if    ((Ebene = 1) and (NumLock = 0)) 
    2488     send {blind}{NumpadIns} 
    2489   else if ((Ebene = 2) and (NumLock = 1)) 
    2490     send {blind}{Shift up}{NumpadIns}{Shift down} 
    2491   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    2492   { 
    2493     if (Ebene = 1) 
     2395  if (Ebene = 1) 
     2396  { 
     2397    if NumLock 
    24942398      send {blind}{Numpad0} 
    24952399    else 
    2496       send {blind){Shift up}{Numpad0}{Shift down} 
    2497  
     2400      send {blind){Shift up}{Numpad0} 
    24982401    if (PriorDeadKey = "comp") 
    2499       CompKey := "Num_0" 
    2500   } 
    2501   else if (Ebene = 3) 
    2502     send {blind}`% 
    2503   else if ((Ebene = 4) or (Ebene = 5)) 
    2504     send � 
     2402      CompKey := "0" 
     2403  } 
     2404  else if (Ebene = 2) 
     2405    SendUnicodeChar(0x2030) ; Promille 
     2406  else if (Ebene = 3) 
     2407    SendUnicodeChar(0x0025) ; Prozent 
     2408  else if (Ebene = 4) 
     2409    if NumLock 
     2410      send {blind}{Shift up}{NumpadIns} 
     2411    else 
     2412      send {blind}{NumpadIns} 
    25052413return 
    25062414 
    25072415neo_NumpadDot: 
    25082416  EbeneAktualisieren() 
    2509   if    ((Ebene = 1) and (NumLock = 0)) 
    2510     send {blind}{NumpadDel} 
    2511   else if ((Ebene = 2) and (NumLock = 1)) 
    2512     send {blind}{Shift up}{NumpadDel}{Shift down} 
    2513   else if (((Ebene = 1) and (NumLock = 1)) or ((Ebene = 2) and (NumLock = 0))) 
    2514     if (Ebene = 1) 
     2417  if (Ebene = 1) 
     2418  { 
     2419    if NumLock 
    25152420      send {blind}{NumpadDot} 
     2421    else         
     2422      send {blind){Shift up}{NumpadDot} 
     2423  } 
     2424  else if (Ebene = 2) 
     2425    send `, 
     2426  else if (Ebene = 3) 
     2427    send {blind}. 
     2428  else if (Ebene = 4) 
     2429    if NumLock 
     2430      send {blind}{Shift up}{NumpadDel} 
    25162431    else 
    2517       send {blind){Shift up}{NumpadDot}{Shift down} 
    2518   else if (Ebene = 3) 
    2519     send {blind}. 
    2520   else if ((Ebene = 4) or (Ebene = 5)) 
    2521     send `, 
    2522 return 
     2432      send {blind}{NumpadDel} 
     2433return 
     2434 
     2435 
    25232436 
    25242437 
     
    25282441 
    25292442*/ 
     2443 
    25302444*space:: 
    25312445  if ((einHandNeo)) 
     
    25742488  Folgende Tasten sind nur aufgef�hrt, um PriorDeadKey zu leeren. 
    25752489  Irgendwie sieht das noch nicht sch�n aus. Vielleicht l�sst sich dieses 
    2576   Problem irgendwie eleganter l�sen... 
    2577  
    2578   Nachtrag: 
    2579   Weil es mit Alt+Tab Probleme gab, wird hier jetzt erstmal rumgeflickschustert, 
    2580   bis eine allgemeinere L�sung gefunden wurde. 
     2490  Problem auch eleganter l�sen... 
    25812491*/ 
    25822492 
     
    25962506  } 
    25972507return 
     2508 
    25982509 
    25992510*Del:: 
     
    27022613   KeyboardLED(LEDvalue,"Cmd"), wobei 
    27032614   Cmd = on/off/switch, 
    2704    LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4 
     2615   LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4, 
    27052616   bzw. eine beliebige Summe dieser Werte: 
    27062617   AlleAus=0, CapsLock+NumLock=6, etc. 
     
    27102621    
    27112622   Um eventuelle Wechselwirkungen mit dem bestehenden 
    2712    Code (insb. der Unicode-Konvertierung) auszuschie�en, 
     2623   Code (insb. der Unicode-Konvertierung) auszuschlie�en, 
    27132624   sind auch alle (Hilfsmethoden) mit dem Postfix LED 
    27142625   versehen worden. 
     
    28172728 
    28182729 
    2819 /* 
    2820   Funktionen 
    2821 */ 
    2822  
    2823 /* 
    2824 Ebenen laut Referenz: 
    2825 1. Ebene (kein Mod)      4. Ebene (Mod4) 
    2826 2. Ebene (Umschalt)      5. Ebene (Umschalt+Mod3) 
    2827 3. Ebene (Mod3)          6. Ebene (Mod3+Mod4) 
    2828 */ 
    2829  
    2830 EbeneAktualisieren() 
    2831 { 
    2832    global 
    2833    PriorDeadKey := DeadKey 
    2834    PriorCompKey := CompKey 
    2835    DeadKey := "" 
    2836    CompKey := "" 
    2837    Ebene12 := 0 
    2838    Ebene7 := 0 
    2839    Ebene8 := 0 
    2840    Modstate := IsShiftPressed() . IsMod3Pressed() . IsMod4Pressed() 
    2841  
    2842    if (ahkTreiberKombi) 
    2843       if ( Modstate = "001") 
    2844          Ebene = 6       
    2845       else 
    2846          Ebene = -1 
    2847    else  
    2848      if      (Modstate = "000") 
    2849          Ebene = 1                 ; Ebene 1: Ohne Mod 
    2850      else if (Modstate = "100") 
    2851          Ebene = 2                 ; Ebene 2: Shift 
    2852      else if (Modstate = "010") 
    2853          Ebene = 3                 ; Ebene 3: Mod3 
    2854      else if (Modstate = "001") 
    2855          Ebene = 4                 ; Ebene 4: Mod4 
    2856      else if (Modstate = "110") 
    2857          Ebene = 5                 ; Ebene 5: Shift+Mod3 
    2858      else if (Modstate = "011") 
    2859          Ebene = 6                 ; Ebene 6: Mod3+Mod4 
    2860      else if (Modstate = "101") 
    2861      { 
    2862          Ebene = 4                 ; Ebene 7: Shift+Mod4 impliziert Ebene 4 
    2863          Ebene7 = 1 
    2864      } 
    2865      else if (Modstate = "111") 
    2866      { 
    2867          Ebene = 6                 ; Ebene 8: Shift+Mod3+Mod4 impliziert Ebene 6 
    2868          Ebene8 = 1 
    2869      } 
    2870  
    2871    Ebene12 := ((Ebene = 1) or (Ebene = 2)) 
    2872  
    2873    if GetKeyState("NumLock","T") 
    2874      NumLock = 1 
    2875    else 
    2876      NumLock = 0 
    2877 } 
    2878  
    2879  
    2880 IsShiftPressed() 
    2881 { 
    2882   return GetKeyState("Shift","P") 
    2883 } 
    2884  
    2885 IsMod3Pressed() 
    2886 { 
    2887    global 
    2888    if (IsMod3Locked)  
    2889    { 
    2890        return (not ( GetKeyState("CapsLock","P") or GetKeyState("#","P") ))  ; # = SC02B 
    2891    } 
    2892    else { 
    2893       return ( GetKeyState("CapsLock","P") or GetKeyState("#","P") )  ; # = SC02B 
    2894    } 
    2895 } 
    2896  
    2897 IsMod4Pressed() 
    2898 { 
    2899    global 
    2900    if( not(einHandNeo) or not(spacepressed) ) 
    2901    { 
    2902      if (IsMod4Locked)  
    2903      { 
    2904          return (not ( GetKeyState("<","P") or GetKeyState("SC138","P"))) 
    2905      } 
    2906      else { 
    2907          return ( GetKeyState("<","P") or GetKeyState("SC138","P")) 
    2908      } 
    2909    } 
    2910    else 
    2911    { 
    2912      if (IsMod4Locked)  
    2913      { 
    2914          return (not ( GetKeyState("<","P") or GetKeyState("SC138","P") or GetKeyState("�","P"))) 
    2915      } 
    2916      else { 
    2917          return ( GetKeyState("<","P") or GetKeyState("SC138","P") or GetKeyState("�","P")) 
    2918      } 
    2919    } 
    2920     
    2921 } 
    2922  
    2923  
    2924 SendUnicodeChar(charCode) 
    2925 { 
    2926    IfWinActive, ahk_class gdkWindowToplevel 
    2927    { 
    2928       StringLower, charCode, charCode 
    2929       send % "^+u" . SubStr(charCode,3) . " " 
    2930    } else { 
    2931       VarSetCapacity(ki, 28 * 2, 0) 
    2932  
    2933       EncodeInteger(&ki + 0, 1) 
    2934       EncodeInteger(&ki + 6, charCode) 
    2935       EncodeInteger(&ki + 8, 4) 
    2936       EncodeInteger(&ki +28, 1) 
    2937       EncodeInteger(&ki +34, charCode) 
    2938       EncodeInteger(&ki +36, 4|2) 
    2939  
    2940       DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28) 
    2941    } 
    2942 } 
    2943 /* 
    2944 �ber den GTK-Workaround: 
    2945 Dieser basiert auf http://www.autohotkey.com/forum/topic32947.html 
    2946  
    2947 Der Aufruf von �SubStr(charCode,3)� geht davon aus, dass alle charCodes in Hex mit f�hrendem �0x� angegeben sind. Die abenteuerliche �^+u�-Konstruktion ben�tigt im �brigen den Hex-Wert in Kleinschrift, was derzeit nicht bei den Zeichendefinitionen umgesetzt ist, daher zentral und weniger fehlertr�chtig an dieser Stelle. Au�erdem ein abschlie�end gesendetes Space, sonst bleibt der �eingetippte� Unicode-Wert noch kurz sichtbar stehen, bevor er sich GTK-sei-dank in das gew�nschte Zeichen verwandelt. 
    2948 */ 
    2949  
    2950  
    29512730BSSendUnicodeChar(charCode) 
    29522731{ 
     
    29652744   send {bs}{bs} 
    29662745   SendUnicodeChar(charCode) 
    2967 } 
    2968  
    2969  
    2970 EncodeInteger(ref, val) 
    2971 { 
    2972    DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val) 
    29732746} 
    29742747 
     
    32723045************************************************************/ 
    32733046 
    3274  
     3047/* 
     3048�ber den GTK-Workaround: 
     3049Dieser basiert auf http://www.autohotkey.com/forum/topic32947.html 
     3050Der Aufruf von �SubStr(charCode,3)� geht davon aus, dass alle charCodes in Hex mit f�hrendem �0x� angegeben sind. Die abenteuerliche �^+u�-Konstruktion ben�tigt im �brigen den Hex-Wert in Kleinschrift, was derzeit nicht bei den Zeichendefinitionen umgesetzt ist, daher zentral und weniger fehlertr�chtig an dieser Stelle. Au�erdem ein abschlie�end gesendetes Space, sonst bleibt der �eingetippte� Unicode-Wert noch kurz sichtbar stehen, bevor er sich GTK-sei-dank in das gew�nschte Zeichen verwandelt. 
     3051*/ 
     3052 
     3053SendUnicodeChar(charCode) 
     3054{ 
     3055   IfWinActive, ahk_class gdkWindowToplevel 
     3056   { 
     3057      StringLower, charCode, charCode 
     3058      send % "^+u" . SubStr(charCode,3) . " " 
     3059   } else { 
     3060      VarSetCapacity(ki, 28 * 2, 0) 
     3061 
     3062      EncodeInteger(&ki + 0, 1) 
     3063      EncodeInteger(&ki + 6, charCode) 
     3064      EncodeInteger(&ki + 8, 4) 
     3065      EncodeInteger(&ki +28, 1) 
     3066      EncodeInteger(&ki +34, charCode) 
     3067      EncodeInteger(&ki +36, 4|2) 
     3068 
     3069      DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28) 
     3070   } 
     3071} 
     3072 
     3073EncodeInteger(ref, val) 
     3074{ 
     3075   DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val) 
     3076} 
    32753077 
    32763078/* 
     
    34493251    } 
    34503252Return 
    3451  ; Ende der BildschirmTastatur 
    3452  
    3453  
    3454 /* 
    3455    ------------------------------------------------------ 
    3456    Shift+Pause "pausiert" das Script. 
    3457    ------------------------------------------------------ 
    3458 */ 
    3459  
    3460 *pause:: 
    3461 Suspend, Permit 
    3462    if isshiftpressed() 
    3463      goto togglesuspend 
    3464    else 
    3465      send {blind}{pause} 
    3466 return 
    3467  
    3468 ; ------------------------------------ 
    3469  
    3470 ^.::einHandNeo := not(einHandNeo)  ; Punkt 
    3471 ^,::lernModus := not(lernModus)    ; Komma 
    3472  
    3473  
    3474  
    3475 togglesuspend: 
    3476    if A_IsSuspended 
    3477    { 
    3478       menu, tray, rename, %enable%, %disable% 
    3479       menu, tray, tip, %name% 
    3480       if (iconBenutzen) 
    3481           menu, tray, icon, %ResourceFolder%\neo.ico,,1   
    3482       suspend , off ; Schaltet Suspend aus -> NEO 
    3483    } 
    3484    else 
    3485    { 
    3486       menu, tray, rename, %disable%, %enable% 
    3487       menu, tray, tip, %name% : Deaktiviert 
    3488       if (iconBenutzen) 
    3489          menu, tray, icon, %ResourceFolder%\neo_disabled.ico,,1 
    3490       suspend , on  ; Schaltet Suspend ein -> QWERTZ  
    3491    } 
    3492  
    3493 return 
    3494  
    3495  
    3496 help: 
    3497    Run, %A_WinDir%\hh mk:@MSITStore:autohotkey.chm 
    3498 return 
    3499  
    3500  
    3501 about: 
    3502    msgbox, 64, %name% � Ergonomische Tastaturbelegung,  
    3503    ( 
    3504    %name%  
    3505    `nDas Neo-Layout ersetzt das �bliche deutsche  
    3506    Tastaturlayout mit der Alternative Neo,  
    3507    beschrieben auf http://neo-layout.org/.  
    3508    `nDazu sind keine Administratorrechte n�tig.  
    3509    `nWenn Autohotkey aktiviert ist, werden alle Tastendrucke  
    3510    abgefangen und statt dessen eine �bersetzung weitergeschickt.  
    3511    `nDies geschieht transparent f�r den Anwender,  
    3512    es muss nichts installiert werden.  
    3513    `nDie Zeichen�bersetzung kann leicht �ber das Icon im  
    3514    Systemtray deaktiviert werden.  `n 
    3515    ) 
    3516 return 
    3517  
    3518  
    3519 neo: 
    3520    run http://neo-layout.org/ 
    3521 return 
    3522  
    3523 autohotkey: 
    3524    run http://autohotkey.com/ 
    3525 return 
    3526  
    3527 open: 
    3528    ListLines ; shows the Autohotkey window 
    3529 return 
    3530  
    3531 edit: 
    3532    edit 
    3533 return 
    3534  
    3535 reload: 
    3536    Reload 
    3537 return 
    3538  
    3539 hide: 
    3540    menu, tray, noicon 
    3541 return 
    3542  
    3543 exitprogram: 
    3544    exitapp 
    3545 return 
     3253 
    35463254