Могу ли я узнать, есть ли у объекта AppleScript определенное свойство? - PullRequest
4 голосов
/ 04 августа 2011

Я пытаюсь написать скрипт BBEdit, чтобы я чувствовал себя как дома, приходя из TextMate. Единственное, что мне нужно сделать, это посмотреть, имеет ли объект, на который я ссылаюсь, определенное свойство.

Например:

tell application "BBEdit"
    tell front window
        get selected items
    end tell
end tell

Это будет успешно в окне проекта, но не в окне браузера диска, потому что последний не имеет свойства 'selected items'. Как узнать, есть ли такое свойство в объекте?

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

Ответы [ 4 ]

1 голос
/ 21 октября 2011

А как насчет класса?

tell application "BBEdit"
  if class of window 1 is disk browser window then
    # ...
  else
    # ...
  end if
end tell
1 голос
/ 04 августа 2011

У меня нет bbedit, поэтому я не могу проверить, но если существуют разные типы окон, и каждый тип окна имеет разные свойства, то не могли бы вы сначала проверить тип окна?Тогда вы будете знать, какие свойства вы можете получить.Должно быть какое-то базовое свойство окна, которое сообщает вам его тип или вид или что-то еще, что поможет вам принять решение.

0 голосов
/ 05 августа 2011

Существует разница между documents и windows в BBEdit.Windows является элементом documents, но только у windows есть свойство selection, так что вы можете сначала проверить тип окна и полностью избежать перехвата ошибок (и, как результат, получить более чистый код).

Кроме того, попробуйте использовать свойство selection, которое является жестким свойством в BBEdit, а не "выбранными элементами", поскольку selection всегда будет возвращать пригодный для использования объект, даже если только insertion point.

0 голосов
/ 04 августа 2011

Единственное решение, которое у меня есть, - это обернуть его в обработчик ошибок:

try
    set sel to selected items
on error errMsg number errNum
    if errNum is -1700 then
        -- Code that handles no selected items attribute
        return
    end
    error errMsg number errNum
end try
-- Code that handles when selected items attribute exists
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...