On 02.12.2010 13:04, Ruthard Baudach wrote:
> Ich bin über Nordtast auf Neo aufmerksam geworden und absolut begeistert vom
> Ebenenkonzept, das von Neo entwickelt wurde.
>
> Leider habe ich auf diesem Weg AutoHotKey kennengelernt, und kann es in
> meiner täglichen Arbeit nicht mehr missen.
>
> Beides verträgt sich leider nicht, da der AutoHotkeyTreiber nicht neben einem
> anderen AHK-Skript laufen kann.
So ist es leider.
> Nun bin ich soweit durch den Quellcode von neovars durchgestiegen, dass über
> den allstarhook in keyhooks.ahk
> alle nur möglichen Hotkeys abgefangen und über AllStar() in varfunctions.ahk
> an das System weitergereicht werden.
>
> Über custom.ahk kann man sich hier einklinken.
>
> Nur wie? Ich habe in Wiki und Mailarchiv keine Beschreibung gefunden, wie man
> das Neovars-Skript erweitern kann.
Es gibt hier und da ein paar Anregungen, aber keine vollständige Doku.
> Ich brauche insbesondere die "Ur-AHK" Funktion einer Hotkeydefinition a lá
>
> !a::
> SendInput {F12}!abc{enter}
>
> Wobei Hotstringdefinitionen a lá
> ::hi::hallo
So einfach ist das nicht. Die Neo-vars-Funktionen zum Aufruf von „Makros“ sind
den Bedürfnissen eines Tastaturtreibers angepasst, nicht denen eines
Key-Makro-Tools.
Um eine Ersetzung durchzuführen, muss man sich eine Tastenkombination oder auch
Tastenabfolge aussuchen, die noch nicht belegt ist. Typisch fangen
solche Tastenkombinationen mit Compose (M3+Tab) oder mit einer der toten Tasten
an. Neo-vars kann jedoch _nicht_ die Strg- oder Alt-Taste in die
normale Betrachtung mit einbeziehen.
Weiters ist es mit Neo-vars nicht möglich, Hotstrings in der Art von
AHK-Hotstrings zu verwenden. Ich halte diese Funktion aufgrund seiner Umsetzung
für ziemlich bescheiden: Erst muss man „hi“ tippen, dann noch eines der
Trennzeichen, dann wird AHK selbständig die bereits getippten Zeichen löschen
und durch den String „hallo“ ersetzen. Klappt besonders schlecht, wenn man
zwischen h und i oder auch zwischen i und dem Trennzeichen mit der Maus an
eine andere Stelle im Text oder gar in ein anderes Fenster klickt, dann
passieren wundersame Dinge. Wie weit AHK hier Vorkehrungen trifft (Timeouts
zwischen den Tastendrücken, Mausclicks oder auch -Bewegungen zum Abbruch der
Sequenz), weiß ich nicht, ich halte diese Form der Umsetzung weiterhin
für schlecht.
Ich will Dich aber nicht gänzlich frustrieren :) Es gibt im Wesentlichen 2
bestehende Möglichkeiten, zu eigenen Funktionen zu kommen:
1. Du klinkst Dich in den Compose-Mechanismus ein.
==
Dazu musst Du im wesentlichen 3 verschiedene Variablentypen kennen:
CM… : Wenn nach Anhängen des aktuellen Zeichens an die Compose-Sequenz
%CompNew% eine Variable CM%CompNew% existiert, wird das aktuelle Zeichen nicht
ausgegeben (verschluckt) und auf das nächste Zeichen gewartet. Die
Compose-Sequenz wächst um das aktuelle Zeichen.
CD…: Wenn nach Anhängen des aktuellen Zeichens an die Compose-Sequenz %CompNew%
eine Variable CD%CompNew% existiert, wird die Compose-Sequenz gelöscht
und der Inhalt der Variable CM%CompNew% ausgegeben.
CF… (nach Überprüfung auf CM… und CD…): Wenn _ohne_ Anhängen des aktuellen
Zeichens an die Compose-Sequenz %CompNew% eine Variable CF%Comp% existiert,
wird deren Inhalt ausgegeben und dann mit der Verarbeitung des aktuellen
Zeichens bei leerer Compose-Sequenz fortgefahren.
Optional und für einzelne Zeichen kann es auch erstrebenswert sein, eine
Variable CRC… zu definieren, damit das Wie-Mit-Neo-Skript eine
Reverse-Auflösung durchführen kann.
Beispiel A:
Durch Druck auf ~,r,r (kleines r) wird ein String ausgegeben:
CMT__tlde := 1
CMT__tldeU72 := 1
CDT__tldeU72U72 := EncodeUniComposeA("hallo")
Das ganze lässt sich auch ganz schön in der Bildschirmtastatur mitverfolgen.
Beispiel B:
Durch Druck auf h,i,(space) wird ein String ausgegeben:
CMU68 := 1
CFU68 := "U68"
CMU68U69 := 1
CFU68U69 := "U68U69"
CDU68U69U20 := EncodeUniComposeA("hallo ")
Nach Drücken auf h wird erstmal garnichts ausgegeben, auch dann noch nicht,
wenn danach ein i folgt. Hängst Du dann das Space an, wird der String
ausgegeben. Drückst Du nach h oder i eine andere Taste als die in der Sequenz,
werden die bis dahin zurück gehaltenen Buchstaben auch ausgegeben. Wenn
man h,i auch mit anderen Trennern ersetzen lassen will, muss man für jede
derartige Sequenz eine entsprechende CD…-Variable mit passendem Inhalt anlegen.
Beispiel C:
Durch Druck auf ♫,m,d soll ein bestimmtes Unicode-Zeichen ᘺ (U+163A: LARGE
GERMAN CHANCELLOR CLEAVAGE), liebevoll auch „Märkels Dekolleté“ genannt,
ausgegeben werden:
CMS__Comp := 1
CMS__CompU6D := 1
CDS__CompU6DU64 := "U00163A"
CRCU00163A .= " S__CompU6DU64"
Die CRC…-Variable bewirkt, dass Wie-Mit-Neo die entsprechende Sequenz angeben
kann.
2. Du löst für spezielle Tastendrücke Unterprogrammaufrufe aus.
===