AppleScript und Finder - So erkennen Sie eine "leere" Auswahl beim Kopieren von Pfaden in die Zwischenablage (Erweiterte Frage)

Ich versuche, einen Dienst zu erstellen, der Folgendes tut:

  • Wenn einige Ordner/Dateien im Finder ausgewählt sind, kopieren Sie (alle) Pfade in die Zwischenablage
  • Wenn nichts ausgewählt ist, kopieren Sie den "Pfad" des Fensters.

Wenn ich herumgrabe und mich von Beiträgen wie Copying the current directory's path to the clipboard und MacYourself's Copy file or folder path to the clipboard in Mac OS X Lion umwühle und mich inspirieren lasse , bin ich an dem Punkt angelangt, an dem ich die Pfade der Auswahl abrufen kann, aber Ich scheine festzustecken, wenn ich versuche, den Pfad des aktuellen Fensters zu erhalten, wenn die Auswahl leer ist.

UPDATE 13. Dezember 2013. Ich habe einige nützliche Rückmeldungen erhalten (siehe https://apple.stackexchange.com/a/113612/7488 ; danke @Flavin), also habe ich den Code auf den folgenden aktualisiert:

    on run {input, parameters}

        set l to {}
        tell application "Finder"
            set sel to (get selection)
            if not sel = {} then -- there are some file/folders selected

                repeat with f in (get selection)
                    set end of l to POSIX path of (f as alias)
                end repeat

            else --no stuff is selected, get the current location path

                set end of l to POSIX path of (insertion location as alias)

            end if
        end tell
        set text item delimiters to linefeed
        set the clipboard to (l as text)

    end run

Die Logik scheint solide zu sein und funktioniert, solange ich im Finder "etwas" ausgewählt habe.

Ich vermute, dass der Dienst möglicherweise nicht "aktiv" ist, wenn nichts ausgewählt ist (dh wenn das gewünschte Ergebnis darin besteht, den aktuellen Pfad in die Zwischenablage zu kopieren).

In dieser Situation erscheint das Finder-Fenster folgendermaßen:

Finder Ohne Auswahl

Beim Versuch, den Dienst zu aktivieren, wird jedoch eine "leere" Dienstliste angezeigt:

Finder Es gelten keine Dienste

Wenn ich etwas ausgewählt habe, wird die Liste der Dienste ausgefüllt:

Dienste Verfügbar, wenn eine Datei ausgewählt ist

Der von mir definierte "Dateipfad kopieren" ist mit "Dateien und Ordnern" in den Diensteinstellungen verknüpft - was könnte das Problem sein?

Antworten (2)

Ich denke, =das ist, wonach du suchst.

set sel to (get selection)
if not sel = {} then
    --stuff is selected
else
    --no stuff is selected
end if

Oder entfernen Sie die notund drehen Sie die Hüllen um

set sel to (get selection)
if sel = {} then
    --no stuff is selected
else
    --stuff is selected
end if
Danke für die Bestätigung; Die Logik scheint solide, aber das Verhalten ist immer noch nicht das, was ich brauche. Ich werde die Frage mit einigen Informationen aktualisieren, die relevant sein könnten

Es funktioniert jetzt. Der Schlüssel liegt darin, wie der "Automator"-Dienst definiert wird.

Bei der Erstkonfiguration wurde der Automator-Dienst im „Finder“ als „Dateien oder Ordner“ definiert:

Dienst für Eingabedateien und Ordner im Finder

In den Einstellungen ist der Dienst also mit Dateien und Ordnern verknüpft:

Einstellungen-Datei-Ordner

Und das Ergebnis ist, dass der Dienst nicht "aktiv" ist, wenn keine Auswahl vorhanden ist (wir erhalten dasselbe Bild wie in der Frage):

Finder Es gelten keine Dienste

Änderung der Definition des Dienstes auf „No Input“:

Dienst ohne Eingabe

Bedeutet, dass der Dienst verfügbar ist , wenn es keine Auswahl im Finder gibt:

Mit Finder verbundener Dienst und keine Eingabe

Wenn Sie die Diensteinstellungen überprüfen, ist der Dienst jetzt der Kategorie "Allgemein" zugeordnet:

Service in der allgemeinen Kategorie

Und das Verhalten ist wie erwartet.