AppleScript, назначающий приложение переменной - PullRequest
1 голос
/ 16 февраля 2012

При наличии нескольких установленных InDesign ScriptEditor пытается определить, какая версия скрипта должна выполняться. Тем не менее, я пытаюсь высушить свой сценарий, чтобы мне приходилось менять имя приложения только один раз на протяжении всего сценария.

Есть похожий вопрос ( путь Applescript к приложению с использованием переменной ), но это не работает для всех. Вопрос в том, почему это не работает для всех?

Следующее работает как ожидалось:

tell application "Adobe InDesign CS5.5"
  log name --"Adobe InDesign CS5.5.app" 
  log full name --"Mactastic:Applications:Adobe InDesign CS5.5:Adobe InDesign CS5.5.app:"
end

Немного СУШКИ:

set v to "Adobe InDesign CS5.5"
set a to application v
log name of a --"Adobe InDesign CS5.5" 
log full name of a 
--SYNTAX ERROR: Expected end of line, etc. but found property
--"name" is highlighted in the ScriptEditor

Вот еще один пример, который работает как ожидалось:

set f to (choose file)
tell application "Adobe InDesign CS5.5"
  open f without showing window
end tell

Однако, это не скомпилируется, как раньше:

set f to (choose file)
set v to "Adobe InDesign CS5.5"
set a to application v
tell a
  open f without showing window
end
--SYNTAX ERROR: Expected “given”, “with”, “without”, other parameter name, etc. but found class name.
--"window" is highlighted in the ScriptEditor

Мое окружение:

  • OSX 10.6.8
  • ScriptEditor 2.3 (118)
  • Applescript 2.1.2

РЕДАКТИРОВАТЬ: Конечная игра в этом заключается в том, что я надеялся абстрагировать некоторые функции InDesign в свои собственные классы, например, так:

InDesign.scpt - класс, который абстрагирует функциональность InDesign

on new()
    copy me to self
    --do some initializing
    return self
end new

on _version()
    return "Adobe InDesign CS5.5"
end _version

on _application()
    return application _version()
end _application

on _open(path)
    tell _application() to open path without showing window 
end _open

my_script.scpt - использует абстрагированный выше InDesign.scpt

set InDesign to (load script file ("my:path:to:scripts:" & "Indesign.scpt"))'s new()
InDesign's _open("my:path:to:indd:file.indd")

Вероятность того, что вышеописанное на самом деле невозможно в AppleScript и ObjectiveC, - это то, где я должен искать подобные вещи. Однако, кажется, что некоторые вещи работают как «сказать _application () об открытии пути», а «сказать _application () об открытии пути без отображения окна» - нет.

1 Ответ

1 голос
/ 16 февраля 2012

Как насчет:

set theApplication to "Adobe InDesign CS5.5"

using terms from application "Adobe InDesign CS5.5"
    tell application theApplication
        --do your thing here
    end tell
end using terms from

Используемые термины from используются для того, чтобы позволить скрипту скомпилироваться, иначе ничего в вашем приложении Tell не скомпилирует блок приложения, специфичный для дизайна.Использование терминов довольно распространено, когда приложение (когда приложение является веб-службой или удаленным компьютером) не существует или недоступно во время компиляции.

...