Verhalten von AppleScript im Automator

M

MacNoob20

Aktives Mitglied
Thread Starter
Dabei seit
30.01.2020
Beiträge
171
Reaktionspunkte
10
Hi!

Ich habe einen Automator-Workflow erstellt und ihm unter Tastatur-->Kurzbefehle-->Dienste den Shortcut ^+CMD+G zugewiesen:

Bildschirmfoto 2020-01-30 um 13.36.53.png

Wenn ich irgendwo etwas kopiere, den Automator öffne und ausführen klicke, passiert, was ich erwarte:
Bildschirmfoto 2020-01-30 um 13.38.18.png

Wenn ich im TextEditor bin, kopiere und die Tastenkombi drücke, bekomme ich doppelten Output:
Bildschirmfoto 2020-01-30 um 13.39.11.png

Und wenn ich in Firefox bin, kopiere und die Tastenkombi drücke, passiert gar nichts.

Weiß jemand, wie sich dieses seltsame Verhalten erklärt? Danke!
 
on run {input, parameters} gibt eine liste zurück. Wundert mich, dass er bei display dialog nicht mekert und meint: kann nicht in string umgewandelt werden.
Normalerweise müsste man mit repeat with x in input aus der Liste einen string erstellen.
 
Hallo,

dein Dienst empfängt ausgewählten formatierten Text.
Dieser wird an die erste Aktion übergeben und dann mit dem Inhalt der Zwischenablage an die zweite Aktion.
Das Ergebnis ist also genau so, wie man es erwartet :)

Ist kein ->formatierter Text ausgewählt, kann der Dienst nicht gestartet werden und taucht dementsprechend auch nicht im Menü Dienste auf (z.B. Firefox->Dienste)
Statt formatierten Text nur Text wählen... und uns erklären, warum überhaupt Text übergeben werden soll...

Gruß
 
Danke für eure Antworten!

Das mit der Zwischenablage und dem Text habe ich glaube ich verstanden ;)

Was Atalantia bzgl. Listen geschrieben hat, ist mir leider noch nicht 100%ig klar, ich glaube aber, dass es ein anderes Problem erklären könnte: Ich möchte eigentlich in einem Browserfenster Daten aus einem Spreadsheet auslesen und an mein Mailprogramm übergeben, um den E-Mail-Versand zu beschleunigen:

  • Bildschirmfoto 2020-01-30 um 16.49.30.png

Allerdings irritiert mich hier, dass die dritte Variable nun alle paragraphs enthält --> Hängt das damit zusammen, dass es sich eigentlich um eine Liste handelt?
 
Hallo,

zu deiner Irritation:
• lies noch mal meine erste Antwort, starte deinen Arbeitsablauf und schaue dir die Ergebnisse aller Aktionen an... vor allem der abgefragten Variablen...

Zum Ablauf
• er kann nicht als Dienst ausgeführt werden, da "of front Workflow" nur greift, wenn der Ablauf im Automator geöffnet und ausgeführt wird.

Den Umweg über die Zwischenablage kannst du dir sparen. Das ist ja eines der Hauptmerkmale eines Dienstes, dass er verschiedenste Eingaben verarbeiten und übergeben kann!
So, wie ich es verstanden habe, wählst du einen Text mit drei Absätzen aus und möchtest diese an Thunderbird.app übergeben.

So könnte der Dienst aussehen:

- Arbeitsablauf empfängt Text in jedem Programm
- Aktion AppleScript ausführen
- Aktion Shell-Script ausführen (dein Shell-Script)

Code AppleScript
Code:
on run {input, parameters}
    set input to input as string
    set myList to {paragraph 1 of input, paragraph 2 of input, paragraph 3 of input}
    return myList
end run

Text im Browser auswählen, Dienst starten.
Nicht getestet, da kein Thunderbird!

Und ja, es ist ein wenig kompliziert:
Aktionen geben ihren "Output" als Liste weiter. input ist demnach eine Liste. Da lassen sich keine Absätze auslesen. Also input in einen String umwandeln und die Absätze dann in einer Liste speichern, um sie der nächsten Aktion zu übergeben.


Gruß
 
Nachtrag:

War jetzt nicht wirklich richtig von mir geschrieben:
Absätze lassen sich schon aus einer Liste auslesen...

Code:
on run {input, parameters}
    set myList to {paragraph 1 of item 1 of input, paragraph 2 of item 1 of input, paragraph 3 of item 1 of input}
    return myList
end run
 
Hi,

vielen Dank für deine Antwort! Das mit dem front workflow hatte ich tatsächlich nach langem Googeln in irgendeinem alten Post von dir gefunden. Danke!

Ich bin jetzt etwas weiter gekommen und komme inzwischen ohne Variablen im Workflow aus und mache alles über ein AppleScript.

Allerdings musste ich mich davon trennen, die Daten als Absätze zu erhalten und will jetzt die Zeile aus dem Spreadsheet verwenden. Dafür muss ich nun doch wieder den Copy-Befehl verwenden, da dieser die Daten scheinbar mit {tab} trennt, während ein Markieren der Zeile nicht ausreicht.

Nun habe ich allerdings schon wieder Probleme mit der Listenfunktion:

Bildschirmfoto 2020-02-03 um 16.01.28.png

Der Display-Dialog liefert noch vielversprechende Werte, aber return dataArray kennt im folgenden Schritt nur noch die erste Variable, also "1".

Ich habe auch mal deinen Code verwendet (siehe Auskommentierung), aber der wirft bei mit einen Fehler.
 
Hallo,

naja... jetzt hast du es ja anders gelöst... dann passt mein Code so nicht mehr...
Bzw. schon... und zwar am Ende nach dem display dialog

Code:
set AppleScript's text item delimiters to "" -- die setzt man besser immer zurück!
set myList to {paragraph 1 of item 1 of dataArray, paragraph 2 of item 1 of dataArray, paragraph 3 of item 1 of dataArray} --usw 
return myList

Gruß
 
Hi caruna,

vielen Dank!!!

Ich habe es jetzt so gelöst:
Code:
on run {input, parameters}
    
    set input to input as string
    
    set AppleScript's text item delimiters to {tab}
    
    set dataArray to text items of input
    
    set myList to {paragraph 1 of item 1 of dataArray, paragraph 2 of item 1 of dataArray, paragraph 3 of item 1 of dataArray, paragraph 4 of item 1 of dataArray, paragraph 5 of item 1 of dataArray, paragraph 6 of item 1 of dataArray, paragraph 7 of item 1 of dataArray, paragraph 8 of item 1 of dataArray, paragraph 9 of item 1 of dataArray, paragraph 10 of item 1 of dataArray, paragraph 11 of item 1 of dataArray, paragraph 12 of item 1 of dataArray, paragraph 13 of item 1 of dataArray, paragraph 14 of item 1 of dataArray, paragraph 15 of item 1 of dataArray, paragraph 16 of item 1 of dataArray, paragraph 17 of item 1 of dataArray, paragraph 18 of item 1 of dataArray, paragraph 19 of item 1 of dataArray, paragraph 20 of item 1 of dataArray, paragraph 21 of item 1 of dataArray, paragraph 22 of item 1 of dataArray, paragraph 23 of item 1 of dataArray, paragraph 24 of item 1 of dataArray, paragraph 25 of item 1 of dataArray, paragraph 26 of item 1 of dataArray, paragraph 27 of item 1 of dataArray, paragraph 28 of item 1 of dataArray, paragraph 29 of item 1 of dataArray, paragraph 30 of item 1 of dataArray, paragraph 31 of item 1 of dataArray, paragraph 32 of item 1 of dataArray, paragraph 33 of item 1 of dataArray, paragraph 34 of item 1 of dataArray}
    
    set vorname to item 1 of myList
    set nachname to item 2 of myList
    set anrede to item 3 of myList


... (Delimeter zurücksetzen)
 
Jetzt habe ich doch noch eine Frage:

Ich brauche ja Cmd+C, um die markierte Zeile mit Trennung durch Tabstopps zu bekommen. Wenn ich Input Text wähle, habe ich diesen Effekt leider nicht und kann die Zellen nicht unterscheiden.

Kann ich den Cmd+C irgendwie mit in den Automator packen, um mir den Shortcut zu sparen?

So brauche ich derzeit Shift+Spacebar, Cmd+C und meine Tastenkombi für den Workflow...
 
Zurück
Oben Unten