2011-08-04 4 views
3

나는 TextMate에서 집에 온 것처럼 느끼게하기 위해 BBEdit을 스크립팅하려고합니다. 내가 할 수 있어야 할 한가지는 참조가있는 객체에 특정 속성이 있는지 확인하는 것입니다. 예를 들어AppleScript 개체에 특정 속성이 있는지 확인할 수 있습니까?

:

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

후자는 '선택 항목'속성이 없기 때문에이 있지만 디스크 브라우저 창에서 프로젝트 창에 성공합니다. 객체에 그러한 속성이 있는지 어떻게 알 수 있습니까?

참고 사항 : 스크립트 편집기 (속성 가져 오기)에서 개체의 속성을 확인하는 방법을 알고 있지만 런타임에 그 속성을 알고 있어야합니다.

+0

참고 사항 : 나는 선택을하지 않았습니다. 모든 문서에 해당 속성이 있으므로 쉽습니다. 이것은 _window_ 유형의 서브 세트에만있는'selected items'입니다. –

답변

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 접근법에서 왔다고 생각한다 : 나는 그것이 어떤 유형의 윈도우인지 신경 쓰지 않는다 : 나는 그것이'selected items' 속성을 가지고 있는지 신경 쓰고있다. –

+0

또한 마지막 주석을 지원합니다. 'selected items' 속성이있는 모든 유형의 윈도우를 알고 싶지 않습니다. 가장 자리에있는 윈도우에 있는지 확인하고 싶습니다. BBEdit이이 속성을 가진 더 많은 유형의 창을 추가하면 더 많은 작업이 필요하다는 것을 유형의 창에 하드 코딩해야합니다. –

0

BBEdit에서 documentswindows 사이의 차이가 있습니다. Windowsdocuments의 요소이지만 windowsselection 속성 만 가지므로 먼저 창 유형을 확인하고 오류 잡기를 완전히 피할 수 있습니다. 결과적으로 더 깨끗한 코드를 만들 수 있습니다.

또한, selection 항상 사용 가능한 개체를 반환하기 때문에 "항목을 선택"반대로 BBEdit에서 하드 재산입니다 selection 속성을 사용하는 경우에도 단지 insertion point을 시도해보십시오.

+0

내가 선택한 후에'selection' 속성이 아닙니다 : 그것은'selected items'입니다. 이는 특정 창 종류의 하위 집합 (예 : 프로젝트 창)에만 나타납니다. –

관련 문제