보통 Safari(WebKit)에서 “View Source”로 열린 창은 syntax highlighting을 지원하지 않고 line numbers도 표시되지 않는다. 물론 Web Inspector가 보여주는 소스를 훑어볼 수도 있지만, 중첩된 DOM tree를 일일이 열어서 확인하는 것도 가끔은 귀찮은 일.

이런 “View Source” 기능의 단점을 만회하려고 BetterSource Safari extension도 설치해 놨지만, 가끔 열린 페이지의 소스를 복사해놓고 수정 작업까지 하려면 글자 편집기에 바로 보여주는 기능도 요긴할 것이다. 여기에 안성맞춤으로 Safari에서 웹 페이지의 소스를 TextMate에 보여주는 요령을 발견.

모든 기대를 단번에 충족시켜 주는 요령인데, 한 가지 아쉬운 것은 WebKit Nightly Builds에선 이를 제대로 사용할 수 없다는 것. 문제의 원인은 ViewSourceInTextMate TextMate Plugin 패키지 안에 있는 getSource.scpt 파일에서 찾을 수 있다.

tell application "Safari" to set my_html to source of document 1
return my_html

페이지 소스를 읽어서 TextMate에게 전달해주는 중간자 역할로 꼭 Safari만이 지정되어 있다. 그래서 WebKit에서 “View Source in TextMate” 명령을 실행하면, 무조건 상관없는 Safari를 실행시켜서 결국 소스를 제대로 불러오지 못한다.

현재 열려 있는 브라우저가 WebKit이냐 Safari냐에 따라 웹 페이지 소스를 불러오는 명령을 실행하는 주체를 올바로 정해주려면 다음과 같은 수정이 필요하다.

set _browser to GetCurrentBrowser()
using terms from application "Safari"
  tell application _browser to set my_html to source of document 1
  return my_html
end using terms from
 
 
on GetCurrentBrowser()
  tell application "System Events"
    set browser_apps to the short name of every process whose background only is false
    if "Safari" is in browser_apps then
      return "Safari"
    else
      return "WebKit"
    end if
  end tell
end GetCurrentBrowser

위 AppleScript는 아래 두 군데를 참고하였다.

AppleScript를 작성하면서 부딪혔던 한가지 골칫거리는, 실행 중인 프로세스 중에 Safari와 WebKit을 구분할 때 그냥 name property를 쓰면 모두 “Safari”를 돌려줘서 반드시 short name을 써야만 구분할 수 있었다.

Safari와 WebKit이 동시에 실행 중이라면, Safari가 우선순위를 가진다.

관련된 주제의 글

댓글을 남겨 주세요