2010-11-26 41 views
3

J'ai une question relativement simple.Comment vérifier si la touche d'option est pressée au démarrage d'un mac bash Application

J'ai quelques applications mac qui ont des lanceurs écrits en bash. Je voulais ajouter une petite fonctionnalité aux lanceurs, en permettant aux autres d'accéder à config.app ou à quelque chose d'autre situé dans/Contents/Resources, quand ils pressent la touche 'option/alt' au démarrage de l'application. Un peu comme iTunes ou iPhoto, où vous pouvez accéder à un petit menu d'options.

Je ne sais pas comment le code devrait ressembler quand il est purement bash; J'ai trouvé quelques exemples qui utilisent des applescript et/ou des crochets de cacao, mais pas seulement dans bash.

Quelque chose comme: if 'optionKeyDown'; then open "$WORKDIR/../Resources/config.app"

Ou est-ce pas possible bash pur du tout?

Répondre

2

Il y a une bonne solution ici: http://lists.apple.com/archives/applescript-users/2009/Sep/msg00374.html

Prenez le code suivant:

#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; 
} 

le coller dans un fichier appelé, par exemple keys.m.

Ensuite, construire un utilitaire de ligne de commande comme ceci:

$ gcc keys.m -framework Carbon -o keys 

Mettre le fichier exécutable quelque part keys dans votre chemin, par exemple /usr/local/bin, ou même simplement dans le même répertoire que votre script bash, vous pouvez l'appeler par ex. keys option et vérifiez la chaîne retournée pour "0" ou "1".

+0

Merci. L'exécutable lui-même semble sortir les nombres spécifiques des touches pressées, comme l'option est 2048. Comment est-ce que j'implémenterais ceci dans bash directement avec une instruction if? J'ai essayé, mais quelque chose semble hors: clés = "$ Workdir/clés" si [[ 'option Touches' == '1']] – devilhunter

+0

@devilhunter: Il ne retourne que 2048 pour l'option si vous ne Ne passez pas le paramètre 'option', c'est-à-dire si vous l'appelez simplement' keys' plutôt que 'keys option'. Essayez-le à partir de la ligne de commande dans Terminal pour voir comment cela fonctionne. –

+0

Merci, ça marche maintenant. Question répondue. – devilhunter