J'ai l'AppleScript suivant que j'essaie de déboguer :
tell application "System Events"
set theResult to (do shell script "sqlite3 ~/Library/Application\\ Support/Dock/desktoppicture.db \"SELECT data.value
FROM data WHERE data.ROWID = 2\"") & "/" & (do shell script "sqlite3 ~/Library/Application\\ Support/Dock/desktoppicture.db \"SELECT data.value
FROM preferences JOIN data on preferences.key = 16 AND preferences.picture_id = 1 AND preferences.data_id=data.ROWID\"")
do shell script "open -b \"com.adobe.Photoshop\" " & quoted form of theResult
end tell
En gros, ce que fait ce script, c'est qu'il récupère le chemin du fond d'écran actuellement affiché sur mon ordinateur et le passe comme argument à Photoshop.
Le chemin qui est récupéré est de la forme ~/PATH/TO/IMAGE
. Ce chemin contient des espaces, c'est pourquoi j'ai utilisé l'attribut quoted form of
pour échapper à la chaîne. Cependant, ce faisant, le chemin d'accès à l'image se transforme en /~/PATH/TO/IMAGE
et je suis très perplexe quant à la raison pour laquelle il ajoute le "/" supplémentaire au début de la chaîne. À cause de cela, le script ne s'exécute pas comme prévu. Comment puis-je échapper au chemin mais l'empêcher d'ajouter le "/" supplémentaire. Existe-t-il un moyen de convertir le chemin en un chemin entièrement qualifié ou une autre façon d'échapper la chaîne de caractères ?
Version mise à jour du script avec correction :
tell application "System Events"
set currentWallpaperPath to (do shell script "sqlite3 ~/Library/Application\\ Support/Dock/desktoppicture.db \"SELECT data.value
FROM data WHERE data.ROWID = 2\"") & "/" & (do shell script "sqlite3 ~/Library/Application\\ Support/Dock/desktoppicture.db \"SELECT data.value
FROM preferences JOIN data on preferences.key = 16 AND preferences.picture_id = 1 AND preferences.data_id=data.ROWID\"")
if currentWallpaperPath starts with "~/" then set currentWallpaperPath to (system attribute "HOME") & text 2 thru -1 of currentWallpaperPath
do shell script "open -b \"com.adobe.Photoshop\" " & quoted form of currentWallpaperPath
end tell
Je voulais également ajouter que ce script n'est pertinent que pour OS X Mavericks (10.9) car les informations sur le papier peint ont maintenant été déplacées dans le fichier de base de données plutôt que d'être référencées dans le fichier com.apple.Desktop.plist comme c'était le cas dans les versions précédentes d'OS X. De plus, mon ordinateur est configuré pour afficher de manière aléatoire le papier peint d'un dossier spécifique sur mon ordinateur. Le script peut avoir besoin d'être ajusté en fonction de la configuration de vos ordinateurs.