AppleScript Fun: changement automatique du dossier de téléchargement de Safari

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:

  1. 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"
  2. Exécutez ce script à l'aide du programme de lancement du système uniquement lorsqu'un lecteur spécifique est connecté.
  3. 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:

  1. Lancer seulement quand un nouveau disque est attaché
  2. Ne modifiez les paramètres que si un lecteur nommé "Téléchargements" (ou tout nom souhaité) est connecté.
  3. Être conditionnel dans son approche pour changer les paramètres, que Safari soit ou non lancé actuellement
  4. Ne modifiez les paramètres que si un nouvel emplacement de téléchargement souhaité est présent
  5. 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