Wiemitneo, erster Versuch.

Aufruf: <Compose> <u> <w> oder <Compose> <U> <W>

Vor dem Aufruf muss man das zu suchende Zeichen im Clipboard haben, d.h. beispielsweise im Browser markiert und mit Strg+C ins Clipboard kopiert haben. Sollten sich mehrere Zeichen im Clipboard befinden, wird nur für das erste Zeichen die mögliche Belegung ausgegeben. Das bedeutet auch, dass für Multi-Zeichen-Compose-Sequenzen, die also mehrere Zeichen als Ergebnis einer Compose-Sequenz erzeugen, keine Hints angegeben werden.

Die Funktion sucht in zweierlei Variablentabellen: Einerseits die Reverse-Compose Variablen, die mit CRC... beginnen, andererseits die Reverse-Key-Tabellen, die mit CRK... beginnen. Für die Ergebnisse der CRC-Suche werden die einzelnen Compose-Tastendrücke bislang _nicht_ weiter aufgeschlüsselt.

Das Ergebnis wird jedenfalls in einem Tooltip angezeigt. Das ganze erfolgt mehrzeilig, sollte es mehrere Möglichkeiten zum Erzeugen des Zeichens geben.

Für die Erzeugung der Reverse-Compose-Variablen muss die compose.generated.ahk-Datei auf quasi das Doppelte aufgeblasen werden, um eine iterative Suche zu vermeiden. Vielleicht fällt uns diesbezüglich ja noch etwas Besseres ein.


git-svn-id: https://svn.neo-layout.org@1653 b9310e46-f624-0410-8ea1-cfbb3a30dc96
This commit is contained in:
mösi 2009-02-13 08:54:48 +00:00
parent f5440da7a1
commit 24229c131a
5 changed files with 6987 additions and 7 deletions

File diff suppressed because it is too large Load diff

View file

@ -126,6 +126,22 @@ ED(pos,caps,e1,e2,e3,e4,e5,e6,e7="",e8="") {
CP6%pos% := e6
CP7%pos% := e7
CP8%pos% := e8
if (e1 != "")
CRK%e1% .= " " . e1
if (e2 != "")
CRK%e2% .= " S__M2" . e1
if (e3 != "")
CRK%e3% .= " S__M3" . e1
if (e4 != "")
CRK%e4% .= " S__M4" . e1
if (e5 != "")
CRK%e5% .= " S__M5" . e1
if (e6 != "")
CRK%e6% .= " S__M6" . e1
if (e7 != "")
CRK%e7% .= " S__M7" . e1
if (e8 != "")
CRK%e8% .= " S__M8" . e1
}
EDN(pos1,pos2,caps,e1,e2,e3,e4,e5,e6) {

View file

@ -1891,9 +1891,12 @@ EncodeUnicodeFile(FFrom,FTo) {
break
}
}
if (modkeys != "")
Composita := Composita "CD" modkeys ":=""" EncodeUni(ReplaceRight) """`r`n"
else {
if (modkeys != "") {
ressymb := EncodeUni(ReplaceRight)
Composita .= "CD" . modkeys . ":=""" . ressymb . """`r`n"
if (StrLen(ressymb)==5)
Composita .= "CRC" . ressymb . ".="" " . modkeys . """`r`n"
} else {
Composita := Composita "; illegal " Xkbsym " in " A_LoopField "`r`n"
Miss := Miss + 1
}

View file

@ -33,10 +33,16 @@ CSU0020 := "space"
**** ist (wie bei den diversen toten Zeichen) oder schlicht mit AHK nicht
**** geht (wie das Key-Repeat der schließenden Klammer).
*/
DNCSU005E := "{^}{space}"
DNCSU0060 := "{``}{space}"
; DNCSU005E := "{^}{space}"
; DNCSU0060 := "{``}{space}"
; DNCSU00B4 := "{´}{space}"
CSU005E := ""
CSU0060 := ""
CSU00B4 := ""
DNCSU007D := "{}}" ; "{} down}" geht nicht, warum auch immer
DNCSU00B4 := "{´}{space}"
; CSU007D := ""
/**** die meisten der folgenden Shortcuts werden von AHK zwar verarbeitet,
**** von dort aber nur als ALT+Numpad verschickt und daher nicht für alle
@ -216,3 +222,30 @@ UNSHU20AC := 1 ; Euro
UNSHU007E := 1 ; ~
UNSHU007C := 1 ; |
UNSHU00B5 := 1 ; µ
/*
Jetzt noch ein paar Verschönerungsabkürzungen
*/
CBS__M2 := "(Shift)+"
CBS__M3 := "(Mod3)+"
CBS__M4 := "(Mod4)+"
CBS__M5 := "(Mod5=Shift+Mod3)+"
CBS__M6 := "(Mod6=Mod3+Mod4)+"
CBS__M7 := "(Mod7=Shift+Mod4)+"
CBS__M8 := "(Mod8=Shift+Mod3+Mod4)+"
CBSComp := "Compose"
CBTAcut := "Akut"
CBTgrav := "Grave"
CBTcedi := "Cedilla"
CBTabdt := "Abovedot"
CBTogon := "Ogonek"
CBTcflx := "Circumflex"
CBTcron := "Caron"
CBTbrve := "Breve"
CBTbldt := "Belowdot"
CBTtlde := "Tilde"
CBTmcrn := "Macron"
CBTdrss := "Diaeresis"
CBTdbac := "Doubleacute"
CBTstrk := "Stroke"

View file

@ -480,3 +480,71 @@ PressHookCalc(PhysKey, ActKey, Char) {
}
}
}
CDSCompU0055U0057 := "P_WMN"
CDSCompU0075U0077 := "P_WMN"
CharProc_WMN() {
global
TrayTip,Wie mit NEO, Here we are!,10,1
ok := DllCall("OpenClipboard")
if (!ok) {
TrayTip,Wie mit NEO,Fehler in OpenClipboard,10,1
return
}
uclph:=DllCall("GetClipboardData","uint",CF_UNICODETEXT:=13)
if (uclph == 0) {
DllCall("CloseClipboard")
TrayTip,Wie mit NEO,Fehler in GetClipboardData,10,1
return
}
uclp := DllCall("GlobalLock","uint",uclph)
if (uclp == 0) {
DllCall("CloseClipboard")
TrayTip,Wie mit NEO,Fehler in GlobalLock,10,1
return
}
a := *(uclp+0)
b := *(uclp+1)
DllCall("GlobalUnlock","uint",uclph)
DllCall("CloseClipboard")
SetFormat,Integer,h
a += 256*b
SetFormat,Integer,d
a := "U" . substr("0000" . substr(a,3),-3)
wtt := CRC%a% . " " . CRK%a% . " "
if (wtt=="") {
TrayTip,Wie mit NEO,Keine Information`, wie %a% eingegeben werden kann!,10,1
return
}
wmn := ""
loop,parse,wtt,%A_Space%
{
this_wmn := ""
this_wtt := A_LoopField
if (this_wtt == "")
continue ; probably at first or last entry
loop {
if (this_wtt == "")
break
this_char := substr(this_wtt,1,5)
this_wtt := substr(this_wtt,6)
if (CB%this_char% != "")
this_char := CB%this_char%
else if (CS%this_char% != "")
this_char := CS%this_char%
; this_char will contain Uxxxx if no shortcut is present. Fix this here.
if (substr(this_char,-1) == ")+")
this_wmn .= this_char
else if (substr(this_wmn,-1) == ")+")
this_wmn .= "<" . this_char . ">"
else
this_wmn .= " <" . this_char . ">"
}
wmn .= this_wmn . "`r`n"
}
TrayTip,Wie mit NEO,% wmn,10,1
}