Nochmals ein Beitrag zum Thema "Ordneraktionen". Bezweckt wird, dem einen oder anderen Teilnehmer einen Denkanstoss zu geben.
Unter einer "Ordneraktion" verstehen viele Scripter nur, dass ein Ordner überwacht und ein Script ausgeführt wird, wenn Dateien hineinkopiert oder geschrieben werden. Es können aber noch andere Aktionen ausgeführt werden, z.B. wenn der Ordner geöffnet oder geschlossen oder verschoben wird. Und auch wenn Dateien aus dem Ordner entfernt werden.
Dieses Script an einen Ordner gehängt bewirkt, dass dieser immer wieder geöffnet wird, sobald man ihn schliesst:
---
on closing folder window for thisFolder
tell application "Finder" to open thisFolder
end closing folder window for
---
Wozu soll das gut sein? Unter Mac OS 9 muss ein Ordner geöffnet sein, damit die Ordneraktion ausgeführt wird. Und weil man mehr als ein Script an einen Ordner hängen kann (ist auch nicht sehr bekannt), kann man dadurch sicherstellen, dass der "Hotfolder" immer geöffnet bleibt.
Hier der Code für die anderen eingangs erwähnten Aktionen:
Damit wird ein Fenster immer geschlossen, sobald es geöffnet wird.
---
on opening folder thisFolder
tell application "Finder" to close thisFolder's window
end opening folder
---
Der nächste Handler plaziert ein Fenster immer an die alte Position, wenn es verschoben wird:
---
on moving folder window for thisFolder from oldBounds
tell application "Finder" to set bounds of thisFolder's window to oldBounds
end moving folder window for
quit application "Ordneraktionen"
delay 1
launch application "Ordneraktionen"
---
Die Zeile 'delay 1' legt eine Pause von einer Sekunde ein. Die nächste Zeile startet die Ordneraktionen wieder, sonst würde keine andere Ordneraktion mehr ausgeführt (ausser man startet die Maschine neu).
Damit diese Probleme vermieden werden, schlage ich vor, den Handler so abzuändern:
---
on moving folder window for thisFolder from oldBounds
set {xo1, yo1, xo2, yo2} to oldBounds as list
tell application "Finder" to set newBounds to bounds of thisFolder's window
set {xn1, yn1, xn2, yn2} to newBounds as list
if xn1 = xo1 and yn1 = yo1 then
-- keine Aktion
else
tell application "Finder" to set bounds of thisFolder's window to oldBounds
end if
end moving folder window for
---
Jetzt kann die Grösse des Fensters verändert werden, ohne dass die endlose Schleife ausgelöst wird. Dazu werden die vier Werte der alten und der neuen Position in Variablen geschrieben. Die je ersten zwei davon werden verglichen. Wenn sie gleich sind, dann geschieht nichts. Wenn sie anders sind, dann ist das Fenster verschoben worden, und der Finder stellt wieder die alte Position her.
Der nächste Handler ist schon in anderen Themen gebraucht worden (Dateien werden im überwachten Ordner erzeugt oder hineinkopiert):
---
on adding folder items to thisFolder after receiving itemList
-- Befehle, was mit den angefügten Dateien geschehen soll
end adding folder items to
---
Und zuletzt das Gegenteil (wenn Dateien aus dem überwachten Ordner entfernt werden):
---
on removing folder items from thisFolder after losing itemList
-- Befehle, welche etwas mit der Liste der entfernten Dateien anstellen
end removing folder items from
---
Dies sind die möglichen Voraussetzungen. Es braucht aber immer eine Aufgabe und dann muss man die Idee auch noch in Code umsetzen können...
Hans Haesler <hsa@ringier.ch>