osacompile изменяет вывод AppleScript, чтобы он не работал - PullRequest
1 голос
/ 12 января 2012

У меня есть полудлинный AppleScript, который я запускаю каждое утро, чтобы запускать все свои приложения и т. Д. Одна из вещей, которую он делает, - это запуск нескольких приложений и их немедленное сворачивание. Когда я вставляю источник .applescript в Script Editor и запускаю его, все работает нормально:

-- snip:
tell application "Mail"
    launch
    minimize(window 1) of me
    check for new mail
end tell
-- 'minimize' defined as:
on minimize(w)
    set the miniaturized of w to true
end minimize

Но когда я компилирую источник AppleScript следующим образом:

osacompile -o ~/Library/Scripts/myscript.scpt myscript.applescript

... компилятор minimize будет:

on minimize(w)
    set |miniaturized| of w to true
end minimize

И я получаю эту ошибку:

error «В письме получена ошибка: невозможно преобразовать | миниатюрный | идентификатор окна 30936 в ссылку на тип». номер -1700 от | миниатюрный | окна с идентификатором 30936 для ссылки

Кто-нибудь знает, что я здесь не так делаю? В целях контроля версий мне нужно запустить скрипты через osacompile.

ОБНОВЛЕНИЕ: Чтобы прояснить, кажется, что происходит то, что редактор сценариев компилирует метод иначе, чем osacompile в командной строке. Известно ли, что они компилируются по-разному ( например, , с использованием логических выводов области видимости или чего-то подобного)?

Ответы [ 2 ]

1 голос
/ 22 мая 2013

В вашем коде нет ничего плохого - Я подозреваю, что это ошибка в osacompile, и я предлагаю вам отправить отчет об ошибке в Apple - как я и сделал.

Чтобы убедиться, что ваш код работает правильно, используйте AppleScript Editor, чтобы сохранить его как файл *.scpt напрямую, а затем запустите его с osascript.[Обновлено] В отличие от этого, передача файла исходного кода *.applescript непосредственно в osascript действительно создает проблему.

Нет веской причины, по которой я могу думать, что компиляция на основе AppleScript Editor будет работать по-другомус osacompile (и компиляцией по требованию в osascript), и поведение первого в этом случае является ожидаемым и желаемым.

Есть 2 обходных путей :

  • Заключите ссылку на miniaturized в блоке using terms from application "System Events" : это общий обходной путь, который должен работать с окнами из любого приложения AppleScriptable.

    on minimize(w)
        using terms from application "System Events" # WORKAROUND
             set miniaturized of w to true
        end using terms from
    end minimize
    
  • Встроить команду миниатюризации вместо вызова подпрограммы :

    set miniaturized of window 1 to true
    
0 голосов
/ 13 января 2012
on minimize(w)
    set the miniaturized of w to true
end minimize

Это не правильно. Вы «миниатюризировали» за пределами любого блока кода приложения приложения, что означает, что это команда applecript. Это не команда appleScript, хотя. Это команда Mail и других приложений. Удивительно, что он работает правильно в редакторе AppleScript. Это действительно не должно. Если у вас есть команда, которая не имеет смысла, appleScript достаточно хорош, чтобы попытаться понять ее, и иногда она может преодолеть вашу ошибку кодирования. Очевидно, osacompile не может преодолеть вашу ошибку кодирования.

Таким образом, способ исправить проблему с osacompile - это устранить ошибку кодирования. Вы должны иметь миниатюризированную команду внутри блока кода приложения.

Чтобы понять, что я имею в виду, откройте словарь «Стандартные дополнения» и попытайтесь найти миниатюрную команду. Вы не найдете это. Теперь откройте «яблочный» словарь Mail, и вы его найдете. Таким образом, команда принадлежит Mail, а не applecript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...