Critiquez mon script, et comment avoir un racourci clavier ?

brab

Membre enregistré
7 Décembre 2004
8
0
50
Bonjour,

J'ai écris hier mon premier script AppleScript, et je voudrais avoir vos avis ou critiques à son sujet. Le but de ce script est de passer au dictionnaire "English" lorsqu'il est exécuté pendant la rédaction d'un mail (j'ai un autre script qui passe au dictionnaire "Français"). Comme je n'ai rien trouvé dans le dictionnaire de fonctions AppleScript pour le mail, j'ai utilisé du "Gui Scripting".

Sans plus attendre, voici le script:

Bloc de code:
tell application "Mail"
	activate
end tell

tell application "System Events"
	tell process "Mail"
		keystroke ":" using {command down}
		click pop up button 1 of group 1 of window "Spelling"
		click menu item "English" of menu of pop up button 1 of group 1 of window "Spelling"
		click (button 1 of window "Spelling")
	end tell
end tell

Quelques remarques à son sujet:
- j'utilise "kestroke" parce que je ne suis pas parvenu à utiliser le menu pour faire ouvrir la fenêtre. (je peux cliquer sur un item du menu, comme "Edit, Select All", mais pas dans un item d'un sous-menu, comme c'est le cas pour "Spelling..." ou "Find Again"). Comme c'est plus court d'utiliser le raccourci clavier, c'est tant mieux
- je n'ai pas trouvé d'autre solution pour fermer la fenêtre "Spelling" que de dire de cliquer sur le premier bouton.

J'aimerais apporter deux amélioration à ce script. Si quelqu'un a des suggestions:
- pouvoir le lancer en utilisant un raccourci clavier. J'ai essayé de mettre à la fin du nom du script "___ctl-cmd-e", mais ce suffixe apparaît dans le menu script (après avoir mis le script dans Library/Scripts/Mail Scripts) au lieu d'ajouter un raccourci. Pour le moment j'utilise un trigger de QuickSilver, mais cela ne me convient qu'à moitié.
- pouvoir le rendre générique: de nombreuses applications utilisent cette même structure pour changer le dictionnaire et vérifier l'orthographe (Safari, AdiumX, ...). Cela serait intéressant de remplacer le "tell application Mail activate end tell" par quelque chose qui retourne l'application en ce moment active et qui communique avec elle.

J'espère que ce message n'est pas trop long. Un grand merci à tous ceux qui le liront et qui peut-être répondrons. Et surtout n'hésitez pas à critiquer le script ;)
 
J'ai depuis amélioré ce script, voici la nouvelle version. Cette version remet le curseur à sa place après le changement de langue.

Je n'ai toujours pas trouvé de solution autre que Quicksilver pour associer un raccourci clavier, et cela m'embête un peu parce que desfois cela ne fonctionne pas.

Bloc de code:
tell application "Mail"
	activate
end tell

tell application "System Events"
	tell process "Mail"
		-- We first enter a dummy space, to be able to undo
		keystroke " "
		keystroke ":" using {command down}
		delay 1
		click pop up button 1 of group 1 of window "Spelling"
		click menu item "Français" of menu of pop up button 1 of group 1 of window "Spelling"
		click (button 1 of window "Spelling")
		-- We undo then redo, returning the cursor
		keystroke "z" using {command down}
		keystroke "z" using {command down, shift down}
		-- We remove the extra dummy space
		keystroke (ASCII character of 8)
	end tell
end tell

(édité pour enlever un bug stupide dans le code)