A few syntaxical/grammatical corrections to the french doc
[adesklets.git] / doc / adesklets_fr.texi
blobda2efe3dba9d8d9efc5bc41736cf20a8785af802
1 \input texinfo   @c -*-texinfo-*-
2 @comment %**start of header
3 @setfilename adesklets_fr.info
4 @documentlanguage fr
5 @include version_fr.texi
6 @settitle adesklets @value{VERSION}
7 @c @syncodeindex pg cp
8 @comment %**end of header
9 @copying
10 Ce manuel concerne adesklets (version @value{VERSION}, @value{UPDATED}).
12 Copyright @copyright{} 2004, 2005
13 S.Fourmanoit @email{syfou@@users.sourceforge.net}. 
15 Traduction française originale de Guillaume Boitel @email{g.boitel@@wanadoo.fr}, 
16 entièrement remise à jour et reprise par Martin 
17 Kirchgessner @email{martin.kirch@@gmail.com} depuis adesklets 0.4.10 
19 @quotation
20 Permission est accordée de copier, distribuer et/ou modifier ce document selon
21 les termes de la Licence Generale Publique GNU (GNU GPL) version 2, ou toute 
22 version ultérieure publiée par la Free Software Fundation. Une copie de la présente  
23 licence est incluse dans la section ``GNU General Public License''
24 @end quotation
26 [Cette version est une traduction complète de la documentation d'adesklets; malgré 
27 tout les nouveautés peuvent mettre quelques jours à être traduites, pour être sur(e)  
28 de ne pas les rater lisez la version originale.]
29 @end copying
31 @c Define useful weblink macro
32 @macro weblink{link}
33 @html
34 <a href="
35 @end html
36 \link\
37 @html
38 ">\link\</a>
39 @end html
40 @end macro
42 @c Define weblink2 macro: a variation on the previous one
43 @macro weblink2{desk,link}
44 @html
45 <a href="\link\">
46 @end html
47 \desk\
48 @html
49 </a>
50 @end html
51 @end macro
53 @dircategory Graphics
54 @direntry
55 * adesklets in french: (adesklets_fr).      Another desklets container (in French).
56 @end direntry
58 @titlepage
59 @title adesklets
60 @subtitle pour la version @value{VERSION}, @value{UPDATED}
61 @author Guillaume Boitel (@email{g.boitel@@wanado.fr})
62 @author Martin Kirchgessner (@email{martin.kirch@@gmail.com})
63 @page
64 @vskip 0pt plus 1filll
65 @insertcopying
66 @end titlepage
68 @contents
70 @ifnottex
71 @node Top
72 @top adesklets
74 @ifnothtml
75 Suivez le lien pour la version originale
76 (@xref{Top,Version anglaise, Contents, adesklets,}.).
77 @end ifnothtml
78 @ifhtml
79 @weblink2{[Version anglaise],../en/index.html}
80 @end ifhtml
82 @insertcopying
83 @end ifnottex
85 @menu
86 * A propos d'adesklets::
87 * Nouveautés::
88 * Installer adesklets::
89 * Utiliser adesklets::
90 * Programmation d'adesklets::
91 * Extension d'adesklets::
92 * Recherche d'aide!::
93 * Foire Aux Questions::
94 @ifhtml
95 * Documentation du paquetage Python::
96 @end ifhtml
97 * Documentation d'Imlib2::
98 * GNU Makefile pour empaqueter les desklets::
99 * Soumettre un desklet::
100 * Copier ce Manuel::
101 * Clé publique Open PGP::
102 @end menu
104 @noindent Une version à jour de ce document peut être trouvée en ligne:
105 @weblink{http://adesklets.sf.net/doc/fr/}.
107 @noindent Vous trouverez aussi sur le site du projet des captures d'écran, les 
108 paquetages des sources, les archives téléchargeables de la documentation,
109 et bien d'autres choses encore: @weblink{http://sf.net/projects/adesklets/}.
111 @node A propos d'adesklets
112 @chapter Qu'est-ce qu'adesklets ?
114 @section Réponse courte
116 `adesklets' est une console interactive
117 d'@weblink2{Imlib2,http://www.enlightenment.org/} pour le
118 X Window System. Il permet à des langages de script d'écrire de manière
119 propre et simple des applets graphiques intégrés au bureau (i.e. "desklets")
120 de belle apparence et légèrement interactifs.
122 Il peut aussi être utilisé comme un éditeur graphique en ligne de commande,
123 un peu comme @weblink2{ImageMagick,http://www.imagemagick.org/}, mais avec
124 des fonctionnalités différentes.
126 @section Réponse longue
128 @command{adesklets} signifie "another desklets [container]" (littéralement: un 
129 autre [conteneur] de desklets). Il a été écrit
130 comme une alternative à d'autres programmes tels que:
132 @enumerate
133 @item
134 GNOME gDesklets (@weblink{http://gdesklets.gnomedesktop.org/})
135 @item
136 KDE SuperKaramba (@weblink{http://netdragon.sourceforge.net/}).
137 @item
138 GKrellM (@weblink{http://www.gkrellm.net/})
139 @end enumerate
141 Puisque ce projet s'appelle 'a'desklets, il est encore possible, pour
142 commencer des projets semblables, d'utiliser l'espace de 'b' à 'z' desklets,
143 à l'exception de 'g' desklets, qui est déjà pris.
145 Plus sérieusement, tous ces programmes sont bons. Néanmoins, les deux premiers
146 ont des pré-requis très lourds en termes de dépendances de bibliothèques; 
147 de base gDesklets requiert que le bureau GNOME soit entièrement
148 installé (plus quelques bibliothèques spécialisées telles que gnome-python),
149 tandis que SuperKaramba a besoin de toutes les bibliothèques de KDE ainsi
150 que de l'environnement de base. Ceci se répercute sur l'exécution des autres
151 taches@footnote{Bien sur, c'est uniquement l'opinion de l'auteur - et ces
152 deux applications ont fait de gros progrès sur la gestion des ressources
153 de version en version.}. D'autre part, alors que GkrellM est plus léger
154 (bien qu'il dépende toujours de GTK+), il ne fournit pas la même qualité en
155 terme de "présentation" (selon les goûts de l'auteur, naturellement) ou de
156 " scriptabilité " par rapport aux deux autres.
158 De ce constat est né @command{adesklets}. Il fournit:
160 @itemize
161 @item
162 un cadre minimal pour des desklets X Window totalement intégrés dans le bureau,
163 avec quelques facilités pour gérer leur lancement, leur placement et
164 leur arrêt.
165 @item
166 une API de dessin générique, riche et facile d'emploi semblable à celle
167 de gDesklets et de SuperKaramba concernant sa qualité visuelle, grâce à la
168 bibliothèque Imlib2.
169 @item
170 des dépendances de bibliothèques simples, se résumant surtout à l'utilisation de la très bonne (et
171 rapide) bibliothèque Imlib2 pour toutes les opérations graphiques. Aucune boite
172 à outils de fenêtres n'est utilisée: le programme repose directement sur xlib.
173 @item
174 un interpréteur petit, léger et robuste potentiellement utilisable avec
175 toutes sortes de langages de scripts, grâce à une syntaxe propre, limitée et
176 homogène. Dans cette version @value{VERSION}, le support de Python a été fourni
177 séparément. Le support de Perl et Ruby serait franchement faisable, 
178 n'hésitez pas à contribuer afin que votre langage préféré soit 
179 supporté (@xref{Extension d'adesklets}.)!
180 @item
181 un usage minimal de l'espace disque, de la mémoire vive et du
182 processeur. Typiquement, avec la glibc-2.3.4 et le noyau Linux 2.6 sur
183 une architecture x86, l'unique exécutable représente moins de 130 Ko sur
184 le disque et prend moins de 3Mo de mémoire virtuelle par desklet, juste après
185 son lancement. Lorsque le desklet est lancé il n'utilise quasiment aucun 
186 cycle processeur (même en prenant en compte le script Python interprété).
187 @end itemize
189 Il ne fournit PAS:
190 @itemize
191 @item
192 une API de fenêtre sophistiquée, ni même un accès aux widgets en dehors de
193 menus gris nus et laids: vous ne pouvez clairement pas écrire une interface 
194 graphique (GUI) avec ces seuls desklets.
195 @item
196 de mécanismes compliqués (ni même de mécanismes clairs, en la matière)
197 pour la configuration des scripts. Les développeurs de scripts sont libres (ou
198 condamnés, selon la façon de voir les choses) de faire ce qu'il leur convient.
199 @item
200 un support pour tout ce qui n'est pas entièrement compatible avec un système
201 POSIX. Par exemple, il serait vraiment surprenant d'arriver à le compiler sur 
202 Cygwin.
203 @item
204 une gestion poussée des évènements utilisateurs. Le but d'@command{adesklets} est
205 d'être fiable et peu consommateur de ressources; seuls quelques événements - 
206 essentiellement relatifs au pointeur - sont utilisables via son l'API.
207 @end itemize
209 @node Nouveautés
210 @chapter Nouveautés
212 @heading Quoi de neuf pour la version 0.4.12?
213 C'est un correctif. Elle corrige une erreur dans le nouveau makefile 
214 distribué pour la documentation qui empêchait les fichiers info et 
215 les pages de manuel d'être installés dans des répertoires arbitraires 
216 vides (merci à Bart Kreska pour le patch). Elle ajoute aussi le support 
217 de nautilus et de KDE version 3.4.1 et supérieures, ainsi qu'un support 
218 préliminaire pour xffm-desktop et ROX-Filer. Elle devrait rectifier un 
219 vieux problème avec certains desklets qui n'arrivaient pas à terminer 
220 leur affichage initial. Enfin la FAQ a aussi été sensiblement enrichie.
222 @heading Quoi de neuf pour la version 0.4.11?
223 C'est un correctif. Concernant la documentation, la version française à été 
224 remise au niveau de l'anglaise (merci à Martin Kirchgessner 
225 @email{martin.kirch@@gmail.com} pour tout son travail). De plus toutes les 
226 sources de la documentation et les fichiers html ont étés séparés du 
227 paquetage principal (grâce à cela, adesklets à maintenant perdu 300Ko). 
228 Concernant le code, cette version contient beaucoup de petites corrections 
229 pour diverses plate-formes -- FreeBSD7 devrait normalement être supporté 
230 sans patch, le manuel du script de soumission des desklets à été ajouté 
231 pour satisfaire Debian. Mais le plus gros changement est probablement 
232 l'inclusion d'une interface optionelle basée sur le shell pour l'interpréteur, 
233 qui facilite l'administration d'adesklets et l'adaptation du code à 
234 de nouveaux gestionnaires de fenêtres.
236 @heading Quoi de neuf pour la version 0.4.10?
237 C'est un correctif. Involontairement, une modification étrange est apparue 
238 dans la version précedente: à cause d'elle 
239 le menu contextuel ne fonctionnait plus de la manière prévue (la touche 
240 Control devrait être enfoncée pour que le menu s'affiche). Cette version 
241 à annulé ce changement, et ajouté une option de configuration, 
242 --enable-control-on-context-menu, pour ceux qui préfèrent vraiment ce 
243 comportement.
245 @heading Quoi de neuf pour la version 0.4.9?
246 C'est un correctif. Elle change les définitions des macros globales pour 
247 qu'adekslets puisse être compilé sans problème sur FreeBSD 6.x, corrige 
248 une erreur lors de la suppression des options à passer au compilateur C 
249 relatives au débogage, et ajoute un nouveau programme de démonstration 
250 du threading.
252 @heading Quoi de neuf pour la version 0.4.8?
253 C'est un correctif. Elle change les définitions des macros globales pour 
254 qu'adekslets puisse être compilé sans problème sur FreeBSD 5.x, et 
255 implante la détection d'une fausse root window pour KDE, grâce à yogi77, 
256 du forum.
258 @heading Quoi de neuf pour la version 0.4.7?
259 C'est un correctif. Elle retire les appels à quelques fonctions 
260 mathématiques de C99 qui ne sont pas disponibles dans les premiers BSD, 
261 rendant le code plus portable. Elle ajoute aussi deux nouvelles commandes 
262 à l'API pour mieux contrôler le système de cache des images.
264 @heading Quoi de neuf pour la version 0.4.6?
265 C'est un correctif et une mise à jour de la documentation. Elle corrige de 
266 nombreux bugs mineurs dans les scripts de soumission des desklets, rend la 
267 structure autoconf plus portable, ajoute un nouveau script de démonstration 
268 dans test (widget.py), corrige quelques bugs de placement à l'écran dus à la 
269 routine xwindow_move_window (merci à man1ed du forum pour avoir fourni le 
270 patch), et enfin ajoute une nouvelle annexe contenant une version en ligne 
271 de la documentation d'Imlib2.
273 @heading Quoi de neuf pour la version 0.4.5?
274 C'est un correctif et une mise à jour de la documentation. Elle améliore le 
275 procédé de soumission des desklets en publiant le script complet de mise en 
276 ligne utilisé par l'auteur. Elle corrige aussi un bug du rafraichissement des 
277 fenêtres, qui apparait quand on utilise des images d'arrière-plan 
278 et des menus spécifiés par l'utilisateur; merci à ZeroDivide de l'avoir 
279 signalé. Quelques mises à jour et corrections de la documentation ont également 
280 été faites.  
282 @heading Quoi de neuf pour la version 0.4.4?
283 C'est une mise à jour de la documentation, principalement faite pour les 
284 auteurs de desklets. Elle inclut surtout une nouvelle annexe expliquant comment 
285 soumettre un desklet (avec l'aide d'un script), ainsi qu'une nouvelle sous-partie 
286 sur la détection des polices sur l'ensemble du système. Quelques ajouts ont 
287 été effectués sur la FAQ pour couvrir ce sujet.
289 @heading Quoi de neuf pour la version 0.4.3?
290 C'est une mise à jour de la documentation. Ici la plupart du travail à été 
291 fait part Mike Pirnat @email{exilejedi@@users.sourceforge.net}, qui a eu la 
292 gentillesse de corriger l'anglais déficient de l'auteur en relisant ce manuel 
293 d'un bout à l'autre. Merci Mike! La FAQ a aussi été largement enrichie, et 
294 une nouvelle annexe pour les auteurs de desklets à été ajoutée.
296 @heading Quoi de neuf pour la version 0.4.2?
297 C'est un correctif. Elle corrige un bug du paquetage Python qui l'empêchait 
298 de se compiler avec toutes les versions de Python inférieures à 2.4.0. Merci 
299 à nucular, du forum d'adesklets, de l'avoir remarqué. Elle corrige aussi un 
300 problème mineur concernant mmap sur ce package.  
302 @heading Quoi de neuf pour la version 0.4.1?
303 C'est un correctif. Elle sécurise l'utilisation de la classe optionelle 
304 @code{adesklets.ConfigFile} en changeant complètement la manière dont les 
305 fichiers de configurations sont importés, ce qui retire une faille de sécurité 
306 potentielle.
308 @heading Quoi de neuf pour la version 0.4.0?
309 C'est la sortie d'une nouvelle version mineure. L'interpreteur supporte 
310 maintenant l'internationalisation. Il peut maintenant travailler 
311 dynamiquement avec differents jeux de caractères sur les plate-formes 
312 supportant iconv (selon le standard UNIX98), et les affiche correctement. 
313 Le paquetage Python a aussi été enrichi d'une classe generique (optionelle) 
314 de configuration, en esperant qu'elle sera utile aux auteurs de desklets.
316 @heading Quoi de neuf pour la version 0.3.2?
317 C'est une mise à jour de la documentation. Une partie pour les 
318 programmeurs Python à été ajoutée, et la FAQ à été largement enrichie.
320 @heading Quoi de neuf pour la version 0.3.1 ?
321 Cette version corrige un oubli en implantant la gestion de l'interruption
322 des barrières temporelles (time gate) par des évènements X. Cette correction
323 est essentielle à la bonne marche de plusieurs effets dynamiques.
325 @heading Quoi de neuf pour la version 0.3.0 ?
326 Ceci est une nouvelle version mineure. Nous nous sommes beaucoup souciés de
327 la portabilité depuis les toutes premières versions d'adesklets; avec cette
328 version, le paquetage compile et tourne sans accroc sur FreeBSD et NetBSD 
329 (@xref{Portabilité}.). La gestion des évènements a également été épurée en interne,
330 et le paquetage Python étendu pour supporter la modification dynamique des 
331 évènements interceptés (voir @file{test/test_events.py}).
333 L'interpréteur répond maintenant aux désidérata de l'auteur, et ne devrait
334 pas être significativement étendu dans le futur; tout est relativement en
335 place pour écrire tout type de desklet, y compris des animations.
337 @heading Quoi de neuf pour la version 0.2.1 ?
338 Il s'agit de la correction d'un bug mineur du à une incompatibilité avec la 
339 bibliothèque GNU history. Merci à Mike Pirnat @email{exilejedi@@users.sourceforge.net} 
340 de l'avoir signalé.
342 @heading Quoi de neuf pour la version 0.2.0 ?
343 Ceci est une nouvelle version mineure. L'interpréteur supporte dorénavant
344 les variables textuelles (la substitution dynamique de chaînes, pour être précis),
345 ainsi que l'exécution de séquences préenregistrées de commandes sous des contraintes
346 précises de temps (un mode indirect d'exécution); cela donne aux desklets un moyen
347 de générer des animations fluides. Lancez le script de démonstration
348 @file{test/fading.py} du paquetage de base pour voir ces nouvelles fonctions
349 à l'oeuvre.
351 Les développeurs, quant à eux, ont maintenant accès à une plateforme complètement
352 réécrite d'enregistrement de rapports d'exécution de toutes session 
353 de l'interpréteur (à des fins de débogage).
355 @heading Détails
356 Lisez le fichier @file{ChangeLog} pour connaitre le détail des changements 
357 apportés.
359 @ifplaintext
360 @c Sets up a marker for automated INSTALL_FR file generation
361 INSTALL_BEG
362 @node Installer adesklets
363 @unnumbered Installer adesklets
364 @end ifplaintext
365 @ifnotplaintext
366 @node Installer adesklets
367 @chapter Installer adesklets
368 @end ifnotplaintext
370 @section Pré-requis pour la compilation
372 Pour compiler adesklets à partir des sources, vous aurez besoin de :
374 @itemize
375 @item
376 Un compilateur supportant le C ANSI ainsi que les macros variadiques (à peu
377 près toutes les versions de @weblink2{gcc,http://gcc.gnu.org} supérieures à 
378 la 2.7.0 devraient fonctionner, tout comme n'importe quoi d'autre sorti ces dix
379 dernières années)
380 @item
381 Les en-têtes@footnote{Excepté pour les compilations sans fichiers en-têtes, utiles 
382 pour les environnements serveurs et équivalents - lire la suite pour de plus
383 amples informations.} et les bibliothèques @weblink2{X11,http://www.x.org/}.
384 @item
385 Imlib2 1.1.2 ou supérieure (la plus récente sera la meilleure: allez 
386 la télécharger sur @weblink{http://sourceforge.net/projects/enlightenment/}).
387 @item
388 @weblink2{GNU readline,http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html}
389 @item
390 un système raisonnablement compatible POSIX
391 @end itemize
393 @noindent Les composants suivants pourront aussi être utilisés, si'ls sont 
394 présents sur le système:
396 @itemize
397 @item
398 @weblink2{fontconfig,http://www.fontconfig.org/}, pour la détection automatique 
399 des polices utilisables présentes dans le système
400 @item
401 @weblink2{GNU history,http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html}, 
402 le complément fidèle de GNU readline permettant l'enregistrement d'historiques 
403 de commandes
404 @item
405 @weblink2{Python,http://www.python.org} 2.3 ou supérieure, si vous désirez
406 le support pour Python (vous en aurez sûrement besoin: les desklets sont 
407 écrits avec ce langage)
408 @end itemize
410 De nombreux systèmes placent les versions de ``développement'' des librairies 
411 et de leurs outils dans des paquetages séparés (@command{imlib2-devel}, 
412 @command{readline-devel}, @command{fontconfig-devel}, @command{python-devel}, 
413 etc); si c'est le cas du système de destination, ces versions devront être 
414 utilisées plutôt que les versions ``normales''.
416 @section Pré-requis pour l'exécution
418 En plus des dépendances de compilation, l'interface optionelle d'adesklets 
419 basée sur le shell, installée par défaut, requiert elle-même quelques 
420 utilitaires, tous censés satisfaire un minimum les spécifications POSIX 
421 1003.2 et 1003.2a:
423 @itemize
424 @item un shell compatible @command{/bin/sh}
425 @item un éditeur de flux (Streaming EDitor, sed)
426 @item test, mkdir, rmdir, sleep, kill et ls
427 @end itemize
429 les programmes @command{xwininfo} et @command{xprop} peuvent aussi être 
430 utilisés, si une routine de détection de fausse fenêtre racine (fake root 
431 window) donnée est explicitement invoquée. Les implémentations de ces 
432 utilitaires de XFree86 et de X.org ont toutes les deux été testées. 
433 D'autres programmes seront utilisés par certaines routines de détection: 
434 voyez les sources de l'interface pour plus de détails.
436 @section Note sur la portabilité
437 @anchor{Portabilité}
438 Ce paquetage est construit en gardant la portabilité à l'esprit - toutes les
439 extensions spécifiques ont été évitées, et les spécifications (ANSI, SVID
440 3, BSD 4.3, POSIX) ont été suivies scrupuleusement. Néanmoins, tous les
441 développement ont été fait sur un unique système Linux: il est très probable
442 qu'adesklets ne compilera pas ou ne fonctionnera pas comme prévu dans
443 certains cas. Régler ces problèmes est important pour nous.
445 adesklets a été porté et testé avec succès par les développeurs sur plusieurs 
446 systèmes. Au moment de rendre publique la version @value{VERSION}, le paquetage 
447 a été compilé et utilisé avec succès sous toutes sortes de:
448 @itemize
449 @item @strong{Noyaux/systèmes}: Linux (séries 2.2, 2.4 et 2.6), FreeBSD 
450       (4.10, 5, 6 et 7), NetBSD (1.6)
451 @item @strong{Bibliothèques C}: glibc (2.1.3 et plus), uclibc (0.8.28), si 
452 disponibles sur votre plate-forme
453 @item @strong{Compilateurs}: gcc (2.95.2, toutes versions 3, 4.0.1), 
454       icc 7.0 (en paramètrant)
455 @end itemize
457 De plus adesklets est lui-même complètement indépendant de l'architecture matérielle, 
458 bien qu'Imlib2 soit plutôt optimisée pour x86 et amd64. Il est couramment utilisé 
459 par l'auteur sur des machines x86, amd64 et ppc.
461 Au moment où ces lignes sont écrites, adesklets est déjà intégré dans les portages 
462 de nombreux BSD et dans les catalogues de nombreuses distributions de Linux. 
463 Mentionnons notemment:
465 @itemize
466 @item Le paquetage Debian: @weblink{http://packages.debian.org/unstable/x11/adesklets}, 
467 maintenu par Bartosz Fenski @email{fenio@@debian.org}, 
468 @item Le portage FreeBSD: @weblink{http://www.freshports.org/deskutils/adesklets/}, 
469 maintenu par Roman Bogorodskiy @email{novel@@freebsd.org},
470 @end itemize
472 Vous avez vous-même essayé de faire tourner adesklets sur une architecture 
473 non citée plus haut? Faites-le nous savoir, surtout si ça n'a pas marché.
475 @section Téléchargement du logiciel
477 La version à jour du logiciel (en archive source bzipée) est disponible
478  sur la page du projet sur sourceforge:
479 @weblink{http://sf.net/projects/adesklets/}
481 Vous pouvez l'extraire depuis la console avec @command{tar}. Avec la
482 version @value{VERSION}, la ligne de commande devrait être:
483 @example
484 tar xvjf adesklets-@value{VERSION}.tar.bz2
485 @end example
486 ou, si la version que vous avez installée de @command{tar} ne supporte pas
487 les filtres d'archives bzip2:
488 @example
489 bzcat adesklets-@value{VERSION}.tar.bz2 | tar xv
490 @end example
492 @section Vérification optionelle de l'intégrité du logiciel
494 Pour adesklets @value{VERSION},  vous pouvez également télécharger depuis 
495 @weblink2{sourceforge,http://sf.net/projects/adesklets/} une signature 
496 détachée sous forme ascii nommée @command{adesklets-@value{VERSION}.tar.bz2.asc},
497 que vous pourrez utiliser avec la clé publique de l'auteur 
498 (@pxref{Clé publique Open PGP}, en annexe) pour vous assurer de 
499 l'intégrité du paquetage. Par exemple, avec @command{GnuPG}
500 (@weblink{http://www.gnupg.org/}), vous utiliseriez la commande:
502 @example
503 gpg --verify adesklets-@value{VERSION}.tar.bz2.asc adesklets-@value{VERSION}.tar.bz2
504 @end example
506 Vous pouvez également obtenir la clé publique pour
507 l'adresse @email{syfou@@users.sourceforge.net}
508 de plusieurs serveurs de clés publiques tel @weblink{http://www.keyserver.net/} ou
509 encore @weblink{http://pgp.mit.edu/}. N'hésitez pas à contacter l'auteur directement
510 si vous désirez vous assurer plus avant de l'authenticité de cette clé.
512 @section Compilation et Installation:
514 adesklets fournit les scripts usuels autoconf/automake des paquetages GNU.
516 Donc, dans la plupart des cas, l'installation suit les trois étapes habituelles:
518 @enumerate
519 @item
520 Atteignez le répertoire contenant le code source du paquetage (avec `cd') et tapez
521 `./configure' pour configurer le paquetage pour votre système.  Si vous utilisez
522 `csh' sur une ancienne version de System V, vous devrez peut-être plutot taper
523 `sh ./configure' afin d'empêcher `csh' d'exécuter lui-même `configure'.
525 L'exécution de `configure' peut prendre du temps. Pendant qu'il s'exécute,
526 il écrit quelques messages qui vous informent des fonctionnalités qu'il est
527 en train de vérifier.
528 @item
529 Tapez `make' pour compiler le paquetage.
530 @item
531 Tapez `make install' pour installer les programmes, tous les fichiers de
532 données et la documentation.
533 @end enumerate
535 Vous pouvez enlever les programmes binaires et les fichiers objets du
536 répertoire qui contient le code source en tapant `make clean'. Pour enlever
537 également les fichiers que `configure' a créé (ainsi vous pourrez compiler
538 le paquetage pour une autre type d'ordinateur), tapez `make distclean'.
540 @section Compilateurs et Options:
542 Certains systèmes requièrent des options inhabituelles pour la compilation
543 ou l'édition des liens que le script `configure' ne connaît pas. Vous pouvez
544 donner à `configure' des valeurs initiales pour des variables en les déclarant
545 dans l'environnement. En utilisant un shell compatible Bourne, vous pouvez
546 faire cela en ligne de commande comme ceci:
548 @example
549 CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
550 @end example
552 @noindent Ou dans les systèmes dotés du programme `env', vous pouvez faire:
554 @example
555 env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
556 @end example
558 @section Fonctionnalités Optionnelles :
560 adesklets possède quelques fonctionnalités optionnelles que vous pouvez
561 installer ou non à partir du script de configuration. Tapez :
563 @example
564 ./configure --help
565 @end example
567 @noindent pour une description courte et complète. En voici quelques une
568 intéressantes :
570 @itemize
571 @item
572 Vous pouvez choisir de compiler adesklets sans aucun support pour X
573 (@command{--without-x}).
574 Vous aurez une version qui n'est manifestement pas faite pour le rendu de
575 desklets, mais bonne pour de la manipulation d'images en ligne de commande.
576 @item
577 Vous pouvez enlever le support pour d'autres paquetages ainsi :
578 @command{--without-history}, @command{--without-fontconfig}
579 @item
580 L'interface du shell peut elle aussi être retirée en utilisant 
581 l'option: @command{--disable-frontend-shell-driver}
582 @end itemize
585 @node Utiliser adesklets
587 @chapter Utiliser adesklets
589 @ifplaintext 
590 INSTALL_END
591 @end ifplaintext
593 @section ... Comme un conteneur de desklets
595 Par lui-même, adesklets fait peu: il ne fournit que le nécessaire pour
596 faire plus ! Vous aurez besoin soit de lui dire quoi faire en
597 lui envoyant des commandes (voir la section suivante) soit d'utiliser d'autres scripts
598 (les desklets) qui le piloteront pour vous.
600 @noindent Aujourd'hui, de nombreux desklets existent: vous pouvez les 
601 trouver sur le site Internet d'adesklets en tant que téléchargements 
602 séparés: @weblink{http://adesklets.sf.net/desklets.html}.
604 @subsection Ajouter un nouveau desklet à votre affichage X
605 Pour ajouter un nouveau script de desklet, il suffit simplement de:
607 @enumerate
608 @item
609 Télécharger sa tarball et la désarchiver quelque part dans votre répertoire
610 personnel
611 @item
612 Lire le fichier README; les pré-requis ou instructions spécifiques y seront
613 donnés. Habituellement, vous n'aurez besoin que d'une installation
614 d'adesklets et d'un serveur X lancé, puis de lancer le script exécutable à
615 partir de votre répertoire de base.
616 @end enumerate
618 Depuis adesklets 0.4.11, les desklets en Python vous demanderont explicitement 
619 si vous voulez les enregistrer ou les tester. Ils supporteront également 
620 l'option @command{--help}, que vous pouvez utiliser pour savoir quelles sont 
621 les options que vous pouvez passer à l'interpréteur d'adesklets pendant des tests 
622 (détection de fausse fenêtre racine, etc.).
624 @noindent Notez bien que :
626 @itemize
627 @item
628 Lancer le même script plusieurs fois va en créer plusieurs instances.
629 @item
630 Sur les ordinateurs disposant de plusieurs écrans, les scripts seront affichés
631 sur leur écran hérité par défaut (par exemple, si vous ne faites rien
632 de spécial, appeler un script à partir d'un xterm sur l'écran 1 lancera le
633 desklet sur l'écran 1).
634 @end itemize
636 @noindent La plupart du temps, les scripts de desklets sont faits
637 pour fonctionner tant que vous ne leur dites pas de
638 s'arrêter. L'utilisateur a un contrôle total sur le démarrage, l'arrêt,
639 le redémarrage (quand c'est possible) et le positionnement du desklet, 
640 qui n'a aucun contrôle sur ces opérations.
642 @noindent Les quelques réglages de l'utilisateur sont stockés dans le fichier
643 @file{$HOME/.adesklets} de votre répertoire personnel. Habituellement, vous
644 n'avez pas à éditer ce fichier vous-même. Si vous le faites, assurez-vous
645 qu'aucune instance d'@command{adesklets} ne s'exécute en même temps.
647 @unnumberedsubsubsec Note concernant les polices du système
649 @emph{Vous pouvez sans problème passer cette partie si vous ne comptez pas 
650 utiliser des polices non fournies avec adeklets.}
652 Toutes les polices TrueType présentes sur votre système peuvent être utilisées 
653 avec adesklets, pourvu que votre système supporte fontconfig 
654 (@weblink{http://www.fontconfig.org/}) et qu'adesklets ait été compilé sans l'option
655 @code{--without-fontconfig} (par défaut il est compilé avec le support de 
656 fontconfig; @xref{Installer adesklets}.). Lors de son initialisation, 
657 un adesklets compilé avec fontconfig va parcourir toutes les polices 
658 détectées sur votre système pour identifier toutes les polices TrueType. 
659 Lisez la documentation de fontconfig pour savoir comment configurer 
660 correctement l'accès aux polices de vos logiciels 
661 (@xref{Foire Aux Questions}, pour quelques conseils sur le 
662 débogage de fontconfig). Il est aussi bon de savoir que le paquetage d'adesklets 
663 contient une copie de la police Bitstream's Vera; tous les utilisateurs peuvent 
664 donc s'attendre à ce qu'@command{adesklets} dispose toujours de cette police, 
665 au minimum.
667 @unnumberedsubsubsec Notes concernant l'internationalisation
669 @emph{Vous pouvez sans problème passer cette partie si vous n'envisagez pas 
670 d'utiliser des caractères étendus dans vos desklets.}
672 Si votre système supporte @command{iconv} (@xref{Installer adesklets}.), 
673 vous devriez pouvoir utiliser n'importe quel caractère de n'importe quel
674 jeu de caractères que votre système connait pour afficher du texte, que ce 
675 soit dans un desklet ou dans ses menus, pourvu que vous ayez les polices 
676 TrueType appropriées (c'est à dire des polices TrueType incluant la 
677 représentation de ces caractères)@footnote{Par exemple, la police 
678 Bitstream's Vera fournie avec @command{adesklets} contient des symboles 
679 pour pratiquement tous les caractères du jeu Latin-1.}.
681 En tout cas, en utilisant des caractères étendus (en dehors des 7 bits 
682 @code{ASCII}), assurez-vous que les paramètres locaux de GNU readline 
683 n'interfèrent pas. Ces trois paramètres devraient être configurés comme 
684 indiqué ci-dessous dans le fichier @file{initrc} approprié
685 @footnote{Veillez vous réferer à la documentation de GNU readline}:
687 @example
688 set input-meta on
689 set convert-meta off
690 output-meta on
691 @end example
693 Si vous ne voulez pas adapter vos paramètres de GNU readline, vous pouvez 
694 aussi utiliser l'option @code{--enable-force-extended-characters-input} du 
695 script @code{configure} lors de la configuration du paquetage à partir des 
696 sources, ainsi l'interpreteur outrepassera en interne ces trois variables 
697 dès qu'il le faudra.
699 Bien sur, vous aurez besoin de desklets utilisant ces caractères étendus. 
700 Au moment d'écrire ces lignes, tous les desklets en Python ne provenant pas 
701 de contributions les utilisent; pour ceux-là l'utilisateur peut choisir 
702 quel jeu de caractères utiliser en le précisant dans le fichier de 
703 configuration, quand il existe@footnote{si'l n'existe pas, cela signifie 
704 que de toute façon le desklet n'a pas besoin d'internationalisation}; 
705 l'utilisateur doit simplement définir correctement la ligne 'coding'
706 @footnote{Pour plus de détails consultez @weblink{http://python.fyxm.net/peps/pep-0263.html}.}.
708 Par exemple, pour utiliser les caractères ISO Latin-1, on utilisera 
709 quelquechose comme:
711 @example
712 # -*- coding: ISO-8859-1 -*-
713 @end example
715 à la première ou deuxième ligne du fichier de configuration d'un desklet 
716 en Python@footnote{Evidemment, ce fichier de configuration devra être 
717 enregistré en utilisant l'encodage ISO Latin-1 ou n'importe lequel de 
718 ses dérivés, comme l'@code{ASCII}.}.
720 Enfin, veillez noter que si votre plate-forme ne supporte pas iconv, 
721 vous devrez toujours laisser @code{ASCII} comme paramètre d'encodage, 
722 autrement les desklets vous renverront des erreurs fatales comme 
723 @code{charset conversion not compiled in}. 
725 @subsection Restaurer les desklets précédents sur une nouvelle session X
726 Invoquer @command{adesklets} sans arguments@footnote{Attention: par défaut 
727 depuis adesklets 0.4.11 vous @emph{devez} ajouter certaines options si 
728 votre gestionnaire de fenêtres utilise une fausse fenêtre racine. 
729 @xref{Foire Aux Questions}.}:
730 @example
731 adesklets
732 @end example
734 @noindent est suffisant pour redémarrer tous les desklets qui tournaient la
735 dernière fois que vous avez tué le serveur X (dans ce mode, @command{adesklets}
736 terminera rapidement par lui-même : il n'y a pas besoin de le lancer en
737 arrière-plan. adesklets n'utilise pas de démon : chaque applet créé un
738 interpréteur @command{adesklets} indépendant comme processus fils). 
739 Invoquer @command{adesklets} quand des desklets sont déjà 
740 lancés forcera leur arrêt avant leur redémarrage
741 @footnote{Les instances d'@command{adesklets} et leurs parents immédiats 
742 recevront alors un signal SIGKILL.}.
744 @noindent Si vous pensez utiliser des desklets régulièrement, vous
745 devriez mettre la commande @code{adesklets} quelque part dans
746 l'initialisation de votre session X. Je ne peux pas dire où avec précision,
747 puisque cela varie énormément d'un système à l'autre. Cherchez sur :
748 @weblink{http://www.google.com/search?q=''x window''+startup} pour une
749 aide générale.
751 Depuis adesklets 0.4.11, une interface plus complète basée sur le shell 
752 est à votre disposition si vous l'avez installée (ce qui se fait par 
753 défaut). Elle fournit un ensemble plus fonctionel d'options. Lancez 
755 @example
756 adesklets --help
757 @end example
759 Pour voir ce que vous avez au bout des doigts. Notez bien que depuis 
760 adesklets 0.4.11, si vous avez besoin de la détection de fausse fenêtre racine 
761 vous @strong{devez} normalement activer les options correctes en ligne 
762 de commande (@xref{Foire Aux Questions}.).
764 @section ... Comme un éditeur graphique en ligne de commande
766 Vous pouvez aussi utiliser adesklets comme un éditeur graphique en ligne de
767 commande. Si vous tapez dans une console:
769 @example
770 adesklets :
771 @end example
773 @noindent Vous obtiendrez quelque chose ressemblant à ceci :
775 @anchor{prompt}
776 @example
777 adesklets 0.1.0 (Fri Jan 28 19:09:13 EST 2005), on Linux 2.6.10
778 [gcc 3.4.3 20041125 (Gentoo Linux 3.4.3-r1, ssp-3.4.3-0, pie-8.7.7)]
779 Press TAB for hints.
780 0 >>> _
781 @end example
783 @noindent La dernière ligne est une invite. Elle vous dit que vous êtes prêt
784 à entrer la commande numéro 0. Dans adesklets @value{VERSION}, vous avez
785 environ 150 commandes à portée de main. Grâce à GNU readline, de nombreuses 
786 routines d'auto-complétion sont présentes, ce qui vous permet d'explorer 
787 facilement. Appuyez sur TAB pendant que vous entrez le nom d'une commande 
788 ou le premier argument d'une commande, et des informations utiles seront 
789 affichées. @xref{premiers pas,,une introduction à adesklets}, pour plus d'informations.
791 @node Programmation d'adesklets
792 @chapter Programmation d'adesklets
793 @section Une introduction à adesklets
794 @anchor{premiers pas}
796 Comme expliqué ci-dessus (@xref{A propos d'adesklets}.), adesklets est
797 principalement une console interactive d'Imlib2, avec une ou deux fonctions
798 supplémentaires:
800 @itemize
801 @item
802 Quand un affichage X est présent, la gestion automatique d'une 
803 fenêtre simple.
804 @item
805 Support automatique de la pseudo-transparence
806 @item
807 Gestion d'applets persistants entre sessions
808 @end itemize
810 @noindent Commençons une session interactive typique pour voir ce qui se
811 passe. Sous X, ouvrez un terminal et tapez:
813 @example
814 adesklets :
815 @end example
817 @noindent Comme dans la section précédente (@xref{prompt,, 'Utilisation
818 d'adesklets comme un éditeur graphique en ligne de commande' }.), vous obtenez
819 une invite. Maintenant entrez la commande '@code{images_info}'. Vous devriez
820 obtenir sur la sortie standard :
822 @example
823 2 images
824 id 0 width 1 height 1 alpha 1 filename (null)
825 id 1 width 1 height 1 alpha 1 filename (null)
826 command 0 ok: images_info
827 @end example
829 @noindent Cela signifie que vous avez deux images : l'image 0 et l'image 1,
830 et qu'elles ont une taille de 1x1 pixel. Ce sont les seules images que
831 vous ne pourrez jamais détruire ou modifier (redimensionner indépendamment, 
832 retourner diagonalement, etc.) comme vous le souhaitez. Qu'est-ce que c'est 
833 que cela?
835 @itemize
836 @item
837 Image 0 est l'image d'avant-plan. Par défaut, c'est la seule image qui
838 est affichée dans une fenêtre simple gérée par @command{adesklets}.
839 @item
840 Image 1 est l'image d'arrière-plan. Par défaut, elle contient toujours le
841 contenu de la fenêtre racine (le bureau) qui est sous cette fenêtre. Sans
842 modification de notre part, elle est toujours mise à jour lorsque l'utilisateur
843 la déplace, la redimensionne, lorsque le fond d'écran change, etc.
844 @end itemize
846 @noindent Mais où est cette fenêtre? Eh bien, pour l'instant, ce sont seulement des
847 images de 1x1 pixel, et elles ne sont pas affichées@footnote{"Mappé" dans le 
848 jargon d'X Window} à l'écran. Ainsi, redimensionnons les à 100x100 pixels:
849 tapez '@code{window_resize 100 100}'. Maintenant, si vous retapez la commande
850 '@code{images_info}', vous obtiendrez:
851 @example
852 2 images
853 id 0 width 100 height 100 alpha 1 filename (null)
854 id 1 width 100 height 100 alpha 1 filename (null)
855 command 2 ok: images_info
856 @end example
858 @noindent Vous voyez? Les images d'avant-plan et d'arrière-plan ont été
859 redimensionées à 100x100 pixels: de plus l'arrière-plan a été mis à jour
860 pour contenir la nouvelle image de fond. Maintenant, rendons cette fenêtre
861 visible. Tapez les deux commandes: '@code{window_reset managed}' et enfin
862 '@code{window_show}'.
864 @noindent La première commande demande à adesklets de laisser votre
865 gestionnaire de fenêtres "gérer" votre fenêtre (ce qui n'est pas fait par défaut): 
866 cela signifie que la fenêtre va être décorée, et que  vous pourrez changer sa
867 visibilité@footnote{Une fenêtre "non-gérée" est très utile pour les desklets: 
868 c'est comme si c'était une partie de la fenêtre racine puisqu'elle peut
869 être faite pour ne jamais être en avant-plan et pour rester affichée (mapped) 
870 lorsque l'on change d'espace de travail.} de façon interactive. La seconde
871 montre votre fenêtre de 100x100. Rien d'impressionnant: un carré noir de
872 100x100 avec une barre de titre et des bordures fixes.
874 @noindent Comme dit plus haut, seule l'image 0 (l'avant-plan) est affichée par
875 défaut. Maintenant, tapons : '@code{window_set_transparency 1}'. Wouah! Nous
876 voyons la fenêtre racine du dessous! Avec "window transparency"
877 activé, l'image 1 (arrière-plan) est d'abord copiée dans la fenêtre, puis
878 l'image 0 (avant-plan) qui est entièrement noire et transparente, est mise
879 par-dessus@footnote{Enfin... Pas tout à fait : il y a un buffer qui intervient 
880 pour la performance, mais l'opération est logiquement équivalente à
881 cette description.}.
883 @noindent Il est temps de parler des couleurs: souvenez-vous, adesklets
884 est une console d'Imlib2. Par conséquent, comme Imlib2@footnote{Gardez
885 votre documentation d'Imlib2 à proximité: c'est très utile!
886 @xref{Documentation d'Imlib2}.}, les couleurs sont toujours de
887 véritables couleurs 32 bits codées en RVBA - huit bits par canal (de 0 à
888 255), incluant un canal alpha pour la transparence. La conversion de palette se
889 fera  automatiquement si la définition de votre écran est inférieure, vous
890 n'avez pas à vous en occuper. Si vous tapez: '@code{context_get_color}',
891 vous obtiendrez:
893 @example
894 command 0 ok: context color 255 255 255 255
895 @end example
897 @noindent Imlib2 est une sorte de machine par états; en tant que tel, il utilise un 
898 "contexte" qui garde en mémoire une série d'attributs qui seront utilisés dans
899 ses opérations futures. Par exemple, nous savons maintenant que la couleur
900 qui sera utilisée, aussi longtemps que nous ne la modifions pas, sera un
901 blanc opaque (rouge=255, bleu=255, vert=255, alpha=255). Si nous tapons:
902 '@code{context_get_image}', il retourne:
903 @example
904 command 0 ok: context image 0
905 @end example
907 @noindent Cela signifie que toute opération que nous effectuons sur une fenêtre
908 sera faite directement sur l'image d'avant-plan. Dessinons un rectangle plein
909 semi-transparent de couleur magenta sur l'avant-plan. Les commandes seront:
910 '@code{context_set_color 255 0 0 200}' et '@code{image_fill_rectangle 25 25
911 50 50}'. Élégant, n'est-ce pas?
913 @noindent Si vous avez l'habitude de programmer avec Imlib2, vous avez 
914 du remarquer que ces dernières commandes ont l'air familières. C'est
915 assez normal; la plupart des fonctions C d'Imlib2 sont présentées de
916 la même façon dans les 'commandes' d'adesklets. Ainsi, la commande
917 d'adesklets  '@code{image_fill_rectangle}' suit la même sémantique que
918 la fonction '@code{imlib_image_fill_rectangle()}' d'Imlib2, la commande
919 '@code{context_set_color}' suit celle de la fonction '@code{imlib_context_set_color()}',
920 etc. Les deux seules différences significatives (et systématiques) sont premièrement que
921 partout où vous utiliserez un objet '@code{Imlib_Quelquechose}' en C, vous
922 utiliserez un ID entier avec adesklets, et deuxièmement dans la sémantique des fonctions
923 '@code{imlib_free_Quelquechose()}' où on doit préciser l'ID de l'objet 
924 auquel s'applique la fonction au 
925 lieu de libérer l'objet de ce type sélectionné dans le contexte.
927 @noindent Tout ceci est facile à illustrer. Chargeons la police "Vera" 
928 incluse dans adesklets à la taille 20pt, mettons la en police par défaut 
929 et écrivons 'Hello' en blanc opaque en diagonale sur l'image d'avant-plan 
930 en partant du coin en haut à gauche, avant de décharger la police. 
931 Cela devrait ressembler à:
933 @example
934 6 >>> load_font Vera/20
935 command 6 ok: new font 0
936 7 >>> context_set_font 0
937 command 7 ok: context_set_font 0
938 8 >>> context_set_direction text_to_angle
939 command 8 ok: context_set_direction text_to_angle
940 9 >>> context_set_angle 45
941 command 9 ok: context_set_angle 45
942 10 >>> context_set_color 255 255 255 255
943 command 10 ok: context_set_color 255 255 255 255
944 11 >>> text_draw 0 0 Hello
945 command 11 ok: text_draw 0 0 Hello
946 12 >>> free_font 0
947 command 12 ok: free_font 0
948 @end example
950 @noindent Si vous regardez votre documentation d'Imlib2, vous remarquerez
951 immédiatement les deux différences que l'on vient d'évoquer: toutes les
952 références à la police Vera/20 sont faites par un ID entier (0 ici), et
953 la commande '@code{free_font}', contrairement à la fonction correspondante
954 '@code{imlib_free_font()}', est appliquée à la police dont l'ID est donné en 
955 argument plutôt qu'à la police du contexte.
957 @noindent A partir de là, imaginons que vous voulez sauvegarder l'image résultante; 
958 aucun problème! Tapez: '@code{save_image out.png}', et
959 l'avant-plan sera sauvé dans un fichier "out.png" dans le répertoire 
960 courant@footnote{Pour que ça marche, il faut que votre installation d'Imlib2 
961 soit correctement configurée pour utiliser libpng, sinon vous
962 risquez de recevoir l'erreur "no loader for file format".}. Maintenant,
963 juste pour le plaisir, quittons adesklets, et lançons une autre session
964 interactive pour voir si nous pouvons recharger cette image. Tapez juste
965 la commande "@code{quit}" ou pressez ^D (Control D: fin de fichier), votre
966 nouvelle session devrait ressembler à ceci :
968 @example
969 0 >>> window_resize 100 100
970 command 0 ok: window_resize 100 100
971 1 >>> window_reset managed
972 command 1 ok: window_reset managed
973 2 >>> window_set_transparency 1
974 command 2 ok: window_set_transparency 1
975 3 >>> load_image out.png
976 command 3 ok: new image 2
977 4 >>> blend_image_onto_image 2 1 0 0 100 100 0 0 100 100
978 command 4 ok: blend_image_onto_image 2 1 0 0 100 100 0 0 100 100
979 5 >>> window_show
980 command 5 ok: window_show
981 6 >>> free_image 2
982 command 6 ok: free_image 2
983 @end example
985 @noindent Bien sur, nous voulions visualiser le résultat - c'est
986 pourquoi nous avons utilisé les commandes '@code{window_reset}',
987 '@code{window_set_transparency}' et '@code{window_show}': elles n'ont
988 pas d'autre utilité. La commande '@code{blend_image_onto_image}' vient elle 
989 aussi tout droit d'Imlib2; elle prend la nouvelle image 2 que l'on vient de
990 créer avec la troisième commande, et la met dans l'image du contexte 
991 (image 0 - avant-plan par défaut), à partir de ses coordonnées (0,0) et 
992 d'une taille de 100x100 pixels, et la met dans un rectangle partant de (0,0)
993 et de taille 100x100 pixels dans l'image 0. Il est finalement bon de noter
994 que, avec adesklets, il y a toujours une image dans le contexte d'Imlib2:
995 dès que vous essayez de libérer l'image courante, le contexte d'image est
996 réinitialisé à l'image d'avant-plan.
998 @noindent Voila, c'est presque la fin de cette introduction... A partir de
999 là vous devriez pouvoir jouer un peu avec adesklets. Si vous êtes déjà 
1000 familier avec Imlib2 vous vous y ferez très rapidement. Sinon vous devriez 
1001 garder la documentation d'Imlib2 sous la main. :-)
1003 @noindent Quelques dernières astuces:
1005 @itemize
1006 @item
1007 Si vous êtes fatigué de taper encore et encore, n'oubliez pas 
1008 l'auto-complétion: 'TAB your problems away!'
1009 @item
1010 Si vous avez besoin d'aide sur quoi que ce soit, il existe
1011 la commande '@code{help}'.
1012 @item
1013 Si vous exécutez une série de commandes, que ça ne marche pas et que tout
1014 cet usage interactif vous fatigue:
1015 @enumerate
1016 @item
1017 Utilisez la commande '@code{history}' pour enregistrer votre session courante
1018 dans un fichier@footnote{Pour que ça marche, GNU
1019 history doit être installé lors de la compilation d'adesklets.}.
1020 @item
1021 Utilisez l'option '-f' avec adesklets pour passer les commandes à partir
1022 d'un fichier plutôt que de la console tty.
1023 @item
1024 Si vous essayez de visualiser quelque chose, insérez une commande
1025 '@code{pause}' à la fin du script pour geler l'interpréteur.
1026 @item
1027 Tous les caractères après un dièse '#' jusqu'à la fin de la
1028 ligne seront ignorés, ce qui vous permet d'écrire des commentaires.
1029 @end enumerate
1030 @end itemize
1032 @noindent Voici un exemple:
1034 @example
1035 #!/usr/bin/env adesklets -f
1037 # Rendre la fenêtre 'gérée'
1039 window_reset managed
1041 # Redimmensioner la fenêtre à 100x100 pixels
1043 window_resize 100 100
1045 # Montrer la fenêtre, puis la geler pendant 10 secondes avant de sortir
1047 window_show
1048 pause 10
1049 @end example
1051 @noindent Vous aurez juste besoin de rendre ce script exécutable et de le
1052 lancer. Comme d'habitude, les résultats seront affichées sur la sortie standard.
1054 @section Véritable programmation avec adesklets: écriture d'un script de desklet
1056 Lorsque vous serez prêt pour un vrai travail@footnote{:-)}, vous voudrez 
1057 surement utiliser un véritable langage de script plutôt que l'interpréteur 
1058 rudimentaire d'@command{adesklets} que nous avons utilisé dans l'introduction;
1059 ne serait-ce que pour pouvoir utiliser des variables.
1061 Au moment où j'écris ces lignes (@value{UPDATED}), le support pour
1062 Python est inclus@footnote{adesklets a été écrit pour être facilement 
1063 utilisé depuis toutes sortes de langages interprétés; n'hésitez pas à proposer 
1064 votre aide si vous voulez que votre langage favori soit supporté!}.
1066 @subsection Quelques astuces pour les programmeurs
1068 Une fonction très utile de l'interpréteur d'@command{adesklets} est sa 
1069 capacité à produire un trace complète d'une de ses sessions (commandes, 
1070 évènements et messages spéciaux), que ce soit sur @code{stderr} ou dans 
1071 un fichier journal, et ce indépendemment de ce qui le contrôle. Pour se 
1072 servir de cette fonctionalité, il faut:
1074 @enumerate
1075 @item Configurer le paquetage au niveau des sources en activant la trappe 
1076 @code{--enable-debug} de @code{configure}.
1077 @item Exporter la variable @code{ADESKLETS_LOG} dans l'environnement si la 
1078 sortie de la session doit être enregistrée dans un fichier plutôt qu'affichée 
1079 sur @code{stderr}@footnote{L'afficher sur @code{stderr} risque fortement de 
1080 perturber les liens avec les langages externes, il est donc préferable de ne 
1081 le faire que lors d'une invocation de l'interpréteur directement sur la 
1082 console.}. Ce doit être un chemin absolu qui servira de préfixe à 
1083 l'interpréteur qui, l'ayant hérité de l'environnement, s'en servira pour créer 
1084 les noms complets des fichiers dans lesquels il écrira.
1085 @end enumerate
1086 A partir de là, il est possible de lire des journaux de session complets et 
1087 chronologiques; utilisés correctement, ils peuvent être utiles pour débugger. 
1088 Vous pouvez vous en servir conjointement avec la commande @code{echo} pour 
1089 placer des marqueurs faciles à trouver.
1091 @subsection adesklets et Python
1092 @unnumberedsubsubsec Un exemple d'utilisation de Python
1093 Avec Python, les choses ne sont pas très différentes de l'interpréteur. 
1094 Les commandes ont été encapsulées dans des fonctions Python, et une classe 
1095 publique @code{Events_handler} a été construite pour manipuler les retours 
1096 asynchrones de l'interpréteur. Jetons un coup d'oeil sur le script 
1097 @file{test/test.py} de l'archive source de la version @value{VERSION}:
1099 @verbatiminclude ../test/test_fr.py
1101 Voilà! 26 lignes de code Python, et nous avons un desklet parfaitement
1102 fonctionnel. Je pense qu'il s'explique de lui-même; jetez un coup d'oeil à
1103 l'aide intégrée de python à propos de @code{adesklets}, @code{adesklets.functions}
1104 et @code{adesklets.Events_handler} pour de bonnes et complètes explications
1105 @ifhtml
1106 (@xref{Documentation du paquetage Python}.)
1107 @end ifhtml
1108 . Tout ce que nous avons fait ici c'est:
1110 @enumerate
1111 @item
1112 Importer le paquetage @code{adesklets}: cela instancie automatiquement un
1113 processus fils @command{adesklets} et configure toutes les communications. 
1114 Si l'initialisation du paquetage termine sans provoquer d'exception, cela signifie
1115 que l'interpréteur tourne et qu'il attend des commandes.
1116 @item
1117 Faire une sous-classe d'@code{adesklets.Events_handler} et redéfinir les
1118 méthodes invoquées pour les événements qui nous intéressent (tous les autres
1119 événements ne sont pas simplement ignorés, ils ne sont pas générés).
1120 @item
1121 Instancier un objet de cette classe, et le mettre en boucle infinie
1122 @footnote{Cette dernière étape n'est pas obligatoire; le script peut
1123 très bien continuer, mais devra alors avoir été écrit pour supporter les 
1124 interruptions des signaux. Lisez `@code{help(adesklets.Events_handler)}' pour de
1125 plus amples informations.}.
1126 @end enumerate
1128 @unnumberedsubsubsec Attention, piège: quelques détails sur les ID d'objets
1130 Tous les objets d'adesklets (polices, images, palettes de couleurs, polygones, etc), 
1131 sont stockés dans des piles (une pile par type d'objet). Les ID de Python ne sont 
1132 rien d'autre que la position initale d'objets donnés dans la pile correspondante, 
1133 et deviendront donc invalides si un objet du même type situé en-dessous est 
1134 libéré.
1136 Par exemple, partant d'un état vierge, il n'y a d'autre dans la pile des images 
1137 que l'avant-plan (ID O) et l'arrière-plan (ID 1) de la fenêtre. Lorsque 
1138 quelqu'un créé deux autres images depuis Python comme ceci:
1139 @example
1140 im_1 = adesklets.create_image(10,10)
1141 im_2 = adesklets.create_image(10,10)
1142 @end example
1143 @noindent on a @code{im_1==2}, et @code{im_2==3}. Dès qu'on fera:
1144 @example
1145 adesklets.free_image(im_1)
1146 @end example
1147 @noindent La pile commence à s'écraser, et ce qui était l'image 3 (@code{im_2}) 
1148 est maintenant l'image 2, et @code{im_2} est une réference invalide. Cela 
1149 signifie clairement qu'invoquer:
1150 @example
1151 adesklets.free_image(im2)
1152 @end example
1153 @noindent génerera le message d'erreur @code{image out of range}.
1155 @unnumberedsubsubsec Un sujet spécial: les animations
1157 @command{adesklets} inclut maintenant aussi bien un mode d'exécution indirect 
1158 que les variables textuelles (pour être précis, le remplacement textuel 
1159 non-récursif). Cela signifie que les auteurs de desklets ont ce qu'il faut 
1160 pour créer des animations précisément temporisées. Vous trouverez un exemple 
1161 simple à suivre dans @file{test/fading.py}. Une utilisation 
1162 plus poussée de ces fonctionalités est faite dans le desklet @code{yab}. Pour 
1163 réaliser un animation en Python, il faut:
1165 @enumerate
1166 @item @strong{Enregistrer} une séquence de commandes (que nous appelerons une 
1167 commande macro, ou macro). Avec Python, il faut passer en mode 
1168 indirect avec la fonction @code{adesklets.start_recording()}, émettre un 
1169 nombre indéterminé de commandes @command{adesklets}, puis repasser en mode 
1170 normal (execution directe) avec @code{adesklets.stop_recording()}. Bien sur, 
1171 aucune commande n'est évaluée quand l'interpréteur est en mode indirect; les 
1172 commandes sont seulement conservées dans l'historique pour être rejouées plus 
1173 tard. 
1174 @item @strong{Choisir} si la séquence de commandes à rejouer peut être 
1175 interrompue par des évènements ou pas, en utilisant la fonction 
1176 @code{adesklets.play_set_abort_on_events()}. La méthode de haut niveau 
1177 @code{adesklets.Events_handler::set_events()} peut aussi être utilisée pour 
1178 choisir dynamiquement quels évènements seront rattrapés. Pour un exemple, 
1179 voyez @file{test/test_events.py}.
1180 @item @strong{Initialiser} les variables utilisées dans la macro 
1181 enregistrée avec la fonction @code{adesklets.set()}, qui est très similaire 
1182 à son homonyme du shell Bourne.
1183 @item @strong{Lire} la macro avec la fonction @code{adesklets.play()}.
1184 @end enumerate
1186 Quelques remarques supplémentaires:
1187 @itemize
1188 @item Une temporisation précise de la séquence peut être faite par la 
1189 commande @code{time_gate}. Elle fonctionne très simplement: à chaque 
1190 fois qu'une macro est exécutée, adesklets enregistre à quel moment 
1191 elle à commencé. Dès qu'une commande @code{time_gate} apparait lors 
1192 de l'exécution, le programme attend que le nombre de secondes données 
1193 en argument à @code{time_gate} soient écoulées. Par exemple, écrire 
1194 @code{time_gate 0.1} dans une macro empêchera l'execution de toutes les 
1195 commandes suivantes de la macro tant que celle-ci n'aura pas fonctionné 
1196 pendant au moins un dixième de seconde.
1197 @item La substitution des variables à toujours lieu juste avant l'exécution 
1198 des commandes, indépendemment du mode d'execution (direct ou indirect). 
1199 Toute séquence de caractères ne contenant pas d'espace précedée directement 
1200 par un seul '$' sera remplacée par le contenu de la variable correspondante 
1201 (configuré précedemment avec @code{set}). Si aucune variable ne correspond, 
1202 la séquence est simplement ignorée.
1203 @item Toutes les macros exécutées par la commande @code{play} sont, du point de 
1204 vue du desklet qui les contrôle, élémentaires, comme toutes les autres commandes. 
1205 En un mot, cela signifie qu'aucun évènement ne sera jamais géneré pendant 
1206 qu'une macro est exécutée; ils apparaitront tous juste après que la commande 
1207 @code{play} ait terminé. 
1208 @item Comme d'habitude, l'interpréteur d'adesklets fonctionne par états pour 
1209 les variables et les états liés au mode indirect. Vous n'avez pas à fixer le 
1210 drapeau @code{set_abort_on_events} ou les variables à chaque fois que vous 
1211 appelez une macro, sauf si quelquechose doit être changé depuis l'appel 
1212 précedent.
1213 @item La fonction de haut niveau @code{adesklets.Events_handler::set_events()} 
1214 sert principalement à arrêter la prise en charge de certains évenements pendant 
1215 l'exécution de la macro, ainsi la macro ne peut être interrompue que dans des 
1216 circonstances bien précises. Bien sur, tous les évènements génerés avant l'appel 
1217 à cette méthode ne seront pas perdus mais placés en file d'attente, et les 
1218 méthodes d'évènements appropriées seront appelées plus tard, pourvu que les 
1219 trappes soient en place lorsque l'exécution de la macro est terminée.
1220 @item Avons-nous rappelé que faire tout cela depuis un endroit non protégé est 
1221 une mauvaise idée? Eh bien, ça l'est. N'oubliez pas d'utiliser 
1222 @code{adesklets.Events_handler::block()} et @code{adesklets.Events_handler::unblock()} 
1223 autour de tout code relatif à une animation si vous avez instancié un objet 
1224 d'une classe fille de @code{adesklets.Events_handler}.
1225 @end itemize
1227 @unnumberedsubsubsec Configuration et internationalisation
1229 Mentionnons jute ici que depuis @command{adesklets} 0.4.0, le module 
1230 @code{adesklets.utils} inclut maintenant une classe optionelle 
1231 @code{ConfigFile} qui peut être facilement réutilisée par les auteurs de 
1232 desklets pour ajouter un système de configuration facilement extensible à 
1233 leur code@footnote{Pour en voir un exemple voyez n'importe quel desklet 
1234 non issu de contributions.}
1235 @ifhtml
1236 (@xref{Documentation du paquetage Python}.)
1237 @end ifhtml
1238 . Par défaut, la classe prend aussi en charge l'internationalisation 
1239 automatiquement, en sélectionnant les jeux de caractères selon les 
1240 besoins de l'utilisateur. L'utilisation des jeux peut bien sûr être 
1241 déterminée ou changée à tout moment en utilisant les fonctions 
1242 @code{adesklets.get_charset()} et @code{adesklets.set_charset()}. La 
1243 classe @code{adesklets.utils.ConfigFile} a aussi un attribut @code{charset} 
1244 qu'on peut examiner pour connaitre les préferences de l'utilisateur. En 
1245 utilisant cette classe on notera que le jeu de caractères 'ASCII' est 
1246 considéré comme choix par défaut, et qu'il ne désactivera pas une éventuelle conversion.
1247 Ainsi, les utilisateurs de plate-formes ne supportant pas iconv pourront 
1248 toujours utiliser @command{adesklets} sans le support de l'internationalisation. 
1250 @unnumberedsubsubsec Derniers mots
1252 @noindent Enfin, signalons que vous pourriez avoir envie de jeter un oeil au 
1253 code source du desklet @file{weather} disponible sur 
1254 @weblink2{le site web du projet SourceForge,http://sourceforge.net/projects/adesklets/} pour 
1255 voir un plus gros morceau de code Python utilisant adesklets. Il y a aussi 
1256 quelques autres desklets de test sous le répertoire @file{test/} qui pourraient 
1257 vous donner des idées.
1258 @ifhtml
1259 Vous pourriez aussi jeter un oeil au paquetage d'aide autogéneré d'@command{adesklets} 
1260 par pydoc, inclus dans ce document (@xref{Documentation du paquetage Python}.). Dès 
1261 que vous êtes suffisement content de votre desklet, n'hésitez pas à le partager avec 
1262 le reste d'entre nous (ce qui serait très apprécié). Faites-en un paquetage 
1263 (@xref{GNU Makefile pour empaqueter les desklets}.), puis soumettez-le 
1264 (@xref{Soumettre un desklet}.).
1265 @end ifhtml
1267 @node Extension d'adesklets
1268 @chapter Utiliser adesklets à partir d'autres languages
1270 adeskets a été fait pour être facilement utilisable depuis toutes sortes 
1271 d'environnements de langages@footnote{On parle d'environnement de langage 
1272 parceque le problème n'est pas la syntaxe ou le paradigme utilisé 
1273 (qu'il soit impératif, fonctionnel ou n'importe quoi d'autre), mais la 
1274 manière dont vous pouvez gérer des opérations de base de POSIX sur les 
1275 fichiers, les signaux, etc. (@xref{Fonctionalités requises}.). Ainsi 
1276 un programmeur Perl 5 devrait utiliser adesklets facilement, alors qu'un 
1277 programmeur Linux JDK devrait probablement recontrer plus de difficultés 
1278 (sans vouloir critiquer).}. Ce chapitre explique aux développeurs comment 
1279 l'interpréteur d'adesklets s'intègre dans le système d'une manière 
1280 indépendante du langage.
1282 @noindent Si vous n'êtes pas un minimum habitués aux systèmes POSIX ou que 
1283 vous n'avez pas les notions de base sur la programmation de systèmes 
1284 d'exploitations, ce chapitre n'est surement pas d'un grand interêt pour 
1285 vous.
1287 @noindent Veillez noter que le paquetage Python du répertoire 
1288 @file{scripting/pyhton/adesklets} est un bon complément de ce que vous 
1289 allez lire.
1291 @section Fonctionalités requises
1292 @anchor{Fonctionalités requises}
1293 Si vous voulez utiliser l'interpréteur d'adesklets depuis votre langage 
1294 favori mais qu'il n'est pas supporté à la base@footnote{Pour adesklets 
1295 @value{VERSION}, seul Python est supporté à la base.}, vous pouvez 
1296 toujours ajouter ce support, pourvu que votre langage comporte une 
1297 de ces fonctionalités:
1299 @itemize
1300 @item Lire et écrire dans des tuyaux (pipes); ou
1301 @item Lire et écrire depuis ou dans des fichiers sans mémoire tampon ('unbuffered files')
1302 @end itemize
1304 @noindent Il doit aussi pouvoir@footnote{Ceci dit, 
1305 disposer du support d'IPC et de poll/select rendra les choses à la fois plus 
1306 simples et plus claires. Il est aussi très utile de pouvoir bloquer des signaux.}:
1308 @itemize
1309 @item Rattraper des signaux IPC; ou
1310 @item Lire des fichiers en mode non-bloquant; ou
1311 @item Utiliser poll/select sur des fichiers
1312 @end itemize
1314 @noindent Enfin, il doit aussi être capable de lancer un processus fils.
1316 @noindent Ces pré-requis sont bien minces du point de vue d'un système 
1317 POSIX, mais précisons par souci d'exhaustivité que si votre 
1318 environnement de langage ne remplit pas ces critères, vous pouvez quand 
1319 même vous en servir pourvu que vous arriviez à faire en sorte que votre 
1320 application communique de manière fiable avec un autre programme
1321 @footnote{Qui serait en fait une interface.} qui, lui, les remplirait. 
1322 Bien sur, ce n'est pas la situation idéale et cela doit être évité 
1323 autant que possible.
1325 @section Mécanisme d'initialisation
1327 Comme vous le savez probablement (@xref{Utiliser adesklets}.), 
1328 @command{adesklets} possède deux modes de fonctionnement, si l'on 
1329 peut les appeler ainsi:
1331 @enumerate
1332 @item en tant que lanceur de desklets, si vous appelez @command{adesklets} 
1333 sans arguments.
1334 @item en tant qu'interpréteur, dans tous les autres cas (utilisation en 
1335 ligne de commande intéractive ou en processus fils d'un desklet).
1336 @end enumerate
1338 @subsection adeskelts appelé comme un lanceur de desklets - redémarrer tous les desklets
1339 @noindent Dans une nouvelle session X, la séquence de démarrage classique est 
1340 à peu près la suivante:
1342 @enumerate
1343 @item @command{adesklets} est appelé sans arguments à partir d'un script 
1344 d'initialisation de la session X.
1345 @item A partir de là, la nouvelle instance d'adesklets se comporte comme 
1346 un lanceur de desklets. Elle parcoure le fichier @file{$HOME/.adesklets}, 
1347 puis se copie (fork) autant de fois qu'il y a de desklets à démarrer. Ensuite 
1348 le processus lanceur termine puisqu'il n'y a pas besoin de démon ici.
1349 @item Tous les processus copiés initialisent la variable d'environnement 
1350 @code{ADESKLETS_ID} contenant leur propre ID entier en tant que chaine de 
1351 caractères, puis exécutent@footnote{Avec un appel de la famille execve*; 
1352 voir @code{man 2 execve}.} le script associé.
1353 @item Chaque desklet se lance une instance d'@command{adesklets} en tant 
1354 que processus fils, donnant en passant la variable @code{ADESKLETS_ID} 
1355 sans l'alterer. Il est du devoir du desklet de s'assurer que:
1356 @itemize
1357 @item Les flux standards de l'interpréteur d'adesklets, @code{stdin}, 
1358 @code{stdout} et @code{stderr}, soient redirigés séparément, de sorte que 
1359 le processus parent puisse facilement écrire dans le @code{stdin} 
1360 d'adesklets, et lire @code{stdout} et @code{stderr}. L'utilisation de 
1361 tuyaux, FIFOs ou éventuellement de fichiers réguliers sont possibles.
1362 @item les écritures vers @code{stdin} et les lectures depuis les deux 
1363 autres flux se font toutes sans tampon.
1364 @item le premier argument de la commande @command{adesklets} est le nom 
1365 absolu du script du desklet.
1366 @end itemize
1367 @item Chaque interpréteur @command{adesklets} nouvellement créé s'initialise 
1368 en utilisant la variable d'environnement @code{ADESKLETS_ID} et le nom 
1369 absolu donné en premier argument de ligne de commande pour déterminer 
1370 ses caracteristiques non-scriptables@footnote{Qui sont, nominativement, 
1371 son écran et ses coordonnées.} à partir de @file{$HOME/.adesklets}. 
1372 Une fois cette opération terminée, l'évènement @code{ready!} est 
1373 géneré (@xref{Evènements}.), l'interpréteur est alors prêt à 
1374 traiter des commandes.
1375 @end enumerate
1377 @subsection adesklets appelé en tant qu'interpréteur - enregistrement d'un nouveau desklet
1379 Quand un nouveau desklet est appelé directement, la séquence de démarrage 
1380 décrite dans la section précedente est la même, sauf que les trois 
1381 premières étapes n'ont tout simplement pas lieu. Cela signifie que 
1382 l'environnement @code{ADESKLETS_ID} n'est pas défini; cela permet 
1383 au nouvel interpréteur d'@command{adesklets} de détecter qu'il 
1384 s'agit d'un nouveau desklet, il va parcourir le fichier de configuration 
1385 @file{$HOME/.adesklets} et allouer au desklet le premier ID disponible. 
1387 @noindent Il faut noter que si le nom de fichier du desklet donné comme 
1388 premier argument à l'instance fille d'@command{adesklets} est relatif ou 
1389 si'l n'est pas lisible et exécutable par l'utilisateur courant, le 
1390 desklet ne sera pas enregistré dans @file{$HOME/.adesklets}, et par 
1391 conséquent ne sera pas automatiquement redémarré par le lanceur 
1392 dans les futures nouvelles sessions X. Dans le cas où @code{stdin} 
1393 est un terminal@footnote{Ce qui signifie que la session est 
1394 interactive}, l'enregistrement ne se fera pas non plus.
1396 @subsection Conséquences
1397 Ainsi, du point de vue du script de desklet, les deux cas sont identiques, 
1398 ce qui ne nécessite aucun traitement conditionel. Tout le travail 
1399 d'initialisation du desklet se fait dans la quatrième étape de la 
1400 sous-partie ci-dessus.
1402 @noindent Si besoin, le desklet pourra utiliser la commande @code{get_id} 
1403 pour déterminer son ID.
1405 @section Utilisation des flux
1407 Comme expliqué précedemment, un desklet communique avec son propre 
1408 interpréteur adesklets via des flux sans tampons redirigés. Voyons 
1409 ici quelles informations ils transportent.
1411 @subsection stdin: les commandes
1413 Sur le @code{stdin} de l'interpréteur, le desklet envoie les commande 
1414 qu'il veut exécuter dans l'ordre dans lequel il veut les exécuter, une 
1415 commande par ligne@footnote{Le caractère '\n' doit être placé après 
1416 chaque commande.}. Etant donné que la lecture de ce flux est suspendue 
1417 quand une commande est évaluée, un desklet devra géneralement attendre 
1418 qu'une commande soit exécutée avant d'en envoyer une autre
1419 @footnote{Ceci permet d'éviter de bloquer le processus en surchargeant 
1420 le flux avec des commandes arbitrairement longues; bien sur, envoyer 
1421 trois commandes de quelques centaines d'octets d'un coup n'est pas un 
1422 problème!} (voir la section suivante).
1424 @noindent Le format des commandes est assez simple: on a le nom d'une 
1425 commande suivi d'arguments séparés par des espaces, tous représentés par 
1426 du texte pur, y compris les nombres. adesklets ne se soucie pas du nombre 
1427 d'espaces entre les arguments, pourvu qu'il y en ait au moins un. Dans le 
1428 cas particulier des commandes où le dernier argument est une chaine de 
1429 caractères (@code{text_draw}, par exemple), adesklets considèrera les 
1430 premiers caractères n'étant pas des espaces comme le début de la chaine; 
1431 le reste de la ligne, espaces inclus, sera considéré comme faisant 
1432 partie de la chaine.
1434 @noindent Deux fichiers, automatiquement tenus à jour avec la source 
1435 (@file{scripting/prototypes} et @file{scripting/enums}) à partir de 
1436 la distribution d'origine, fournissent au format texte brut (avec une 
1437 tabulation comme séparateur) une description de toutes les commandes et 
1438 constantes mises à disposition des desklets@footnote{Pour plus de détails 
1439 sur le format de ces deux fichiers, cf @file{scripting/protoize.sh.in} et 
1440 @file{scripting/enums.sh}.}. Un bon portage pour un langage particulier 
1441 devrait être fourni avec quelques routines permettant de génerer automatiquement 
1442 les parties pertinentes de sa propre bibliothèque à partir de ces fichiers; 
1443 par exemple, le portage de Python comporte une fonction @code{protoize} 
1444 dans le script @file{setup.py} de @code{distutils} pour le faire. 
1445 Idéalement, cette routine devrait être écrite avec ce langage et un 
1446 ensemble raisonnable de librairies@footnote{L'idée étant que la plupart 
1447 des utilisateurs de votre portage doivent être plus ou moins capables 
1448 de s'en servir avec l'installation de base du langage.}; si'l n'est pas 
1449 bien adapté à cette tâche, vous devrez vous limitez à:
1451 @itemize
1452 @item Des scripts portables pour le shell Bourne, conforme aux standards 
1453 POSIX 1003.2 et 1003.2a
1454 @item Un sed (Streaming Editor) récent, compatible avec GNU sed
1455 @footnote{De nos jours éxecuter GNU sed n'est pas un problème sur pratiquement 
1456 n'importe quel système POSIX.}
1457 @item Une utilisation portable de n'importe quel bc pour l'arithmetique
1458 @end itemize
1460 @noindent si vous voulez que votre travail soit intégré au paquetage officiel.
1462 @subsection stdout: les résultats des commandes
1464 L'interpréteur d'@command{adesklets} cherche fréquemment si de nouveaux 
1465 caractères sont arrivés sur son flux @code{stdin}, et le lit si besoin. 
1466 Dès qu'il reçoit le caractère de fin de ligne ('\n'), il arrête de lire 
1467 et essaye d'exécuter la commande. Une fois la commande terminée (elle 
1468 aura peut-être envoyé quelques lignes sur @code{stdout}), il envoie 
1469 en tant que dernière entrée un message d'état de la forme suivante: 
1471 @example
1472 command RANG ok: MESSAGE
1473 @end example
1475 @noindent si la commande s'est terminée avec succès, ou:
1477 @example
1478 command RANG error: MESSAGE_DERREUR
1479 @end example
1481 @noindent @code{RANG} est l'indentifiant numérique de la commande (un entier 
1482 non signé) qui part de zéro lorsque l'interpréteur est créé, et qui est 
1483 automatiquement incrémenté à chaque ligne qu'il reçoit ensuite. Il est 
1484 garanti que toutes les commandes seront exécutées dans l'ordre dans lequel 
1485 elles ont étées données. 
1486 @code{MESSAGE_DERREUR} est un message compréhensible, sans format particulier, 
1487 expliquant d'où vient l'erreur. @code{MESSAGE} est également compréhensible, 
1488 mais sera formaté de sorte qu'il peut être utilisé pour récupérer les valeurs 
1489 de retour utiles algorithmiquement de n'importe quelles commandes. Ces valeurs 
1490 de retour peuvent être:
1492 @enumerate
1493 @item un entier--l'ID de la valeur de retour (@code{create_image} et autres)
1494 @item un couple d'entiers--le résultat numérique de la commande 
1495 (pour @code{context_get_color} et consorts)
1496 @item une liste de chaines--la liste ordonnée des chaines de caractères retournées 
1497 par les commandes retournant plusieurs lignes sur @code{stdout} (@code{images_info} 
1498 et ses semblables), la dernière ligne étant un message d'état
1499 @item une chaine de description--une réponse textuelle en une ligne de la commande 
1500 @item rien du tout
1501 @end enumerate
1503 @noindent Algorithmiquement, votre 'routine de récupération des valeurs de retour' 
1504 devrait d'abord essayer de récupérer les entiers de @code{MESSAGE}@footnote{Tous 
1505 les paramètres de @code{MESSAGE} sont séparés par un esapce.}. Si elle trouve un 
1506 entier ou plus, elle devra vérifier que le message n'est pas une simple copie 
1507 d'une commande donnée; alors la valeur de retour correspond au cinquième 
1508 cas (cf ci-dessus). Autrement, si elle ne trouve qu'un entier, on est dans le 
1509 premier cas; et si'l y en a plus d'un, dans le deuxième. Si aucun entier n'est 
1510 trouvé et si'l y avait une liste de lignes envoyées à @code{stdout} avant le 
1511 message d'état de la commande, on est dans le troisième cas. Pour le reste:  
1512 si le message d'état diffère d'une commande donnée, cela correspond au 
1513 quatrième cas. Sinon il faut considérer que la sortie correspond au cinquième cas. 
1514 Cet algorithme de récupération fonctionne avec toutes les commandes listées 
1515 dans @file{scripting/prototypes}.
1517 @subsection stderr: les évènements
1518 @anchor{Evènements}
1520 Tous les autres rapports asynchrones d'évènements sont envoyés au flux 
1521 @code{stderr} de l'interpréteur. Ils sont asynchrones par rapport au traitement 
1522 des commandes; ils ne se produiront jamais pendant le traitement d'une 
1523 commande (dans l'intervalle de temps entre la soumission de la commande 
1524 complète sur @code{stdin} et la sortie de son message d'état sur 
1525 @code{stdout}), ils peuvent être envoyés à n'importe quel autre moment
1526 @footnote{De toute façon aucun évènement n'est jamais perdu; son apparition 
1527 est simplement retardée.}.
1529 @noindent Les rapports d'évènements tiennent sur une ligne, de la forme
1530 @footnote{Toutes les autres informations sur @code{stderr} peuvent être 
1531 ignorées sans risque.}:
1533 @example
1534 event: MESSAGE_DEVENEMENT
1535 @end example
1537 @noindent Sous la forme de Backus 
1538 Naur@footnote{@weblink{http://fr.wikipedia.org/wiki/Forme_de_Backus_Naur}}, 
1539 la grammaire employée pour MESSAGE_DEVENEMENT serait:
1541 @verbatim
1542 MESSAGE_DEVENEMENT :: ready! |
1543                       backgroundgrab |
1544                       menufire MENU_ID MENU_STR |
1545                       motionnotify X Y |
1546                       enternotify X Y |
1547                       leavenotify X Y |
1548                       buttonpress X Y BUTTON_ID |
1549                       buttonrelease X Y BUTTON_ID
1551 @end verbatim
1553 @noindent où @code{MENU_ID}, @code{X}, @code{Y}, et @code{BUTTON_ID} sont tous 
1554 des entiers supérieurs ou égaux à zéro, et @code{MENU_STR} est une chaine de 
1555 caractères, pouvant contenir des espaces. Détaillons un peu plus tout cela:
1557 @itemize
1558 @item Evènement @strong{Ready}: envoyé une fois seulement, dès que l'interpréteur 
1559 d'@command{adesklets} est prêt à traiter des commandes.
1560 @item Evènement @strong{BackgroundGrab}: envoyé à chaque fois que l'image 
1561 d'arrière-plan (image 1) est regénerée.
1562 @item Evènement @strong{MenuFire}: envoyé à chaque fois qu'un utilisateur sélectionne 
1563 un élément d'un menu qui n'est pas géré en interne par adesklets.
1564 @item Evènement @strong{MotionNotify}: envoyé dès que le pointeur bouge dans la 
1565 fenêtre d'un desklet.
1566 @item @strong{EnterNotify, LeaveNotify}: envoyé dès que le curseur passe sur une 
1567 bordure visible de la fenêtre de l'interpréteur, qu'il aille dedans ou dehors.
1568 @item @strong{ButtonPress, ButtonRelease}: envoyé quand un bouton de la souris est 
1569 cliqué dans la fenêtre de l'interpréteur.
1570 @end itemize
1572 @noindent Tous les évènements sauf 'Ready!' (nominativement: MotionNotify, 
1573 EnterNotify, LeaveNotify, ButtonPress, ButtonRelease, BackgroundGrab et MenuFile) 
1574 peuvent êtres masqués par le desklet. En fait, @command{adesklets} fournit au desklet 
1575 des commandes permettant de gérer spécifiquement la création et la production des 
1576 évènements, qui sont:
1577 @code{event_catch}, @code{events_get_send_sigusr1}, @code{events_reset_all},
1578 @code{event_uncatch}, @code{events_info}, @code{events_set_echo}, 
1579 @code{events_get_echo}, @code{events_purge} et @code{events_set_send_sigusr1}.
1580 Il faut noter que ces fonctions ne sont pas listées dans 
1581 @file{scripting/prototypes} puisque vous ne voulez probablement pas que vos 
1582 utilisateurs y aient accès. Vous devrez probablement démarrer une session 
1583 interactive et jouer avec pour être sur que vous les avez bien comprises. Il est 
1584 aussi temps de mentionner le script @file{src/adesklets_debug.sh}, qui se 
1585 rend utile pour les expériences intéractives avec les évènements.
1587 @noindent Il faut encore mentionner deux choses à propos des évènements:
1589 @enumerate
1590 @item Par défaut, les évènements ne sont pas affichés, mais stockés en interne, 
1591 en attendant d'être purgés avec @code{event_purge}. Vous pouvez modifier cela 
1592 avec @code{events_set_echo}.
1593 @item Vous pouvez paramètrer un interpréteur adesklets pour qu'il envoie le 
1594 signal SIGUSR1 à chaque fois qu'un évènement est envoyé à son processus père 
1595 (le desklet). Cette communication entre processus est très utile puisque le signal peut être ratrappé, 
1596 ce qui permet à la routine de gestion des évènements de ne fonctionner que 
1597 lorsque c'est nécessaire. C'est ce qui est utilisé dans le paquetage Pyhton 
1598 dans la classe @code{Events_handler}.
1599 @end enumerate
1601 @section Récuperation du signal SIGCHLD
1603 Pourvu que votre langage le permette, vous devriez installer une sorte de 
1604 récuperateur de SIGCHILD, ainsi vous pourrez au moins être averti si jamais 
1605 l'interpréteur d'adesklets se termine sans raison (sans parler du cas des 
1606 processus fils à l'état zombie)@footnote{@code{man 2 signal} est une très bonne 
1607 réference sur les signaux.}.
1609 @section Variables textuelles
1611 @command{adesklets} supporte aussi l'exécution differée (mode indirect) 
1612 et le remplacement textuel des variables. Voici comment fonctionnent les 
1613 variables en mode indirect:
1615 @enumerate
1616 @item Une fois qu'une commande est entrée, elle est stockée telle quelle 
1617 dans la liste de l'historique des commandes si on est bien dans le mode 
1618 non-interactif de l'interpréteur et si la commande réside entre les appels 
1619 à @code{start_recording} et @code{stop_recording})
1620 @item Quand une macro est éxecutée (avec la commande @code{play}, 
1621 @xref{Programmation d'adesklets}.), les variables sont substituées en une 
1622 seule passe, et aucune réference indirecte n'est possible. La substitution 
1623 est assez directe. On recherche dans la ligne de commande stockée toute séquence 
1624 non-vide de caractères distincts de l'espace commançant par un seul '$'. Chaque 
1625 séquence trouvée est remplacée par la valeur @code{$variable} correspondante, 
1626 ou supprimée si aucune variable n'est trouvée.
1627 @item La commande completée est exécutée.
1628 @end enumerate
1631 Le même mécanisme de substitution s'applique en mode d'exécution direct. Tout ceci 
1632 implique que, avec le paquetage Python par exemple, ces deux morceaux de code sont 
1633 équivalents:
1635 @example
1636 adesklets.window_resize(100,100)
1637 @end example
1641 @example
1642 adesklets.set('dim',100)
1643 adesklets.window_resize('$dim','$dim')
1644 @end example
1646 Python étant un langage typé dynamiquement, aucune modification de notre code 
1647 n'est nécessaire, mais d'autres langages pourraient demander plus de réflexion. 
1649 @section Derniers mots
1651 Maintenant vous devriez savoir quasiment tout ce qu'il faut pour intégrer adesklets 
1652 à votre environnement de langage. Cette tache peut avoir l'air intimidante, mais un 
1653 traducteur très propre peut être fait par un seul développeur en seulement quelques 
1654 jours. Encore une fois, jetez un oeil à @file{src/adesklets_debug.sh}; c'est un 
1655 traducteur (simplet) du Bourne Shell pour adesklets qui tient dans seulement 
1656 cinquante lignes, commentaires compris.
1658 Si jamais vous avez besoin d'aide, vous êtes encouragés à écrire (en anglais) à la 
1659 @weblink2{mailing list 
1660 adesklets-devel,https://lists.sourceforge.net/lists/listingo/adesklets-devel}...
1662 Bonne programmation!
1664 @noindent
1665 @node Recherche d'aide!
1666 @chapter Contribuer à adesklets
1668 Nous avons besoin de votre aide! Vous pouvez contribuer efficacement à 
1669 adesklets de différentes manières:
1670 @itemize
1671 @item
1672 @strong{Mettre en ligne vos captures d'écran}. Vous êtes un utilisateur 
1673 d'adesklets et pensez avoir un bureau particulièrement réussi? Partagez-le 
1674 avec le monde, et faites-le nous savoir! Vous aiderez ainsi à faire 
1675 connaitre le projet.
1676 @item
1677 @strong{Contribuer à la documentation}. Vous écrivez correctement en Allemand, 
1678 Espagnol, Portugais, Arabe ou Swahili? Les traducteurs seront toujours les 
1679 bienvenus, ainsi que les relecteurs, quels que soient les langues.
1680 @item
1681 @strong{Écrire de nouveau desklets}. adesklets est encore jeune: nous sommes 
1682 en quête de talentueux auteurs de desklets, et nous serions
1683 plus qu'enchantés de mettre en ligne ou de faire des liens vers votre travail.
1684 Ne vous inquiétez pas trop des changements d'interface; l'auteur à fait des efforts 
1685 considérables pour lui assurer une certaine stabilité, même dans les premières 
1686 versions. Elle n'est pas non plus fixée pour toujours, mais ne devrait en tout cas 
1687 pas gêner vos desklets sans prévenir. Actuellement, l'API subit surtout des 
1688 corrections internes de bugs et des améliorations de sa portabilité.
1689 @item @strong{Ajouter des interfaces pour votre langage préféré}. Contactez 
1690 les développeurs avant de commencer quoi que ce soit pour que vous ne perdiez pas 
1691 votre temps sur quelquechose de déjà fait; ils seront heureux de partager leur code. 
1692 Inscrivez-vous à la @weblink2{mailing-list 
1693 adesklets-devel,https://lists.sourceforge.net/lists/listinfo/adesklets-devel} sur 
1694 sourceforge pour un contact direct avec eux.
1695 @end itemize
1697 @noindent Contactez-moi par email à @email{syfou@@users.sourceforge.net} (NdT: 
1698 vous pouvez lui écrire en anglais comme en français).
1700 @node Foire Aux Questions
1701 @appendix Foire Aux Questions
1703 Dernière mise à jour: @value{UPDATED}
1705 @appendixsection Compiler adesklets
1707 @subheading Le script de configuration d'adesklets dit que mon installation de Python est trop ancienne, pourtant elle ne l'est pas. Quel est le problème?
1709 Certaines plate-formes (NetBSD, Ubuntu Linux, et probablement d'autres encore) 
1710 altèrent parfois la version de Python, en y ajoutant des lettres, des numéros de 
1711 version mineures, etc., ce qui empêche le script de configuration de la détecter 
1712 correctement. Si vous êtes @strong{sûr} que la version installée est supérieure 
1713 à la 2.3.0, vous pouvez utiliser l'option @code{--with-python-force-detection} de 
1714 @code{configure}, ainsi le script de configuration passera la détection de version. 
1716 @appendixsection Démarrer et arrêter des desklets
1718 @subheading Quand j'essaie de lancer un nouveau desklet, j'obtiens l'erreur @code{ImportError: no module named adesklets} de l'interpréteur Python. Qu'est-ce qui se passe?
1720 C'est écrit dessus: @command{python} n'arrive pas à trouver le 
1721 paqetage @code{adesklets}; peut-être qu'il n'a pas été installé, 
1722 ou qu'il a été installé au mauvais endroit.
1724 @itemize
1725 @item Reprenez depuis le début la procédure d'installation 
1726 (@xref{Installer adesklets}.). Assurez vous que vous 
1727 @strong{n'activez pas} l'option de configuration 
1728 @code{--without-python-support}.
1729 @item Re-essayez de lancer le desklet. Si cela ne marche toujours pas, 
1730 vérifiez que le répertoire d'installation, que vous pouvez voir 
1731 avec: @example
1732 sed -n '/PYTHON_SITE_PKG/p' Makefile
1733 @end example
1734 @noindent est inclus dans: @example
1735 echo 'import sys; print sys.path' | python
1736 @end example
1738 @noindent si'l ne l'est pas, vous pouvez toujours essayer de déplacer 
1739 manuellement le répertoire d'adesklets de @code{PYTHON_SITE_PKG} vers 
1740 un des chemins donnés par la commande précedente.
1741 @end itemize
1743 @subheading Quand j'essaie de démarrer un nouveau desklet, j'obtiens l'erreur @code{ADESKLETSError: adesklets process exited} de l'interpréteur Python. Qu'est-ce que c'est?
1745 C'est une erreur génerique vous informant qu'il manque quelquechose à 
1746 l'interpréteur de bas niveau qui est suffisamment critique pour provoquer 
1747 une sortie. Si vous êtes chanceux vous trouverez à la fin de la ligne 
1748 un tiret suivi d'un message décrivant ce qui ne fonctionne pas. Dans 
1749 ce cas, et si vous avez du mal à le comprendre, allez chercher de l'aide 
1750 en ligne. Si aucune information ne vous est donnée concernant 
1751 l'origine de l'erreur, essayez ceci depuis un pseudo-terminal sous X:
1752 @example
1753 echo x_status | adesklets :
1754 @end example
1755 Vous devriez normalement obtenir quelquechose ressemblant à:
1756 @example
1757 event: ready!
1758 command 0 ok: x_status 1 (connected to ':0.0')
1759 @end example
1761 Si c'est la cas, c'est probablement que vous utilisez un système 
1762 (@weblink2{archlinux,http://www.archlinux.org/} par exemple) 
1763 sur lequel la variable @code{PATH} de l'interpréteur Python diffère de celle 
1764 héritée de l'environnement standard, ce qui fait que le paquetage Python 
1765 n'arrive pas à lancer adesklets en tant que processus fils. Sur ce 
1766 genre de systèmes, assurez-vous que vous installez @command{adesklets} 
1767 avec l'option @code{--prefix} appropriée lors de la configuration. 
1768 Par exemple, sur la plupart des plate-formes Linux récentes, vous 
1769 devriez utiliser:
1771 @example
1772 ./configure --prefix=/usr
1773 @end example
1775 @subheading Je ne peux lancer aucun desklet écrit en Python: j'obtiens des erreurs du récupérateur automatique de mémoire (garbage collector)!
1776 Si vous obtenez des erreurs du type:
1778 @example
1779 python: Modules/gcmodule.c:275: visit_decref: Assertion `gc->gc.gc_refs != 0' failed.
1780 Aborted
1781 @end example
1783 Cela signifie que le récuperateur automatique de mémoire de votre 
1784 installation de Python est corrompu; c'est souvent du à une 
1785 compilation utilisant des options d'optimisation incorrectes ou 
1786 agressives. D'habitude recompiler un environnement Python solide 
1787 provenant de @weblink{http://python.org/} résoud ce problème.
1789 @subheading Les desklets se lancent bien en tant que root ou autre utilisateur local, mais gèlent ou se terminent avec un compte monté via NFS
1791 Pour pouvoir fonctionner correctement, adesklets à besoin de pouvoir 
1792 vérouiller quelques fichiers dans le répertoire @code{$HOME}: la plupart 
1793 des problèmes avec les systèmes de fichiers en réseau sont dus à 
1794 des installations fonctionnant à moitié qui n'arrivent pas à fournir 
1795 ce genre de verouillage. Dans l'archive tar des sources d'adesklets vous 
1796 trouverez un court script, @code{test/flock.py}, qui effectue un 
1797 simple test des verrous fcntl; normalement il récupère un verrou dans 
1798 le répertoire de travail courant, attend que l'utilisateur presse une 
1799 touche, alors il relache le verrou et sort. Vous pouvez lancer plusieurs 
1800 instances du script depuis le même répertoire pour vérifier que le 
1801 verouillage fonctionne effectivement. Si ce n'est pas le cas, alors le 
1802 faire fonctionner reviendra surement à faire fonctionner adesklets.
1804 @subheading Tout fonctionnait bien mais j'ai essayé de mettre à jour un desklet, et je n'arrive pas à voir le nouveau. Où est l'erreur?
1806 Il y a un mécanisme interne de blocage dans l'interpréteur qui empêche un 
1807 utilisateur de lancer simultanément plus d'un desklet avec le même @code{ID} 
1808 et le même nom, quelle que soit la version. Lorsque vous mettez à jour un 
1809 desklet donné, vous devriez d'abord quitter proprement le desklet (en 
1810 utilisant la commande @code{Quit} du menu contextuel), puis installer le 
1811 desklet mis à jour en suivant les instructions fournies par le fichier 
1812 @file{README}.
1814 @subheading Argh! Le desklet X marche, mais ne se souvient pas de ses paramètres, ou bien il démarre toujours dans le coin en haut à gauche de l'écran 0 dans une nouvelle session X. Qu'est-ce que c'est? C'est lourd!
1816 C'est très probablement lié à la manière dont vous avez démarré le 
1817 desklet (cf @pxref{Utiliser adesklets}.). Vous devez invoquer le script 
1818 du desklet @strong{une seule fois}. Pour toute utilisation future vous 
1819 n'aurez qu'a éxectuer la commande:
1821 @example
1822 @command{adesklets}
1823 @end example
1825 qui se souviendra où vous aviez placé les desklets et quels desklets étaient 
1826 lancés. N'oubliez pas d'activer les options correctes lors de l'appel à 
1827 @command{adesklets}.
1829 @subheading C'est exactement ce que j'ai fait, mais ce truc ne veut toujours pas redémarrer.
1831 N'auriez-vous pas placé les desklets dans un répertoire du type 
1832 @file{$HOME/.adesklets}? Veillez ne pas le faire. @command{adesklets} 
1833 utilise le fichier @file{$HOME/.adesklets} pour enregistrer toutes sortes 
1834 de paramètres des desklets lancés; créer un répertoire portant ce nom 
1835 l'empêchera de faire son travail correctement, vous n'avez donc qu'a 
1836 déplacer votre répertoire ailleurs (@file{$HOME/.desklets}, par exemple).
1838 @subheading Les desklets se lancent correctement, mais ils continuent de marcher quand je termine la session X.
1840 Normalement, les desklets sont censés s'arrêter automatiquement à la fin de la 
1841 session. Si vous disposez de l'interface basée sur le shell (ce qui est le cas par 
1842 défaut), vous pouvez aussi les fermer manuellement en invoquant la commande
1844 @example
1845 adesklets --killall
1846 @end example
1848 lors de la sortie de session.
1850 @appendixsec Afficher les desklets
1852 @subheading Où sont mes desklets? L'interpréteur d'@command{adesklets} semble être lancé correctement, mais je ne vois tout simplement rien sur mon bureau (le soi-disant problème de clignotement)!
1854 Essayez la commande:
1856 @example
1857 python test/test.py
1858 @end example
1860 @noindent depuis le répertoire de base des sources. Si une fenêtre de 
1861 100x100 pixels apparaît, cela signifie très probablement que vous utilisez 
1862 un gestionnaire de fenêtres qui dessine une grosse fenêtre (dite fausse 
1863 fenêtre racine, ``fake root window'') par dessus la fenêtre racine; 
1864 vos desklets sont dessinés en-dessous. Parmi ces gestionnaires de 
1865 fenêtres on trouve Nautilus, KDE, Xfce4,CDE ou E17. Pour adesklets 
1866 @value{VERSION}, les gestionnaires de fenêtres supportés dans cette catégorie 
1867 sont:
1869 @itemize
1870 @item @strong{KDE}: pour les versions 3.4.1 et supérieures (les versions 
1871 antérieures n'ont pas été testées).
1872 Vous devez soit activer l'option ``Centre de Contrôle -> Bureau -> 
1873 Afficher les icones sur le bureau -> Autoriser les programmes dans la 
1874 fenêtre du bureau''@footnote{NdT: je n'ai pas KDE donc le nom de ces menus 
1875 est approximatif. N'hésitez pas à me donner leur nom 
1876 précis: @email{martin.kirch@@gmail.com}}, soit 
1877 désactiver l'option ``Afficher les icônes sur le bureau''@footnote{Merci 
1878 à Stefan Jungcurt pour l'astuce.}.
1879 @item @strong{Nautilus}
1880 @item @strong{ROX-Filer}: pour l'instant il ne s'agit que d'un support 
1881 préliminaire
1882 @item @strong{Xfce4}
1883 @item @strong{xffm-desktop}: pour l'instant il ne s'agit que d'un support 
1884 préliminaire
1885 @end itemize
1887 Depuis adesklets 0.4.11, la méthode de détection des fausses fenêtres racine 
1888 a changé: par défaut cela ne fait plus partie du code C@footnote{Bien que 
1889 vous pouvez revenir à l'ancienne méthode si vous le désirez en 
1890 utilisant @command{--enable-legacy-fake-root-window-detection} lors de 
1891 la configuration. @xref{Installer adesklets}.}. L'interpréteur s'attend 
1892 maintenant à ce que la variable d'environnement ADESKLETS_ROOT contienne 
1893 le bon ID hexadécimal de la fausse fenêtre racine, si'l y en a. Vous 
1894 pouvez bien sur la définir manuellement, mais l'interface basée sur le shell 
1895 prendra en charge pour vous les gestionnaires de fenêtres les plus courants 
1896 (voir la liste précedente), pourvu que vous lui demandiez de le faire. 
1897 Essayez d'invoquer:
1899 @example
1900 adesklets --help
1901 @end example
1903 Si l'interface est installée, vous devriez voir de nombreuses options, 
1904 notemment celles permettant d'activer une routine de détection de fausse 
1905 fenêtre racine adaptée à un gestionnaire de fenêtres donné. Vous disposez 
1906 aussi d'une détection ``génerique'' via l'option @command{--user}: elle 
1907 peut fonctionner (ou pas) chez vous, selon la structure de votre 
1908 gestionnaire de fenêtres. Enfin, veillez noter que l'interface est un 
1909 simple script compatible sh, installé par défaut dans 
1910 @command{$prefix/share/adesklets} -- il devrait être 
1911 très facile de le modifier pour tout personne désirant implémenter d'autres 
1912 méthodes de détection.
1914 Gardez aussi à l'esprit que la détection de fausse fenêtre racine requiert 
1915 évidemment que celle-ci existe, il est donc important que vous invoquiez 
1916 @command{adesklets} @emph{après} l'initialisation du gestionnaire de 
1917 fenêtre. Pour vous aider à le faire, vous avez à votre disposition l'option 
1918 @command{-w nomduprogramme} dans l'interface du shell.
1920 @subheading Et pour enlightenment?
1921 adesklets fonctionnera comme prévu avec e16 tant que vous n'activez pas les 
1922 fonctions induisant l'uilisation de fausses fenêtres racine (voir les 
1923 questions précedentes), ce qui cache dans certains cas les desklets derrière 
1924 la structure du gestionnaire de fenêtres. D'après l'experience de l'auteur, 
1925 avec la version 0.16.7.2 il n'est possible de voir les desklets que dans le 
1926 premier bureau virtuel. Ceci dit, dans le jargon d'enlightenment, les bureaux 
1927 virtuels peuvent s'étaler sur plusieurs "écrans" (quatre, alignés 
1928 horizontalement par défaut), ce qui permet parfaitement l'usage de plusieurs 
1929 espaces de travail en laissant les desklets d'adesklets visibles.
1931 e17 n'est pas supporté. Si vous y tenez vous pouvez trouver plus d'astuces à 
1932 ce sujet sur la @weblink2{FAQ d'enlightenment, http://www.get-e.org/Main/FAQs/#48}. 
1933 Ceci dit, e17 est fourni avec ce qu'on appelle les ``modules e17'' (engage, 
1934 etc.), qui fonctionnnent parfaitement avec ce WM et qui remplissent les mêmes 
1935 fonctions.
1937 @subheading Maintenant je vois les desklets, mais la transparence foire!
1939 Une pseudo-transparence correcte se base sur la possibilité de récupérer 
1940 l'image de fond d'écran et d'être averti quand elle change. Il n'y a aucune 
1941 méthode complètement fiable ni même bien établie pour le faire sur autre 
1942 chose que la vraie fenêtre racine du protocole X11 (veuillez lire cette partie 
1943 de la FAQ, ``Afficher les desklets'', depuis le début pour bien comprendre 
1944 ce qui suit).
1946 Ainsi, même en présence d'une fausse fenêtre racine, adesklets récupère 
1947 toujours l'arrière-plan de la vraie fenêtre racine: certains gestionnaires de 
1948 fenêtres se soucient de la synchronisation permanente entre la vraie et la 
1949 fausse fenêtre racine, mais pas assez. adesklets fait de son mieux, quand 
1950 c'est possible de manière portable, pour synchroniser @emph{lors de son 
1951 initialisation} les arrières-plans mais dans certains cas supportés 
1952 (ROX-Filer, xffm-desktop), ce n'est même pas possible. Par conséquent, si 
1953 vous obtenez des arrières plans corrompus (pas d'arrière-plan, un arrière-plan 
1954 incorrect ou ne reflétant pas le dernier changement effectué, alors que vous 
1955 voyez effectivement le nouveau papier peint dans une fausse fenêtre racine), 
1956 vous n'avez qu'à dupliquer le papier peint utilisé sur la vraie fenêtre racine, 
1957 de préference en utilisant un afficheur de papier peint supportant la mécanisme 
1958 ad-hoc, largement supporté, d'@weblink2{enlightenment,http://gershwin.ens.fr/vdaniel/Doc-Locale/Outils-Gnu-Linux/Eterm-0.9/#trans} pour la 
1959 notification de changement de papier peint -- n'importe lequel des programmes 
1960 suivants devrait fonctionner correctment: @command{Esetroot}, @command{wmsetbg}, 
1961 @command{feh}, @command{hsetroot}, @command{chbg} ou @command{xsri}. 
1962 En fait vous pouvez utiliser n'importe quel afficheur de papier peint pour 
1963 changer la vraie racine, mais ensuite vous aurez peut-être à rappeler 
1964 le lanceur d'adesklets pour profiter d'une récupération initiale du papier 
1965 peint correcte si aucune notification n'a été envoyée.
1967 @subheading Je ne peut pas voir les petits desklets comme xmms_bar ou asimpleclock, alors que les autres fonctionnent. Pourquoi?
1969 Les nouveaux desklets sont toujours lancés dans le coin le plus en haut à gauche de 
1970 l'écran, tout en bas de la pile de fenêtres. Vérifiez qu'il n'y a rien 
1971 (barre de gnome, engage, etc) qui puisse masquer cette zone de l'écran. 
1972 Attention! Certaines applications sont pseudo-transparentes, et peuvent 
1973 masquer la fenêtre racine sans en avoir l'air.
1975 @subheading J'utilise Fvwm comme gestionnaire de fenêtres. Pourquoi est-ce que je n'arrive pas à maintenir les desklets sous toutes les autres fenêtres? Ils n'arrêtent pas de se mettre au premier plan!
1977 Allez voir la faq de Fvwm: @weblink{http://www.fvwm.org/documentation/faq/#5.11}. 
1978 D'après de nombreux utilisateurs de Fvwm, cette option, 
1979 @code{BugOpts RaiseOverUnmanaged on} fonctionne bien.
1981 @appendixsec Utiliser les desklets
1983 @subheading Le bouton 'Configure' dans le menu contextuel des desklets ne marche pas!
1984 Pour que cela marche--tout du moins pour tous les desklets de démonstration--il faut 
1985 que @command{xterm} soit installé, et que la variable @code{EDITOR} soit correctement 
1986 définie dans votre environnement, comme le veut l'usage sous UNIX. Veillez remarquer 
1987 que cela ne fait que lancer un éditeur de texte dans un terminal. Editer le fichier 
1988 de configuration du desklet (habituellement @file{config.txt} dans le répertoire de 
1989 base du desklet) aura le même effet.
1991 @subheading L'élément 'Configure' du menu contextuel peut-il appeler un éditeur n'utilisant pas la console?
1992 Oui, pourquoi pas? Depuis adesklets 0.4.13, l'interface du shell permet de 
1993 le faire facilement: utilisez l'option @command{adesklets -e} (editeur).
1995 @subheading Avez-vous prévu d'inclure le support d'SVG? J'aimerais utiliser une image SVG dans un de mes desklets.
1996 Désolé, ce n'est pas prévu. Ce n'est pas 
1997 qu'@weblink2{SVG,http://www.w3.org/Graphics/SVG/} est un mauvais format; il est même 
1998 assez bon. Mais c'est également un format orienté vers le dessin vectoriel (et assez 
1999 complexe), alors qu'Imlib2, sur laquelle @command{adesklets} se base entièrement, 
2000 est complètement orientée dessin de trame. Or c'est l'utilisation d'Imlib2 qui rend 
2001 @command{adesklets} simple, relativement rapide et peu consommateur de ressources.
2003 Ceci dit, il n'y a aucune raison que vous n'utilisiez pas d'image SVG dans vos 
2004 desklets, puisqu'il est assez simple de convertir des images SVG en PNG de haute 
2005 qualité en utilisant des programmes comme @weblink2{sodipodi,http://www.sodipodi.com/}, 
2006 @weblink2{inkscape,http://www.inkscape.org/} ou @weblink2{xsvg,http://xsvg.org/}. 
2007 Dans un répertoire plein de SVG, sur un système GNU vous pouvez aussi utiliser 
2008 une commande comme::
2009 @example
2010 ls *.svg | sed 's/\(.*\).svg/-z --file=& --export-png=\1.png --export-width=128 --export-height=128/' | xargs --max-lines=1 sodipodi
2011 @end example
2012 pour toutes les convertir en PNG semi-transparents de 128x128 pixels.
2014 @subheading J'aimerais utiliser certaines polices de mon système avec adesklets, mais mes desklets n'arrivent pas à les trouver. Que dois-je faire?
2016 D'abord, votre adesklets doit supporter fontconfig. Vérifiez-le en lisant le fichier 
2017 config.log issu de la phase de configuration. Si vous n'avez pas gardé le log, vous 
2018 pouvez aussi voir quelles bibliothèques dynamiques sont liées à l'interpréteur. 
2019 Sur un système disposant des binutils GNU, vous pouvez faire quelquechose comme:
2020 @example
2021 ldd `which adesklets` | grep fontconfig
2022 @end example
2023 Si vous obtenez une réponse du genre:
2024 @example
2025  libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x45c750000)
2026 @end example
2027 cela signifie que tout va bien. Autrement, vous devrez recompiler @command{adeskelts} 
2028 à partir des sources. Ensuite, vous pouvez utiliser la commande: 
2029 @example
2030 echo 'list_font_path' | adesklets :
2031 @end example
2032 pour voir dans quels répertoires adesklets recherche les polices TrueType. Consultez 
2033 la documentation de fontconfig si vous désirez les modifier (sur les systèmes à 
2034 jour, @code{man 5 fonts-conf} est un bon point de départ).
2035 De même:
2036 @example
2037 echo 'list_fonts' | adesklets :
2038 @end example
2039 Vous listera les polices actuellement disponibles... Gardez à l'esprit lorsque 
2040 vous les testerez que le nom des polices est sensible à la casse.
2042 Enventuellement, si vous n'arrivez pas à faire fonctionner fontconfig, une manière 
2043 de contourner le problème est de créer des liens symboliques vers les polices que 
2044 vous voulez utiliser dans n'importe quel répertoire listé par la commande 
2045 @code{echo 'list_font_path' ...} ci-dessus.
2047 @ifhtml
2048 @node Documentation du paquetage Python
2049 @appendix Documentation du paquetage Python
2051 Voici quelques liens intéressants vers la documentation du paquetage 
2052 Pyhton@footnote{NdT: elle est en anglais, certes... Mais je ne connais pas encore 
2053 de développeur anglophobe ;-)}:
2055 @itemize
2056 @item @weblink2{adesklets,../pydoc/adesklets.html}
2057 @item @weblink2{adesklets.events_handler,../pydoc/adesklets.events_handler.html}
2058 @item @weblink2{adesklets.commands,../pydoc/adesklets.commands.html}
2059 @item @weblink2{adesklets.utils,../pydoc/adesklets.utils.html}
2060 @item @weblink2{adesklets.configfile,../pydoc/adesklets.configfile.html}
2061 @end itemize
2063 @end ifhtml
2065 @node Documentation d'Imlib2
2066 @appendix Documentation d'Imlib2
2068 Carsten Haitzler (@email{raster@@rasterman.com}) a pris le temps d'écrire une 
2069 documentation très réferencée d'Imlib2, mais pour certaines raisons (très 
2070 probablement des problèmes de taille), elle n'est pas incluse dans le 
2071 paquetage tar des sources d'Imlib2.@footnote{Bien qu'elle puisse être assez 
2072 facilement refaite avec doxygen.}.
2073 Vous pouvez 
2074 @ifhtml
2075 la récuperer @weblink2{ici,../imlib2}.
2076 @end ifhtml
2077 @ifnothtml
2078 la lire en ligne sur @weblink{http://adesklets.sf.net/doc/imlib2/}.
2079 @end ifnothtml
2082 La plupart des fonctions de l'API d'Imlib2 ont des homonymes leurs 
2083 correspondant dans @command{adesklets}. @xref{Programmation d'adesklets}, 
2084 pour plus détails sur la transition du développement avec Imlib2 à adesklets.
2086 @node GNU Makefile pour empaqueter les desklets
2087 @appendix GNU Makefile pour empaqueter les desklets 
2089 Voici un Makefile qui vous permettera d'automatiser la création de  
2090 paquetages contenant des desklets existants ou nouveaux sur un système GNU. 
2091 Copiez simplement le Makefile ci-dessous dans @file{GNUmakefile} dans le 
2092 répertoire de base de votre desklet pour vous en servir. Il n'y a rien du 
2093 tout à éditer, pourvu que le nom du répertoire de base soit de la forme 
2094 'NOM-MAJEURE.MINEURE.REVISION', par exemple @code{beast-0.666.0}.
2096 @verbatiminclude ../utils/GNUmakefile.desklet
2098 @node Soumettre un desklet
2099 @appendix Soumettre un desklet
2101 @section Minima requis dans un paquetage de desklet
2102 Les règles sur le contenu du paquetage d'un desklet sont maigres; les auteurs 
2103 sont libres de faire ce qu'ils veulent. Ils ne doivent absolument respecter que 
2104 deux choses:
2105 @enumerate
2106 @item Le répertoire de base de l'archive du desklet doit contenir un fichier 
2107 @file{README} très clair@footnote{NdT: et en anglais, pour plus de 'portabilité'.} et 
2108 tenu à jour. Il doit au moins contenir:
2109 @itemize
2110 @item le nom et l'adresse email de l'auteur@footnote{Ce serait surement une 
2111 mauvaise idée que de publier votre adresse email privée ici; pour éviter 
2112 le spam, vous devriez plutôt ouvrir un compte sur 
2113 @weblink2{SourceForge,http://sourceforge.net/}, ou un autre fournisseur similaire 
2114 disposant d'un bon système anti-spam.} 
2115 @item Une courte description du desklet
2116 @item Ses dépendances
2117 @item Comment s'en servir
2118 @end itemize
2119 @item Le paquetage doit être une archive tar bzippée ne contenant qu'un seul répertoire 
2120 source du type @code{NOM-MAJEURE.MINEURE.REVISION}, où @code{NAME} est le 
2121 nom de base du desklet, et @code{MAJOR.MINOR.REVISION} sa version. Veillez noter 
2122 qu'un makefile (@xref{GNU Makefile pour empaqueter les desklets}.) est aussi 
2123 fourni pour automatiser la création de ce genre d'archive sur les systèmes GNU.
2124 @end enumerate
2126 @section Le script @command{adesklets_submit}
2128 Depuis @command{adesklets} 0.4.4, les auteurs de desklets disposent d'un 
2129 script Pyhton automatisant la soumission de leurs desklets: 
2130 @file{utils/adesklets_submit} dans le paquetage des sources. Utilisez 
2131 l'option de configuration @code{--with-python-install-submission-scripts} 
2132 pour le placer dans votre répertoire @code{bindir} lors de l'installation.
2134 @file{adesklets_submit} peut être utilisé pour:
2135 @itemize
2136 @item Soumettre une nouvelle description, ou une mise à jour, à inclure dans 
2137 le @weblink2{site Internet d'adesklets,http://adesklets.sf.net/desklets.html}; 
2138 @item Soumettre une archive bzippée du desklet pour l'ajouter aux paquetages 
2139 de desklets de SourceForge (c'est optionel--vous pouvez choisir de l'héberger 
2140 vous-même).
2141 @end itemize
2143 @section Invoquer @command{adesklets_submit}
2144 La soumission du desklet commence par l'envoi d'un email formaté 
2145 spécifiquement à @email{adesklets@@mailworks.org}@footnote{Il est inutile 
2146 d'envoyer autre chose à cette adresse; tous les messages qui ne peuvent être 
2147 interprétés par le script de réception automatique seront simplement 
2148 supprimés. Ecrivez plutôt à @email{syfou@@users.sourceforge.net} si vous 
2149 désirez contacter le créateur du projet (qui parle très bien français, NdT).}.
2150 Le script @command{adesklets_submit} vous assiste dans la construction de cet 
2151 email en utilisant le fichier de configuration @file{$HOME/.adesklets_submit} 
2152 et des options de ligne de commande. Voici un exemple de configuration 
2153 valide du fichier @file{$HOME/.adesklets_submit}:
2155 @verbatiminclude ../utils/adesklets_submit.example
2157 Il s'explique assez bien de lui-même, mais voici quelques points moins clairs:
2159 @itemize
2160 @item
2161 Essayez autant que possible d'éviter les pseudonymes et les surnoms pour 
2162 @code{author_name}, sauf si, évidemment, vous avez déjà une indentité 
2163 virtuelle bien établie sous ce nom.
2164 @item
2165 @code{send_confirmation} précise si un email doit être envoyé en retour à 
2166 l'adresse @code{author_email} dès que votre desklet est publié correctement. 
2167 De toute façon si'l est rejeté vous serez toujours averti par email, avec 
2168 quelques explications. Géneralement, le gérant n'essaiera pas 
2169 de changer les données problématiques, il va seulement expliquer à l'auteur 
2170 ce qui n'était pas bon.
2171 @item
2172 @emph{Verifiez deux fois} l'adresse @code{author_email}, puisque c'est la 
2173 seule que le webmestre essaiera d'utiliser pour vous contacter, ce que les 
2174 en-têtes disent sera ignoré. Si vous ne fournissez pas une adresse valide 
2175 tous les messages ne pourront vous être envoyés, et toutes les nouvelles 
2176 entrées du desklet seront rejetées.
2177 @item
2178 Vous pouvez sans problème utiliser adesklets_submit sans aucun contact 
2179 préalable avec le webmestre d'adesklets (que ce soit par email, dans le 
2180 forum avec l'adresse donnée pour l'enregistrement, ou via la mailing-list), 
2181 mais un minimum de communication sera nécessaire avant la publication 
2182 simplement pour vérifier votre identité et sa relation effective avec 
2183 l'adresse email fournie.
2184 @item
2185 @code{desklets} est un dictionnaire de dictionnaires (un dictionnaire par 
2186 desklet, le nom des desklets étant les clefs); toutes les données se 
2187 réferant à des fichiers (miniatures, captures d'écran ou fichiers à 
2188 télecharger) peuvent être soit une adresse sur un site accessible publiquement 
2189 (de préference), soit un chemin absolu ou relatif à votre répertoire $HOME 
2190 vers des fichiers locaux. Dans ce cas, les fichiers requis seront attachés 
2191 en pièce jointe à l'email géneré. 
2192 @item
2193 Toutes les images seront rapatriées puis intégrées au site Internet 
2194 adesklets.sf.net, vous pourrez ensuite sans problème les retirer de votre 
2195 emplacement en ligne si vous avez fourni des URL.
2196 @item
2197 Si vous mettez à jour un desklet déjà en ligne, il n'y a pas besoin de 
2198 soumettre les images @code{thumbnail} ou @code{screenshot} si elles n'ont 
2199 pas changé; vous pouvez aussi facilement faire réference aux images 
2200 déjà installées sur SourceForge:
2201 @itemize
2202 @item @code{thumbnail} est toujours stockée sous 
2203 @code{http://adesklets.sf.net/images/NAME_thumb.[jpg|png]}
2204 @item @code{screenshot} est toujours stockée sous 
2205 @code{http://adesklets.sf.net/images/NAME_screen.[jpg|png]}
2206 où @code{NAME} est le nom de votre desklet.
2207 @end itemize
2208 @item
2209 En utilisant la valeur @code{host_on_sourceforge}, vous pouvez choisir 
2210 si le paquetage de votre desklet sera hébergé sur SourceForge ou sur votre 
2211 propre site si vous avez fourni une URL. Bien sur dans ce dernier cas 
2212 vous devrez le maintenir à l'emplacement donné.
2213 @item
2214 L'image @code{thumbnail} doit être au format JPG (de préference) ou 
2215 PNG (si vous avez @emph{vraiment} besoin de définitions plus élevées) 
2216 et d'une dimension comprise entre 190x35 pixels et 230x110 pixels.
2217 @item
2218 L'image @code{screenshot} doit être un JPG (de préference) ou un 
2219 PNG de 640x480 pixels. Elle doit mettre votre desklet en évidence, 
2220 et donc ne pas en contenir d'autres.
2221 @item
2222 Vous pouvez choisir de ne pas fournir de miniature ni/ou de capture 
2223 d'écran. Dans ce cas, par défaut, des images géneriques seront utilisées 
2224 à la place.
2225 @item
2226 @code{Category} est actuellement inutilisée, et sera juste ignorée.
2227 @item
2228 Tous les emails pesant plus de 300KB seront rejetés par le serveur email 
2229 du webmestre, adesklets_submit refusera donc d'en génerer. Au lieu de 
2230 soumettre d'aussi grosses entrées, utilisez la possibilité de donner des 
2231 URLs comme décrit ci-dessus pour alléger l'email. 
2232 @item @command{adeskets_submit} ne vérifie pas que vous respectez toutes 
2233 ces règles; il ne vérifie que ce qui est strictement nécessaire pour 
2234 construire un email de soumission adapté: l'existence des entrées de 
2235 dictionnaire, la disponibilité des fichiers, la validité des types de 
2236 fichiers locaux... Il est de votre devoir de s'assurer que les données 
2237 sont correctes si vous voulez éviter le rejet.
2238 @end itemize
2240 Par exemple, Belial Leviathan devrait d'abord vérifier les données de 
2241 son desklet @code{beast} en faisant quelquechose comme:
2242 @example
2243 adesklet_submit beast
2244 @end example
2246 Si tout fonctionne bien, l'email de soumission résultant sera affiché sur 
2247 @code{stdout}. A partir de là, Belial peut: 
2248 @itemize
2249 @item Le passer par un tuyau (pipe) à son MTA (agent de transfet d'email) 
2250 favori pour l'envoyer à @email{adesklets@@mailworks.org}.
2251 @item Demander à @command{adesklets_submit} de l'envoyer lui-même par 
2252 SMTP, en utilisant les paramètres @code{smtp_host} et @code{smtp_port} 
2253 dans son @file{$HOME/.adesklets_submit}. Pour cela, Belial devrait utiliser:
2254 @end itemize
2255 @example
2256 adesklets_submit --send beast
2257 @end example
2259 Une dernière chose: essayez d'éviter d'envoyer des corrections mineures à 
2260 plusieurs reprises, en particulier si vous utilisez des fichiers locaux. 
2261 Cela va charger à la fois le server email du webmestre et son travail de gestion. 
2262 Veillez essayer de créer une entrée valide @emph{puis} de l'envoyer, au 
2263 lieu de patauger autrement. 
2265 @appendixsubsec Validation approfondie d'une entrée avec @command{adesklets_checkin}
2266 Depuis @command{adesklets} 0.4.5, vous avez aussi à votre disposition 
2267 le script @command{adesklets_checkin}. C'est le script Python que le 
2268 webmestre utilise pour vérifier toutes les soumissions. @emph{N'oubliez pas 
2269 que ce script n'est fournit aux auteurs de desklets que par confort, 
2270 pour minimiser le nombre de rejets de soumissions--les développeurs ne 
2271 sont en aucun cas forcés de l'utiliser, et peuvent même être incapables 
2272 de le faire, puisque ce script n'a pas été écrit avec le souci de la 
2273 portabilité, contrairement à adesklets_submit. Lisez l'en-tête du 
2274 script pour une liste complète des pré-requis à son exécution.}
2276 @command{adesklets_checkin} a deux modes de fonctionnement: interactif et 
2277 non-interactif. Seul le mode non-interactif interessera les auteurs de 
2278 desklets. Dans ce mode, l'utilisation est franchement simple. Belial, 
2279 par exemple, ferait:
2280 @example
2281 adesklets_submit beast | adesklets_checkin
2282 @end example
2284 Si tout fonctionne bien, le résultat serait similaire à:
2285 @example
2286 Validation started. Please wait.
2287 Everything seems fine, but keep in mind a few things cannot be
2288 verified without human intervention. See documentation for details.
2289 @end example
2291 Sinon, vous aurez la trace de l'exception avec quelques explications 
2292 assez claires (espèrons-le).
2294 @appendixsubsec Limitations d'@command{adesklets_checkin} en mode non-interactif
2296 Voici quelques problèmes restants qu'@command{adesklets_checkin} ne 
2297 peut pas détecter et qui doivent donc être absolument résolus 
2298 manuellement (le webmestre en détectera la plupart, et vous aurez à 
2299 renvoyer l'email de toute façon):
2300 @itemize
2301 @item
2302 Un fichier README incomplet dans le répertoire de base (Est-ce qu'il 
2303 contient tous les détails énumerés ci-dessus?).
2304 @item
2305 Le fichier README n'est plus à jour (Est-ce que son contenu reflète 
2306 l'état actuel du desklet?).
2307 @item
2308 Le desklet ne peut pas fonctionner à la sortie de la boite (c'est-à-dire 
2309 sans ou avec un minimum de configuration) alors que les pré-requis du 
2310 fichier README et les instructions particulières sont respectés.
2311 @end itemize    
2313 @node Copier ce Manuel
2314 @appendix Copier ce Manuel
2316 @menu
2317 * GNU General Public License::  la licence permettant de copier ce manuel.
2318 @end menu
2319 NdT: La licence est laissée en version originale car seule cette version à une 
2320 valeur juridique. Néanmoins, pour en faciliter la compréhension, 
2321 il existe des traductions disponibles sur Internet, par exemple sur 
2322 @weblink{http://www.linux-france.org/article/these/gpl.html}.
2324 @include gpl.texi
2326 @node Clé publique Open PGP
2327 @appendix Clé publique Open PGP
2329 @verbatiminclude syfou.asc
2331 @noindent Vous pouvez également obtenir ce certificat d'un bon nombre de serveurs
2332 publics de clés sur Internet, tels @weblink{http://www.keyserver.net/}, ou
2333 @weblink{http://pgp.mit.edu/}. Contactez son auteur légitime, 
2334 Sylvain Fourmanoit, par courier électronique à l'adresse
2335 @email{syfou@@users.sourceforge.net} pour organiser une validation plus correcte
2336 de la clé si vous en avez besoin.
2338 @bye