2010-02-15 2 views
1

Я начинаю соваться с Applescript, и я смотрю на создание нескольких сценариев для управления окнами. Общая задача, которая им понадобится, - получить текущий размер экрана.Могу ли я поместить общий код приложения в отдельный файл и загрузить его в различные скрипты?

Я создал подпрограмму screen_size, которая, кажется, работает, и я хочу иметь возможность поделиться ею со всеми моими сценариями. Однако я не могу понять, как это можно сделать в отдельном файле, который я могу загрузить в других моих сценариях. Я попытался создать отдельный файл screen_size.scpt и использовать load script "screen_size.scpt", но я получаю сообщение об ошибке «can not make» screen_size.scpt «в файл типа».

Должен быть способ сделать это, но я не смог найти что-либо в Интернете о том, как это сделать.

EDIT:

POSIX материал предложил не работает для меня. Я могу создать объект файла, но он отказывается конвертировать в псевдоним, заявив, что не может найти файл (похоже, что файл POSIX остается относительным, а не полностью расширяется).

я нашел предложение в Интернете, чтобы использовать Finder, и получил следующий работаю, чтобы получить псевдоним:

tell application "Finder" 
    set _myPath to container of (path to me) as text 
end tell 

set _loadPath to (_myPath & "screen_size.scpt") 
set _loadAlias to alias _loadPath 

Однако следующая строка завершается с ошибкой синтаксиса, утверждая, что _loadAlias ​​не является переменной :

property _ScreenSize : load script _loadAlias 

Каждый вариации этого я пытался (делать псевдоним в вызове нагрузки и т.д.) терпит неудачу, всегда требуя переменной не существует, хотя я знаю, что это время устанавливается и работает, как я могу отобразите его. Что происходит? Почему он утверждает, что переменная не существует, когда она, очевидно, делает?

ответ

2

AppleScript делает некоторые действительно странные вещи при сохранении, и я не понял, что происходит, но в итоге я получил работу.

Вот что у меня есть:

on load_script(_scriptName) 
    tell application "Finder" 
    set _myPath to container of (path to me) as text 
    end tell 

    set _loadPath to (_myPath & _scriptName) 
    load script (alias _loadPath) 
end load_script 

set _ScreenSize to load_script("screen_size.scpt") 

set _bounds to _ScreenSize's screen_size() 
-- ... 

Другие ответы говорили установить _ScreenSize как свойство, но это вызовет синтаксическую ошибку, которая мешает мне когда-либо сохранить файл. Когда я это сделал, просто сработал set.

Я никогда не мог получить материал POSIX, который предложил работать, но выталкивание Finder для пути работало нормально.

1

Да, есть способ сделать это. Загрузите файл в собственность и доступ к нему таким образом

property _ScreenSize : load script (alias "pathtoscript") 

_ScreenSize's doStuff() 

и относительными путями попробовать это:

set p to "./screen_size.scpt" 
set a to POSIX file p 

поэтому, возможно, это будет работать:

set p to "./screen_size.scpt" 
set a to POSIX file p 

property _ScreenSize : load script (alias a) 

_ScreenSize's doStuff() 
+0

может быть «pathtoscript» быть относительным (так, просто имя скрипта, так как оно находится в том же каталоге)? – Herms

+0

Я попробовал это, используя только имя файла и получив синтаксическую ошибку: 'File alias screen_size.scpt из <

1

У меня есть люди, которые ежедневно используют мои библиотеки, поэтому я сначала гарантирую, что библиотека здесь, прежде чем звонить , Предположим, у меня есть библиотека «Lib.Excel.app» (сохранить как неприменимое приложение с Smile Smile). В начале сценария, который использует его, я «нагрузка» библиотека, используя этот код:

set commonCodeFile to (path to library folder as string) & "Scripts:CommonLibraries:Lib.Excel.app" 

tell application "Finder" 
    if not (exists (file commonCodeFile)) then error ("\"Lib.Excel\" 
" & " 
should be found in folder 
" & " 
scroll > CommonLibraries") 
end tell 

global cc -- make it short and easy to write :) 
set cc to load script alias ccFile 

Тогда, когда я должен использовать функцию из Lib, я просто называю это так:

set {what, a} to cc's veryNiceFunction() 
0

Вы можете загрузить сценарий в переменной, но сначала вы должны объявить его.

property _ScreenSize : missing value 

tell application "Finder" to set _myPath to container of (path to me) as text 

set _loadPath to (_myPath & "screen_size.scpt") 

set _loadAlias to alias _loadPath 

set _ScreenSize to (load script _loadAlias) 
Смежные вопросы