2011-08-04 61 views
3

我试图编写BBEdit脚本,让我感受更多来自TextMate的家庭感受。我需要做的一件事就是看看我有一个引用的对象是否有一个特定的属性。我可以知道AppleScript对象是否具有某个属性?

例如:

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

这将项目窗口上取得成功,而不是磁盘的浏览器窗口,因为后者不具有“选定项目”属性。如何查看对象中是否存在这样的属性?

请注意:我知道如何检查脚本编辑器(获取属性)中的对象来查看它具有哪些属性,但我需要在运行时知道它们是什么。

+0

请注意:我不是在选择之后:这很容易,因为每个文档都有这个属性。这是'selected items',只有_window_类型的一个子集。 –

回答

1

这个班怎么样?

tell application "BBEdit" 
    if class of window 1 is disk browser window then 
    # ... 
    else 
    # ... 
    end if 
end tell 
+0

嘿,这看起来不错。 –

0

我到目前为止唯一的解决办法是将其包装在一个错误处理程序:

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 
1

我没有BBEdit的,所以我不能检查,但如果存在不同类型的窗口,每个窗口类型有不同的属性,那么你不能只是先检查窗口类型?然后你会知道你可以得到什么类型的属性。必须有一些窗口的基本属性,告诉你它的类型或种类,或者任何能够帮助你作出决定的东西。

+0

因为每种窗口都是从'window'继承的,所以我可以获取最前面的'window',但不知道窗口的种类。我看不到一个属性告诉你那种。我想我来自python-esque的duck-typing方法:我不在乎它是什么类型的窗口:我关心它是否具有“selected items”属性。 –

+0

另外,支持最后一条评论:我不想知道每个具有'selected items'属性的窗口类型:我想知道最前面的窗口是否有它。如果BBEdit添加更多具有此属性的窗口类型,则必须在具有此类窗口的类型中进行硬编码意味着更多的工作。 –

0

BBEdit中的documentswindows之间有区别。 Windowsdocuments的一个元素,但只有windows具有selection属性,因此您可以先检查窗口的类型并避免完全捕获错误(并因此导致更干净的代码)。

此外,尝试使用selection属性,它是相对于“选择项”,因为selection总是会返回一个可用的对象BBEdit的硬特性,即使只有一个insertion point

+0

它不是我选择后的属性:它是'selected items'。这只会出现在窗口种类的某个子集上(例如项目窗口)。 –

相关问题