Changeset 776
- Timestamp:
- 08/18/08 21:25:20 (5 years ago)
- Files:
-
- 1 removed
- 17 modified
-
A-REFERENZ-A/neo20-test.txt (deleted)
-
A-REFERENZ-A/neo20.txt (modified) (5 diffs)
-
Subversion-Anleitung.txt (modified) (8 diffs)
-
windows/autohotkey/Build-Update.bat (modified) (1 diff)
-
windows/autohotkey/Changelog-and-Todo.txt (modified) (8 diffs)
-
windows/autohotkey/README.txt (modified) (5 diffs)
-
windows/autohotkey/Source/All.ahk (modified) (1 diff)
-
windows/autohotkey/Source/Global-Part.ahk (modified) (3 diffs)
-
windows/autohotkey/Source/Keys-Neo.ahk (modified) (56 diffs)
-
windows/autohotkey/Source/Keys-Qwert-to-Neo.ahk (modified) (1 diff)
-
windows/autohotkey/Source/Methods-Layers.ahk (modified) (2 diffs)
-
windows/autohotkey/Source/Methods-Lights.ahk (modified) (2 diffs)
-
windows/autohotkey/Source/Methods-Other.ahk (modified) (2 diffs)
-
windows/autohotkey/Source/Methods-ScreenKeyboard.ahk (modified) (1 diff)
-
windows/autohotkey/Source/Methods-Unicode.ahk (modified) (1 diff)
-
windows/autohotkey/Source/Warning.ahk (modified) (2 diffs)
-
windows/autohotkey/neo20.ahk (modified) (69 diffs)
-
windows/autohotkey/neo20.exe (modified) (previous)
Legend:
- Unmodified
- Added
- Removed
-
A-REFERENZ-A/neo20.txt
r764 r776 1 -------------------------------------------------------------------------------1 ------------------------------------------------------------------------------- 2 2 ACHTUNG: 3 3 Damit alles ordentlich dargestellt wird, muss man für die Darstellung z. B. im … … 19 19 │1 3 5│ 3 … 3. Ebene (Mod3) │ 6 … 6. Ebene (Mod3+Mod4) 20 20 └─────┘ 21 • Ebene 1: Kleinbuchstaben (kein Mod) 21 • Ebene 1: Kleinbuchstaben (kein Mod) 22 22 • Ebene 2: Großbuchstaben (Umschalt) 23 23 • Ebene 3: Sonderzeichen (Mod3) … … 249 249 === Legende – Ziffernblock === 250 250 ┌─────┐ 1 … 1. Ebene (kein Mod) 251 │ 2 4│ 2 … 2. Ebene (Umschalt)251 │ 4 2 │ 2 … 2. Ebene (Umschalt) 252 252 │ 1 3 │ 3 … 3. Ebene (Mod3) 253 253 └─────┘ 4 … 5. Ebene (Mod3+Umschalt) … … 302 302 === Zweite Ebene – Miniatur === 303 303 ┌───┬───┬───┬───┐ 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 ┌───┬───┬───┬───┐331 304 │ ⍓ │frc│ × │ − │ ⍓ turns on/off the keyboard mouse control 332 305 ├───┼───┼───┼───┤ frc means fraction slash ⁄ … … 338 311 ├───┴───┼───┤ │ 339 312 │ ‰ │,/.│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│ 340 339 └───────┴───┴───┘ 341 340 -
Subversion-Anleitung.txt
r772 r776 1 ------------------------------------------------------------------------------1 ------------------------------------------------------------------------------ 2 2 Diese Datei beschreibt den Umgang mit dem Subversion Kommandozeilenclient. 3 3 ------------------------------------------------------------------------------ … … 5 5 1. Voraussetzung 6 6 1.1 Welche Software brauche ich? 7 1.2 Dateien im SVN ändern7 1.2 Dateien im SVN �ndern 8 8 1.3 Terminologie 9 2. Verschiedene Arbeitsabl äufe (Was will ich machen?)9 2. Verschiedene Arbeitsabl�ufe (Was will ich machen?) 10 10 2.1 Das Repository lokal auf meinem Rechner haben 11 11 2.2 Das Repository auf meinem Rechner auf den neuesten Stand bringen 12 2.3 Dateien im Repository ändern13 2.4 Dem Repository neue Dateien hinzuf ügen12 2.3 Dateien im Repository �ndern 13 2.4 Dem Repository neue Dateien hinzuf�gen 14 14 2.5 Dateien im Repository umbenennen 15 2.6 Dateien aus dem Repository l öschen16 2.7 Änderungen ins Repository hochladen17 3 Ratschläge / »best practice SVN usage«15 2.6 Dateien aus dem Repository l�schen 16 2.7 �nderungen ins Repository hochladen 17 3. Ratschl�ge / �best practice SVN usage� 18 18 ------------------------------------------------------------------------------ 19 19 1. Voraussetzung … … 21 21 1.1 Welche Software brauche ich? 22 22 23 Ben ötigt wird das Programm subversion für die Kommandozeile:23 Ben�tigt wird das Programm subversion f�r die Kommandozeile: 24 24 Download: http://svn.tigris.org 25 25 26 Alternativ liegt f ür Windows auch ein komfortabler SVN-Client vor, der sich in die normale Dateiverwaltung integriert:26 Alternativ liegt f�r Windows auch ein komfortabler SVN-Client vor, der sich in die normale Dateiverwaltung integriert: 27 27 http://www.tortoisesvn.net/ 28 28 29 Die weiteren Erl äuterung beziehen sich auf den Kommandozeilen-Client, können aber sinngemäß auf einen graphischen Client übertragen werden.29 Die weiteren Erl�uterung beziehen sich auf den Kommandozeilen-Client, k�nnen aber sinngem�� auf einen graphischen Client �bertragen werden. 30 30 31 31 ------------------------------------------------------------------------------ 32 1.2 Dateien im SVN ändern32 1.2 Dateien im SVN �ndern 33 33 34 Will man auch Dateien im Repostiory ändern, braucht man einen Schreibzugang mit Namen und Passwort.35 →Ben fragen!36 Wenn es vor rausſichtlich bei einer einzigen Änderung bleiben wird, kann alternativ auch auf der Mailingliste Unterstützung für ein einmaliges »Einchecken«erbeten werden.34 Will man auch Dateien im Repostiory �ndern, braucht man einen Schreibzugang mit Namen und Passwort. 35 ? Ben fragen! 36 Wenn es voraussichtlich bei einer einzigen �nderung bleiben wird, kann alternativ auch auf der Mailingliste Unterst�tzung f�r ein einmaliges �Einchecken� erbeten werden. 37 37 38 38 ------------------------------------------------------------------------------ 39 39 1.3 Terminologie 40 40 41 $REPOSITORY_HOME …Das Verzeichnis in dem das ausgecheckte Repository liegt41 $REPOSITORY_HOME � Das Verzeichnis in dem das ausgecheckte Repository liegt 42 42 43 43 ------------------------------------------------------------------------------ … … 46 46 2.1 Das Repository lokal auf meinem Rechner haben 47 47 48 Angenommen ich m öchte neo in das Verzeichnis „$VERZEICHNIS/$NEO“runterladen:48 Angenommen ich m�chte Neo in das Verzeichnis �$VERZEICHNIS/$NEO� runterladen: 49 49 50 50 cd $VERZEICHNIS … … 60 60 61 61 ------------------------------------------------------------------------------ 62 2.3 Dateien im Repository ändern62 2.3 Dateien im Repository �ndern 63 63 64 Einfach die Datei ändern und weiter gehts mit Abschnitt 2.7.64 Einfach die Datei �ndern und weiter geht�s mit Abschnitt 2.7. 65 65 66 66 ------------------------------------------------------------------------------ 67 2.4 Dem Repository neue Dateien hinzuf ügen67 2.4 Dem Repository neue Dateien hinzuf�gen 68 68 69 69 Nachdem man die Datei in der lokalen Repositorykopie erstellt hat: … … 78 78 79 79 ------------------------------------------------------------------------------ 80 2.6 Dateien aus dem Repository l öschen80 2.6 Dateien aus dem Repository l�schen 81 81 82 82 svn rm $DATEI … … 84 84 85 85 ------------------------------------------------------------------------------ 86 2.7 Änderungen ins Repository hochladen86 2.7 �nderungen ins Repository hochladen 87 87 88 88 cd $REPOSITORY_HOME 89 svn commit -m "$ ÄNDERUNGSBESCHREIBUNG" --username $USER89 svn commit -m "$�NDERUNGSBESCHREIBUNG" --username $USER 90 90 91 91 Wenn man das Repository mit seinem Nutzernamen ausgecheckt hat, 92 kann „--username $USER“weggelassen werden.92 kann �--username $USER� weggelassen werden. 93 93 Statt auschecken wie in Abschnitt 2.1 beschrieben: 94 94 cd $VERZEICHNIS_WO_NEO_REIN_SOLL … … 96 96 97 97 ------------------------------------------------------------------------------ 98 3. Ratschl äge / »best practice«98 3. Ratschl�ge / �best practice� 99 99 ------------------------------------------------------------------------------ 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: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: 101 101 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 � � 110 110 111 111 ------------------------------------------------------------------------------ -
windows/autohotkey/Build-Update.bat
r771 r776 1 1 @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" 2 cd Source 13 3 set fn=neo20 14 4 15 echo Killing the old (AHK)Driver5 rem echo Killing the old (AHK)Driver 16 6 REM tskill neo20-all-in-one 17 7 18 8 echo Creating a new Driver from the Source code 19 9 REM 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"10 copy "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" 11 REM if exist "..\Compose\Compose-all-in-one.ahk" copy "..\%fn%.ahk" + "..\Compose\Compose-all-in-one.ahk" "..\%fn%.ahk" 22 12 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"13 echo Compiling the new Driver using AutoHotkey... 14 "C:\Programme\AutoHotkey\Compiler\Ahk2Exe.exe" /in "..\%fn%.ahk" /out "..\%fn%.exe" /icon "..\neo.ico" 25 15 echo Driver Update complete! You can now close this log-window. 26 16 27 17 REM Start the new Driver 28 %fn%.exe18 rem %fn%.exe 29 19 30 20 rem wie kann man hier mit der Skriptabarbeitung weitermachen? 31 21 rem Unter Windows XP scheint es nicht m�glich zu sein, dies mit "Bordmitteln" zu erreichen, es gibt hierf�r jedoch extere Programme, etwa 32 22 REM 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"23 REM 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 == 2 2 3 3 4 4 === Autoren === 5 Alle E-Mail-Adressen sind »kodiert«, um die Erfassung durch E-Mail-Spider (und darauf folgenden Spam) zu vermeiden:5 Alle E-Mail-Adressen sind �kodiert�, um die Erfassung durch E-Mail-Spider (und darauf folgenden Spam) zu vermeiden: 6 6 7 7 Stefan Mayer <stm (at) neo-layout. o r g> 8 Nora Gei ßler <nora_geissler (at) yahoo. d e>8 Nora Gei�ler <nora_geissler (at) yahoo. d e> 9 9 Matthias Berg <neo (at) matthias-berg. e u> 10 10 Martin Roppelt <m.p.roppelt (at) web. d e> 11 11 Dennis Heidsiek <HeidsiekB (at) aol. c o m> 12 Matthias W ächter <matthias (at) waechter.wiz. a t>12 Matthias W�chter <matthias (at) waechter.wiz. a t> 13 13 14 14 15 15 === 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 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. 20 20 - Die Ebenen vom Tastenblock an die neue Referenz anpassen (wenn da ein Konsens gefunden wurde). 21 21 - Blindes Compose implementieren. 22 - CompKey in Abh�ngigkeit von CapsLock setzen. 23 - CapsLock-Abh�ngigkeiten entfernen. 22 24 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. 27 27 - Die Compose-Kombinationen sollten automatisch aus den Referenzdateien im Compose-Verzeichnis erzeugt werden. 28 28 29 29 30 === Änderungshistorie ===30 === �nderungshistorie === 31 31 32 Revision 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 32 36 Revision 749 (von Dennis Heidsiek) 33 - »?« und »¿«funktionieren wieder (Klammer vergessen).37 - �?� und ��� funktionieren wieder (Klammer vergessen). 34 38 Revision 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? 36 40 Revision 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 eingef�hrt. 44 - s(12)[2s]-Bug von Matthias W�chter behoben (= Lang-s-Tastatur repariert). 41 45 Revision 744 (von Stefan Mayer) 42 46 - Ebene4-Ziffernblock: auf neo_d nun Komma (wie Referenz), "NumPadKomma" gibt es nicht. 43 Revision 743 (von Matthias W ächter)47 Revision 743 (von Matthias W�chter) 44 48 - Ebene4-Ziffernblock: NumPadAdd und NumPadSub korrigiert. 45 Revision 740 (von Matthias W ächter) - "Mega-Patch"49 Revision 740 (von Matthias W�chter) - "Mega-Patch" 46 50 - Straffung der Syntax bei der Abfrage der Ebenen und der Behandlung der toten Tasten und der Compose. 47 51 - 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. 49 53 - Wiederherstellung der Modifier-Locks. 50 54 - Reparatur der Bildschirmtastatur in der All.ahk. … … 53 57 - Blinde Compose auf M4+F10 (Toggle) (noch nicht implementiert). 54 58 Revision 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. 57 61 Revision 707 (von Dennis Heidsiek): 58 62 - 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. 60 64 Revision 694 (von Martin Roppelt): 61 65 - 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. 63 67 - Interne Darstellung der Ebenen (4 und 5 bei den toton Tasten wieder richtig getauscht. 64 68 Revision 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. 66 70 - (An/Aus) Icons an Favicon der neuen Homepage angepasst. 67 71 Revision 645 (von Martin Roppelt): 68 - Ellipse zus ätzlich auf M3+x.72 - Ellipse zus�tzlich auf M3+x. 69 73 - Lang-s-Tastatur probeweise auf M4+Esc. 70 74 Revision 640 (von Dennis Heidsiek): … … 75 79 - Spitze Klammern (bra und ket) auf M5+8/9. 76 80 Revision 624 (von Martin Roppelt): 77 - Lang-s-Tastatur (ein- und auszuschalten durch Mod4+ ß).81 - Lang-s-Tastatur (ein- und auszuschalten durch Mod4+�). 78 82 Revision 616 (von Dennis Heidsiek): 79 83 - Der nicht funktionierende Mod5-Lock-Fix wurde wieder entfernt, da er sogar neue Fehler produzierte. … … 81 85 - Erfolgloser Versuch, den Mod4-Lock wiederherzustellen (durch eine Tilde vor den Scancodes der Bildschirmtastatur). 82 86 - Rechtschreibfehler korrigiert. 83 - Zwei AHK-Links eingef ügt.87 - Zwei AHK-Links eingef�gt. 84 88 Revision 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 - Vorl�ufiger 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. 87 91 Revision 608 (von Martin Roppelt): 88 92 - Rechtschreibfehler korrigiert und Dateinamen aktualisiert und sortiert. … … 91 95 - Neue Batch-Datei Build-Update.bat zur einfachen Aktualisierung der EXE-Datei. 92 96 Revision 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). 94 98 Revision 580 (von Matthias Berg): 95 99 - Bildschirmtastatur jetzt mit Mod4+F* statt Strg+F*, dies deaktiviert jedoch leider den Mod4-Lock. 96 100 Revision 570 (von Matthias Berg): 97 - Hotkeys f ür einHandNeo und lernModus durch entsprechende ScanCodes ersetzt101 - Hotkeys f�r einHandNeo und lernModus durch entsprechende ScanCodes ersetzt 98 102 Revision 568 (von Matthias Berg): 99 103 - 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 "\"). 102 106 Revision 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. 104 108 - Neue Option im Skript: UseMod4Light. 105 109 Revision 561 (von Matthias Berg): 106 - M4+Tab verh ält sich jetzt wie das andere Tab dank "goto neo_tab".110 - M4+Tab verh�lt sich jetzt wie das andere Tab dank "goto neo_tab". 107 111 Revision 560 (von Dennis Heidsiek): 108 112 - 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. 109 113 Revision 559 (von Matthias Berg): 110 - Shift+Alt+Tab Problem gel öst (muss noch mehr auf Nebeneffekte getestet werden).114 - Shift+Alt+Tab Problem gel�st (muss noch mehr auf Nebeneffekte getestet werden). 111 115 Revision 558 (von Matthias Berg): 112 116 - 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" 114 118 - 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). 116 120 Revision 556 (von Matthias Berg): 117 121 - 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). 121 125 - Bug aufgetaucht: Icons werden nicht mehr angezeigt. 122 126 Revision 544 (von Stefan Mayer): … … 126 130 - Bei EinHandNeo ist jetzt Space+y auch Mod4. 127 131 - 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 ge�ndert. 129 133 Revision 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. 131 135 - 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. 134 138 - 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. 138 142 Revision 532 (von Matthias Berg): 139 143 - 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. 143 147 Revision 529 (von Stefan Mayer): 144 148 - Icon wird automatisch geladen, falls .ico-Dateien im selbem Ordner. … … 146 150 Revision 528 (von Matthias Berg): 147 151 - 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 Priorit�t (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). 151 155 - Ein paar falsche Zeichen korrigiert. 152 156 Revision 527 (von Matthias Berg): … … 157 161 - Mod4-Lock durch Mod4+Mod4. 158 162 - 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). 161 165 Revision 525 (von Matthias Berg): 162 - Capslock bei Zahlen und Sonderzeichen ber ücksichtigt.166 - Capslock bei Zahlen und Sonderzeichen ber�cksichtigt. 163 167 Revision 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�. 166 170 - Sonderzeichen senden wieder blind -> Shortcuts funktionieren, Capslock ist leider Shiftlock. 167 171 Revision 523 (von Matthias Berg): 168 172 - CapsLock geht jetzt auch bei allen Zeichen ('send Zeichen' statt 'send {blind} Zeichen'). 169 173 - vertikale Ellipse eingebaut. 170 - Umschalt+Umschalt f ür Capslock statt Mod3+Mod3.174 - Umschalt+Umschalt f�r Capslock statt Mod3+Mod3. 171 175 - bei Suspend wird jetzt wirklich togglesuspend aufgerufen (auch beim Aktivieren per shift+pause). 172 176 Revsion 490 (von Stefan Mayer): 173 177 - SUBSCRIPT von 0 bis 9 sowie (auf Ziffernblock) + und - 174 •auch bei Ziffernblock auf der 5. Ebene175 - Kein Parsen über die Zwischenablage mehr.178 � auch bei Ziffernblock auf der 5. Ebene 179 - Kein Parsen �ber die Zwischenablage mehr. 176 180 - Vista-kompatibel. 177 181 - 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. 181 185 182 186 -
windows/autohotkey/README.txt
r774 r776 1 == Neo 2.0 Autohotkey-Treiber für Windows ==1 == Neo 2.0 Autohotkey-Treiber f�r Windows == 2 2 3 3 4 == Hinweise f ür Nutzer ==4 == Hinweise f�r Nutzer == 5 5 6 6 === 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.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. 8 8 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 === 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). 11 11 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? === 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. 14 15 === Globale Schalter und die Neo2.ini === 16 Es besteht die M�glichkeit, beim Starten des AHK-Treibers individuelle Anfangswerte f�r die globalen Schalter des Programms vorzugeben. 17 18 Dies geschieht �ber die Konfigurationsdatei Neo2.ini (diese muss im gebr�uchlichen INI-Format vorliegen, also insbesondere ANSI-kodiert sein). 19 Eine 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 23 ahkTreiberKombi=0 24 einHandNeo=0 25 lernModus=0 26 zeigeLockBox=1 27 UseMod4Light=1 28 LangSTastatur=0 29 DeadSilence=0 30 DeadCompose=0 31 32 Diese 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 33 C:\Users\<BENUTZERNAME>\AppData\Roaming\Neo2\Neo2.ini 34 unter Windows XP hingegen das Verzeichnis 35 C:\Dokumente und Einstellungen\<BENUTZERNAME>\Anwendungsdaten\Neo2\Neo2.ini 36 usw. 14 37 15 38 === 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.39 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 (der jedoch noch nicht vollst�ndig umgesetzt ist). 17 40 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 === 42 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. 43 44 === Lang-S-Tastatur === 45 Um 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. 20 46 21 47 === 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.48 Bei 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. 23 49 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 Aktualit�t === 51 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! 26 52 27 53 === Was noch nicht funktioniert === … … 29 55 30 56 31 == Hinweise f ür Entwickler ==57 == Hinweise f�r Entwickler == 32 58 33 === Auto hotkey 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 === 60 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. 61 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. 62 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!). 37 63 38 === Die ausf ührbare Datei aktualisieren ===64 === Die ausf�hrbare Datei aktualisieren === 39 65 Um 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.66 Es ist empfehlenswert, diese Batch-Datei stets vor einem Commit auszuf�hren, damit die .exe-Datei immer auf dem aktuellsten Stand ist. 41 67 42 68 === 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.69 Die Datei neo20.ahk sollte auf keinen Fall mehr direkt bearbeitet werden, da sie inzwischen automatisch generiert und regelm��ig �berschrieben wird. 44 70 45 Stattdessen m üssen die Dateien/Module im Source-Unterverzeichnis bearbeitet werden, etwa:71 Stattdessen m�ssen die Dateien/Module im Source-Unterverzeichnis bearbeitet werden, etwa: 46 72 Source\Keys-Neo.ahk 47 73 Source\Keys-Qwert-to-Neo.ahk … … 49 75 Source\Methods-Lights.ahk 50 76 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. 77 Um 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. 54 78 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.:79 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.�: 56 80 Error at line 64 in #include file "C:\...\autohotkey\Source\Methods-Lights.ahk" 57 81 Line Text: CTL_CODE_LED(p_device_type, p_function, p_method, p_access) … … 59 83 The programm will exit. 60 84 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.85 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. 62 86 63 87 === Links zur AHK/Autohotkey-Skriptsprache === 64 Eine kurze Einf ührung (Installation und Beispielscipt) findet man etwa auf88 Eine kurze Einf�hrung (Installation und Beispielskript) findet man etwa auf 65 89 http://www.kikizas.net/en/usbapps.ahk.html 66 90 … … 71 95 Das Programm kann alle Tastendrucke abfangen und stattdessen andere Tasten simulieren. Die Zeile 72 96 a::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. 97 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. 123 98 124 99 === ... === -
windows/autohotkey/Source/All.ahk
r771 r776 1 1 /* 2 2 ------------------------------------------------------ 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 5 6 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 7 9 Siehe auch: 8 10 http://www.autohotkey.com/docs/commands/_Include.htm -
windows/autohotkey/Source/Global-Part.ahk
r748 r776 1 1 SetNumLockState AlwaysOff 2 2 3 3 /**************** … … 37 37 IniRead, lernModus, %ApplicationFolder%\NEO2.ini, Global, lernModus, 0 38 38 39 ; Soll mit MessageBoxen explizit auf das Ein- und Ausschalten des Mod{3,4}-Locks hingewiesen werden?40 IniRead, zeigeLockBox en, %ApplicationFolder%\NEO2.ini, Global, zeigeLockBoxen, 139 ; Soll mit einer MsgBox explizit auf das Ein- und Ausschalten des Mod4-Locks hingewiesen werden? 40 IniRead, zeigeLockBox, %ApplicationFolder%\NEO2.ini, Global, zeigeLockBox, 1 41 41 42 42 ; Soll aktivierter Mod4-Lock �ber die Rollen-LED des Keybord angezeigt werden (analog zu CapsLock)? … … 261 261 send {blind}{Esc} 262 262 return 263 264 /* 265 ------------------------------------------------------ 266 Shift+Pause "pausiert" das Skript. 267 ------------------------------------------------------ 268 */ 269 270 *pause:: 271 Suspend, Permit 272 if isshiftpressed() 273 goto togglesuspend 274 else 275 send {blind}{pause} 276 return 277 278 ; ------------------------------------ 279 280 ^.::einHandNeo := not(einHandNeo) ; Punkt 281 ^,::lernModus := not(lernModus) ; Komma 282 283 284 285 togglesuspend: 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 303 return 304 305 306 help: 307 Run, %A_WinDir%\hh mk:@MSITStore:autohotkey.chm 308 return 309 310 311 about: 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 ) 326 return 327 328 329 neo: 330 run http://neo-layout.org/ 331 return 332 333 autohotkey: 334 run http://autohotkey.com/ 335 return 336 337 open: 338 ListLines ; shows the Autohotkey window 339 return 340 341 edit: 342 edit 343 return 344 345 reload: 346 Reload 347 return 348 349 hide: 350 menu, tray, noicon 351 return 352 353 exitprogram: 354 exitapp 355 return 356 357 358 -
windows/autohotkey/Source/Keys-Neo.ahk
r756 r776 3 3 4 4 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. 7 7 8 8 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. 12 12 13 13 Reihe 1 … … 39 39 else if (Ebene = 5) 40 40 { 41 dead Asc("-"); Querstrich, tot41 deadUni(0x002D) ; Querstrich, tot 42 42 DeadKey := "c5" 43 43 } 44 44 else if (Ebene = 6) 45 45 { 46 dead Asc("."); Punkt drunter (Colon), tot46 deadUni(0x002E) ; Punkt drunter (Colon), tot 47 47 DeadKey := "c6" 48 48 } … … 73 73 send � 74 74 else if (Ebene = 3) 75 SendUnicodeChar(0x00B9) ; 2 Hochgestellte75 SendUnicodeChar(0x00B9) ; Hochgestellte 2 76 76 else if (Ebene = 4) 77 SendUnicodeChar(0x2022) ; bullet77 SendUnicodeChar(0x2022) ; Bullet 78 78 else if (Ebene = 5) 79 79 SendUnicodeChar(0x2640) ; Piktogramm weiblich … … 101 101 } 102 102 else if (Ebene = 2) 103 SendUnicodeChar(0x2116) ; numero104 else if (Ebene = 3) 105 SendUnicodeChar(0x00B2) ; 2 Hochgestellte106 else if (Ebene = 4) 107 SendUnicodeChar(0x2023) ; aufzaehlungspfeil103 SendUnicodeChar(0x2116) ; Numero 104 else if (Ebene = 3) 105 SendUnicodeChar(0x00B2) ; Hochgestellte 2 106 else if (Ebene = 4) 107 SendUnicodeChar(0x2023) ; Aufz�hlungspfeil 108 108 else if (Ebene = 5) 109 109 SendUnicodeChar(0x26A5) ; Piktogramm Zwitter … … 133 133 send � 134 134 else if (Ebene = 3) 135 SendUnicodeChar(0x00B3) ; 3 Hochgestellte135 SendUnicodeChar(0x00B3) ; Hochgestellte 3 136 136 else if (Ebene = 4) 137 137 { … … 162 162 } 163 163 else if (Ebene = 2) 164 SendUnicodeChar(0x00BB) ; �,Double guillemot right164 SendUnicodeChar(0x00BB) ; Double guillemot right 165 165 else if (Ebene = 3) 166 166 Send {blind}� ; Single guillemot right 167 167 else if (Ebene = 4) 168 Send {blind}{PgUp} ; Prev168 Send {blind}{PgUp} 169 169 else if (Ebene = 5) 170 170 SendUnicodeChar(0x2113) ; Script small L … … 296 296 Send {blind}{NumpadDiv} 297 297 else if (Ebene = 5) 298 SendUnicodeChar(0x27E8) ; bra (�ffnende spitze klammer)298 SendUnicodeChar(0x27E8) ; bra (�ffnende spitze Klammer) 299 299 else if (Ebene = 6) 300 300 SendUnicodeChar(0x2204) ; es existiert nicht … … 324 324 Send {blind}{NumpadMult} 325 325 else if (Ebene = 5) 326 SendUnicodeChar(0x27E9) ; ket (schlie�ende spitze klammer)326 SendUnicodeChar(0x27E9) ; ket (schlie�ende spitze Klammer) 327 327 else if (Ebene = 6) 328 328 SendUnicodeChar(0x2226) ; nicht parallel … … 371 371 else if (Ebene = 3) 372 372 SendUnicodeChar(0x2014) ; Englischer Gedankenstrich (Geviertstrich) 373 else if (Ebene = 4) 373 else if (Ebene = 4) ; leer 374 374 { 375 375 CompKey := PriorCompKey 376 376 DeadKey := PriorDeadKey 377 } ; leer377 } 378 378 else if (Ebene = 5) 379 379 SendUnicodeChar(0x2011) ; gesch�tzter Bindestrich (Bindestrich ohne Zeilenumbruch) … … 448 448 if (not(lernModus) or lernModus_neo_Backspace) 449 449 Send {blind}{Backspace} 450 else 450 else ; leer 451 451 { 452 452 CompKey := PriorCompKey 453 453 DeadKey := PriorDeadKey 454 } ; leer454 } 455 455 else if (Ebene = 6) 456 456 SendUnicodeChar(0x2259) ; estimates … … 462 462 EbeneAktualisieren() 463 463 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))) 469 469 OutputChar("l","L") 470 470 else if (Ebene = 3) … … 482 482 EbeneAktualisieren() 483 483 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","�"))) 490 489 OutputChar("c","C") 491 490 else if (Ebene = 3) … … 494 493 if (not(lernModus) or lernModus_neo_Entf) 495 494 Send {blind}{Del} 496 else 495 else ; leer 497 496 { 498 497 CompKey := PriorCompKey 499 498 DeadKey := PriorDeadKey 500 } ; leer501 else if (Ebene = 5) 502 SendUnicodeChar(0x03C7) ; chi503 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) 505 504 return 506 505 … … 510 509 OutputChar("w","W") 511 510 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 516 514 else if (Ebene = 5) 517 515 SendUnicodeChar(0x03C9) ; omega … … 523 521 EbeneAktualisieren() 524 522 if (Ebene12 and !(CheckDeadUni12("a3",0x0137,0x0136) 525 or CheckDeadUni12("c6",0x1E33,0x1E32)))523 or CheckDeadUni12("c6",0x1E33,0x1E32))) 526 524 OutputChar("k","K") 527 525 else if (Ebene = 3) … … 538 536 EbeneAktualisieren() 539 537 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))) 543 541 OutputChar("h","H") 544 542 else if ((Ebene = 3) and !(CheckDeadUni("c5",0x2264))) ; kleiner gleich … … 548 546 Send {blind}{NumPad7} 549 547 else if (Ebene = 5) 550 SendUnicodeChar(0x03C8) ; psi551 else if (Ebene = 6) 552 SendUnicodeChar(0x03A8) ; Psi548 SendUnicodeChar(0x03C8) ; psi 549 else if (Ebene = 6) 550 SendUnicodeChar(0x03A8) ; Psi 553 551 return 554 552 … … 556 554 EbeneAktualisieren() 557 555 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))) 561 559 OutputChar("g","G") 562 else if ((Ebene = 3) and !(CheckDeadUni("c5",0x2265))) ; gr��er gleich563 send {blind}> 560 else if ((Ebene = 3) and !(CheckDeadUni("c5",0x2265))) 561 send {blind}> ; gr��er gleich 564 562 else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2078) 565 or CheckDeadUni("c5",0x2088)))563 or CheckDeadUni("c5",0x2088))) 566 564 Send {blind}{NumPad8} 567 565 else if (Ebene = 5) 568 SendUnicodeChar(0x03B3) ; gamma569 else if (Ebene = 6) 570 SendUnicodeChar(0x0393) ; Gamma566 SendUnicodeChar(0x03B3) ; gamma 567 else if (Ebene = 6) 568 SendUnicodeChar(0x0393) ; Gamma 571 569 return 572 570 … … 577 575 OutputChar("f","F") 578 576 else if ((Ebene = 3) and !(CheckDeadUni("a6",0x2257) ; ring equal to 579 or CheckDeadUni("c1",0x2259) ; entspricht580 or CheckDeadUni("c2",0x225A) ; EQUIANGULAR TO581 or CheckDeadUni("c5",0x2261) ; identisch582 or CheckDeadUni("t1",0x2245) ; ungef�hr gleich583 or CheckDeadUni("t4",0x2260))); ungleich577 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 584 582 send {blind}`= 585 583 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} 588 586 else if (Ebene = 5) 589 587 SendUnicodeChar(0x03C6) ; phi 590 588 else if (Ebene = 6) 591 SendUnicodeChar(0x03A6) ; Phi589 SendUnicodeChar(0x03A6) ; Phi 592 590 return 593 591 … … 612 610 if (GetKeyState("CapsLock","T")) 613 611 SendUnicodeChar(0x1E9E) ; versal-� 614 else if (LangSTastatur = 1)612 else if LangSTastatur 615 613 send {blind}s 616 614 else … … 618 616 else if (Ebene = 2) 619 617 if (GetKeyState("CapsLock","T")) 620 if (LangSTastatur = 1)618 if LangSTastatur 621 619 send {blind}s 622 620 else … … 625 623 SendUnicodeChar(0x1E9E) ; versal-� 626 624 else if (Ebene = 3) 627 if (LangSTastatur = 1)625 if LangSTastatur 628 626 send � 629 627 else 630 628 SendUnicodeChar(0x017F) ; langes s 631 629 else if (Ebene = 5) 632 SendUnicodeChar(0x03C2) ; varsigma633 else if (Ebene = 6) 634 SendUnicodeChar(0x2218) ; Verkn�pfungsoperator630 SendUnicodeChar(0x03C2) ; varsigma 631 else if (Ebene = 6) 632 SendUnicodeChar(0x2218) ; Verkn�pfungsoperator 635 633 return 636 634 … … 640 638 if (Ebene = 1) 641 639 { 642 deadUni(0x02DC) ; Tilde, tot640 deadUni(0x02DC) ; Tilde, tot 643 641 DeadKey := "t1" 644 642 } … … 660 658 else if (Ebene = 5) 661 659 { 662 deadUni(0x02DD) ; Doppelakut660 deadUni(0x02DD) ; Doppelakut 663 661 DeadKey := "t5" 664 662 } … … 681 679 EbeneAktualisieren() 682 680 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))) 693 691 OutputChar("u","U") 694 692 else if (Ebene = 3) … … 696 694 else if (Ebene = 4) 697 695 Send {blind}{Home} 698 else if (Ebene = 5) 696 else if (Ebene = 5) ; leer 699 697 { 700 698 CompKey := PriorCompKey 701 699 DeadKey := PriorDeadKey 702 } ; leer700 } 703 701 else if (Ebene = 6) 704 702 SendUnicodeChar(0x222E) ; contour integral … … 708 706 EbeneAktualisieren() 709 707 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","�","�"))) 719 717 OutputChar("i","I") 720 718 else if (Ebene = 3) … … 722 720 else if (Ebene = 4) 723 721 Send {Blind}{Left} 724 else if (Ebene = 5 )722 else if (Ebene = 5) 725 723 SendUnicodeChar(0x03B9) ; iota 726 724 else if (Ebene = 6) … … 731 729 EbeneAktualisieren() 732 730 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","�","�"))) 742 740 OutputChar("a","A") 743 741 else if (Ebene = 3) … … 746 744 Send {Blind}{Down} 747 745 else if (Ebene = 5) 748 SendUnicodeChar(0x03B1) ; alpha749 else if (Ebene = 6) 750 SendUnicodeChar(0x2200) ; f�r alle746 SendUnicodeChar(0x03B1) ; alpha 747 else if (Ebene = 6) 748 SendUnicodeChar(0x2200) ; f�r alle 751 749 return 752 750 … … 754 752 EbeneAktualisieren() 755 753 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","�","�"))) 768 766 OutputChar("e","E") 769 else if (Ebene = 3) ; {767 else if (Ebene = 3) 770 768 send {blind}{}} 771 769 else if (Ebene = 4) 772 770 Send {Blind}{Right} 773 771 else if (Ebene = 5) 774 SendUnicodeChar(0x03B5) ; epsilon775 else if (Ebene = 6) 776 SendUnicodeChar(0x2203) ; es existiert772 SendUnicodeChar(0x03B5) ; epsilon 773 else if (Ebene = 6) 774 SendUnicodeChar(0x2203) ; es existiert 777 775 return 778 776 … … 780 778 EbeneAktualisieren() 781 779 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))) 792 790 OutputChar("o","O") 793 791 else if (Ebene = 3) … … 804 802 EbeneAktualisieren() 805 803 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))) 811 809 { 812 810 if (Ebene = 1) … … 814 812 if LangSTastatur 815 813 if (GetKeyState("CapsLock","T")) 814 { 816 815 send {blind}s 816 if (PriorDeadKey = "comp") 817 Compkey := "s" 818 } 817 819 else 820 { 818 821 SendUnicodeChar(0x017F) ;langes S 822 if (PriorDeadKey = "comp") 823 CompKey := "lang_s" 824 } 819 825 else 826 { 820 827 send {blind}s 821 if (PriorDeadKey = "comp") 822 CompKey := "s" 828 if (PriorDeadKey = "comp") 829 CompKey := "s" 830 } 823 831 } 824 832 else if (Ebene = 2) … … 826 834 if LangSTastatur 827 835 if (GetKeyState("CapsLock","T")) 836 { 828 837 SendUnicodeChar(0x017F) ;langes S 838 if (PriorDeadKey = "comp") 839 CompKey := "lang_s" 840 } 829 841 else 842 { 830 843 send {blind}S 844 if (PriorDeadKey = "comp") 845 CompKey := "s" 846 } 831 847 else 848 { 832 849 send {blind}S 833 if (PriorDeadKey = "comp") 834 CompKey := "S" 850 if (PriorDeadKey = "comp") 851 CompKey := "S" 852 } 835 853 } 836 854 } … … 842 860 SendUnicodeChar(0x03C3) ;sigma 843 861 else if (Ebene = 6) 844 SendUnicodeChar(0x03A3) ;Sigma862 SendUnicodeChar(0x03A3) ;Sigma 845 863 return 846 864 … … 848 866 EbeneAktualisieren() 849 867 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))) 854 872 OutputChar("n","N") 855 873 else if (Ebene = 3) 856 send {blind}( ; )874 send {blind}( 857 875 else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2074) 858 or CheckDeadUni("c5",0x2084)))876 or CheckDeadUni("c5",0x2084))) 859 877 Send {blind}{NumPad4} 860 878 else if (Ebene = 5) … … 867 885 EbeneAktualisieren() 868 886 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","�","�"))) 875 893 OutputChar("r","R") 876 else if (Ebene = 3) ;(894 else if (Ebene = 3) 877 895 send {blind}) 878 896 else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2075) 879 or CheckDeadUni("c5",0x2085)))897 or CheckDeadUni("c5",0x2085))) 880 898 Send {blind}{NumPad5} 881 899 else if (Ebene = 5) … … 888 906 EbeneAktualisieren() 889 907 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))) 894 912 OutputChar("t","T") 895 913 else if (Ebene = 3) 896 send {blind}- ; Bis914 send {blind}- ; Bisstrich 897 915 else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2076) 898 916 or CheckDeadUni("c5",0x2086))) … … 901 919 SendUnicodeChar(0x03C4) ; tau 902 920 else if (Ebene = 6) 903 SendUnicodeChar(0x2202 ) ; partielle Ableitung921 SendUnicodeChar(0x2202) ; partielle Ableitung 904 922 return 905 923 … … 917 935 send `, 918 936 else if (Ebene = 5) 919 SendUnicodeChar(0x03B4) ; delta937 SendUnicodeChar(0x03B4) ; delta 920 938 else if (Ebene = 6) 921 SendUnicodeChar(0x0394) ; Delta939 SendUnicodeChar(0x0394) ; Delta 922 940 return 923 941 … … 925 943 EbeneAktualisieren() 926 944 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","�","�"))) 929 947 OutputChar("y","Y") 930 948 else if (Ebene = 3) … … 947 965 EbeneAktualisieren() 948 966 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))) 952 970 OutputChar("�","�") 953 971 else if (Ebene = 3) … … 955 973 else if (Ebene = 4) 956 974 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 982 return 983 984 neo_�: 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} 957 992 else if (Ebene = 5) 958 993 { … … 961 996 } ; leer 962 997 else if (Ebene = 6) 963 SendUnicodeChar(0x221D) ; proportional964 return965 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 := PriorDeadKey977 CompKey := PriorCompKey978 } ; leer979 else if (Ebene = 6)980 998 SendUnicodeChar(0x2111) ; Fraktur I 981 999 return … … 988 1006 send {blind}| 989 1007 else if (Ebene = 4) 990 Send {blind}{PgDn} ; Next1008 Send {blind}{PgDn} ; Next 991 1009 else if (Ebene = 5) 992 1010 SendUnicodeChar(0x03B7) ; eta 993 1011 else if (Ebene = 6) 994 SendUnicodeChar(0x211C) ; altesR1012 SendUnicodeChar(0x211C) ; Fraktur R 995 1013 return 996 1014 … … 1004 1022 Send {blind}{Enter} 1005 1023 else if (Ebene = 5) 1006 SendUnicodeChar(0x03C0) ; pi1007 else if (Ebene = 6) 1008 SendUnicodeChar(0x03A0) ; Pi1024 SendUnicodeChar(0x03C0) ; pi 1025 else if (Ebene = 6) 1026 SendUnicodeChar(0x03A0) ; Pi 1009 1027 return 1010 1028 … … 1012 1030 EbeneAktualisieren() 1013 1031 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))) 1017 1035 OutputChar("z","Z") 1018 1036 else if (Ebene = 3) 1019 send ``{space} ; untot1037 send ``{space} ; untot 1020 1038 else if (Ebene = 4) 1021 1039 { … … 1024 1042 } ; leer 1025 1043 else if (Ebene = 5) 1026 SendUnicodeChar(0x03B6) ; zeta1027 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) 1029 1047 return 1030 1048 … … 1046 1064 EbeneAktualisieren() 1047 1065 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 1054 1069 OutputChar("m","M") 1055 1070 else if (Ebene = 3) 1056 1071 send {blind}`% 1057 1072 else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B9) 1058 or CheckDeadUni("c5",0x2081)))1073 or CheckDeadUni("c5",0x2081))) 1059 1074 Send {blind}{NumPad1} 1060 1075 else if (Ebene = 5) … … 1076 1091 send {blind}" 1077 1092 else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B2) 1078 or CheckDeadUni("c5",0x2082)))1093 or CheckDeadUni("c5",0x2082))) 1079 1094 Send {blind}{NumPad2} 1080 1095 else if (Ebene = 5) … … 1096 1111 send {blind}' 1097 1112 else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B3) 1098 or CheckDeadUni("c5",0x2083)))1113 or CheckDeadUni("c5",0x2083))) 1099 1114 Send {blind}{NumPad3} 1100 1115 else if (Ebene = 5) 1101 1116 SendUnicodeChar(0x03D1) ; theta symbol (vartheta) 1102 1117 else if (Ebene = 6) 1103 SendUnicodeChar(0x0398) ; Theta1118 SendUnicodeChar(0x0398) ; Theta 1104 1119 return 1105 1120 … … 1109 1124 if (Ebene12 and !(CheckDeadUni12("c1",0x0135,0x0134) 1110 1125 or CheckDeadUni12("c2",0x01F0,"") 1111 or CheckCompUni 12("i",0x0133,""); ij1112 or CheckCompUni 12("I","",0x0132) ; IJ1113 or CheckCompUni 12("l",0x01C9,"") ; lj1114 or CheckCompUni 12("L",0x01C8,0x01C7) ; Lj/LJ1115 or CheckCompUni12(" n",0x01CC,"") ; nj1116 or CheckCompUni12("N",0x01CB,0x01CA))) ; Nj/NJ1126 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 1117 1132 OutputChar("j","J") 1118 1133 else if (Ebene = 3) … … 1130 1145 Numpad 1131 1146 1132 1133 folgende Tasten verhalten sich bei ein- und ausgeschaltetem1134 NumLock gleich:1135 1147 */ 1136 1148 1149 neo_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 1162 return 1163 1137 1164 neo_NumpadDiv: 1138 1165 EbeneAktualisieren() 1139 if ((Ebene = 1) or (Ebene = 2))1166 if Ebene14 1140 1167 send {blind}{NumpadDiv} 1168 else if (Ebene = 2) 1169 SendUnicodeChar(0x2215) ; Slash 1141 1170 else if (Ebene = 3) 1142 1171 send {blind}� 1143 else if ((Ebene = 4) or (Ebene = 5))1144 SendUnicodeChar(0x2215) ; slash1145 1172 return 1146 1173 1147 1174 neo_NumpadMult: 1148 1175 EbeneAktualisieren() 1149 if ((Ebene = 1) or (Ebene = 2))1176 if Ebene14 1150 1177 send {blind}{NumpadMult} 1178 else if (Ebene = 2) 1179 SendUnicodeChar(0x22C5) ; Cdot 1151 1180 else if (Ebene = 3) 1152 1181 send {blind}� 1153 else if ((Ebene = 4) or (Ebene = 5))1154 SendUnicodeChar(0x22C5) ; cdot1155 1182 return 1156 1183 1157 1184 neo_NumpadSub: 1158 1185 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))) 1161 1188 send {blind}{NumpadSub} 1162 1189 else if (Ebene = 3) 1163 SendUnicodeChar(0x2212) ; echtes minus1190 SendUnicodeChar(0x2212) ; Echtes Minus 1164 1191 return 1165 1192 1166 1193 neo_NumpadAdd: 1167 1194 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))) 1170 1197 send {blind}{NumpadAdd} 1171 1198 else if (Ebene = 3) 1172 1199 send {blind}� 1173 else if ( (Ebene = 4) or (Ebene = 5))1174 SendUnicodeChar(0x2213) ; -+1200 else if (Ebene = 2) 1201 SendUnicodeChar(0x2213) ; Inverses � 1175 1202 return 1176 1203 1177 1204 neo_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} 1206 return 1207 1208 neo_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} 1228 return 1229 1230 neo_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} 1253 return 1254 1255 neo_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} 1275 return 1276 1277 neo_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} 1298 return 1299 1300 neo_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} 1323 return 1324 1325 neo_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} 1346 return 1347 1348 neo_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} 1368 return 1369 1370 neo_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} 1390 return 1391 1392 neo_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} 1413 return 1414 1415 neo_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} 1435 return 1436 1437 neo_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} 1455 return 1456 1457 1458 1186 1459 1187 1460 /* 1188 folgende Tasten verhalten sich bei ein- und ausgeschaltetem NumLock 1189 unterschiedlich 1461 1462 Sondertasten 1463 1190 1464 */ 1191 1465 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 else1205 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-Pfeil1212 else if ((Ebene = 4) or (Ebene = 5))1213 SendUnicodeChar(0x226A) ; ll1214 return1215 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/81225 or CheckCompUni("1",0x215B) ; 1/81226 or CheckCompUni("Num_3",0x215C) ; 3/81227 or CheckCompUni("3",0x215C) ; 3/81228 or CheckCompUni("Num_5",0x215D) ; 3/81229 or CheckCompUni("5",0x215D) ; 5/81230 or CheckCompUni("Num_7",0x215E) ; 7/81231 or CheckCompUni("7",0x215E)) ; 7/81232 if (Ebene = 1)1233 send {blind}{Numpad8}1234 else1235 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) ; uparrow1242 else if ((Ebene = 4) or (Ebene = 5))1243 SendUnicodeChar(0x2229) ; intersection1244 return1245 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 else1257 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 zeigend1264 else if ((Ebene = 4) or (Ebene = 5))1265 SendUnicodeChar(0x226B) ; gg1266 return1267 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/41279 or CheckCompUni("1",0x00BE) ; 1/41280 or CheckCompUni("Num_3",0x00BE) ; 3/41281 or CheckCompUni("3",0x00BE)) ; 3/41282 if (Ebene = 1)1283 send {blind}{Numpad4}1284 else1285 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) ; leftarrow1292 else if ((Ebene = 4) or (Ebene = 5))1293 SendUnicodeChar(0x2282) ; subset of1294 return1295 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/51305 or CheckCompUni("1",0x2155) ; 1/51306 or CheckCompUni("Num_2",0x2156) ; 2/51307 or CheckCompUni("2",0x2156) ; 2/51308 or CheckCompUni("Num_3",0x2157) ; 3/51309 or CheckCompUni("3",0x2157) ; 3/51310 or CheckCompUni("Num_4",0x2158) ; 4/51311 or CheckCompUni("4",0x2158)) ; 4/51312 if (Ebene = 1)1313 send {blind}{Numpad5}1314 else1315 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) ; INFINITY1322 else if ((Ebene = 4) or (Ebene = 5))1323 SendUnicodeChar(0x220B) ; enth�lt das Element1324 return1325 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/61335 or CheckCompUni("1",0x2159) ; 1/61336 or CheckCompUni("Num_5",0x215A) ; 5/61337 or CheckCompUni("5",0x215A)) ; 5/61338 if (Ebene = 1)1339 send {blind}{Numpad6}1340 else1341 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) ; rightarrow1348 else if ((Ebene = 4) or (Ebene = 5))1349 SendUnicodeChar(0x2283) ; superset of1350 return1351 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 else1363 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-Pfeil1370 else if ((Ebene = 4) or (Ebene = 5))1371 SendUnicodeChar(0x2264) ; leq1372 return1373 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/21383 or CheckCompUni("1",0x00BD)) ; 1/21384 if (Ebene = 1)1385 send {blind}{Numpad2}1386 else1387 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) ; downarrow1394 else if ((Ebene = 4) or (Ebene = 5))1395 SendUnicodeChar(0x222A) ; vereinigt1396 return1397 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/31407 or CheckCompUni("1",0x2154) ; 1/31408 or CheckCompUni("Num_2",0x2154) ; 2/31409 or CheckCompUni("2",0x2154)) ; 2/31410 if (Ebene = 1)1411 send {blind}{Numpad3}1412 else1413 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 HARPOON1420 else if ((Ebene = 4) or (Ebene = 5))1421 SendUnicodeChar(0x2265) ; geq1422 return1423 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 else1435 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 return1445 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 else1456 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 return1462 1463 1464 /*1465 1466 Sondertasten1467 1468 */1469 1466 *space:: 1470 1467 if ((einHandNeo)) … … 1513 1510 Folgende Tasten sind nur aufgef�hrt, um PriorDeadKey zu leeren. 1514 1511 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... 1520 1513 */ 1521 1514 … … 1535 1528 } 1536 1529 return 1530 1537 1531 1538 1532 *Del:: -
windows/autohotkey/Source/Keys-Qwert-to-Neo.ahk
r740 r776 444 444 445 445 ; Numpad 446 *VK90SC145::goto neo_NumLock 446 447 *VK6FSC135::goto neo_NumpadDiv 447 448 *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) 9 2 ; Es werden nur die beiden Tastenkombinationen abgefragt, 10 3 ; daher kommen LShift und RShift ungehindert bis in die … … 13 6 ; Hilfe beschrieben, eigentlich nicht mehr bis zur App 14 7 ; durchkommen sollten. 8 ; KeyboardLED(4,"switch") hatte ich zuerst genommen, aber 9 ; das schaltet, oh Wunder, die LED nicht wieder aus. 15 10 11 isMod2Locked = 0 16 12 VKA1SC136 & VKA0SC02A:: ; RShift, dann LShift 17 13 VKA0SC02A & 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 } 26 27 return 27 28 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!) 40 30 *VKBFSC02B:: ; # 41 31 *VK14SC03A:: ; CapsLock 42 if (GetKeyState("VKBFSC02B", "P") and GetKeyState("VK14SC03A", "P"))43 {44 if (IsMod3Locked)45 {46 IsMod3Locked = 047 if (zeigeLockBoxen==1)48 {49 MsgBox Mod3-Feststellung aufgebehoben!50 }51 }52 else53 {54 IsMod3Locked = 155 if (zeigeLockBoxen==1)56 {57 MsgBox Mod3 festgestellt: Um Mod3 wieder zu l�sen dr�cke beide Mod3 Tasten gleichzeitig!58 }59 60 }61 }62 32 return 63 33 64 ; Mod4+Mod4 == Mod4-Lock65 ; Wie bei Mod3-Lock werden im Gegensatz zu LShift+RShift66 ; die beiden Tasten _nicht_ zur Applikation weitergeleitet,67 ; und nur bei gleichzeitigem Dr�cken wird der Mod4-Lock68 ; a ktiviert 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. 69 39 70 40 IsMod4Locked := 0 71 ; VKA5SC138 & VKE2SC056:: ; AltGr, dann <72 ; VKE2SC056 & VKA5SC138:: ; <, dann AltGr73 41 *VKA5SC138:: 74 42 *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 } 103 62 return 63 64 Ebene12 := 0 65 Ebene7 := 0 66 Ebene8 := 0 67 68 EbeneAktualisieren() 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 110 IsShiftPressed() 111 {aAAA 112 global 113 return ((GetKeyState("Shift","P")) = !(isMod2Locked)) ;xor 114 } 115 116 IsMod3Pressed() 117 { 118 global 119 return ((GetKeyState("CapsLock","P")) or (GetKeyState("#","P"))) 120 } 121 122 IsMod4Pressed() 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 7 7 KeyboardLED(LEDvalue,"Cmd"), wobei 8 8 Cmd = on/off/switch, 9 LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4 9 LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4, 10 10 bzw. eine beliebige Summe dieser Werte: 11 11 AlleAus=0, CapsLock+NumLock=6, etc. … … 15 15 16 16 Um eventuelle Wechselwirkungen mit dem bestehenden 17 Code (insb. der Unicode-Konvertierung) auszusch ie�en,17 Code (insb. der Unicode-Konvertierung) auszuschlie�en, 18 18 sind auch alle (Hilfsmethoden) mit dem Postfix LED 19 19 versehen worden. -
windows/autohotkey/Source/Methods-Other.ahk
r746 r776 1 /*2 Funktionen3 */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 global15 PriorDeadKey := DeadKey16 PriorCompKey := CompKey17 DeadKey := ""18 CompKey := ""19 Ebene12 := 020 Ebene7 := 021 Ebene8 := 022 Modstate := IsShiftPressed() . IsMod3Pressed() . IsMod4Pressed()23 24 if (ahkTreiberKombi)25 if ( Modstate = "001")26 Ebene = 627 else28 Ebene = -129 else30 if (Modstate = "000")31 Ebene = 1 ; Ebene 1: Ohne Mod32 else if (Modstate = "100")33 Ebene = 2 ; Ebene 2: Shift34 else if (Modstate = "010")35 Ebene = 3 ; Ebene 3: Mod336 else if (Modstate = "001")37 Ebene = 4 ; Ebene 4: Mod438 else if (Modstate = "110")39 Ebene = 5 ; Ebene 5: Shift+Mod340 else if (Modstate = "011")41 Ebene = 6 ; Ebene 6: Mod3+Mod442 else if (Modstate = "101")43 {44 Ebene = 4 ; Ebene 7: Shift+Mod4 impliziert Ebene 445 Ebene7 = 146 }47 else if (Modstate = "111")48 {49 Ebene = 6 ; Ebene 8: Shift+Mod3+Mod4 impliziert Ebene 650 Ebene8 = 151 }52 53 Ebene12 := ((Ebene = 1) or (Ebene = 2))54 55 if GetKeyState("NumLock","T")56 NumLock = 157 else58 NumLock = 059 }60 61 62 IsShiftPressed()63 {64 return GetKeyState("Shift","P")65 }66 67 IsMod3Pressed()68 {69 global70 if (IsMod3Locked)71 {72 return (not ( GetKeyState("CapsLock","P") or GetKeyState("#","P") )) ; # = SC02B73 }74 else {75 return ( GetKeyState("CapsLock","P") or GetKeyState("#","P") ) ; # = SC02B76 }77 }78 79 IsMod4Pressed()80 {81 global82 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 else93 {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 gdkWindowToplevel109 {110 StringLower, charCode, charCode111 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.html128 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 133 1 BSSendUnicodeChar(charCode) 134 2 { … … 147 15 send {bs}{bs} 148 16 SendUnicodeChar(charCode) 149 }150 151 152 EncodeInteger(ref, val)153 {154 DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val)155 17 } 156 18 -
windows/autohotkey/Source/Methods-ScreenKeyboard.ahk
r740 r776 174 174 } 175 175 Return 176 ; Ende der BildschirmTastatur177 176 178 179 /*180 ------------------------------------------------------181 Shift+Pause "pausiert" das Script.182 ------------------------------------------------------183 */184 185 *pause::186 Suspend, Permit187 if isshiftpressed()188 goto togglesuspend189 else190 send {blind}{pause}191 return192 193 ; ------------------------------------194 195 ^.::einHandNeo := not(einHandNeo) ; Punkt196 ^,::lernModus := not(lernModus) ; Komma197 198 199 200 togglesuspend:201 if A_IsSuspended202 {203 menu, tray, rename, %enable%, %disable%204 menu, tray, tip, %name%205 if (iconBenutzen)206 menu, tray, icon, %ResourceFolder%\neo.ico,,1207 suspend , off ; Schaltet Suspend aus -> NEO208 }209 else210 {211 menu, tray, rename, %disable%, %enable%212 menu, tray, tip, %name% : Deaktiviert213 if (iconBenutzen)214 menu, tray, icon, %ResourceFolder%\neo_disabled.ico,,1215 suspend , on ; Schaltet Suspend ein -> QWERTZ216 }217 218 return219 220 221 help:222 Run, %A_WinDir%\hh mk:@MSITStore:autohotkey.chm223 return224 225 226 about:227 msgbox, 64, %name% � Ergonomische Tastaturbelegung,228 (229 %name%230 `nDas Neo-Layout ersetzt das �bliche deutsche231 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 Tastendrucke235 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 im239 Systemtray deaktiviert werden. `n240 )241 return242 243 244 neo:245 run http://neo-layout.org/246 return247 248 autohotkey:249 run http://autohotkey.com/250 return251 252 open:253 ListLines ; shows the Autohotkey window254 return255 256 edit:257 edit258 return259 260 reload:261 Reload262 return263 264 hide:265 menu, tray, noicon266 return267 268 exitprogram:269 exitapp270 return -
windows/autohotkey/Source/Methods-Unicode.ahk
r690 r776 33 33 ************************************************************/ 34 34 35 /* 36 �ber den GTK-Workaround: 37 Dieser basiert auf http://www.autohotkey.com/forum/topic32947.html 38 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. 39 */ 35 40 41 SendUnicodeChar(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) 36 49 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 61 EncodeInteger(ref, val) 62 { 63 DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val) 64 } 65 -
windows/autohotkey/Source/Warning.ahk
r746 r776 11 11 in der Datei README.txt! 12 12 ******************************************* 13 */14 13 15 14 … … 29 28 30 29 31 /* 30 31 32 32 33 ******************************************* 33 34 Das 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 1 SetNumLockState AlwaysOff 217 2 218 3 /**************** … … 252 37 IniRead, lernModus, %ApplicationFolder%\NEO2.ini, Global, lernModus, 0 253 38 254 ; Soll mit MessageBoxen explizit auf das Ein- und Ausschalten des Mod{3,4}-Locks hingewiesen werden?255 IniRead, zeigeLockBox en, %ApplicationFolder%\NEO2.ini, Global, zeigeLockBoxen, 139 ; Soll mit einer MsgBox explizit auf das Ein- und Ausschalten des Mod4-Locks hingewiesen werden? 40 IniRead, zeigeLockBox, %ApplicationFolder%\NEO2.ini, Global, zeigeLockBox, 1 256 41 257 42 ; Soll aktivierter Mod4-Lock �ber die Rollen-LED des Keybord angezeigt werden (analog zu CapsLock)? … … 476 261 send {blind}{Esc} 477 262 return 263 478 264 /* 479 265 ------------------------------------------------------ 480 Modifier266 Shift+Pause "pausiert" das Skript. 481 267 ------------------------------------------------------ 482 268 */ 483 269 484 485 ;LShift+RShift == CapsLock (simuliert) 270 *pause:: 271 Suspend, Permit 272 if isshiftpressed() 273 goto togglesuspend 274 else 275 send {blind}{pause} 276 return 277 278 ; ------------------------------------ 279 280 ^.::einHandNeo := not(einHandNeo) ; Punkt 281 ^,::lernModus := not(lernModus) ; Komma 282 283 284 285 togglesuspend: 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 303 return 304 305 306 help: 307 Run, %A_WinDir%\hh mk:@MSITStore:autohotkey.chm 308 return 309 310 311 about: 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 ) 326 return 327 328 329 neo: 330 run http://neo-layout.org/ 331 return 332 333 autohotkey: 334 run http://autohotkey.com/ 335 return 336 337 open: 338 ListLines ; shows the Autohotkey window 339 return 340 341 edit: 342 edit 343 return 344 345 reload: 346 Reload 347 return 348 349 hide: 350 menu, tray, noicon 351 return 352 353 exitprogram: 354 exitapp 355 return 356 357 358 ; LShift+RShift == CapsLock (simuliert) 486 359 ; Es werden nur die beiden Tastenkombinationen abgefragt, 487 360 ; daher kommen LShift und RShift ungehindert bis in die … … 490 363 ; Hilfe beschrieben, eigentlich nicht mehr bis zur App 491 364 ; durchkommen sollten. 492 365 ; KeyboardLED(4,"switch") hatte ich zuerst genommen, aber 366 ; das schaltet, oh Wunder, die LED nicht wieder aus. 367 368 isMod2Locked = 0 493 369 VKA1SC136 & VKA0SC02A:: ; RShift, dann LShift 494 370 VKA0SC02A & 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 } 384 return 385 386 ;Mod3-Tasten (Wichtig, sie werden sonst nicht verarbeitet!) 517 387 *VKBFSC02B:: ; # 518 388 *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. 389 return 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. 546 396 547 397 IsMod4Locked := 0 548 ; VKA5SC138 & VKE2SC056:: ; AltGr, dann <549 ; VKE2SC056 & VKA5SC138:: ; <, dann AltGr550 398 *VKA5SC138:: 551 399 *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 } 419 return 420 421 Ebene12 := 0 422 Ebene7 := 0 423 Ebene8 := 0 424 425 EbeneAktualisieren() 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 467 IsShiftPressed() 468 {aAAA 469 global 470 return ((GetKeyState("Shift","P")) = !(isMod2Locked)) ;xor 471 } 472 473 IsMod3Pressed() 474 { 475 global 476 return ((GetKeyState("CapsLock","P")) or (GetKeyState("#","P"))) 477 } 478 479 IsMod4Pressed() 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 581 495 /* 582 496 ------------------------------------------------------ … … 1024 938 1025 939 ; Numpad 940 *VK90SC145::goto neo_NumLock 1026 941 *VK6FSC135::goto neo_NumpadDiv 1027 942 *VK6ASC037::goto neo_NumpadMult … … 1066 981 1067 982 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. 1070 985 1071 986 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. 1075 990 1076 991 Reihe 1 … … 1102 1017 else if (Ebene = 5) 1103 1018 { 1104 dead Asc("-"); Querstrich, tot1019 deadUni(0x002D) ; Querstrich, tot 1105 1020 DeadKey := "c5" 1106 1021 } 1107 1022 else if (Ebene = 6) 1108 1023 { 1109 dead Asc("."); Punkt drunter (Colon), tot1024 deadUni(0x002E) ; Punkt drunter (Colon), tot 1110 1025 DeadKey := "c6" 1111 1026 } … … 1136 1051 send � 1137 1052 else if (Ebene = 3) 1138 SendUnicodeChar(0x00B9) ; 2 Hochgestellte1053 SendUnicodeChar(0x00B9) ; Hochgestellte 2 1139 1054 else if (Ebene = 4) 1140 SendUnicodeChar(0x2022) ; bullet1055 SendUnicodeChar(0x2022) ; Bullet 1141 1056 else if (Ebene = 5) 1142 1057 SendUnicodeChar(0x2640) ; Piktogramm weiblich … … 1164 1079 } 1165 1080 else if (Ebene = 2) 1166 SendUnicodeChar(0x2116) ; numero1167 else if (Ebene = 3) 1168 SendUnicodeChar(0x00B2) ; 2 Hochgestellte1169 else if (Ebene = 4) 1170 SendUnicodeChar(0x2023) ; aufzaehlungspfeil1081 SendUnicodeChar(0x2116) ; Numero 1082 else if (Ebene = 3) 1083 SendUnicodeChar(0x00B2) ; Hochgestellte 2 1084 else if (Ebene = 4) 1085 SendUnicodeChar(0x2023) ; Aufz�hlungspfeil 1171 1086 else if (Ebene = 5) 1172 1087 SendUnicodeChar(0x26A5) ; Piktogramm Zwitter … … 1196 1111 send � 1197 1112 else if (Ebene = 3) 1198 SendUnicodeChar(0x00B3) ; 3 Hochgestellte1113 SendUnicodeChar(0x00B3) ; Hochgestellte 3 1199 1114 else if (Ebene = 4) 1200 1115 { … … 1225 1140 } 1226 1141 else if (Ebene = 2) 1227 SendUnicodeChar(0x00BB) ; �,Double guillemot right1142 SendUnicodeChar(0x00BB) ; Double guillemot right 1228 1143 else if (Ebene = 3) 1229 1144 Send {blind}� ; Single guillemot right 1230 1145 else if (Ebene = 4) 1231 Send {blind}{PgUp} ; Prev1146 Send {blind}{PgUp} 1232 1147 else if (Ebene = 5) 1233 1148 SendUnicodeChar(0x2113) ; Script small L … … 1359 1274 Send {blind}{NumpadDiv} 1360 1275 else if (Ebene = 5) 1361 SendUnicodeChar(0x27E8) ; bra (�ffnende spitze klammer)1276 SendUnicodeChar(0x27E8) ; bra (�ffnende spitze Klammer) 1362 1277 else if (Ebene = 6) 1363 1278 SendUnicodeChar(0x2204) ; es existiert nicht … … 1387 1302 Send {blind}{NumpadMult} 1388 1303 else if (Ebene = 5) 1389 SendUnicodeChar(0x27E9) ; ket (schlie�ende spitze klammer)1304 SendUnicodeChar(0x27E9) ; ket (schlie�ende spitze Klammer) 1390 1305 else if (Ebene = 6) 1391 1306 SendUnicodeChar(0x2226) ; nicht parallel … … 1434 1349 else if (Ebene = 3) 1435 1350 SendUnicodeChar(0x2014) ; Englischer Gedankenstrich (Geviertstrich) 1436 else if (Ebene = 4) 1351 else if (Ebene = 4) ; leer 1437 1352 { 1438 1353 CompKey := PriorCompKey 1439 1354 DeadKey := PriorDeadKey 1440 } ; leer1355 } 1441 1356 else if (Ebene = 5) 1442 1357 SendUnicodeChar(0x2011) ; gesch�tzter Bindestrich (Bindestrich ohne Zeilenumbruch) … … 1492 1407 OutputChar("x","X") 1493 1408 else if (Ebene = 3) 1494 SendUnicodeChar(0x2026) ;Ellipse 1409 SendUnicodeChar(0x2026) ;Ellipse horizontal 1410 else if (Ebene = 4) 1411 SendUnicodeChar(0x22EE) ;Ellipse vertikal 1495 1412 else if (Ebene = 5) 1496 1413 SendUnicodeChar(0x03BE) ;xi 1497 1414 else if (Ebene = 6) 1498 SendUnicodeChar(0x039E) ;Xi1415 SendUnicodeChar(0x039E) ;Xi 1499 1416 return 1500 1417 … … 1509 1426 if (not(lernModus) or lernModus_neo_Backspace) 1510 1427 Send {blind}{Backspace} 1511 else 1428 else ; leer 1512 1429 { 1513 1430 CompKey := PriorCompKey 1514 1431 DeadKey := PriorDeadKey 1515 } ; leer1432 } 1516 1433 else if (Ebene = 6) 1517 1434 SendUnicodeChar(0x2259) ; estimates … … 1523 1440 EbeneAktualisieren() 1524 1441 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))) 1530 1447 OutputChar("l","L") 1531 1448 else if (Ebene = 3) … … 1543 1460 EbeneAktualisieren() 1544 1461 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","�"))) 1551 1467 OutputChar("c","C") 1552 1468 else if (Ebene = 3) … … 1555 1471 if (not(lernModus) or lernModus_neo_Entf) 1556 1472 Send {blind}{Del} 1557 else 1473 else ; leer 1558 1474 { 1559 1475 CompKey := PriorCompKey 1560 1476 DeadKey := PriorDeadKey 1561 } ; leer1562 else if (Ebene = 5) 1563 SendUnicodeChar(0x03C7) ; chi1564 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) 1566 1482 return 1567 1483 … … 1571 1487 OutputChar("w","W") 1572 1488 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 1577 1492 else if (Ebene = 5) 1578 1493 SendUnicodeChar(0x03C9) ; omega … … 1584 1499 EbeneAktualisieren() 1585 1500 if (Ebene12 and !(CheckDeadUni12("a3",0x0137,0x0136) 1586 or CheckDeadUni12("c6",0x1E33,0x1E32)))1501 or CheckDeadUni12("c6",0x1E33,0x1E32))) 1587 1502 OutputChar("k","K") 1588 1503 else if (Ebene = 3) … … 1599 1514 EbeneAktualisieren() 1600 1515 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))) 1604 1519 OutputChar("h","H") 1605 1520 else if ((Ebene = 3) and !(CheckDeadUni("c5",0x2264))) ; kleiner gleich … … 1609 1524 Send {blind}{NumPad7} 1610 1525 else if (Ebene = 5) 1611 SendUnicodeChar(0x03C8) ; psi1612 else if (Ebene = 6) 1613 SendUnicodeChar(0x03A8) ; Psi1526 SendUnicodeChar(0x03C8) ; psi 1527 else if (Ebene = 6) 1528 SendUnicodeChar(0x03A8) ; Psi 1614 1529 return 1615 1530 … … 1617 1532 EbeneAktualisieren() 1618 1533 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))) 1622 1537 OutputChar("g","G") 1623 else if ((Ebene = 3) and !(CheckDeadUni("c5",0x2265))) ; gr��er gleich1624 send {blind}> 1538 else if ((Ebene = 3) and !(CheckDeadUni("c5",0x2265))) 1539 send {blind}> ; gr��er gleich 1625 1540 else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2078) 1626 or CheckDeadUni("c5",0x2088)))1541 or CheckDeadUni("c5",0x2088))) 1627 1542 Send {blind}{NumPad8} 1628 1543 else if (Ebene = 5) 1629 SendUnicodeChar(0x03B3) ; gamma1630 else if (Ebene = 6) 1631 SendUnicodeChar(0x0393) ; Gamma1544 SendUnicodeChar(0x03B3) ; gamma 1545 else if (Ebene = 6) 1546 SendUnicodeChar(0x0393) ; Gamma 1632 1547 return 1633 1548 … … 1638 1553 OutputChar("f","F") 1639 1554 else if ((Ebene = 3) and !(CheckDeadUni("a6",0x2257) ; ring equal to 1640 or CheckDeadUni("c1",0x2259) ; entspricht1641 or CheckDeadUni("c2",0x225A) ; EQUIANGULAR TO1642 or CheckDeadUni("c5",0x2261) ; identisch1643 or CheckDeadUni("t1",0x2245) ; ungef�hr gleich1644 or CheckDeadUni("t4",0x2260))); ungleich1555 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 1645 1560 send {blind}`= 1646 1561 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} 1649 1564 else if (Ebene = 5) 1650 1565 SendUnicodeChar(0x03C6) ; phi 1651 1566 else if (Ebene = 6) 1652 SendUnicodeChar(0x03A6) ; Phi1567 SendUnicodeChar(0x03A6) ; Phi 1653 1568 return 1654 1569 … … 1673 1588 if (GetKeyState("CapsLock","T")) 1674 1589 SendUnicodeChar(0x1E9E) ; versal-� 1675 else if (LangSTastatur = 1)1590 else if LangSTastatur 1676 1591 send {blind}s 1677 1592 else … … 1679 1594 else if (Ebene = 2) 1680 1595 if (GetKeyState("CapsLock","T")) 1681 if (LangSTastatur = 1)1596 if LangSTastatur 1682 1597 send {blind}s 1683 1598 else … … 1686 1601 SendUnicodeChar(0x1E9E) ; versal-� 1687 1602 else if (Ebene = 3) 1688 if (LangSTastatur = 1)1603 if LangSTastatur 1689 1604 send � 1690 1605 else 1691 1606 SendUnicodeChar(0x017F) ; langes s 1692 1607 else if (Ebene = 5) 1693 SendUnicodeChar(0x03C2) ; varsigma1694 else if (Ebene = 6) 1695 SendUnicodeChar(0x2218) ; Verkn�pfungsoperator1608 SendUnicodeChar(0x03C2) ; varsigma 1609 else if (Ebene = 6) 1610 SendUnicodeChar(0x2218) ; Verkn�pfungsoperator 1696 1611 return 1697 1612 … … 1701 1616 if (Ebene = 1) 1702 1617 { 1703 deadUni(0x02DC) ; Tilde, tot1618 deadUni(0x02DC) ; Tilde, tot 1704 1619 DeadKey := "t1" 1705 1620 } … … 1721 1636 else if (Ebene = 5) 1722 1637 { 1723 deadUni(0x02DD) ; Doppelakut1638 deadUni(0x02DD) ; Doppelakut 1724 1639 DeadKey := "t5" 1725 1640 } … … 1742 1657 EbeneAktualisieren() 1743 1658 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))) 1754 1669 OutputChar("u","U") 1755 1670 else if (Ebene = 3) … … 1757 1672 else if (Ebene = 4) 1758 1673 Send {blind}{Home} 1759 else if (Ebene = 5) 1674 else if (Ebene = 5) ; leer 1760 1675 { 1761 1676 CompKey := PriorCompKey 1762 1677 DeadKey := PriorDeadKey 1763 } ; leer1678 } 1764 1679 else if (Ebene = 6) 1765 1680 SendUnicodeChar(0x222E) ; contour integral … … 1769 1684 EbeneAktualisieren() 1770 1685 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","�","�"))) 1780 1695 OutputChar("i","I") 1781 1696 else if (Ebene = 3) … … 1783 1698 else if (Ebene = 4) 1784 1699 Send {Blind}{Left} 1785 else if (Ebene = 5 )1700 else if (Ebene = 5) 1786 1701 SendUnicodeChar(0x03B9) ; iota 1787 1702 else if (Ebene = 6) … … 1792 1707 EbeneAktualisieren() 1793 1708 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","�","�"))) 1803 1718 OutputChar("a","A") 1804 1719 else if (Ebene = 3) … … 1807 1722 Send {Blind}{Down} 1808 1723 else if (Ebene = 5) 1809 SendUnicodeChar(0x03B1) ; alpha1810 else if (Ebene = 6) 1811 SendUnicodeChar(0x2200) ; f�r alle1724 SendUnicodeChar(0x03B1) ; alpha 1725 else if (Ebene = 6) 1726 SendUnicodeChar(0x2200) ; f�r alle 1812 1727 return 1813 1728 … … 1815 1730 EbeneAktualisieren() 1816 1731 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","�","�"))) 1829 1744 OutputChar("e","E") 1830 else if (Ebene = 3) ; {1745 else if (Ebene = 3) 1831 1746 send {blind}{}} 1832 1747 else if (Ebene = 4) 1833 1748 Send {Blind}{Right} 1834 1749 else if (Ebene = 5) 1835 SendUnicodeChar(0x03B5) ; epsilon1836 else if (Ebene = 6) 1837 SendUnicodeChar(0x2203) ; es existiert1750 SendUnicodeChar(0x03B5) ; epsilon 1751 else if (Ebene = 6) 1752 SendUnicodeChar(0x2203) ; es existiert 1838 1753 return 1839 1754 … … 1841 1756 EbeneAktualisieren() 1842 1757 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))) 1853 1768 OutputChar("o","O") 1854 1769 else if (Ebene = 3) … … 1865 1780 EbeneAktualisieren() 1866 1781 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))) 1872 1787 { 1873 1788 if (Ebene = 1) … … 1875 1790 if LangSTastatur 1876 1791 if (GetKeyState("CapsLock","T")) 1792 { 1877 1793 send {blind}s 1794 if (PriorDeadKey = "comp") 1795 Compkey := "s" 1796 } 1878 1797 else 1798 { 1879 1799 SendUnicodeChar(0x017F) ;langes S 1800 if (PriorDeadKey = "comp") 1801 CompKey := "lang_s" 1802 } 1880 1803 else 1804 { 1881 1805 send {blind}s 1882 if (PriorDeadKey = "comp") 1883 CompKey := "s" 1806 if (PriorDeadKey = "comp") 1807 CompKey := "s" 1808 } 1884 1809 } 1885 1810 else if (Ebene = 2) … … 1887 1812 if LangSTastatur 1888 1813 if (GetKeyState("CapsLock","T")) 1814 { 1889 1815 SendUnicodeChar(0x017F) ;langes S 1816 if (PriorDeadKey = "comp") 1817 CompKey := "lang_s" 1818 } 1890 1819 else 1820 { 1891 1821 send {blind}S 1822 if (PriorDeadKey = "comp") 1823 CompKey := "s" 1824 } 1892 1825 else 1826 { 1893 1827 send {blind}S 1894 if (PriorDeadKey = "comp") 1895 CompKey := "S" 1828 if (PriorDeadKey = "comp") 1829 CompKey := "S" 1830 } 1896 1831 } 1897 1832 } … … 1903 1838 SendUnicodeChar(0x03C3) ;sigma 1904 1839 else if (Ebene = 6) 1905 SendUnicodeChar(0x03A3) ;Sigma1840 SendUnicodeChar(0x03A3) ;Sigma 1906 1841 return 1907 1842 … … 1909 1844 EbeneAktualisieren() 1910 1845 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))) 1915 1850 OutputChar("n","N") 1916 1851 else if (Ebene = 3) 1917 send {blind}( ; )1852 send {blind}( 1918 1853 else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2074) 1919 or CheckDeadUni("c5",0x2084)))1854 or CheckDeadUni("c5",0x2084))) 1920 1855 Send {blind}{NumPad4} 1921 1856 else if (Ebene = 5) … … 1928 1863 EbeneAktualisieren() 1929 1864 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","�","�"))) 1936 1871 OutputChar("r","R") 1937 else if (Ebene = 3) ;(1872 else if (Ebene = 3) 1938 1873 send {blind}) 1939 1874 else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2075) 1940 or CheckDeadUni("c5",0x2085)))1875 or CheckDeadUni("c5",0x2085))) 1941 1876 Send {blind}{NumPad5} 1942 1877 else if (Ebene = 5) … … 1949 1884 EbeneAktualisieren() 1950 1885 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))) 1955 1890 OutputChar("t","T") 1956 1891 else if (Ebene = 3) 1957 send {blind}- ; Bis1892 send {blind}- ; Bisstrich 1958 1893 else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2076) 1959 1894 or CheckDeadUni("c5",0x2086))) … … 1962 1897 SendUnicodeChar(0x03C4) ; tau 1963 1898 else if (Ebene = 6) 1964 SendUnicodeChar(0x2202 ) ; partielle Ableitung1899 SendUnicodeChar(0x2202) ; partielle Ableitung 1965 1900 return 1966 1901 … … 1978 1913 send `, 1979 1914 else if (Ebene = 5) 1980 SendUnicodeChar(0x03B4) ; delta1915 SendUnicodeChar(0x03B4) ; delta 1981 1916 else if (Ebene = 6) 1982 SendUnicodeChar(0x0394) ; Delta1917 SendUnicodeChar(0x0394) ; Delta 1983 1918 return 1984 1919 … … 1986 1921 EbeneAktualisieren() 1987 1922 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","�","�"))) 1990 1925 OutputChar("y","Y") 1991 1926 else if (Ebene = 3) … … 2008 1943 EbeneAktualisieren() 2009 1944 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))) 2013 1948 OutputChar("�","�") 2014 1949 else if (Ebene = 3) … … 2016 1951 else if (Ebene = 4) 2017 1952 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 1960 return 1961 1962 neo_�: 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} 2018 1970 else if (Ebene = 5) 2019 1971 { … … 2022 1974 } ; leer 2023 1975 else if (Ebene = 6) 2024 SendUnicodeChar(0x221D) ; proportional2025 return2026 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 := PriorDeadKey2038 CompKey := PriorCompKey2039 } ; leer2040 else if (Ebene = 6)2041 1976 SendUnicodeChar(0x2111) ; Fraktur I 2042 1977 return … … 2049 1984 send {blind}| 2050 1985 else if (Ebene = 4) 2051 Send {blind}{PgDn} ; Next1986 Send {blind}{PgDn} ; Next 2052 1987 else if (Ebene = 5) 2053 1988 SendUnicodeChar(0x03B7) ; eta 2054 1989 else if (Ebene = 6) 2055 SendUnicodeChar(0x211C) ; altesR1990 SendUnicodeChar(0x211C) ; Fraktur R 2056 1991 return 2057 1992 … … 2065 2000 Send {blind}{Enter} 2066 2001 else if (Ebene = 5) 2067 SendUnicodeChar(0x03C0) ; pi2068 else if (Ebene = 6) 2069 SendUnicodeChar(0x03A0) ; Pi2002 SendUnicodeChar(0x03C0) ; pi 2003 else if (Ebene = 6) 2004 SendUnicodeChar(0x03A0) ; Pi 2070 2005 return 2071 2006 … … 2073 2008 EbeneAktualisieren() 2074 2009 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))) 2078 2013 OutputChar("z","Z") 2079 2014 else if (Ebene = 3) 2080 send ``{space} ; untot2015 send ``{space} ; untot 2081 2016 else if (Ebene = 4) 2082 2017 { … … 2085 2020 } ; leer 2086 2021 else if (Ebene = 5) 2087 SendUnicodeChar(0x03B6) ; zeta2088 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) 2090 2025 return 2091 2026 … … 2107 2042 EbeneAktualisieren() 2108 2043 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 2115 2047 OutputChar("m","M") 2116 2048 else if (Ebene = 3) 2117 2049 send {blind}`% 2118 2050 else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B9) 2119 or CheckDeadUni("c5",0x2081)))2051 or CheckDeadUni("c5",0x2081))) 2120 2052 Send {blind}{NumPad1} 2121 2053 else if (Ebene = 5) … … 2137 2069 send {blind}" 2138 2070 else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B2) 2139 or CheckDeadUni("c5",0x2082)))2071 or CheckDeadUni("c5",0x2082))) 2140 2072 Send {blind}{NumPad2} 2141 2073 else if (Ebene = 5) … … 2157 2089 send {blind}' 2158 2090 else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B3) 2159 or CheckDeadUni("c5",0x2083)))2091 or CheckDeadUni("c5",0x2083))) 2160 2092 Send {blind}{NumPad3} 2161 2093 else if (Ebene = 5) 2162 2094 SendUnicodeChar(0x03D1) ; theta symbol (vartheta) 2163 2095 else if (Ebene = 6) 2164 SendUnicodeChar(0x0398) ; Theta2096 SendUnicodeChar(0x0398) ; Theta 2165 2097 return 2166 2098 … … 2170 2102 if (Ebene12 and !(CheckDeadUni12("c1",0x0135,0x0134) 2171 2103 or CheckDeadUni12("c2",0x01F0,"") 2172 or CheckCompUni 12("i",0x0133,""); ij2173 or CheckCompUni 12("I","",0x0132) ; IJ2174 or CheckCompUni 12("l",0x01C9,"") ; lj2175 or CheckCompUni 12("L",0x01C8,0x01C7) ; Lj/LJ2176 or CheckCompUni12(" n",0x01CC,"") ; nj2177 or CheckCompUni12("N",0x01CB,0x01CA))) ; Nj/NJ2104 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 2178 2110 OutputChar("j","J") 2179 2111 else if (Ebene = 3) … … 2191 2123 Numpad 2192 2124 2193 2194 folgende Tasten verhalten sich bei ein- und ausgeschaltetem2195 NumLock gleich:2196 2125 */ 2197 2126 2127 neo_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 2140 return 2141 2198 2142 neo_NumpadDiv: 2199 2143 EbeneAktualisieren() 2200 if ((Ebene = 1) or (Ebene = 2))2144 if Ebene14 2201 2145 send {blind}{NumpadDiv} 2146 else if (Ebene = 2) 2147 SendUnicodeChar(0x2215) ; Slash 2202 2148 else if (Ebene = 3) 2203 2149 send {blind}� 2204 else if ((Ebene = 4) or (Ebene = 5))2205 SendUnicodeChar(0x2215) ; slash2206 2150 return 2207 2151 2208 2152 neo_NumpadMult: 2209 2153 EbeneAktualisieren() 2210 if ((Ebene = 1) or (Ebene = 2))2154 if Ebene14 2211 2155 send {blind}{NumpadMult} 2156 else if (Ebene = 2) 2157 SendUnicodeChar(0x22C5) ; Cdot 2212 2158 else if (Ebene = 3) 2213 2159 send {blind}� 2214 else if ((Ebene = 4) or (Ebene = 5))2215 SendUnicodeChar(0x22C5) ; cdot2216 2160 return 2217 2161 2218 2162 neo_NumpadSub: 2219 2163 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))) 2222 2166 send {blind}{NumpadSub} 2223 2167 else if (Ebene = 3) 2224 SendUnicodeChar(0x2212) ; echtes minus2168 SendUnicodeChar(0x2212) ; Echtes Minus 2225 2169 return 2226 2170 2227 2171 neo_NumpadAdd: 2228 2172 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))) 2231 2175 send {blind}{NumpadAdd} 2232 2176 else if (Ebene = 3) 2233 2177 send {blind}� 2234 else if ( (Ebene = 4) or (Ebene = 5))2235 SendUnicodeChar(0x2213) ; -+2178 else if (Ebene = 2) 2179 SendUnicodeChar(0x2213) ; Inverses � 2236 2180 return 2237 2181 2238 2182 neo_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} 2184 return 2254 2185 2255 2186 neo_Numpad7: 2256 2187 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 2264 2191 send {blind}{Numpad7} 2265 2192 else 2266 send {blind){Shift up}{Numpad7}{Shift down} 2267 2193 send {blind){Shift up}{Numpad7} 2268 2194 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} 2275 2206 return 2276 2207 2277 2208 neo_Numpad8: 2278 2209 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} 2298 2219 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} 2305 2231 return 2306 2232 2307 2233 neo_Numpad9: 2308 2234 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 2316 2238 send {blind}{Numpad9} 2317 2239 else 2318 send {blind){Shift up}{Numpad9}{Shift down} 2319 2240 send {blind){Shift up}{Numpad9} 2320 2241 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} 2253 return 2330 2254 2331 2255 neo_Numpad4: 2332 2256 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} 2348 2264 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} 2355 2276 return 2356 2277 2357 2278 neo_Numpad5: 2358 2279 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} 2378 2289 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} 2385 2301 return 2386 2302 2387 2303 neo_Numpad6: 2388 2304 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} 2404 2312 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} 2411 2324 return 2412 2325 2413 2326 neo_Numpad1: 2414 2327 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 2422 2331 send {blind}{Numpad1} 2423 2332 else 2424 send {blind){Shift up}{Numpad1}{Shift down} 2425 2333 send {blind){Shift up}{Numpad1} 2426 2334 if (PriorDeadKey = "comp") 2427 CompKey := "Num_1" 2428 } 2335 CompKey := "1" 2336 } 2337 else if (Ebene = 2) 2338 SendUnicodeChar(0x2714) ; H�kchen 2429 2339 else if (Ebene = 3) 2430 2340 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} 2433 2346 return 2434 2347 2435 2348 neo_Numpad2: 2436 2349 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} 2450 2356 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} 2457 2368 return 2458 2369 2459 2370 neo_Numpad3: 2460 2371 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} 2476 2379 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} 2483 2391 return 2484 2392 2485 2393 neo_Numpad0: 2486 2394 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 2494 2398 send {blind}{Numpad0} 2495 2399 else 2496 send {blind){Shift up}{Numpad0}{Shift down} 2497 2400 send {blind){Shift up}{Numpad0} 2498 2401 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} 2505 2413 return 2506 2414 2507 2415 neo_NumpadDot: 2508 2416 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 2515 2420 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} 2516 2431 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} 2433 return 2434 2435 2523 2436 2524 2437 … … 2528 2441 2529 2442 */ 2443 2530 2444 *space:: 2531 2445 if ((einHandNeo)) … … 2574 2488 Folgende Tasten sind nur aufgef�hrt, um PriorDeadKey zu leeren. 2575 2489 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... 2581 2491 */ 2582 2492 … … 2596 2506 } 2597 2507 return 2508 2598 2509 2599 2510 *Del:: … … 2702 2613 KeyboardLED(LEDvalue,"Cmd"), wobei 2703 2614 Cmd = on/off/switch, 2704 LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4 2615 LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4, 2705 2616 bzw. eine beliebige Summe dieser Werte: 2706 2617 AlleAus=0, CapsLock+NumLock=6, etc. … … 2710 2621 2711 2622 Um eventuelle Wechselwirkungen mit dem bestehenden 2712 Code (insb. der Unicode-Konvertierung) auszusch ie�en,2623 Code (insb. der Unicode-Konvertierung) auszuschlie�en, 2713 2624 sind auch alle (Hilfsmethoden) mit dem Postfix LED 2714 2625 versehen worden. … … 2817 2728 2818 2729 2819 /*2820 Funktionen2821 */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 global2833 PriorDeadKey := DeadKey2834 PriorCompKey := CompKey2835 DeadKey := ""2836 CompKey := ""2837 Ebene12 := 02838 Ebene7 := 02839 Ebene8 := 02840 Modstate := IsShiftPressed() . IsMod3Pressed() . IsMod4Pressed()2841 2842 if (ahkTreiberKombi)2843 if ( Modstate = "001")2844 Ebene = 62845 else2846 Ebene = -12847 else2848 if (Modstate = "000")2849 Ebene = 1 ; Ebene 1: Ohne Mod2850 else if (Modstate = "100")2851 Ebene = 2 ; Ebene 2: Shift2852 else if (Modstate = "010")2853 Ebene = 3 ; Ebene 3: Mod32854 else if (Modstate = "001")2855 Ebene = 4 ; Ebene 4: Mod42856 else if (Modstate = "110")2857 Ebene = 5 ; Ebene 5: Shift+Mod32858 else if (Modstate = "011")2859 Ebene = 6 ; Ebene 6: Mod3+Mod42860 else if (Modstate = "101")2861 {2862 Ebene = 4 ; Ebene 7: Shift+Mod4 impliziert Ebene 42863 Ebene7 = 12864 }2865 else if (Modstate = "111")2866 {2867 Ebene = 6 ; Ebene 8: Shift+Mod3+Mod4 impliziert Ebene 62868 Ebene8 = 12869 }2870 2871 Ebene12 := ((Ebene = 1) or (Ebene = 2))2872 2873 if GetKeyState("NumLock","T")2874 NumLock = 12875 else2876 NumLock = 02877 }2878 2879 2880 IsShiftPressed()2881 {2882 return GetKeyState("Shift","P")2883 }2884 2885 IsMod3Pressed()2886 {2887 global2888 if (IsMod3Locked)2889 {2890 return (not ( GetKeyState("CapsLock","P") or GetKeyState("#","P") )) ; # = SC02B2891 }2892 else {2893 return ( GetKeyState("CapsLock","P") or GetKeyState("#","P") ) ; # = SC02B2894 }2895 }2896 2897 IsMod4Pressed()2898 {2899 global2900 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 else2911 {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 gdkWindowToplevel2927 {2928 StringLower, charCode, charCode2929 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.html2946 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 2951 2730 BSSendUnicodeChar(charCode) 2952 2731 { … … 2965 2744 send {bs}{bs} 2966 2745 SendUnicodeChar(charCode) 2967 }2968 2969 2970 EncodeInteger(ref, val)2971 {2972 DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val)2973 2746 } 2974 2747 … … 3272 3045 ************************************************************/ 3273 3046 3274 3047 /* 3048 �ber den GTK-Workaround: 3049 Dieser basiert auf http://www.autohotkey.com/forum/topic32947.html 3050 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. 3051 */ 3052 3053 SendUnicodeChar(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 3073 EncodeInteger(ref, val) 3074 { 3075 DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val) 3076 } 3275 3077 3276 3078 /* … … 3449 3251 } 3450 3252 Return 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 3546 3254
