2017-04-13 4 views
1

스크립트 정의 (sdef)를 사용하여 디 컴파일 및 컴파일하고 AppleScript 스크립트 라이브러리 (scptd)를 만들 수 있기를 원합니다. 버전 제어의 소스.스크립팅 정의 (sdef)로 AppleScript 스크립트 라이브러리 (scptd)를 컴파일하는 방법

이 질문의 배경은 내 AppleScript 소스를 git에 넣는 것입니다. 내 질문의 대부분은 this stackoverflow question/answer에 의해 답변되었지만 여기에 설명 된 나의 질문은 여전히 ​​내 모든 스크립트를 git에 넣지 못하게합니다. 이 라이브러리 test.scptd에서

나는 이름 say it loud과 핸들러를 가지고 있고, sdef 파일 test.sdef에이 코드 SAYTLOUD와 명령으로 선언됩니다. sdef 파일에 대한 링크가 파손되어 있기 때문에,

on say it loud whatToSay 
    do shell script "say " & quoted form of whatToSay 
end on say it loud 

그러나,이 소스가 osacompile 컴파일 할 수 없으며 say it loud는되지 않습니다 :

osadecompile를 사용하여, 나는 AppleScript로 텍스트 파일 test.applescript를 얻을 수 유효한 식별자.

다행히도 우수한 편집기 인 TextMate의 일부인 이진 compile_as (source here)을 발견했습니다. 때, 디 컴파일, 나는 다음과 같은 소스 파일 test_raw.applescript을 얻을 :

on «event SAYTLOUD» whatToSay 
    do shell script "say " & quoted form of whatToSay 
end «event SAYTLOUD» 

이 코드는 여전히 애플 스크립트 유효하기 때문에 내가 원하는 것입니다 그것은 실행 가능합니다. 유일한 차이점은 처리기를 이름으로 호출 할 수 없지만 원시 코드를 사용해야한다는 것입니다. 여기에 문제 없습니다.

내 질문 : 나는에게 (원시 코드 포함) 애플 스크립트 파일 test_raw.applescript을 컴파일 어떻게, test.scptdtest.sdef 파일과 함께.

확실한 대답은 Objective-C와 OSAKit (가능한 경우)을 사용하여 decompile_as을 직접 작성하는 것이지만 관련 기술은 갖고 있지 않습니다.

답변

0

가장 좋은 해결책은 .scptd 번들을 git 저장소에 직접 저장 한 다음 전체적으로 많은 것을 설정하는 것입니다.

두 번째로 좋은 해결책은 .scptd 번들을 git 저장소에 직접 저장 한 다음 git 클라이언트와 실제 diff 명령 (example) 사이에있는 자신 만의 'diff'쉘 스크립트를 작성하는 것입니다. shim 스크립트가 .scptd 접미어가있는 파일을 수신하면 osadecompile으로 전달하고 임시 텍스트 파일에 출력을 작성한 다음 해당 파일 경로를 diff 도구로 전달하십시오. AppleScript (본질적으로 scm-hostile) 파일 형식을 깨뜨리지 않아도 사람이 읽을 수있는 diff 파일을 얻을 수 있습니다. 분명히 합병을 원한다면 도움이되지 않지만, 그것은 당신과 당신의 장로 신들 사이에 있습니다.

+0

예. 이제'.scptd' 패키지를 git에 직접 넣을 것입니다. diff 처리기는 명령 행에서 도움이되지만 GitHub Desktop과 같은 GUI 응용 프로그램에는 도움이되지 않습니다. '.scpt' 파일과'.scptd' ('.sdef'가없는)에는 빌드 스크립트가 있습니다. 필자는'.applescript' 텍스트 버전으로 개발을하고 있습니다. 어쩌면 워크 플로우를 바꿀 것입니다. 그러나'sdef'-equipped'scptd'는 깨지기 어려운 하드 너트입니다 ... – doekman