Bien que les divers programmes et services sur un ordinateur soient conçus pour vous offrir plus de commodité, vous pouvez être amené à effectuer des tâches répétitives à l'aide des divers outils et programmes du système. Dans ces cas, l'utilisation d'outils de script peut être exceptionnellement utile. À la différence de la programmation, l’écriture de script consiste à utiliser un ensemble d’outils et d’utilitaires actuels et à automatiser leurs interactions avec les commandes. Par exemple, avec Javascript, vous pouvez demander à un navigateur de modifier la manière dont il rend le contenu HTML, ou avec Automator, vous pouvez demander au Finder d’organiser les fichiers d’une certaine manière.
Récemment, un collègue de CNET m'a abordé avec une situation unique, dans laquelle il souhaitait que son Mac modifie automatiquement le dossier de téléchargement de Safari en fonction de la présence d'un disque externe. L'idée ici serait que Safari place les fichiers téléchargés dans le répertoire de téléchargement par défaut, mais lorsque vous attachez un lecteur externe spécifique (tel qu'une clé USB appelée "Téléchargements"), puis que le système bascule automatiquement le répertoire de téléchargement de Safari sur le lecteur externe., car il peut être fastidieux de le changer manuellement.
Malheureusement, Safari n’est pas en mesure de le faire, mais OS X dispose de ressources pouvant être utilisées à cet effet et utilisant un script AppleScript pour gérer l’application Safari et certains services OS X, les scripts Shell permettant d’exécuter certaines actions qui ne sont pas utilisées. l'interface de l'application et le programme de lancement du système pour l'exécution des scripts uniquement lorsqu'un lecteur est connecté.
Au début, lorsque l’on réfléchit à ce problème, la solution peut sembler assez simple et le scénario suivant peut sembler être une bonne réponse:
- Configurez un script pour exécuter la commande "defaults write com.apple.Safari DownloadFolder NAME" afin de changer le dossier de téléchargement à l'emplacement spécifié par "NAME"
- Exécutez ce script à l'aide du programme de lancement du système uniquement lorsqu'un lecteur spécifique est connecté.
- Répétez cette opération avec une commande similaire pointant vers un emplacement différent lorsque le lecteur n'est plus connecté.
Bien que cette approche de base puisse sembler raisonnable, elle ne fonctionnera pas pour un certain nombre de raisons. Premièrement, une fois que Safari est en cours d’exécution, le programme lui-même est le seul moyen de modifier ses préférences. Lorsque le programme se charge, il lit les préférences dans la RAM et gère ses paramètres. Par conséquent, si vous modifiez le fichier de préférences à l'aide de TextEdit ou de la commande "par défaut" comme indiqué ci-dessus, cela n'aura aucun effet sur le programme. En outre, Safari réécrit ses préférences sur le disque à la fermeture, ce qui écraserait les paramètres modifiés.
En outre, cette approche suppose que le système dispose de ressources disponibles pour surveiller la présence d'un lecteur spécifique et déclencher le script chaque fois que ce lecteur est présent, ce qui n'est pas le cas. Le système peut contrôler si des lecteurs sont connectés ou non, mais des scripts supplémentaires seraient nécessaires pour spécifier un nom de lecteur à vérifier chaque fois qu'un lecteur est connecté.
Enfin, il y a un certain nombre de nuances à considérer. Par exemple, dans la mesure où Safari doit lui-même être utilisé pour modifier ses préférences lors de son exécution, il deviendra de ce fait l’application la plus importante, où il restera, à moins que le script ne détecte d’abord l’application la plus importante et ne la restaure pas lorsque les modifications apportées à Safari sont complets. En outre, vous ne souhaitez pas que le script s'exécute et permute le programme actif lorsqu'un lecteur aléatoire est connecté.
A cause de cela, le script devrait inclure les cinq considérations suivantes:
- Lancer seulement quand un nouveau disque est attaché
- Ne modifiez les paramètres que si un lecteur nommé "Téléchargements" (ou tout nom souhaité) est connecté.
- Être conditionnel dans son approche pour changer les paramètres, que Safari soit ou non lancé actuellement
- Ne modifiez les paramètres que si un nouvel emplacement de téléchargement souhaité est présent
- Avoir la possibilité de restaurer la principale application si le script doit passer à Safari
Pour mettre en œuvre ces options, il faudrait créer deux scripts. Le premier concerne le programme de lancement du système, "launchd", qui serait utilisé pour surveiller les points de montage du lecteur du système, afin de déterminer si un nouveau lecteur a été connecté ou non. Si tel est le cas, il lancera le script qui vérifiera le nom du lecteur, verra si Safari est en cours d'exécution, puis modifiera les paramètres de Safari uniquement s'ils diffèrent du choix principal du lecteur externe mais s'il n'est pas présent, utilisez le dossier Téléchargements par défaut. .
Script 1: LaunchAgent pour la surveillance des lecteurs
Le premier script à créer est destiné au lanceur de système, appelé agent de lancement. Pour le créer, ouvrez le terminal et tapez la commande suivante (copiez-le et collez-le pour plus de simplicité):
touchez ~ / Bibliothèque / LaunchAgents / local.ChangeSafariDownload.plist
Ceci fait, ouvrez-le dans TextEdit en lançant la commande suivante:
open -e ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist
Vous devriez maintenant avoir un document TextEdit vierge ouvert, donc copiez-y le texte suivant et enregistrez-le, mais laissez-le ouvert. Vous devrez modifier la section "FILEPATH" pour modifier l'emplacement du script:
Label local.ChangeSafariDownloads QueueDirectories Programme WatchPaths / Volumes / usr / bin / osascript ProgrammeArguments osascript FILEPATH
Lorsque vous vous connectez, ce script est chargé dans le processus de lancement du système et lui fournit des conditions et des instructions pour l'exécution du script principal afin de modifier les préférences de Safari. Dans ce cas, le lanceur sera invité à regarder le répertoire / Volumes pour voir si des modifications ont lieu dans ce répertoire. Etant donné que c'est là que les systèmes de fichiers sont montés, chaque fois qu'un lecteur est connecté ou déconnecté du système, le script principal est exécuté.
Script 2: AppleScript pour la modification des paramètres
Le second script est le principal qui effectuera toutes les actions, y compris la vérification des noms de lecteurs, si Safari est ouvert ou non, et toute autre condition requise pour modifier les préférences. Pour le créer, allez dans le dossier / Applications / Utilitaires / et ouvrez le programme AppleScript Editor. Une fenêtre d'éditeur vierge s'ouvrira et, le cas échéant, copiera et collera le script suivant:
- Définissez un autre nom de lecteur à utiliser comme dossier de téléchargement ici
configurez dlFolder sur convertHome ("/ Volumes / Téléchargements")
dire à l' application "Finder"
si existe [ fichier POSIX dlFolder] alors
- Ne rien faire et utiliser le dossier
autre
- définit dlFolder sur le répertoire personnel par défaut
définir dlFolder sur (chemin POSIX de ( chemin d'accès au dossier de départ en tant que texte )) & "Téléchargements"
fin si
fin dire
- Obtenir le chemin actuel du safari
Définissez currentpath sur convertHome ( le script shell "par défaut, lit-t-il com.apple.Safari DownloadsPath")
- changer de chemin uniquement si le paramètre actuel ne correspond pas au chemin d'entrée (il y a quelque chose à changer)
if (currentpath as text ) n’est pas égal à (dlFolder as text ) alors
- si Safari est en cours d'exécution, modifiez les paramètres via les préférences de Safari
si appIsRunning ("Safari") alors
- Déterminer l’application la plus avancée à restaurer lorsque le script est terminé.
définir frontApp sur le chemin d' accès à l' application la plus avancée sous forme de texte
- copier le chemin du dossier de téléchargement dans le presse-papier
définir le presse-papiers sur dlFolder en tant que texte
activer l' application "Safari"
Indiquez à l' application "System Events" d'indiquer le processus d'application "Safari"
- ouvrir les préférences ou les mettre au premier plan (fenêtre 1)
touche ", " utilisant {commande vers le bas}
delay 1 - les pauses dans l'affichage de la fenêtre peuvent provoquer une erreur, nous attendons donc une seconde
- Passer à l'onglet Général
cliquer sur le bouton "Général" de la barre d'outils 1 de la fenêtre 1
- Modifier l'emplacement de téléchargement sur Autre
bouton contextuel "Enregistrer les fichiers téléchargés dans:" du groupe 1 du groupe 1 de la fenêtre "Général"
Cliquez sur
cliquez sur l' élément de menu "Autre ..." du menu 1 - trois points sont des points de suspension, pas trois points
fin dire
- Ouvrir la boîte de dialogue "Aller au dossier"
touche "g" en utilisant {shift down, command down}
- Coller le chemin du dossier dans le champ d'emplacement
dire à la fenêtre "Aller au dossier"
touche "v" en utilisant {commande vers le bas}
retour de frappe
fin dire
cliquer sur le bouton "Sélectionner" de la feuille 1 de la fenêtre "Général"
- fermer les préférences
touche "w" en utilisant {commande vers le bas}
fin dire
- restaurer l'application la plus proche après la fin du travail
dire à l' application frontApp d' activer
autre
- si Safari N'EST PAS en cours d'exécution, utilisez la commande par défaut pour modifier les préférences.
script shell ("par défaut, écrivez com.apple.Safari DownloadsPath" & dlFolder)
fin si
fin si
- Fonction permettant de convertir les références de chemin d'accès principal en chemins complets.
sur convertHome (currentpath)
si currentpath contient "~ /" alors
définir oldDelimiter sur les délimiteurs d'éléments de texte AppleScript
définir les délimiteurs d'élément de texte AppleScript sur {"~ /"}
définir textPath sur chaque élément de texte de currentpath
définir les délimiteurs d'éléments de texte AppleScript sur oldDelimiter
définissez currentpath sur le chemin POSIX de ( chemin d'accès au dossier de départ en tant que texte ) et élément 2 dans textPath
fin si
return currentpath
fin convertHome
- Fonction permettant de vérifier si l'application "appName" est en cours d'exécution (utilisée dans ce cas pour Safari)
sur appIsRunning (appName)
Indique à l' application "Evénements système" que (nom du processus ) contient appName
fin appIsRunning
Le texte du script sera initialement violet, mais lorsque vous cliquez sur le bouton Compiler de la barre d’outils ou si vous enregistrez le script, il devient colorisé de la même manière que ce que vous voyez ici. Enregistrez le script avec un nom tel que "ChangeDownloads" dans un emplacement de votre choix (vous pouvez le placer dans un dossier "Scripts" de votre répertoire Documents ou dans votre bibliothèque utilisateur) et fermez l'éditeur AppleScript.
Ouvrez maintenant une nouvelle fenêtre de terminal et faites-y glisser le fichier de script nouvellement créé. Lorsque vous faites cela, le chemin d'accès complet au script sera entré dans la fenêtre, ce qui ressemblera à "/Users/username/Documents/ChangeDownloads.scpt." À l'aide de la souris, sélectionnez le chemin d'accès complet au fichier, appuyez sur Commande-C pour le copier dans le presse-papiers, revenez au script 1 dans TextEdit et remplacez l'entrée "FILEPATH" par votre texte copié. Puis enregistrez et fermez le document.
À ce stade, les scripts sont tous configurés. Déconnectez-vous et reconnectez-vous pour charger le script d'agent de lancement (Script 1). Désormais, lorsque vous montez un lecteur nommé "Téléchargements", les paramètres de Safari sont modifiés automatiquement pour qu'il utilise ce lecteur comme dossier de téléchargement. Si vous démontez ensuite le lecteur, le réglage sera annulé. La même chose se produira si vous renommez un disque nommé "Téléchargements" ou changez son nom de "Téléchargements" en un autre nom.
N'oubliez pas que, même si ce script fonctionne, il n'a été testé que sous OS X 10.6 "Snow Leopard" et OS X 10.7 "Lion" exécutant Safari 5.1. Cependant, cela devrait fonctionner parfaitement sur les autres configurations système exécutant au moins Safari 5.0. La principale exigence est que, lorsque le script manipule les préférences de Safari depuis le programme, il utilise des index de boutons pour ouvrir divers menus et cliquer sur les différents boutons à l'écran. Si Apple change l'organisation des préférences dans Safari à l'avenir, cette partie du script ne fonctionnera pas tant qu'elle ne sera pas modifiée pour pointer à nouveau sur les boutons appropriés. Cependant, pour l’instant, c’est une limitation à laquelle nous devrons faire face. Une solution de rechange à cela dans Lion consiste à tirer parti de la fonction de reprise d’Apple dans un script pour quitter Safari, apporter les modifications aux préférences, puis relancer le programme au lieu de devoir programmer l’interface.
Enfin, si vous décidez que vous ne souhaitez plus utiliser ce script, vous pouvez le désinstaller en supprimant le fichier AppleScript, puis en supprimant le fichier LaunchAgent manuellement ou en exécutant la commande suivante dans le terminal. Lorsque cela est fait, déconnectez-vous et reconnectez-vous, et vous revenez à la case départ:
rm ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist
Laissez Vos Commentaires