 |
AutoHotkey Community Wir helfen uns gegenseitig aus der Patsche
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Andreas Borutta
Anmeldedatum: 13.02.2006 Beiträge: 43
|
Verfasst am: Fr Okt 27, 2006 11:06 am Titel: Hotstring für eine spezifische Anwendung |
|
|
Hallo,
ich bin der Nutzung von Regeln, die nur für spezifische Anwendungen gelten sollen noch unerfahren.
Hauptsächlich nutze ich die Funktionalität Hotstrings von AHK.
Ein Hotstring lautet z.B.:
Er fügt einen echten Gedankenstrich gefolgt von dem Entity für ein geschütztes Leerzeichen in meinem HTML-Editor ein.
STRG+SHIFT+SPACE ist im Editor das Tastenkürzel für
Nehmen wir an am Anfang des Titels jedes Fensters des Editors stünde "Foo 3 -"
Wie bosselt man daraus einen Hotstring der nur in dem Editor wirkt?
So schlank und klar
http://borumat.de/autohotkey-autotexte-und-makros-tipps.php#autotexte-in-bestimmten-anwendungen
geht es ja noch nicht
Danke. _________________ Gruß, Andreas
Tipps zu Autohotkey, Firefox, Thunderbird |
|
| Nach oben |
|
 |
fredchf
Anmeldedatum: 18.09.2006 Beiträge: 716 Wohnort: Deutschland
|
Verfasst am: Fr Okt 27, 2006 11:34 am Titel: |
|
|
hallo andreas,
müsste dann etwa so aussehen:
| Code: | :*:--::
IfWinActive, Foo 3 -, , ,
{
Send, –^+{Space}
Return
}
SendRaw, --
Return |
das * sorgt dafür das kein abschlußzeichen benötigt wird
 _________________ Mit freundlichen Grüßen
fredchf |
|
| Nach oben |
|
 |
Andreas Borutta
Anmeldedatum: 13.02.2006 Beiträge: 43
|
Verfasst am: Fr Okt 27, 2006 1:15 pm Titel: |
|
|
| fredchf hat Folgendes geschrieben: | hallo andreas,
müsste dann etwa so aussehen [...] |
Vielen Dank!
Allerdings gibt es noch ein Problem:
Erst wenn ich den * rausnehme, löscht der Hotstring das erwünschte Leerzeichen (es wird durch das simulierte Editortastenkürzel [STRG+SHIFT+LEERZEICHEN] eingefügt) nicht mehr.
Aber dann wirkt er - erwartungsgemäß - auf andere Anwendungen und
führt zu
Das darf auf keinen Fall sein.
Etwas anderes in dem Zusammenhang:
Wenn man möchte, dass nur eine Gruppe bestimmter Abschlusszeichen den Hotstring auslöst, und das Abschlusszeichen mit ausgegeben wird:
wie muss dann die Regel lauten?
Beispielsweise soll eine Ellipse
| Code: | | …[jeweiliges Abschlusszeichen] |
bei
oder bei
ausgegeben werden.
Jedoch nicht bei
Geht das? _________________ Gruß, Andreas
Tipps zu Autohotkey, Firefox, Thunderbird |
|
| Nach oben |
|
 |
AGU Gast
|
Verfasst am: Fr Okt 27, 2006 1:41 pm Titel: |
|
|
Wegen deiner Anwendungssprezifischen Hotstrings:
Hast du schon mal #IfWinActive / #IfWinExist probiert?
http://www.autohotkey.com/docs/commands/_IfWinActive.htm
Also sowas wie:
| Code: | #IfWinActive, Foo 3
::--::–^+{Space}
|
| Zitat: |
Wenn man möchte, dass nur eine Gruppe bestimmter Abschlusszeichen den Hotstring auslöst, und das Abschlusszeichen mit ausgegeben wird:
wie muss dann die Regel lauten? |
Was deine zweite Frage angeht, bin ich mir nicht sicher, ob ich die richtig verstehe.
Mit #Hotstring EndChars kannst du die Gruppe der Abschlusszeichen (global) festlegen.
http://www.autohotkey.com/docs/commands/_Hotstring.htm
Das Abschlusszeichen eines non-auto-replace hotstrings befindet sich in der Variable A_EndChar. In der Doku steht dazu:
| Zitat: | | The built-in variable A_EndChar contains the ending character that you typed to trigger the most recent non-auto-replace hotstring. If no ending character was required (due to the * option), it will be blank. A_EndChar is useful when making hotstrings that use the Send command or whose behavior should vary depending on which ending character you typed. To send the ending character itself, use SendRaw %A_EndChar% (SendRaw is used because characters such as !{} would not be sent correctly by the normal Send command). |
_______________________
Gruß
AGU |
|
| Nach oben |
|
 |
Andreas Borutta
Anmeldedatum: 13.02.2006 Beiträge: 43
|
Verfasst am: Fr Okt 27, 2006 2:51 pm Titel: |
|
|
| Zitat: | | Code: | #IfWinActive, Foo 3
::--::–^+{Space}
|
|
Das ist schön schlank.
Es funktioniert, aber ...
... es gibt dasselbe Problem wie bei der anderen Lösung.
Vielleicht muss ich nochmal das Problem genauer schildern.
Ich hoffe, dann wird klar, was passiert.
Der HTML-Editor besitzt zwei Fenster: Quelltext und WYSIWYM
In beiden Fenster bewirkt das Tastenkürzel STRG+SHIFT+LEERZEICHEN das Einfügen eines sog. Entities, hier
WYSIWYM kann man nicht erkennen, dass es sich um ein geschütztes Leerzeichen handelt. Es sieht aus wie ein normales Leerzeichen.
Dein Hotstring bewirkt bei
Eingabe im Quelltext
Ausgabe
| Code: | | – [Leerzeichen] |
Also nur das Leerzeichen zuviel.
Ich passe das Skript an.
Skript
Eingabe im Quelltext:
Ausgabe im Quelltext:
Perfekt. So soll es sein.
Jetzt zum WYSIWYM:
Skript
Eingabe im WYSIWYM
Ausgabe im Quelltext
Schlecht.
Das Skript ist erst benutzbar, sobald es in beiden Fenstern exakt das gleich im Quelltext bewirkt.
Ist jetzt mein Problem klar geworden?
Hoffentlich, denn ich fürchte ich kann es nicht besser erklären.
| Zitat: | | Mit #Hotstring EndChars kannst du die Gruppe der Abschlusszeichen (global) festlegen. |
Ich möchte das nicht global festlegen, sondern nur für einzelne Hotstrings und sogar in spezifischen Anwendungen.
Gerade bei diesem Typ von "Typographie-Hotstring", wo es um ein intelligentes Ersetzen von normalen Zeichen durch besondere geht, ist der genaue Kontext, hier gebildet durch Abschlusszeichen, wichtig. _________________ Gruß, Andreas
Tipps zu Autohotkey, Firefox, Thunderbird |
|
| Nach oben |
|
 |
AGU Gast
|
Verfasst am: Fr Okt 27, 2006 3:28 pm Titel: |
|
|
| Zitat: | | Ist jetzt mein Problem klar geworden? | Ja schon.
Unterscheidet sich der Fenstertitel in der Quelltext und der WYSIWYM Ansicht? Dann könntest du nämlich zwei Hotstrings anlegen, und zwar in Abhängigkeit des Fenstertitels.
Was für ein Editor ist das denn? Hast du es schon mal geschafft, per Hotstring im WYSIWYM-Modus ein geschütztes Leerzeichen zu setzen?
Zur anderen Frage:
Wäre es nicht möglich, den Hotstring so zu konstruieren, dass das Abschlusszeichen per If abgefragt wird?
Also:
| Code: | ::--::
If A_EndChar = `n OR A_EndeChar = %A_Space%
{
Mach irgendwas
}
Else
{
irgend was anderes
} | *ungetestet*
____________________
Gruß
AGU |
|
| Nach oben |
|
 |
Andreas Borutta
Anmeldedatum: 13.02.2006 Beiträge: 43
|
Verfasst am: Mo Okt 30, 2006 9:11 am Titel: |
|
|
| Zitat: | | Unterscheidet sich der Fenstertitel in der Quelltext und der WYSIWYM Ansicht? | Nein.
Es handelt sich um ein Fenster mit zwei Bereichen:
http://borumat.de/bilder/ergonomie/html-quellcode-und-wysiwym-editor.png
| Zitat: | | Was für ein Editor ist das denn? |
Dreamweaver
| Zitat: | | Hast du es schon mal geschafft, per Hotstring im WYSIWYM-Modus ein geschütztes Leerzeichen zu setzen? |
Ja. Mit Variante 1:
oder mit Variante 2:
| Code: | | ::foo::bar^+{Space}zot |
Bei Variante 3 jedoch
| Code: | | ::foo::bar^+{Space} |
wird das Tastenkürzel nicht umgesetzt.
Allein oder mit "Gefolge" klappt es. Sehr merkwürdig.
Habt ihr eine Idee, worin die Ursache liegen kann?
| Zitat: | | Wäre es nicht möglich, den Hotstring so zu konstruieren, dass das Abschlusszeichen per If abgefragt wird? [...] |
Hört sich gut an.
Aber vielleicht lösen wir erst die grundlegende Aufgabe, bevor wir die zweite angehen. _________________ Gruß, Andreas
Tipps zu Autohotkey, Firefox, Thunderbird |
|
| Nach oben |
|
 |
AGU Gast
|
Verfasst am: Mo Okt 30, 2006 10:27 am Titel: |
|
|
Hallo Andreas,
| Zitat: | | Habt ihr eine Idee, worin die Ursache liegen kann? | Puh, das wird ja immer mysteriöser. Meine erste Idee wäre, das vielleicht Dreamweaver irgend wie dafür verantwortlich ist. Evtl. interpretiert er das Leerzeichen als zuviel eingegebenes Zeichen, wenn nicht direkt weitergeschrieben wird, und ignoriert es deswegen (abwegig, aber eben meine erste Idee)
Gerade fällt mir übrigens auf, das gar kein Send Befehl im Hotstring steht. Funktioniert das tatsächlich ohne Send Befehl?
| Code: | ::foo::
Send, ^+{Space}
Return |
Falls da Probleme auftreten, könnte man vielleicht mal mit den SendModes herumspielen, sprich SendInput, SendRaw, ...
Vielleicht lösen die das Problem.
Was sagt WindowSpy zu den Controls? Erkennt WindowSpy einen Unterschied zwischen dem oberen Control (Quellcode) und dem unteren (WYSIWYM)? Dann könnte man z.b. in Abhängigkeit des Controls zwei unterschiedliche Hotstrings definieren und das Problem vielleicht so umgehen. Ist aber nur ein *braindump*
____________________
Gruß
AGU |
|
| Nach oben |
|
 |
Andreas Borutta
Anmeldedatum: 13.02.2006 Beiträge: 43
|
Verfasst am: Mo Okt 30, 2006 10:59 am Titel: |
|
|
| Zitat: | | Meine erste Idee wäre, das vielleicht Dreamweaver irgend wie dafür verantwortlich ist. Evtl. interpretiert er das Leerzeichen als zuviel eingegebenes Zeichen, wenn nicht direkt weitergeschrieben wird, und ignoriert es deswegen (abwegig, aber eben meine erste Idee) |
Ich habe ja auch DW im Verdacht. Und in der Tat existiert ein Automatismus im WYSIWYM-Modus, dass die Eingabe mehrerer aufeinanderfolgender ungeschützter Leerzeichen zu einem einzigen zusammengefasst werden.
| Code: | | Gerade fällt mir übrigens auf, das gar kein [b]Send[/b] Befehl im Hotstring steht. Funktioniert das tatsächlich ohne [url=http://www.autohotkey.com/docs/commands/Send.htm][b]Send[/b][/url] Befehl? |
Ja.
Muss der Send-Befehl eigentlich drin stehen?
Aber auch in anderen Hotstrings verwende ich z.B. keinen Sendbefehl
Der Code aus dem vorangegangene Posting stammt direkt aus der AHK-Datei.
Hier nochmal der vollständige Inhalt der AHK-Datei:
| Code: |
#Hotstring K-1
#IfWinActive, Macromedia Dreamweaver 8 -
; Variante 1: geht
;::foo::^+{Space}bar
; Variante 2: geht
;::foo::^+{Space}
; Variante 3: geht nicht
::foo::^bar+{Space}
|
| Zitat: | Falls da Probleme auftreten, könnte man vielleicht mal mit den SendModes herumspielen, sprich SendInput, SendRaw, ...
Vielleicht lösen die das Problem. |
Wenn Du dazu Ideen hast, freue ich mich über Hinweise.
Am Rande:
Hotstrings, die auf eine Bedingung wie
| Code: | | #IfWinActive, Foo - |
folgen, gelten doch von da ab für jede nachfolgende Regel, richtig?
Wie beendet man den Modus mit dieser Bedingung korrekt wieder, damit weiter unten die Regeln wieder bedingungslos gelten?
| Zitat: | Was sagt WindowSpy zu den Controls? Erkennt WindowSpy einen Unterschied zwischen dem oberen Control (Quellcode) und dem unteren (WYSIWYM)? Dann könnte man z.b. in Abhängigkeit des Controls zwei unterschiedliche Hotstrings definieren und das Problem vielleicht so umgehen. Ist aber nur ein *braindump*  |
Ich möchte auf keinen Fall verschiedene Hotstrings für die Bereiche einsetzen müssen.
Ob vielleicht ein Workaround möglich wäre, wo man direkt nach dem Tastenkürzel für das geschützte Leerzeichen erst ein Dummyzeichen einfügt und es sogleich wieder löscht? _________________ Gruß, Andreas
Tipps zu Autohotkey, Firefox, Thunderbird
Zuletzt bearbeitet von Andreas Borutta am Mo Okt 30, 2006 1:36 pm, insgesamt einmal bearbeitet |
|
| Nach oben |
|
 |
AGU Gast
|
Verfasst am: Mo Okt 30, 2006 11:21 am Titel: |
|
|
| Zitat: | | Muss der Send-Befehl eigentlich drin stehen? | Mach doch mal einen Test mit dem Send Befehl. Also teste deine 3 Varianten durch, ob die mit dem Send Befehl funktionieren. Anschließend würde ich bei Nicht-funktionieren mal SendInput probieren.
| Zitat: | Hotstrings, die auf eine Bedingung wie | Code: | | #IfWinActive, Foo - | folgen, gelten doch von da ab für jede nachfolgende Regel, richtig? | Richtig.
| Zitat: | | Wie beendet man den Modus mit dieser Bedingung korrekt wieder, damit weiter unten die Regeln wieder bedingungslos gelten? |
Aus der engl. Doku:
| Zitat: | To turn off context sensitivity, specify any #IfWin directive but omit all of its parameters. For example:
#IfWinActive | Also ein #IfWinActive ohne Parameter.
| Zitat: | | Ich möchte auf keinen Fall verschiedene Hotstrings für die Bereiche einsetzen müssen. | Müsstest du ja nicht direkt. Das ist ja nur ein Hotstring. Ich meinte das ähnlich zu der Sache mit A_EndChar. Also ein Hotstring mit If Abfrage. | Code: | ::foo::
If VarMitControlNamen = Quellcode
Send, blablabla
Else If VarMitControlNamen = WYSIWYM
Send, anderes blablabla
Return |
Ist also ein Hotstring, der allerdings eine Fallunterscheidung macht, je nachdem welches Control gerade aktiv ist/ den Focus hat/ ... und dementsprechend eine andere Kombination sendet, um den eventuellen Bug zu umgehen.
| Zitat: | | Ob vielleicht ein Workaround möglich wäre, wo man direkt nach dem Tastenkürzel für das geschützte Leerzeichen erst ein Dummyzeichen einfügt und es sogleich wieder löscht? | Kannst du natürlich probieren. Dazu musst du einfach ein Backspace senden, schätze ich.
|
|
| Nach oben |
|
 |
Andreas Borutta
Anmeldedatum: 13.02.2006 Beiträge: 43
|
Verfasst am: Mo Okt 30, 2006 2:08 pm Titel: |
|
|
| Zitat: | | Also teste deine 3 Varianten durch, ob die mit dem Send Befehl funktionieren. |
Beide Varianten geben nur "bar" aus.
| Code: | ::foo::
Send, bar^+{Space}
Return |
| Code: | ::foo::
Send, ^+{Space}bar
Return |
Aber bei "SendInput" wird genau das Erwünschte ausgegeben!
Sowohl im Quelltextmodus, als auch im WYSIWYM-Modus.
Klasse! Herzlichen Dank!
| Code: | ::foo::
SendInput, bar^+{Space}
Return |
| Code: | ::foo::
SendInput, ^+{Space}bar
Return |
| Zitat: | | Also ein #IfWinActive ohne Parameter. |
Funktioniert.
| Zitat: | | [...] Ich meinte das ähnlich zu der Sache mit A_EndChar. Also ein Hotstring mit If Abfrage. [...] |
Alles klar.
Ist jetzt glücklicherweise nicht mehr nötig.  _________________ Gruß, Andreas
Tipps zu Autohotkey, Firefox, Thunderbird |
|
| Nach oben |
|
 |
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|