-2

Я работаю над AppleScript 1-2-3 (2009) и не могу запустить этот пример:

tell application "Finder" 
    close every window
    open home
    set toolbar visible of the front Finder window to true
    set the sidebar width of the front Finder window to 135
    set the current view of the front Finder window to column view
    set the bounds of the front Finder window to {36, 116, 511, 674}
    set folder "Documents" of home
    set toolbar visible of the front Finder window to false
    set the current view of the front Finder window to flow view
    set the bounds of front Finder window to {528, 116, 1016, 674}
    select the last finder window
end tell

Парсер дросселирует команду set folder , говоря мне: «Конец строки не может идти после этого свойства». Если я не облажался (вполне возможно), или книга просто не права, язык должен был измениться с 2009 года. Если так, то как?

Обновление: ответы и комментарии (стоит прочитать!) убедите меня, что книги просто не правы.

2 ответа2

1

Чтобы ответить на ваш конкретный вопрос о том, как AppleScript мог измениться с 2009 года, я не буду пытаться угадать множество способов, которыми он мог развиваться с тех пор (и я не мог найти языковую документацию с 2009 года или раньше), но я могу выделить текущая формулировка, поскольку это относится к вашему фрагменту кода. А именно, где ваш скрипт выдает ошибку, с синтаксической ошибкой в set folder "Documents" of home .

Способ определения команды set в (текущей версии) AppleScript:

[для] присвойте [ одно из] одно или несколько значений одной или нескольким переменным.

Он имеет следующий синтаксис:

установить переменнуюPattern в выражение

где variablePattern - это имя переменной или списка переменных, а expression оценивает значение (я), которое будет присвоено переменной (ам).

(Примечание. В Руководстве по языку AppleScript говорится, что вторая половина декларации, т.е. to %expression% , является необязательной. Однако я не могу представить себе экземпляр, для которого это верно, и, насколько мне известно, set всегда должен следовать полному синтаксису, как описано выше. Возможно, это один из способов, которым язык изменился ...?)

Итак, проще говоря, set всегда используется, чтобы взять значение одной вещи и присвоить его другой, как и все остальные строки вашего фрагмента кода.

В следующей строке:

    set folder "Documents" of home

у нас есть только половина объявления: команда начинается с предоставления объекта (в данном случае папки), который ищет новое значение, но затем не указывает, каким должно быть это новое значение.

Кроме того, объект folder обычно не является тем, которому можно присваивать значения самому. Никто не может командовать:

    set folder "Documents" of home to desktop

Однако можно назначить объект folder чему-либо еще, например, переменной или значению существующего свойства, например, свойству target Finder window:

    set the target of the front Finder window to folder "Documents" of home

Команда set инструктирует AppleScript использовать значение папки выражений folder "Document" of home (которая оценивает ссылку на местоположение на жестком диске) и назначать его свойству target в front Finder window (которое определяет, какой каталог показано в окне). Как и следовало ожидать, это приводит к переключению каталога активного окна Finder из домашнего каталога в каталог документов .

Это кажется маловероятным желаемым результатом, так как применение всех этих действий к одному окну Finder означает, что предыдущие строки несколько излишни: не было бы необходимости открывать домашнюю папку и устанавливать ее свойства (toolbar visible , sidebar width , current view и bounds), только затем изменить каталог и установить все эти свойства на новые значения.

Поэтому я думаю, что наиболее вероятное решение - это то, на что намекнул @ wch1zpink в своем ответе, а именно: открыть новое окно Finder в месте расположения папки « Документы ».

Я решил сделать это точно так же, как это делал скрипт с домашней папкой:

    open folder "Documents" of home

которая полностью заменяет проблемную линию. Таким образом, полученный скрипт имеет приятную симметрию в том, как создаются и управляются два окна:

    tell application "Finder"
        activate
        close every window

        open home
        set toolbar visible of the front Finder window to true
        set the sidebar width of the front Finder window to 135
        set the current view of the front Finder window to column view
        set the bounds of the front Finder window to {36, 116, 511, 674}

        open folder "Documents" of home
        set toolbar visible of the front Finder window to false
        set the current view of the front Finder window to flow view
        set the bounds of front Finder window to {528, 116, 1016, 674}

        select the last Finder window
    end tell

open команда, очевидно, открывает новое окно Finder в указанном месте, но и делает это новое окно Finder переднее окно Finder.

Отсюда легче увидеть, что первый блок операторов set предназначен для одного окна Finder ; и второй блок для другого.

Надеюсь, я обратился к вашему запросу напрямую и предоставил объяснение, которое имеет смысл. Простите, если что-то из того, что я написал, звучит покровительственно: я старался избегать предположений о том, что вы делаете и не знаете об AppleScript, несмотря на доказательства того, что вы явно не новичок (репутация 2.5K в Super User). С другой стороны, если что-то из того, что я написал, является двусмысленным или плохо объясненным, дайте мне знать, и я с удовольствием уточню или переформулирую в случае необходимости.

-1

Если ваше намерение с этой строкой кода ... set folder "Documents" of home - иметь текущее окно поиска, отображающее папку "Документы", то просто замените эту set folder "Documents" of home строк "Документы" дома этой ...

set theFolder to folder "Documents" of home
open theFolder

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .