Comment exécuter un script shell au lancement d'une application?

1

Je ne sais pas si cela appartient ici ou sur SuperUser, mais c'est spécifique à Mac, donc je vais aller avec ici.

J'ai écrit un script Ruby qui modifie le fichier de propriétés globales de TextMate et modifie le thème en fonction de l'heure du jour (thème clair le jour, thème sombre la nuit), puis lance TextMate.

J'ai ensuite créé une application Automator qui exécute ce script. Je l'ai appelé TextMate, collé dans l'icône de la fleur et mis dans mon dock au lieu de l'application TextMate actuelle.

Le script fonctionne, mais la chose la plus évidente que j'ai omise est que le vrai TextMate n'est plus dans mon dock. Ainsi, chaque fois que je clique sur ma version d'Automator, il s'exécute, puis quitte et TextMate s'ajoute à la section des applications en cours de mon dock, donc j'ai deux icônes de fleurs là-bas lorsque l'application est en cours d'exécution. Un autre problème est que si j'ouvre l'application de toute autre manière (comme ouvrir un fichier à partir du Finder), le script ne s'exécutera pas.

Alors, y a-t-il un moyen d'associer mon script à l'application réelle, ou d'indiquer au système de faire quelque chose à chaque fois que TextMate est ouvert, ou de demander à TextMate de faire quelque chose quand il est ouvert?

Andrew
la source
Il serait peut-être plus simple / plus fiable de simplement exécuter le shellScript deux fois par jour (à l'aube / au crépuscule) à une heure précise, à l'aide des services de lancement Apple. (L'application "Launch Control" est pratique pour ajouter / modifier des éléments LS.) Assurez-vous simplement que le script vérifie si TextMate est déjà en cours d'exécution afin d'éviter toute tentative d'écriture dans un fichier .plist en cours d'utilisation.
Gosmond
Excellent appel, @gosmond. Je pense que je vais prendre cette voie.
Andrew

Réponses:

1

L'application de script d'interface utilisateur tierce, Keyboard Maestro (KBM), peut exécuter cette fonction. (Avec beaucoup d'autres.)

J'utilise KBM depuis 5 ou 6 ans, il est très stable et fiable.

Voir la capture d'écran de l'exemple de script KBM:

entrez la description de l'image ici

Gosmond
la source
Cela semble fonctionner et serait facile, mais 1) cela coûte de l’argent et 2) par défaut, il écrase de nombreuses fonctionnalités natives telles que commande-tab, ce qui me contrarie.
Andrew
Re: command-tab dans KBM, peut-être que c'est le cas par défaut, mais les macros sont complètement configurables et vous pouvez les désactiver ou les remapper. Mon CMD-TAB fonctionne normalement, c’est-à-dire que le sélecteur d’application OS X standard s’affiche.
Gosmond
Je réalise. Je viderais votre réponse si j'avais la réputation de le faire. Je suis juste être difficile.
Andrew
C'est parfait. Je me rends compte qu'une solution sans frais est toujours préférable à une solution payante. En outre, il peut y avoir un moyen de le faire par programme avec des outils de ligne de commande existants ou à code source ouvert. Le rasoir d'Occam s'applique toujours.
Gosmond
0

Si cela est vraiment important, vous pouvez ajouter:

cmd = `open /Applications/TextMate.app`

(En supposant que c'est là que se trouve TextMate)

à la fin de votre script.

Cela indiquerait au script d'ouvrir TextMate après que tout le reste a été exécuté.

Ensuite, il vous suffit d’exécuter le script pour ouvrir TextMate.

sdmeyers
la source
Cela ressemble à une bonne solution, propre et gratuite. Si vous deveniez vraiment chic, vous pourriez demander au script de shell de simplement mettre à jour le fichier .plist, lorsque le script est appelé automatiquement à partir de Launchd - mais lorsque vous créez un droplet Automator pour exécuter le script, dans ce cas, passez un argument à Demandez au script de lancer TextMade avant de quitter. (Avec la commande suggérée par sdmeyer.)
gosmond