From 5583725803b878dc364b6a675e6421422fc5bdc0 Mon Sep 17 00:00:00 2001 From: dennis Date: Fri, 27 Jun 2008 11:25:06 +0000 Subject: Compose-Playground.ahk in eigenes Verzeichnis ausgelagert und in zwei Teile aufgesplittet. git-svn-id: https://svn.neo-layout.org@580 b9310e46-f624-0410-8ea1-cfbb3a30dc96 --- windows/autohotkey/Compose/Compose-Methods.ahk | 161 +++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 windows/autohotkey/Compose/Compose-Methods.ahk (limited to 'windows/autohotkey/Compose/Compose-Methods.ahk') diff --git a/windows/autohotkey/Compose/Compose-Methods.ahk b/windows/autohotkey/Compose/Compose-Methods.ahk new file mode 100644 index 0000000..c7acc29 --- /dev/null +++ b/windows/autohotkey/Compose/Compose-Methods.ahk @@ -0,0 +1,161 @@ +/* +******************************************* +* Über dieses Skript +******************************************* +Dies ist ein experimentelles Minimalbeispiel, um die noch fehlende +Compose-Funktionalität in der neo20-all-in-one.ahk zu implementieren. + +Konkret werden dafür die sog. Hotstrings genutzt: +http://www.autohotkey.com/docs/Hotstrings.htm + +Die eigentlichen Kombinationen sollen später aus den Linux-Sourcen +automatisch generiert werden. + +Autoren: Matthias Berg, Dennis Heidsiek + + +******************************************* +* Kurze Beschreibung der Funktionsweise +******************************************* + +compose aktiviert die hotstrings und die nächsten gr (copyright) oder 12 +(einhalb) werden ersetzt und deaktivieren es aber sofort. + +Also {compose}neogrneo12 wird zu neo©neo12 (einhalb wird nicht ersetzt). +damit dies aber nicht unendlich lange geht (also erst ein paar Wörter später +eine Ersetzung erfolgt, weil nach Compose doch umentschieden wurde), wird mit +Space (vielleicht auch später mit anderen Tasten) compose wieder deaktiviert. + + +******************************************** +* Zu Testzwecken aufgenommene Kombinationen +* (in der Linux-Schreibweise) +******************************************** + + "©" # copyright + <1> <2> "½" # FRACTION 1/2 + <2> <0> "xx" # SMALL ROMAN NUMERAL 20 + <2> <0> <0> "cc" # SMALL ROMAN NUMERAL 200 + <2> <0> <0> <0> "mm" # SMALL ROMAN NUMERAL 2000 + <3> <9> <9> <9> "mmmcmxcix" # SMALL ROMAN NUMERAL 3999 + <2> <0> <0> <0> "\u216f\u216f" # ROMAN NUMERAL 2000 + +******************************************* +* Offene und noch zu lösende Probleme: +******************************************* + +- {compose}r200 und {compose}r2000 können nicht eingegeben werden, + da zuvor {compose}r20 erkannt wird + +- Unbedingt die folgende noch fehlende Dokumentation ergänzen, damit die + Compose-Kombinationen von Dennis automatisch aus den Linux-Sourcen + generiert werden können: Wann/wofür benutzt man: + + send a + + + send {blind} a + + + SendUnicodeChar(0x0061) + + + BSSendUnicodeChar(0x0061) + + + CompUnicodeChar(0x0061) + + + Comp3UnicodeChar(0x0061) + + + + + +******************************************* +* Gelöste Probleme: +******************************************* + +- {compose}r2000 und {compose}R2000 werden jetzt unterschieden: + Alle Keystrings sind jetzt Case-sensitive (Parameter c) + +*/ + + + + + +/* +******************************************** +* Compose-Methoden +******************************************* +*/ + +composeActive := 0 ; unsere neue Variable + +~Space::composeActive := 0 ; Space und später andere Tasten sollten es deaktivieren +*CapsLock::return ; capslock soll ja nichts einrasten :) + +*tab:: ; Dies ist so ähnlich wie neo_tab: + if (IsMod3Pressed()) { ;# + composeActive := 1 + PriorDeadKey := "comp" + CompKey := "" + } + else { + send {blind}{Tab} + PriorDeadKey := "" + CompKey := "" + } +return + +IsMod3Pressed() +{ + return ( GetKeyState("CapsLock","P") or GetKeyState("#","P") ) ; # = SC02B +} + +/* +******************************************** +* Unicode-Methoden +******************************************** +*/ + +SendUnicodeChar(charCode) +{ + VarSetCapacity(ki, 28 * 2, 0) + + EncodeInteger(&ki + 0, 1) + EncodeInteger(&ki + 6, charCode) + EncodeInteger(&ki + 8, 4) + EncodeInteger(&ki +28, 1) + EncodeInteger(&ki +34, charCode) + EncodeInteger(&ki +36, 4|2) + + DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28) +} + +BSSendUnicodeChar(charCode) +{ + send {bs} + SendUnicodeChar(charCode) +} + +CompUnicodeChar(charCode) +{ + send {bs} + SendUnicodeChar(charCode) +} + +Comp3UnicodeChar(charCode) +{ + send {bs} + send {bs} + SendUnicodeChar(charCode) +} + + +EncodeInteger(ref, val) +{ + DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val) +} + -- cgit v1.2.3