AppleScript и Finder — как обнаружить «пустое» выделение при копировании путей в буфер обмена (расширенный вопрос)

Я пытаюсь создать службу, которая делает следующее:

  • Если в Finder выбраны какие-либо папки/файлы, скопируйте (все) пути в буфер обмена
  • Если ничего не выбрано, скопируйте «Путь» окна.

Копаясь и черпая вдохновение из таких сообщений, как « Копирование пути к текущему каталогу в буфер обмена» и «Копировать путь к файлу или папке MacYourself в буфер обмена в Mac OS X Lion», я дошел до того, что могу получить пути к выбору, но Кажется, я застрял, пытаясь получить путь к текущему окну, если выбор пуст.

ОБНОВЛЕНИЕ 13 декабря 2013 г. У меня есть несколько полезных отзывов (см. https://apple.stackexchange.com/a/113612/7488 ; спасибо @Flavin), поэтому я обновил код до приведенного ниже:

    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

Логика кажется твердой, и она работает, пока у меня есть «что-то», выбранное в Finder.

Я подозреваю, что служба может быть не «активной», когда ничего не выбрано (то есть, когда желаемым результатом будет копирование текущего пути в буфер обмена).

В этой ситуации окно Finder выглядит следующим образом:

Искатель Ничего не выбрано

Но при попытке активировать службу отображается «пустой» список служб:

Finder Услуги не применяются

Когда я что-то выбрал, список служб заполняется:

Службы доступны, когда выбран какой-либо файл

«Копировать путь к файлу», который я определил, связан с «Файлами и папками» в настройках служб — в чем может быть проблема?

Ответы (2)

Я думаю =, это то, что вы ищете.

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

Или снимите notи переверните чехлы

set sel to (get selection)
if sel = {} then
    --no stuff is selected
else
    --stuff is selected
end if
Спасибо за подтверждение; логика кажется твердой, но поведение все еще не то, что мне нужно. Я буду обновлять вопрос с некоторой информацией, которая может иметь отношение

Теперь это работает. Ключ в том, как определяется служба «Автоматизатор».

При первоначальной настройке служба Automator была определена как «Файлы или папки» в «Finder»:

Сервис для ввода файлов и папок в Finder

Итак, в настройках служба связана с файлами и папками:

Настройки-Файлы-Папки

И в результате сервис не "активен" при отсутствии выбора (получаем то же изображение, что и в вопросе):

Finder Услуги не применяются

Изменение определения услуги на «Без ввода»:

Сервис без ввода

Означает, что Сервис доступен , когда в Finder нет выбора:

Служба, связанная с Finder и без ввода

Проверка в настройках служб, теперь служба связана с категорией «Общие»:

Служба в общей категории

И поведение ожидаемое.