Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

On idle Problem / Rätsel

 
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript X
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 04.02.2009 - 23:44    Titel: On idle Problem / Rätsel Antworten mit Zitat

Ich rätsel gerade ein wenig über eine eigentlich langbekannte Sache – es geht um on idle.

Bisher habe ich es, wenn gebraucht, im Grundgerüst

Code:
on run
   if button returned of (display dialog "Ausführen?" buttons {"Ja", "Nein"}) is "Nein" then
      quit
   else
      idle -- das ist übrigens unnötig und meist unerwünscht, wie ich bemerkt habe, idle wird so oder so aufgerufen (und mit dem hier stehenden dann sogar zweimal am Anfang)...
   end if
end run

on idle
   beep 2
   return 4
end idle


verwendet. Heute dann habe ich ein vor längerer Zeit begonnenes Miniprogramm, welches mir einen Ordner überwacht, zu Ende gestellt bzw. zu Ende stellen wollen.
Vor einigen Versionen (Tiger irgendwas) war ja in der idle-Geschichte ein Fehler hinzugekommen, seitdem ist man ja, wie beim leidigen date-Thema, ein wenig mißtrauisch.
Daher habe ich mich heute damit eingehender befassen müssen, bis ich überhaupt erstmals wußte, warum folgendes nicht funktioniert:

Code:
on run
   -- try
   set ordner to (choose folder with prompt "Ordner auswählen")
-- if button Abbrechen then
      tell me to quit
   
--end try
-- else
   tell application "Finder" to set dateien to (every item of ordner) as string
--end if
end run

on idle [...]


Also: Am Anfang (noch im Run-Teil) soll ein Ordner ausgewählt werden können. Wenn kein Ordner ausgewählt wird, soll sich das Programm beenden, also erst gar nicht in den idle-Status kommen. Das Problem ist, egal wie ich es versuche, es wird ein (im Scripteditor überprüfbar) Abbruch vom Benutzer ausgelöst, sobald der auf Abbrechen im Ordnerauswahldialog klickt.

Folglich springt das Programm danach direkt in den on idle-Handler, weil der quit-Teil nicht ausgeführt wird.

Also es funktioniert weder, die Variable ordner vorher auf "" zu setzen, um zu überprüfen, ob sie nicht angetastet wurde, noch ein try-handler, der ja einen Abbruch im on error abfangen könnte – er springt nicht an.

Hat da einer eine Idee zu? Danke.
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 05.02.2009 - 01:19    Titel: Antworten mit Zitat

wie wär's mit einem on quit-handler?
_________________
- anholn deit kriegen -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 05.02.2009 - 02:30    Titel: Antworten mit Zitat

Hi iScript,

Einen Quit-Handler baut man dann ja am Besten ein, wenn man ein evtl. Apfel+Q abfangen möchte. In dem Fall bringt das leider nichts, weil ja die Anweisung, zu quitten, erst gar nicht aufgerufen wird.

Also wenn der Nutzer im choose-Dialog auf Abbrechen geht, ist das wie ein Abbruch für den Run-Handler und das Programm geht sofort in den idle-Status.

Das ist das Problem – wie fange ich den Abbruch ab (und kann so womöglich das Programm ohne den idle-Teil beenden).


So, nun nach ein wenig Nachdenken fiele mir da eine Möglichkeit ein: Man kann einen Startwert auf false setzen, der erst auf true gesetzt wird, wenn das Programm laufen soll. Im idle-Teil würde man dann bei einem false (was also nur dann und einmalig vorkommen kann) sofort beenden.

Aber das ist auch ein wenig Frickelei. Es muß doch möglich sein, den Abbruch eines choose-Dialogs abfangen zu können...?!
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ShooTerKo
•--->
•--->


Anmeldedatum: 21.03.2006
Beiträge: 221
Wohnort: Hamburg

BeitragVerfasst am: 05.02.2009 - 09:49    Titel: Antworten mit Zitat

Hi,
soeben getestet (10.4.11)

Code:
on run
   try
      set ordner to (choose folder with prompt "Ordner auswählen")
   on error number errnum
      if errnum = -128 then
         display dialog "Abgebrochen!"
         tell me to quit
      end if
   end try
end run

on idle
   beep
   return 2
end idle


CU
ShooTerKo
_________________
"It is a mistake to think you can solve any major problems just with potatoes." - Douglas Adams
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 05.02.2009 - 17:31    Titel: RÄTSEL GELÖST Antworten mit Zitat

Hallo ShooTerKo,

Deine Lösung funktionierte sofort, obwohl sie sich prinzipiell nicht von meiner try-Error-Methode unterschied. Also habe ich ein wenig probiert.

Nun weiß ich endlich, wie genau das funktioniert: Ein tell me to quit veranlaßt das Programm, sich zu Beenden – und zwar nach Beendigung des aktuellen Handlers.

Daher werden Anweisungen, die unter dem try-error-Block oder sogar innerhalb des error-Teils stehen, noch ausgeführt (überorüfbar mit einem Dialog, der nach dem quit kommt).

Bei mir war der Fehler, das ich eine Fehlermeldung bekam nach dem quit, diese dann mit Ok bestätigte, was ebenfalls dazu führte, das der nächste Handler (in dem Fall idle) aufgerufen wurde – und ich immer nur rätselte, warum scheinbar quit ignoriert wurde.


Ein force quit oder so ist wahrscheinlich nur über die Holzhammermethode (Abschießen des Prozesses via Shell) möglich, ist aber nicht ratsam, da dann beispielsweise propertys nicht gespeichert werden.

Also muß man logisch schauen, das ein quit-Befehl nicht isoliert ausgeführt wird.
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript X Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1

 
Gehe zu:  
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


AppleScript für absolute Starter