Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
woodpecker •--->

Anmeldedatum: 12.10.2010 Beiträge: 150 Wohnort: Roggentin/Rostock
|
Verfasst am: 29.10.2010 - 08:12 Titel: Ein kleines Hilfstool für die Skript-Entwicklung |
|
|
Hallo allerseits,
die AppleScript-Sprache ist ja ziemlich geschwätzig. Man muss immer viel schreiben, um wenig zu machen. Für den Anfänger ist es auch immer schwierig, die ganze Klassenhierarchie zu überblicken. Deshalb habe ich mir ein kleines Hilfstool für die Programmentwicklung geschrieben, das es erlaubt, Codezeilen menügeteuert auszuwählen und in das Editor-Fenster einzufügen.
Das funktioniert so ähnlich, wie der Ctrl-Klick im Editorfenster, wo auch ein Menü aufgeht, mit dem man Codezeilen einfügen kann. Um diese Auswahlmöglichkeiten zu erweitern, muss man aber jedesmal ein neues Skript schreiben. Meine Variante funktioniert so, dass eine programminterne Liste existiert, die man beliebig abändern und erweitern kann. In den Statements sind bestimmte Token enthalten, die während der Ausführung durch Werte ersetzt werden. Die Anzahl dieser Token kann auch beliebig erweitert werden. So wie es jetzt implementiert ist, gibt es 4 Token:
+SEL+ wird ersetzt durch den im Editorfenster ausgewählten text
+DAT+ wird durch das aktuelle Datum ersetzt
+USR+ wird durch den Namen des angemeldeten Benutzer ersetzt
+SCP+ wird ersetzt durch den Namen des Dokuments und die Sprache
Ich habe das Skript in den Skript-Ordner des Benutzers (also: Library/Scripts/Applications/Skripteditor ) gesichert, so dass es immer angezeigt wird, wenn das Skriptmenü aufgeht und der Skripteditor aktiv ist. Das Skriptmenü muss in der Menüleiste angezeigt werden (Einstellung im AppleSkript Dienstprogramm).
Das ist der Code
-- Script : CodeMenu (AppleScript) Stand vom : Donnerstag, 28. Oktober 2010 21:47:20 Uhr
-- Autor : Erich Schmidt
set WinId to id of window index 1 of application "Script Editor"
if WinId is -1 then
display dialog "Kein Editor-Fenster geöffnet" buttons {"OK"} default button 1
return ""
end if
set Statements to {"set +SEL+ to load script file ((path to \"docs\" as string)&\"AppleScript:+SEL+.scpt\" )", ¬
"-- Script : +SCP+ " & tab & tab & "Stand vom : +DAT+" & return & "-- Autor : +USR+ ", ¬
"set wp to properties of my windows ", ¬
"set Win to window index 1 of application \"+SEL+\" ", ¬
"set Dok to document of Win ", ¬
"set Txt to text of Dok ", ¬
"set FileName to choose file", ¬
"set fp to open for access FileName -- with write permissions", ¬
"set +SEL+ to read fp", ¬
"set +SEL+ to {\"Index 1\",\"Index 2\",\"Index 3\",\"Index 4\",\"Index 5\"} ", ¬
"tell app \"+SEL+\" " & return & "end", ¬
"set wp to properties of its windows"}
set choice to choose from list Statements with prompt "Eine Zeile auswählen" with title "Codeauswahl"
if class of choice is boolean then return ""
set choice to choice as text
tell application "Script Editor"
set Win to window id WinId
set Doc to document of Win
set chc to contents of selection of Doc
set chr to character range of selection of Doc
tell application "System Events"
set usr to full name of user of it as text
end tell
set choice to my Substitute(choice, "+DAT+", (current date) as string)
set choice to my Substitute(choice, "+SCP+", name of Doc & tab & "(" & name of language of Doc & ")")
set choice to my Substitute(choice, "+USR+", usr)
if item 1 of chr is not item 2 of chr then
set choice to my Substitute(choice, "+SEL+", chc)
end if
activate Win
tell application "System Events" to keystroke choice & return
end tell
-- rekursive Zeichenkettensubstitution
on Substitute(Txt, old, new)
set ix to my idx(Txt, old)
-- Rekursion beenden
if ix is 0 then return Txt
if ix is 1 then
set prefix to ""
else
set prefix to my substr(Txt, 1, ix - 1)
end if
set Nold to number of old
-- Das rekursive Substitute wird immer nur auf den Reststring ausgeführt, fuer den
-- Fall, dass old in new enthalten ist. Sonst baut sich die Rekursion nicht ab.
return prefix & new & my Substitute(my substr(Txt, ix + Nold, number of Txt), old, new)
end Substitute
-- gibt den Index eines Token innerhalb des Strings Txt zurueck
-- null bedeutet: nicht enthalten
on idx(Txt, Token)
if Txt does not contain Token then return 0
set Ntok to number of Token
set Ntxt to number of Txt
repeat with ci from 1 to Ntxt - Ntok + 1
set x to characters ci thru (ci + Ntok - 1) of Txt as string
if x is Token then return ci
end repeat
end idx
-- Rueckgabe eines Teilstrings
on substr(Txt, spos, len)
set Ntxt to number of Txt
if spos is 0 or spos is greater than Ntxt then return ""
set lastc to spos + len - 1
if lastc is greater than Ntxt then set lastc to Ntxt
set subs to characters spos thru lastc of Txt as string
return subs
end substr
In die Statementliste habe ich mal beispielhaft einige Statements eingetragen. Die kann man aber je nach dem was man gerade macht, immer wieder erweitern oder ändern.
Vielleicht kann es ausser mir noch jemand gebrauchen. |
|
Nach oben |
|
 |
werkwelt •--->

Anmeldedatum: 28.02.2005 Beiträge: 156 Wohnort: Bad Ems
|
Verfasst am: 07.02.2013 - 21:57 Titel: |
|
|
… keine Antwort auf solch wertvollen Beitrag?
Habe gerade gelernt, daß der Mauszeiger im Skripteditor-Fenster ein Kontextmenü mit vielen Scriptbeispielzeilen vorhält. Als ich den gebraucht hätte, lief schon meine FileMaker-Datenbank mit Skriptbeispielzeilen.
Ich freue mich über jeden, der nachhaltig Abläufe untereinander verbindet. Und das geht nun mal mit AppleScript sehr schön … _________________ Mit freundlichen Grüßen,
Norbert Lindenthal |
|
Nach oben |
|
 |
woodpecker •--->

Anmeldedatum: 12.10.2010 Beiträge: 150 Wohnort: Roggentin/Rostock
|
Verfasst am: 08.02.2013 - 10:32 Titel: |
|
|
Hallo Norbert,
bei mir war es eben umgekehrt. Ich bin zuerst in AppleScript eingetaucht, bevor ich mir FileMaker zu Gemüte geführt habe.
Gruß Erich |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2002 phpBB Group Deutsche Übersetzung von phpBB.de
|
|
|