Applescript action de dossier

crifou

Membre confirmé
13 Novembre 2004
12
0
Bonjour,
Je galère sur un script que je veux mettre en action de dossier. J'ai un DD externe. Je veux modifier se fenêtres (taille de la fenêtre, des icones, présentation en icone et image de fond de fenêtre. J' ai fait un script qui fonctionne parfaitement, mais…seulement à partir de la seconde ouverture du dossier. Donc, à chaque fois que je démonte et remonte le disque, à la première ouverture, j'ai tout perdu. Pouvez-vous m'expliquer ? merci

Voici mon script

on opening folder the_folder
tell application "Finder"
activate
set the bounds of the first window to {0, 0, 1440, 900}
set current view of the first window to icon view
set sidebar width of the first window to 0
set icon size of icon view options of the first window to 240
set arrangement of icon view options of the first window to snap to grid
set background picture of icon view options of front window to "Volumes:CAROLE:A:Fonds fenêtres:danse pieds.jpg" as alias
end tell
end opening folder
 
Dernière édition:
Je ne sais pas si je me suis bien expliqué. Le dossier ne prend les modifications qu'après sa fermeture. Connaissez-vous une autre méthode, avec le terminal peut-être ?

Autre question : comment détecter le montage d'un disque externe pour lancer un script automatiquement lors de la détection ?

Merci à vous tous de me répondre. Je ne suis pas du tout une pointure sur applescript, d'habitude je développe surtout sur Max MSP.
 
Dernière édition:
Bonjour,

Pour mettre à jour sans fermer la fenêtre (bogue du Finder avec un changement des propriétés par un AppleScript), il suffit de changer la cible de la fenêtre et de la remettre.
Comme ceci :
Bloc de code:
tell application "Finder"
	activate
	set sDisk to startup disk
	tell first Finder window
		set properties of icon view options of it to {icon size:240, arrangement:snap to grid, background picture:bgPict}
		set properties to {bounds:{0, 0, 1440, 900}, current view:icon view, sidebar width:alias "Volumes:CAROLE:A:Fonds fenêtres:danse pieds.jpg"}
		set {x, target} to {target, sDisk} -- change la cible 
		set target to x -- on remets la cible pour mettre à jour la présentation
	end tell
end tell


Au sujet des pertes des préférences de cette fenêtre lorsque tu démonte le disque, cela dépends des autorisations et des permissions de ce disque ou du format de ce disque.


--
Pour que cela fonctionne automatiquement lors du montage du disque, il suffit d'utiliser un script d'action de dossier sur le dossier "Volumes":
Le script :
Bloc de code:
on adding folder items to this_folder after receiving these_items
	tell application "Finder"
		repeat with i in these_items
			if name of i is "le nom du disque externe" then
				open i
				set sDisk to startup disk
				tell (get first Finder window)
					set properties of icon view options of it to {icon size:240, arrangement:snap to grid, background picture:alias "Volumes:CAROLE:A:Fonds fenêtres:danse pieds.jpg"}
					set properties to {sidebar width:0, bounds:{0, 0, 1440, 900}, current view:icon view}
					set {x, target} to {target, sDisk} -- change la cible 
					set target to x -- on remets la cible originale pour mettre à jour la présentation
				end tell
				exit repeat
			end if
		end repeat
	end tell
end adding folder items to
Remplace "le nom du disque externe" dans le script par le nom de votre disque externe ou par le nom d'une partition du disque externe.


Dans le Finder, sélectionne le menu "Aller au dossier..." dans le menu "Aller" de la barre des menus.
Tapes /Volumes/, presse la touche Entrée.
Configure une action de dossier sur le dossier "Volumes", sélectionne ton script.
C'est tout.
 
Merci beaucoup, JackR, pour toutes ces précisions. Je teste et je te dis si ça marche.
Je n'étais pas au courant de tous ces détails pour le Finder.

---------- Nouveau message ajouté à 13h38 ---------- Le message précédent a été envoyé à 11h54 ----------

Une ligne bloque le script :

set {x, target} to {target, sDisk}

le{target, sDisk} n'est pas trouvé

Autre chose, dois-je remplacer le x par le nom du dossier ou garder x dans le script ?

Merci
 
Bonjour,

Il y avait deux erreurs dans le premier script, sur les propriétés sidebar width et background picture.

Je ne comprends pas pourquoi cela bloque sur le target

Essaie comme ceci

Bloc de code:
tell application "Finder"
	activate
	set sDisk to startup disk
	tell first Finder window
		set properties of icon view options of it to {icon size:240, arrangement:snap to grid, background picture:alias "Volumes:CAROLE:A:Fonds fenêtres:danse pieds.jpg"}
		set properties to {bounds:{0, 0, 1440, 900}, current view:icon view, sidebar width:0}
		set x to target of it
		set target of it to sDisk --  on change la cible par celui du disque de démarrage 
		set target of it to x -- on remets la cible pour mettre à jour la présentation
	end tell
end tell
 
Dernière édition:
Désolé, ton script ne fonctionne pas. Je l'ai recopié tel quel en rajoutant juste on opening folder the _folder au début et end opening folder à la fin.

En revanche, j'ai travaillé sur target.
Comme le fait de choisir le disque de démarrage comme 2ème target me pourrissait cette fenêtre, j'en ai choisi un autre.

on opening folder the_folder
tell application "Finder"
activate
set My_folder2 to "Volumes:CAROLE:A" as alias
set My_folder to "Volumes:CAROLE" as alias
open the folder My_folder
activate
set the bounds of the first window to {0, 0, 1440, 900}
set current view of the first window to icon view
set sidebar width of the first window to 0
set icon size of icon view options of the first window to 240
set arrangement of icon view options of the first window to snap to grid
set background picture of icon view options of front window to "Volumes:CAROLE:A:Fonds fenêtres:Danse pieds.jpg" as alias
set target of window 1 to My_folder2
set target of window 1 to My_folder
activate
end tell
end opening folder

Cela fonctionne, mais, dans la fenêtre qui s'ouvre, si je clique sur la flèche arrière (pour revenir à la fenêtre précédente, je me retrouve sur la fenêtre de ma seconde cible. Si je reclique encore, je tombe sur la fenêtre que je voudrais avoir.
Comment résoudre cela ?

Merci pour toutes tes explications
 
Cela fonctionne, mais, dans la fenêtre qui s'ouvre, si je clique sur la flèche arrière (pour revenir à la fenêtre précédente, je me retrouve sur la fenêtre de ma seconde cible. Si je reclique encore, je tombe sur la fenêtre que je voudrais avoir.
Comment résoudre cela ?

Ce serait de fermer la fenêtre et de la réouvrir, je ne vois pas d'autre solution.
Bloc de code:
on opening folder the_folder
	tell application "Finder"
		set My_folder2 to "Volumes:CAROLE:A" as alias
		set the bounds of the first window to {0, 0, 1440, 900}
		set current view of the first window to icon view
		set sidebar width of the first window to 0
		set icon size of icon view options of the first window to 240
		set arrangement of icon view options of the first window to snap to grid
		set background picture of icon view options of front window to "Volumes:CAROLE:A:Fonds fenêtresanse pieds.jpg" as alias
		close Finder window 1
		open the_folder
		activate
	end tell
end opening folder


Mais, si le Finder retient les préférences de cette fenêtre jusqu'à temps que tu éjecte le volume, ce serait préférable de le faire seulement lors du montage du volume, au lieu de le faire à chaque fois que vous ouvrez le dossier (on opening folder).
Bloc de code:
on adding folder items to this_folder after receiving these_items
	tell application "Finder"
		repeat with i in these_items
			if name of i is "CAROLE" then
				open i
				set the bounds of the first window to {0, 0, 1440, 900}
				set current view of the first window to icon view
				set sidebar width of the first window to 0
				set icon size of icon view options of the first window to 240
				set arrangement of icon view options of the first window to snap to grid
				set background picture of icon view options of front window to "Volumes:CAROLE:A:Fonds fenêtresanse pieds.jpg" as alias
				close Finder window 1
				exit repeat
			end if
		end repeat
	end tell
end adding folder items to

Si tu préfère garder le script (on opening folder the_folder), la solution serait de vérifier les propriétés de la fenêtre, si c'est bon, le script ne change rien.
Exemple qui vérifie les propriétés de la présentation par icône:
Bloc de code:
on opening folder the_folder
	tell application "Finder"
		set My_folder2 to "Volumes:CAROLE:A" as alias
		set bgPict to file "Volumes:CAROLE:A:Fonds fenêtresanse pieds.jpg"
		set L to properties of icon view options of front window
		if current view of the first window is icon view and background picture of L is bgPict and icon size of L is 240 then return -- tout est OK
		set the bounds of the first window to {0, 0, 1440, 900}
		set current view of the first window to icon view
		set sidebar width of the first window to 0
		set icon size of icon view options of the first window to 240
		set arrangement of icon view options of the first window to snap to grid
		set background picture of icon view options of front window to "Volumes:CAROLE:A:Fonds fenêtresanse pieds.jpg" as alias
		close Finder window 1
		open the_folder
		activate
	end tell
end opening folder
 
Bon, effectivement, je tiens à garder la fonction on opening folder.
L'autre est pour autre chose.
Comme je le craignais, tes scripts 1 et 3 tournent en boucle à cause de la ligne open the_folder vers la fin, il doit reboucler avec la première ligne, on opening…

Pas encore trouvé de solution qui me convienne, pas simple.

Merci, si tu as encore des idées, c'est bienvenue.
 
Comme je le craignais, tes scripts 1 et 3 tournent en boucle à cause de la ligne open the_folder vers la fin, il doit reboucler avec la première ligne, on opening…

Pas encore trouvé de solution qui me convienne, pas simple.

Merci, si tu as encore des idées, c'est bienvenue.

Je viens de tester le troisième script, cela ne tourne pas en boucle ici, puisque le script vérifie les préférences de cette fenêtre et le script ne change rien parce qu'il quitte quand les préférences de la fenêtre sont correctes.

A moins que ton Finder est lent et n'a pas le temps d'écrire les préférences dans le fichier .ds_store, dans ce cas essaie de mettre des délais, comme ceci.

Bloc de code:
on opening folder the_folder
	tell application "Finder"
		activate
		set bgPict to file "Volumes:CAROLE:A:Fonds fenêtresanse pieds.jpg"
		set L to properties of icon view options of front window
		if current view of the first window is icon view and background picture of L is bgPict and icon size of L is 240 then return -- tout est OK
		set the bounds of the first window to {0, 0, 1440, 900}
		set sidebar width of the first window to 0
		set background picture of icon view options of front window to bgPict
		set icon size of icon view options of the first window to 240
		set arrangement of icon view options of the first window to snap to grid
		set current view of the first window to icon view
		delay 2
		close front Finder window
		delay 2
		open the_folder
	end tell
end opening folder


Sinon, le mieux est d'utiliser "on adding folder items to" sur le dossier "Volumes", on peut combiner plusieurs scripts sur un seul, il suffit d'ajouter des conditions.
Je peux le faire si vous voulez, post ton script pour ton dossier "Volumes".
 
Testé ton dernier script : ne fonctionne pas (j'ai juste corrigé un chemin qui n'était pas bon, le fantôme vert remplace ": D", sans l'espace ni les guillemets).
Le 3ème sur ton post précédent ne fonctionne pas non plus chez moi.

Pour info, je suis sur un MacPro de 2009, 16Go de mémoire vive et je tourne sur OSX 10.9.5

Le seul script qui tourne pour l'instant est celui-ci :

on opening folder the_folder
tell application "Finder"
activate
set My_folder2 to "Volumes:CAROLE:A" as alias
set My_folder to "Volumes:CAROLE" as alias
open the folder My_folder
activate
set the bounds of the first window to {0, 0, 1440, 900}
set current view of the first window to icon view
set sidebar width of the first window to 0
set icon size of icon view options of the first window to 240
set arrangement of icon view options of the first window to snap to grid
set background picture of icon view options of front window to "Volumes:CAROLE:A:Fonds fenêtres:Danse pieds.jpg" as alias
set target of window 1 to My_folder2
set target of window 1 to My_folder
activate
end tell
end opening folder


Connais-tu une possibilité pour supprimer la barre de menus du haut de la fenêtre.

Merci encore