2010-11-26 2 views
3

비교적 간단한 질문이 있습니다.Mac bash가 시작될 때 option 키가 눌러 졌는지 확인하는 방법 Application

저는 bash로 작성된 실행 프로그램이있는 몇 가지 Mac 응용 프로그램이 있습니다. 앱 시작시 'option/alt'키를 누를 때 다른 사용자가 config.app 또는/Contents/Resources에있는 다른 항목에 액세스하도록하여 실행기에 약간의 기능을 추가하려고합니다. 약간의 옵션 메뉴에 액세스 할 수있는 iTunes 또는 iPhoto와 같은 종류입니다.

순전히 배시에서 코드가 어떻게 보일지 모르겠다. 나는 applescript 및/또는 코코아 후크를 사용하는 몇 가지 예제를 발견했지만 순전히 bash에서는 사용하지 않았습니다.

뭔가 같은 : if 'optionKeyDown'; then open "$WORKDIR/../Resources/config.app"

또는 전혀 순수 bash는이 가능하지?

답변

2

여기 좋은 해결책이있다 :

#import <Carbon/Carbon.h> 

int main (int argc, const char * argv[]) { 
    unsigned int modifiers = GetCurrentKeyModifiers(); 

    if (argc == 1) 
     printf("%d\n", modifiers); 

    else { 

     int i, result = 1; 
     for (i = 1; i < argc; ++i) { 

      if (0 == strcmp(argv[i], "shift")) 
       result = result && (modifiers & shiftKey); 

      else if (0 == strcmp(argv[i], "option")) 
       result = result && (modifiers & optionKey); 

      else if (0 == strcmp(argv[i], "cmd")) 
       result = result && (modifiers & cmdKey); 

      else if (0 == strcmp(argv[i], "control")) 
       result = result && (modifiers & controlKey); 

      else if (0 == strcmp(argv[i], "capslock")) 
       result = result && (modifiers & alphaLock); 

     } 
     printf("%d\n", result); 
    } 
    return 0; 
} 

가 호출 된 파일, 예를 들어,에 붙여 넣습니다 : http://lists.apple.com/archives/applescript-users/2009/Sep/msg00374.html

다음 코드를 가지고 keys.m.

$ gcc keys.m -framework Carbon -o keys 

가 경로, 예를 들어, 어딘가에 keys 실행 파일을 넣어 :

는 다음과 같은 명령 줄 유틸리티를 구축 /usr/local/bin 또는 심지어 bash 스크립트와 동일한 디렉토리에있는 경우에도 예를 들어 다음과 같이 호출 할 수 있습니다. keys option 그리고 "0"또는 "1"에 대해 반환 된 문자열을 확인하십시오.

+0

감사합니다. 실행 파일 자체가 옵션이 2048과 같이 터프하게 눌러 진 특정 숫자를 출력하는 것으로 보입니다. 어떻게 if 문으로 bash에서 직접 구현할 수 있습니까? 나는이 시도하지만 뭔가 떨어져 보인다 키 = "$ WORKDIR/키" 경우 [[ '키 옵션'== '1']] – devilhunter

+0

@devilhunter : 그것은 단지 옵션 2048 리턴하면 돈 'option' 매개 변수를 전달하지 않습니다. 즉,'keys 옵션 '대신'keys'로 호출 한 경우입니다. 어떻게 작동하는지 보려면 터미널의 명령 행에서 시도해보십시오. –

+0

감사합니다, 지금 작동합니다. 질문에 답했다. – devilhunter

관련 문제