Jusqu’à présent, tous nos scripts ont fait des choses au démarrage. Ceci est d’une utilité limitée et ne nous permet pas d’interagir avec l’utilisateur. Pour faire des choses plus avancées, nous devons enregistrer une fonction qui est appelée sur un événement donné. L’événement le plus courant auquel réagir est un raccourci clavier.
Maintenant, démarrez Ansel, allez dans « préférences > raccourcis > Lua > A shortcut that prints its parameters » (Un raccourci qui imprime ses paramètres), attribuez un raccourci et essayez-le. Vous devriez voir un joli message imprimé à l’écran.
Regardons le code en détail. Nous définissons d’abord une fonction qui prend deux chaînes comme paramètres d’entrée. Le premier est le type de l’événement déclenché (“raccourci”) et le second est le nom du raccourci (“A shortcut that prints its parameters”). La fonction elle-même appelle Ansel.print
, qui imprime le message dans la fenêtre principale.
Une fois cette fonction définie, nous l’enregistrons en tant que fonction de rappel pour un événement de type raccourci. Pour ce faire, nous appelons Ansel.register_event
qui est une fonction générique pour tous les types d’événements. Nous lui disons que nous enregistrons un événement raccourci, puis nous donnons la fonction de rappel à appeler et enfin, nous donnons la chaîne à utiliser pour décrire le raccourci dans la fenêtre des préférences.
Essayons un raccourci un peu plus interactif. Celui-ci examine les images qui intéressent l’utilisateur (celles qui sont sélectionnées ou survolées) et augmente sa note :
À ce stade, une grande partie de ce code devrait être explicite. Juste quelques remarques :
Instead of declaring a function and referencing it, we declare it directly in the call to
Ansel.register_event
this is strictly equivalent but slightly more compact.image.rating
is a field that gives the star rating of any image (between 0 and 5 stars, -1 means rejected).Ansel.gui.action_images
is a table containing all the images of interest. Ansel will act on selected images if any image is selected, and on the image under the mouse if no image is selected. This function makes it easy to follow Ansel’s UI logic in lua.
If you select an image and press your shortcut a couple of times, it will work correctly at first but when you have reached five stars, Ansel will start showing the following error on the console:
C’est la façon dont Lua signale les erreurs. Nous avons essayé de donner une note de 6 à une image, mais elle est limitée à 5. Il serait trivial d’ajouter une vérification, mais suivons le chemin compliqué et capturons l’erreur :
1Ansel.register_event("shortcut",function(event,shortcut)
2 local images = Ansel.gui.action_images
3 for _,v in pairs(images) do
4 result,message = pcall(function()
5 v.rating = v.rating + 1
6 end)
7 if not result then
8 Ansel.print_error("could not increase rating of image "..
9 tostring(v).." : "..message)
10 end
11 end
12end,"Increase the rating of an image")
pcall
exécute son premier argument et intercepte toute exception émise par celui-ci. S’il n’y a pas d’exception, il renvoie true
(vrai) plus tout résultat renvoyé par la fonction. S’il y a une exception, il renverra false
(faux) et le message d’erreur de l’exception. Nous testons simplement ces résultats et les imprimons sur la console.