С несколькими установленными InDesign ScriptEditor пытается быть умным в отношении версии, которую должен выполнить сценарий. Тем не менее, я ищу DRY мой сценарий, так что мне нужно только изменить имя приложения один раз в моем скрипте.AppleScript, назначая приложение переменной
Существует аналогичный вопрос (Applescript path to application using variable), но это не работает для всего. Вопрос в том, почему это не работает для всего?
следующие работы, как и ожидалось:
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
EDIT: Конец игры в том, что я был надеясь отвлечь часть функциональности InDesign до моих собственных классов, например:
InDesign.scpt - a класс, который абстрагирует функциональность 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(), чтобы открыть путь, не показывая окно».
Это, по-видимому, является компиляционной проблемой для ссылок на объекты за пределами блока tell. Как ни странно, если свойство или команда более одного слова, оно не скомпилируется. Если свойство/команда является одним словом, компиляция и, следовательно, выполнение выполняется успешно. – spyle
Использование 'run script' ([см. Этот пост] (http://www.mactipper.com/2008/10/run-applescript-in-applescript.html)) можно использовать, но код выглядит ужасно, и тогда трудно отлаживать. – spyle