Ergebnis 1 bis 6 von 6
  1. #1
    Riesenboiken
    Themenstarter

    Registriert
    06.2004
    Beiträge
    290

    Standardzeilen für jedes Droplet

    Hallo liebe Apfelskripter! Häufig möchte ich an Droplets noch irgendetwas ändern und habe mir nun gedacht, ich schlage gleich zwei Fliegen mit einer Klappe: Jedem Droplet stelle ich ein paar Zeilen voran, die mich bei einem Doppelklick auf dasselbe einerseits darauf hinweisen, dass es ein Droplet ist und andererseits (und das ist die wichtigere Funktion) das Droplet im Editor öffnen. Ich habe es folgendermaßen gelöst:

    Code:
    on run
        display dialog "Dies ist ein Droplet, bitte Ordner oder Dateien daraufziehen." & linefeed & linefeed buttons {"Edit", "OK, ich hab's verstanden"} default button 2 with icon 0
        
        if button returned of result = "Edit" then
            set myItem to (path to me)
            
            if application "Script Editor" is running then
                tell application "Script Editor"
                    activate
                    open myItem
                end tell
                
            else
                
                tell application "Script Editor"
                    activate
                    close window "Ohne Titel"
                    open myItem
                end tell
                
            end if
            
        end if
    end run
    
    on open
        -- hier steht drin, was das eigentliche Droplet machen soll
    end open
    Das ist alles nicht besonders spektakulär, vielleicht sogar viel zu kompliziert gedacht und gemacht, aber es funktioniert für meine Zwecke - und ich bin froh, als AS-Anfänger mal wieder eine selbstgestellte Aufgabe erfolgreich gelöst zu haben

    Falls aber jemand Verbesserungsvorschläge hat, würde ich mich freuen!

    P.S: Ich nutze Leopard 10.5.8 auf deutsch. Der "display dialog" hat oben links eine rote "closebox", die bei Betätigung das Script abstürzen lässt, darüber habe ich schon einiges gelesen. Folgende Lösungsansätze habe ich aus verschiedenen Gründen verworfen:
    - OS X Leopard in englischer Systemversion
    - "display alert" statt "display dialog"
    - "display dialog" via "Automator Runner"
    - Modifikation in "/System/Library/ScriptingAdditions/StandardAdditions.osax/Contents/Resources/German.lproj/DisplayDialog.nib/objects.xib"

    Habe ich irgendwelche Lösungsmöglichkeiten übersehen? Besteht das Problem auch in OS X Lion?

  2. #2
    Luxemburger Triumph Avatar von sedna
    Registriert
    10.2008
    Beiträge
    498
    Hallo!

    Wenn es für deine Zwecke funktioniert, dann ist es prima!
    Verbesserungsvorschläge hätte ich keine

    Lösungsmöglichkeiten hast du im Prinzip auch nicht übersehen. Im Gegenteil, gute Recherche!
    ...wobei...

    Ich gehe davon aus, dass du nicht im System herumwurschteln willst, was ich verstehen kann und hier auch niemals jemanden empfehlen würde... allerdings ist das sozusagen ein Sonderfall und du würdest nur einen Fehler korrigieren (der übrigens in Lion mittlerweile gefixt ist).
    Alle weiteren Ansätze wirst du eventuell aus ästhetischen Gründen verwerfen. Stehst du auf das Alert Stop Icon?
    Angenommen, dem ist so, dann könnte man was basteln. Bevor ich lange schreibe, hänge ich mal eine Variante an.

    Gruß




    Angehängte Dateien Angehängte Dateien

  3. #3
    Riesenboiken
    Themenstarter

    Registriert
    06.2004
    Beiträge
    290
    Hallo & Danke! Das ist mal wieder eine sehr willkommene Bereicherung

    Dass der "closebox-bug" in Lion behoben ist, freut mich. Von einer Modifikation in meinen 10.4.11 Tiger- und 10.5.8 Leopard-Systemen habe ich Abstand genommen, da ich so vergesslich bin, dass ich bei einem (eigenen oder fremden) dritten Mac oder einer Systemneuinstallation vermutlich nicht mehr an diesen Eingriff denken würde. Ganz zu schweigen davon, dass es doch recht kompliziert ist, beispielsweise ein Droplet zu Weihnachten zu verschenken und dem Empfänger zugleich mitteilen zu müssen, dass er erst mal mit Administratorrechten sein System bearbeiten muss.

    Das Icon "stop" finde ich nicht wirklich attraktiv, jedoch ist es bei den für den "display dialog" zur Verfügung stehenden Symbolen meine erste Wahl - aber in Deiner Lösung lässt sich ja mit durchaus überschaubarem Aufwand ein eigenes Icon einfügen. Allerdings erscheint beim "display alert" der Cursor als nichtdrehendes schwarzweisses kreisförmigen Zeichen, aus ästhetischen Gründen ist mir da wiederum der ganz normale pfeilförmige Mauszeiger aus dem "display dialog" lieber. Nicht dass ich etwas gegen den Münchener Automobilhersteller hätte, an dessen Logo mich das Symbol erinnert, aber mich irritiert, dass der Kreis sich nicht dreht - kommt vielleicht häufiger vor, ist mir jedoch noch nie aufgefallen.

    Alles in allem ergeben sich aber zwei Fragen:

    Unter Tiger kann ich Dein Droplet nicht verwenden, lässt sich das modifizieren oder ist das schlichtweg unmöglich? Habe recherchiert und probiert, bin aber zu keinem Ergebnis gekommen.

    Und unter Leopard (Skripteditor 2.2.1, Intel) lässt sich der Bundle-Inhalt nicht einblenden, was unter Tiger (Skripteditor 2.1.2, PowerPC) problemlos geht. Woran liegt das denn nun schon wieder, verflixt noch mal...

  4. #4
    Luxemburger Triumph Avatar von sedna
    Registriert
    10.2008
    Beiträge
    498
    Hmm, stimmt....
    Da gab es einige Veränderungen!
    Hier erst mal ein Link: Klick

    Und was die Erinnerung noch hergibt:
    In Leopard wurde zwischen Programm und Programm Bundle unterschieden. Ein Skript muss als Programm Bundle gespeichert sein, um auf den Bundle-Inhalt zugreifen zu können.
    Wie das in Tiger war, weiß ich nicht mehr
    Ansonsten auch noch mal hier schauen: Klick

    Gruß

  5. #5
    Galloway Pepping Avatar von fyysh
    Registriert
    01.2010
    Ort
    Rheinknie
    Alter
    33
    Beiträge
    1.348
    Warum einfach wenn's auch kompliziert geht?
    Ähm... *lol*.


    Hier (aus Spaß) ein Pimp:
    Code:
    on run
        set goDoStuff to runAction()
        if not goDoStuff is false then doStuff(goDoStuff)
    end run
    
    
    
    
    on open droppedItems
        doStuff(droppedItems)
    end open
    
    
    
    
    on doStuff(droppedItems)
        -- hier steht drin, was das eigentliche Droplet machen soll
        
        (*
        repeat with aItem in droppedItems
            -- jedes dropling enzeln verarbeiten
            log aItem
        end repeat
        *)
    end doStuff
    
    
    
    
    on runAction()
        set dialogButtonsMap to {chooseFile:"Ordner/Dateien auswählen", edit:"Edit", cancel:"OK, ich hab's verstanden"}
        -- muss man nem dialog als (items of dialogButtonsMap) übergeben. dialoge fressen keine maps, sondern listen
        
        repeat
            -- lieber display alert. das kann man mit esc loswerden, wenn man cancel button definiert, 
            -- mit enter kriegt man den default und mit space immer den dritten
            set alertButtonResult to button returned of ¬
                (display alert ¬
                    "Dies ist ein Droplet, bitte Ordner oder Dateien daraufziehen." & linefeed & linefeed ¬
                    buttons (items of dialogButtonsMap) ¬
                    default button 1 ¬
                    cancel button 3 ¬
                    as warning ¬
                    )
            
            
            if alertButtonResult = (edit of dialogButtonsMap) then
                set myItem to (path to me)
                editScript(myItem)
                return false -- damit doStuff nicht ausgeführt wird
                
                
            else if alertButtonResult = (chooseFile of dialogButtonsMap) then
                set selectedFilesOrFolders to selectFilesOrFolders()
                if not selectedFilesOrFolders is false then return selectedFilesOrFolders
                -- wenn choose from list in selectFilesOrFolders() abgebrochen wurde, ist selectedFilesOrFolders false
                -- das führt dazu, dass display alert wieder angezeigt wird wg. dem loop
                
                
            else if alertButtonResult = (cancel of dialogButtonsMap) then
                -- wird nie aufgerufen, weil bei klick auf "OK, ich… " die ausführung abgebrochen wird
                -- => ist cancel button von display alert
                -- mit display dialog bräuchte man es
                return false
                
            end if
        end repeat
        
    end runAction
    
    
    on selectFilesOrFolders()
        set cFLMap to {files_:"Dateien", folders_:"Ordner"}
        
        set cFLResult to ¬
            (choose from list (items of cFLMap) with prompt "was?")
        
        if cFLResult as string = files_ of cFLMap then
            set myResult to ¬
                (choose file with multiple selections allowed)
        else if cFLResult as string = folders_ of cFLMap then
            set myResult to ¬
                (choose folder with multiple selections allowed)
        else
            set myResult to false
        end if
        
        return myResult
    end selectFilesOrFolders
    
    
    on editScript(theScript)
        -- «application id "com.apple.ScriptEditor2"» statt «application "script editor"» macht es für 10.6+ portabel, 
        -- da der Script Editor in Applescript Editor umbenannt wurde
        if application id "com.apple.ScriptEditor2" is running then
            tell application id "com.apple.ScriptEditor2"
                activate
                open theScript
            end tell
        else
            
            tell application id "com.apple.ScriptEditor2"
                activate
                close window "Ohne Titel"
                open theScript
            end tell
        end if
    end editScript


    Jajaja muss man nicht so kompliziert machen. Die anfängliche Vorlage reicht völligst.
    The cause of the problem is:
    Don't worry; it's been deprecated.
    The new one is worse.

  6. #6
    Riesenboiken
    Themenstarter

    Registriert
    06.2004
    Beiträge
    290
    Auch nicht schlecht, Danke!
    (Warum nicht einfach mal ein bischen komplizierter )

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •