Forenindex » Programmierung/Entwicklung » AppleScript » Weitere Informationen über Ordneraktionen

Weitere Informationen über Ordneraktionen

Hans Haesler
  
Beiträge gesamt: 5826

1. Sep 2003, 14:30
Bewertung:

gelesen: 791

Beitrag als Lesezeichen
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
Code
[b]Achtung: das Fenster nur verschieben! Wenn die Grösse des Fensters geändert wird, dann gerät die Sache in eine endlose Schleife. Diese kann abgebrochen werden, indem man das folgende Script ausführt: 

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>