Automatisation des tâches (Mac)/Applescript
Applescript est une application mac apparue sur le système 7 des ordinateurs macintosh (1991), elle permet de créer de petits scripts permettant de lancer une application et évoluer dans celle-ci, avec pour seule condition qu'elle soit scriptable : c’est le cas de toutes les applications mac (Mail, Safari, iTunes) mais également Microsoft Office ou les logiciels Adobe.
Ce cours ne comprend pas l'apprentissage d'Applescript, car le langage, même s'il est adapté aux novices (par son vocabulaire simple), est assez compliqué à maitriser pour le commun des mortels. Nous allons chercher à décrire rapidement Applescript puis à développer des exemples illustrant l'utilité et l'efficacité de ce logiciel simple.
Architecture d'Applescript
modifierPour obtenir Applescript, utilisez le moteur de recherche intégré au Finder, Spotlight (en haut à droite de votre écran) et écrivez "Éditeur Applescript". Une fois lancé, voici ce que vous voyez :
Nous allons dès à présent lancer une application : Safari par exemple ! Inscrivez ceci dans le champ de saisi supérieur :
Tell application "Safari"
activate
End Tell
Puis, appuyez sur la touche Exécuter : Safari se lance.
"Tell" va appeler Safari, et "activate" va le lancer ou mettre sa fenêtre en premier plan si cela est déjà fait. "End Tell" termine le processus.
Jusque là, ce petit script n’est pas très utile, rien ne vaut un double clic sur l'icône Safari, mais c’est déjà un bon début.
Pour savoir si une application est scriptable, c'est-à-dire maniable via l'éditeur de script, allez dans la barre de menu, "Fichier" puis "Ouvrir un dictionnaire" : un nouveau panel (fenêtre) s'ouvre avec l’ensemble des applications scriptables, des plus communes, telles qu'iTunes, aux plus pointues, telles que Système Events ou Terminal. Nous y reviendrons par la suite.
C'est bon ! Vous venez d'appréhender l'éditeur de script, sous un aspect assez réducteur, mais les exemples vont permettre de comprendre la réelle utilité de ce langage.
Exemple 1 : recherche internet
modifierNotre but est d'obtenir une fenêtre de recherche internet, permettant de trouver des contenus sur les sites Google, Dailymotion, etc. Ouvrez l'éditeur de script et écrivez ceci :
set search to text returned of (display dialog "Entrez votre recherche Dailymotion" default answer "" buttons {"Rechercher","Annuler"} default button 1)
open location "http://www.dailymotion.com/relevance/search/" & search
En cliquant sur Exécuter, vous verrez apparaitre une nouvelle fenêtre avec le texte "Entrez votre recherche Dailymotion" qui vient du script, vous pouvez le modifier à votre gout, tout comme les boutons et le site de recherche. Par défaut, le bouton rechercher est celui qui est sélectionné : comme vous pouvez le voir, il est bleuté, on a effectué ce réglage dans le script (si vous voulez que ce soit le bouton annuler qui soit sélectionné par défaut, remplacez la valeur 1 par 2). La fenêtre est réglée par le paramètre "display dialog". Utilisez le dictionnaire Finder d'Applescript pour connaitre les autres fenêtres possibles.
Pour plus de rapidité, sauvegardez ce script en utilisant la fonction "application" dans la fenêtre d'enregistrement. Si vous ne cochez pas la fonction "exécutable uniquement", vous pourrez ajouter une icône à votre application ! (pour cela, faites un clic droit sur l’application et "Afficher le contenu du paquet")
Exemple 2 : automatiser l'écriture
modifierVous avez décidé de créer un Q.C.M. avec TextEdit, mais chose rébarbative, il faut une structure avec des numéros pour chaque question. Voici donc un exemple d'automatisation utilisant Applescript. En fait, nous allons utiliser la commande de script "keystroke" qui appartient à l’application "System Events" de votre mac (dont 99,9% des utilisateurs ne connaissent pas l'existence, mais qui est très utile !).
Dans un premier temps, lancez l'éditeur de script : nous voulons :
- Appeler TextEdit
- Ouvrir un nouveau document
- Entrer la structure du Q.C.M.
- Enregistrer
Nous allons structurer le script en suivant cet ordre, voici ce que l’on va écrire :
tell application "TextEdit"
activate
end tell
tell application "System Events" to keystroke "n" using command down
tell application "System Events" to keystroke "1) Parmi les propositions suivantes, lesquelles sont exactes ?"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "a)"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "b)"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "c)"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "d)"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "e)"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "2) Parmi les propositions suivantes, lesquelles sont exactes ?"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "a)"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "b)"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "c)"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "d)"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "e)"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "s" using command down
Ce script est long mais pas compliqué à comprendre : en fait, System Events va simuler le clavier avec la fonction keystroke, et entre guillemets, on place le texte à entrer. On peut également utiliser des caractères ASCII :
tell application "System Events" to keystroke (ASCII character 29)
qui simulera une flèche droite !
Cette fonctionnalité d'Applescript est très utile, on peut par exemple programmer Spaces avec les flèches et la touche alt, nous y reviendrons dans le dernier chapitre.
Pour éviter d'écrire un script trop long, utilisez la fonction repeat :
tell application "TextEdit"
activate
end tell
tell application "System Events" to keystroke "n" using command down
repeat 5 times
tell application "System Events" to keystroke "Parmi les propositions suivantes, lesquelles sont exactes ?"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "a)"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "b)"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "c)"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "d)"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "e)"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke return
end repeat
tell application "System Events" to keystroke "s" using command down
Ce script fera 5 questions de 5 propositions.
Concernant l'automatisation, Applescript est assez limité : pas de réelle interface, difficulté des scripts, et l'utilité reste assez limitée.
Exemple 3 : Applescript et Terminal
modifierTerminal est un utilitaire d'Apple qui permet d'écrire des scripts Unix. Dans certains cas, l'utilisateur peut être amené à utiliser des commandes de façon répétitive, nous allons donc utiliser Applescript pour éviter de les réécrire à chaque fois. Bien sûr, la commande keystroke sera également utilisée. Voici un exemple de script que l’on peut obtenir :
activate application "Terminal"
delay 0.1
tell application "System Events" to keystroke "cd /Applications/Utilities/TapSpace"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "chmod +x smackleopard.command"
tell application "System Events" to keystroke return
tell application "System Events" to keystroke "./smackleopard.command"
tell application "System Events" to keystroke return
ici, on demande la commande "smackleopard", la commande delay permet de préciser une durée entre l'allumage de terminal et l'entrée des commandes via System Events. Bien sûr, Terminal possède son propre vocabulaire de script, mais ce n’est pas l’objet de notre cours...
Aller plus loin
modifierUn certain nombre de sites répertorient des scripts à destination d’applications mac et non mac. Applescript est un langage abordable mais compliqué à maitriser, et limité par rapport à l'automatisation. Néanmoins, nous pouvons obtenir de bons résultats. Finder propose un ensemble de scripts d'exemples, ils se trouvent dans la barre des menus du Finder, en haut à droite (icône en forme de parchemin).