mirrored from git://git.sv.gnu.org/emacs.git
/
ses-fr.texi
1631 lines (1378 loc) · 59 KB
/
ses-fr.texi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
\input texinfo @c -*- mode: texinfo; coding: utf-8; -*-
@c %**start of header
@setfilename ../../../../info/ses-fr.info
@documentlanguage fr
@documentencoding UTF-8
@settitle @acronym{SES}: Le tableur simple d’Emacs
@include docstyle.texi
@setchapternewpage off
@syncodeindex fn cp
@syncodeindex vr cp
@syncodeindex ky cp
@c %**end of header
@copying
Ce fichier documente @acronym{SES} : le tableur simple d’Emacs (Simple
Emacs Spreadsheet).
Copyright @copyright{} 2002--2024 Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below. A copy of the license
is included in the section entitled ``GNU Free Documentation License.''
(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
modify this GNU manual.''
@end quotation
@end copying
@dircategory Emacs misc features
@direntry
* @acronym{SES}-fr: (ses-fr). Le tableur simple d’Emacs.
@end direntry
@finalout
@titlepage
@title @acronym{SES}
@subtitle Le tableur simple d’Emacs
@author Jonathan A. Yavner
@author @email{jyavner@@member.fsf.org}
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage
@contents
@c ===================================================================
@ifnottex
@node Top
@comment node-name, next, previous, up
@top @acronym{SES}: Simple Emacs Spreadsheet
@display
@acronym{SES} est mode majeur de GNU Emacs pour éditer des fichiers
tableur, c.-à-d.@: des fichiers contenant une grille rectangulaire de
cellules. Les valeurs des cellules sont spécifiées par des formules
pouvant se référer aux valeurs d’autres cellules.
@end display
@end ifnottex
Pour les rapports d’anomalie, utiliser @kbd{M-x report-emacs-bug}.
@insertcopying
@menu
* Boniment: Sales Pitch. Pourquoi utiliser @acronym{SES}?
* Tuto: Quick Tutorial. Une introduction sommaire
* Les bases: The Basics. Les commandes de base du tableur
* Fonctions avancées: Advanced Features. Vous voulez en savoir plus ?
* Pour les gourous: For Gurus. Vous voulez en savoir @emph{encore plus} ?
* Index: Index. Index des concepts, fonctions et variables
* Remerciements: Acknowledgments. Remerciements
* Licence GNU pour la documentation libre: GNU Free Documentation License. La licence de cette documentation.
@end menu
@c ===================================================================
@node Sales Pitch
@comment node-name, next, previous, up
@chapter Boniment
@cindex features
@itemize --
@item Créer et éditer des feuilles de calcul avec un minimum de tracas.
@item Prise en charge complète du Défaire/Refaire/Sauvegarde auto.
@item Protection contre les virus enfouis dans les feuilles de calcul.
@item Les formules de cellule sont directement du code Emacs Lisp.
@item Fonctions d’impression pour contrôler l’apparence des cellules.
@item Raccourcis clavier intuitifs : C-o = insérer une ligne, M-o = insérer une colonne, etc.
@item « Débordement » des valeurs de cellule longues dans les cellules vides suivantes.
@item La ligne d’en-tête montre les lettres désignant les colonnes.
@item Autocomplétion pour la saisie des symboles de cellules nommées lors de la saisie des formules.
@item Couper, copier et coller peut transferer les formules et les fonctions d’impression.
@item Import and export de valeurs séparées par des tabulations, ou de formules séparées par des tabulations.
@item Format de fichier en texte, facile à bidouiller.
@end itemize
@c ===================================================================
@node Quick Tutorial
@chapter Tuto
@cindex introduction
@cindex tuto
Si vous désirez être rapidement lancé et pensez que vous savez ce que
vous attendez d’un tableur simple, alors ce chapitre peut être tout ce
dont vous avez besoin.
Premièrement, visitez un nouveau fichier avec pour extension de nom de
fichier @file{.ses}. Emacs vous présente alors une feuille de calcul
vide contenant une seule cellule.
Commencez par saisir une ligne d’en-tête : @kbd{"Revenu@key{RET}}. Le
guillemet double @code{"} indique que vous saisissez une cellule
textuelle, il ne fait pas partie de la valeur de la cellule, et aucun
guillemet de fermeture n’est nécessaire.
Pour insérer votre première valeur de revenu, vous devez d’abord
redimensionner la feuille. Appuyer sur la touche @key{TAB} pour
ajouter une nouvelle cellule et revenez à elle en remontant.
Saisissez un nombre, tel que @samp{2.23}. Puis continuer pour ajouter
quelques valeurs supplémentaires de revenu, par ex. :
@example
@group
A
Revenu
2.23
0.02
15.76
-4.00
@end group
@end example
Pour additionner les valeurs entre elles, saisissez une expression
Lisp :
@example
(+ A2 A3 A4 A5)
@end example
Peut-être désirez vous ajouter une cellule à la droite de la cellule
@samp{A4} pour expliquer pourquoi vous avez une valeur négative. En
appuyant sur @kbd{TAB} dans cette cellule vous ajouter entièrement une
nouvelle colonne @samp{B} où vous pourrez ajouter une telle note.
La colonne est assez étroite par défaut, mais en appuyant sur @kbd{w}
vous pouvez la redimensionner selon vos besoins. Faites la de 22
caractères de large. Vous pouvez maintenant ajoutez des notes
descriptives pour chacune des cases, par ex.@: :
@example
@group
A B
Revenu
2.23 Frais de consultation
0.02 Opinion informée
15.76 Stand limonade
-4 Prêt à Joseph
14.01 Total
@end group
@end example
Par défaut, l’impression des valeurs de cellule se fait alignée à
droite, c’est la raison d’un tel alignement pour les notes dans la
colonne @samp{B}. Pour changer cela, vous pouvez saisir une fonction
d’impression pour la colonne entière, en utilisant par ex. @kbd{M-p
("%s")}. Le fait que @code{"%s"} soit contenu dans une liste indique à
@acronym{SES} que l’alignement est à faire à gauche. Vous pouvez
l’emporter sur la fonction d’impression de colonne pour l’une
quelconque de ses cellules en donnant une fonction d’impression par
cellule avec @kbd{p}.
Vous pouvez nommer une fonction d’impression, et utiliser le nom de la
fonction à la place de sa définition, de sorte à faciliter la
modification de l’impression de toutes les cellules utilisant cette
fonction. Par exemple tapez @kbd{M-x
ses-define-local-printer@key{ret}}, puis @kbd{note@key{ret}}, puis
@kbd{("%s")} pour définir une fonction d’impression nommée @code{note}
dont la définition est @code{("%s")}, puis sur la colonne @samp{B} tapez
@kbd{M-p note@key{ret}}
@example
@group
A B
Revenu
2.23 Frais de consultation
0.02 Opinion informée
15.76 Stand limonade
-4 Prêt à Joseph
14.01 Total
@end group
@end example
Si maintenant vous redéfinissez @code{note} avec pour nouvelle
définition @kbd{("*%s")} qui ajoute un astérisque @code{*} devant le
texte, la zone d’impression est modifiée ainsi :
@example
@group
A B
Revenu
2.23 *Frais de consultation
0.02 *Opinion informée
15.76 *Stand limonade
-4 *Prêt à Joseph
14.01 *Total
@end group
@end example
Notez que la cellule @samp{B1} reste affichée vide et n’est pas
affichée comme @samp{*}. C’est parce que la valeur de la cellule est
@code{nil}, et que les fonctions d’impression définies à partir d’une
chaîne de formatage comme @code{"%s"} dans @code{("%s")} impriment
systématiquement @code{nil} comme une chaîne vide, et tentent
d’imprimer toute valeur non-@code{nil} en utilisant la fonction
standarde @code{format} avec la chaîne de formatage, et si cela
échoue, utilisent la fonction de repli @code{ses-prin1} la place.
Si maintenant Joseph rembourse son prêt, vous pourriez effacer cette
case ; par ex.@: en positionnant le curseur sur la cellule A5 et en
appuyant sur @kbd{C-d}. Si vous faites celle le total imprimé dans la
cellule A6 affichera @samp{######}. La raison de cela est la valeur
dans une cellule vide est typiquement @code{nil} et que l’opérateur
@code{+} ordinaire échoue à gérer une telle valeur. Au lieu de vider
la cellule, vous pourriez littéralement saisir @samp{0}, ou supprimer
entièrement la ligne en utilisant @kbd{C-k}. Une alternative est
d’utiliser la fonction spéciale @code{ses+} au lieu du @code{+}
ordinaire :
@example
(ses+ A2 A3 A4 A5)
@end example
Pour rendre une formule robuste au changement de géométrie de la
feuille, vous pouvez utiliser la macro @code{ses-range} pour faire
référence à une plage de cellules par ses extrémités, par ex. :
@example
(apply 'ses+ (ses-range A2 A5))
@end example
(Le @code{apply} est nécessaire parce que @code{ses-range} produite
une @emph{liste} de valeurs, ce qui ouvre des possibilités plus
complexes).
Alternativement vous pouvez utiliser le modificateur @code{!} de
@code{ses-range} pour retirer les cellules vides de la liste renvoyée,
ce qui permet d’utiliser @code{+} au lieu de @code{ses+}:
@lisp
(apply '+ (ses-range A2 A5 !))
@end lisp
@c ===================================================================
@node The Basics
@comment node-name, next, previous, up
@chapter Les bases
@cindex commandes de base
@cindex base, commandes de
@findex ses-jump
@findex ses-mark-row
@findex ses-mark-column
@findex ses-mark-whole-buffer
@findex set-mark-command
@findex keyboard-quit
Pour créer une nouveau tableur, visitez un fichier inexistant dont le
nom se termine en @file{.ses}. Par exemple, @kbd{C-x C-f essai.ses
@key{ret}}.
Un @dfn{identificateur de cellule} est un symbole avec une lettre de
colonne et un numéro de ligne. La cellule B7 est la 2e column de la
7e ligne. Pour les feuilles très larges, il ya deux lettres de
colonne : la cellule AB7 les la 28e colonne de la 7e ligne. Les
feuilles encore plus larges ont AAA1, etc. On se déplace avec les
commandes ordinaires de déplacement d’Emacs.
@table @kbd
@item j
Déplace le point vers la cellule spécifiée par identificateur
(@code{ses-jump}). À moins que la cellule ne soit une cellule
renommée, l’identificateur est insensible à la casse. Un argument
préfixe @math{n} déplace vers la cellule de coordonnées @math{(n\div
R, n \% C)} pour une feuille de @math{R} ligne et @math{C} colonnes,
et @samp{A1} étant aux coordonnées @math{(0,0)}. La façon dont
l’identificateur ou l’argument préfixe de commande sont interprétés
peut être personnalisée via les variables
@code{ses-jump-cell-name-function} et @code{ses-jump-prefix-function}.
@end table
Le Point est toujours sur le bord de gauche d’une cellule, ou à la fin
de ligne vide. Quand la marque est inactive, la cellule courante est
soulignée. Quand la marque est active, la plage est le rectangle de
cellules mis en vedette (@acronym{SES} utilise toujours le mode de
marque transitoire). Faire glisser la souris de @samp{A1} à @samp{A3}
crée la plage @samp{A1-A2}. Beaucoup de commandes @acronym{SES}
opèrent seulement sur une seule cellule, et non sur une plage.
@table @kbd
@item C-@key{SPC}
@itemx C-@@
Règle la marque au point (@code{set-mark-command}).
@item C-g
Désactive la marque (@code{keyboard-quit}).
@item M-h
Met en vedette la ligne courante (@code{ses-mark-row}).
@item S-M-h
Met en vedette la colonne courante (@code{ses-mark-column}).
@item C-x h
Mettre en vedette toutes les cellules (@code{mark-whole-buffer}).
@end table
@menu
* Formules: Formulas.
* Redimensionner: Resizing.
* Fonctions d’impression: Printer functions.
* Effacer des cellules: Clearing cells.
* Copier/couper/coller: Copy/cut/paste.
* Personnaliser @acronym{SES}: Customizing @acronym{SES}.
@end menu
@node Formulas
@section Formules de cellule
@cindex formules
@cindex formules, saisire
@cindex valeurs
@cindex valeurs de cellule
@cindex éditer des cellules
@findex ses-read-cell
@findex ses-read-symbole
@findex ses-edit-cell
@findex ses-recalculate-cell
@findex ses-recalculate-all
Pour insérer une valeur dans une cellule, tapez juste une expression
numérique, un @samp{"texte entre guillemets anglais"}, ou une
expression Lisp.
@table @kbd
@item 0..9
Auto-insérer un nombre (@code{ses-read-cell}).
@item -
Auto-insérer un nombre négatif (@code{ses-read-cell}).
@item .
Auto-insérer un nombre décimal (@code{ses-read-cell}).
@item "
Auto-insérer une chaîne de caractères. Le guillemet anglais de
terminaison est inséré automatiquement (@code{ses-read-cell}).
@item (
Auto-insérer une expression. La parenthèse de droite est insérée
automatiquement (@code{ses-read-cell}). Pour accéder à la valeur
d’une autre cellule, il suffit d’utiliser son identificateur dans
votre expression. Dès que l’autre cellule change, la formule de cette
cellule-ci est réévaluée. En tapant l’expression, vous pouvez
utiliser les raccourcis clavier suivants :
@table @kbd
@item M-@key{TAB}
pour compléter les noms de symboles, et
@item C-h C-n
pour lister les symboles de cellules renommées dans un tampon d’aide.
@end table
@item ' @r{(apostrophe)}
Entrer un symbole (@code{ses-read-symbol}). @acronym{SES} se souvient
de tous les symboles qui ont été utilisés comme formules, de sorte que
vous pouvez taper juste le début d’un symbole et utiliser
@kbd{@key{SPC}}, @kbd{@key{TAB}}, et @kbd{?} pour le compléter.
@end table
Pour saisire quelque-chose d’autre (par ex., un vecteur), commencer
avec un chiffre, puis effacer le chiffre et tapez ce que vous désirez.
@table @kbd
@item @key{RET}
Édite la formule existante dans la cellule courante (@code{ses-edit-cell}).
@item C-c C-c
Force le recalcul de la cellule ou plage courante (@code{ses-recalculate-cell}).
@item C-c C-l
Recalcule la feuille entière (@code{ses-recalculate-all}).
@end table
@node Resizing
@section Redimensionner la feuille
@cindex redimensionner des feuilles
@cindex dimensions
@cindex ligne, ajout ou suppression
@cindex colonne, ajout ou suppression
@cindex ajouter des lignes ou colonnes
@cindex insérer des lignes ou colonnes
@cindex enlever des lignes ou colonnes
@cindex supprimer des lignes ou colonnes
@findex ses-insert-row
@findex ses-insert-column
@findex ses-delete-row
@findex ses-delete-column
@findex ses-set-column-width
@findex ses-forward-or-insert
@findex ses-append-row-jump-first-column
Commande de base :
@table @kbd
@item C-o
(@code{ses-insert-row})
@item M-o
(@code{ses-insert-column})
@item C-k
(@code{ses-delete-row})
@item M-k
(@code{ses-delete-column})
@item w
(@code{ses-set-column-width})
@item @key{TAB}
Déplace le point sur la prochaine cellule vers la droite, ou insère
une nouvelle colonne si on est déjà sur la dernière cellule de la
ligne, ou insère une nouvelle ligne si on est sur la ligne de
terminaison (@code{ses-forward-or-insert}).
@item C-j
Insère une nouvelle ligne sous la ligne courante et va à la colonne A
de cette ligne (@code{ses-append-row-jump-first-column}).
@end table
En redimensionnant la feuille (à moins que vous ne fassiez que changer
la largeur d’une colonne) les références de cellule au sein des
formules sont toutes relocalisées de sorte à continuer à faire
référence aux mêmes cellules. Si une formule mentionne B1 et que vous
insérez une nouvelle première ligne, alors la formule mentionnera B2.
Si vous supprimez une cellule à laquelle une formule fait référence,
le symbole de cellule est supprimé de la formule, de sorte que
@code{(+ A1 B1 C1)} après suppression de la troisième colonne devient
@code{(+ A1 B1)}. Au cas où cela ne serait pas ce que vous désiriez :
@table @kbd
@item C-_
@itemx C-x u
Défait l’action action précédente (@code{(undo)}).
@end table
@node Printer functions
@section Fonctions d’impression
@cindex fonctions d’impression
@cindex formatage de cellule
@cindex cellules, formater
Les fonctions d’impression convertissent des valeurs binaires de
cellule en formes d’impression qu’Emacs affiche à l’écran.
@menu
* Différents types de fonctions d’impression: Various kinds of printer functions.
* Configurer quelle fonction d’impression s’applique: Configuring what printer function applies.
* Les fonctions d’impression standardes: Standard printer functions.
* Les fonctions d’impression locales: Local printer functions.
* Écrire une fonctions d’impression lambda: Writing a lambda printer function.
@end menu
@node Various kinds of printer functions
@subsection Différents types de fonctions d’impression
Lorsque on configure quelle fonction d’impression s’applique
(@pxref{Configuring what printer function applies}), on peut saisir
une fonction d’impression comme l’une des possibilités suivantes :
@itemize
@item
Une chaîne de formatage, telle que @samp{"$%.2f"}. la chaîne formatée
résultante est alignée à droite au sein de la cellule
d’impression. Pour obtenir un alignement à gauche, utilisez des
parenthèses : @samp{("$%.2f")}.
@item
Une fonction d’impression peut aussi être une fonction à un argument
dont la valeur renvoyée est une chaîne (pour obtenir un alignement à
droite) ou une liste d’une chaîne (pour obtenir un alignement à
gauche). Une telle fonction peut à son tour être configurée comme :
@itemize
@item
Une expression lambda, par exemple :
@lisp
(lambda (x)
(cond
((null x) "")
((numberp x) (format "%.2f" x))
(t (ses-center-span x ?# 'ses-prin1))))
@end lisp
Pendant la saisie d’une lambda, vous pouvez utiliser @kbd{M-@key{TAB}}
pour completer les noms de symboles.
@item
Un symbole faisant référence à une fonction d’impression standarde
(@pxref{Standard printer functions}).
@item
Un symbole faisant référence à une fonction d’impression locale
(@pxref{Local printer functions}).
@end itemize
@end itemize
@node Configuring what printer function applies
@subsection Configurer quelle fonction d’impression s’applique
Chaque cellule a une fonction d’impression. Si c’est @code{nil},
alors la fonction d’impression de la colonne de cette cellule est
utilisée. Et si cela est aussi @code{nil}, alors la fonction
d’impression par défaut de la feuille est utilisée.
@table @kbd
@item p
@findex ses-read-cell-printer
Saisit une fonction d’impression pour la cellule ou plage courante
(@code{ses-read-cell-printer}).
@item M-p
@findex ses-read-column-printer
Saisit une fonction d’impression pour la colonne courante (@code{ses-read-column-printer}).
@item C-c C-p
@findex ses-read-default-printer
Saisit la fonction d’impression par défaut de la feuille
(@code{ses-read-default-printer}).
@end table
Les commandes @code{ses-read-@var{xxx}-printer} permettent les commandes
suivantes pendant l’édition:
@table @kbd
@item @key{arrow-up}
@itemx @key{arrow-down}
Pour parcourir l’historique : les commandes
@code{ses-read-@var{xxx}-printer} ont leur propre historique de
mini-tampon, il est préchargé avec l’ensemble de toutes les fonctions
d’impression utilisées dans cette feuille, plus les fonctions
d’impression standardes (@pxref{Standard printer functions}) et les
fonctions d’impression locales (@pxref{Local printer functions}).
@item @key{TAB}
Pour compléter les symboles de fonctions d’impression locales, et
@item C-h C-p
Pour lister les fonctions d’impression locales dans un tampon d’aide.
@end table
@node Standard printer functions
@subsection Les fonctions d’impression standardes
Mise à part @code{ses-prin1}, les autres fonctions d’impression
standardes ne conviennent que pour les cellules, et non pour les
colonnes ou comme fonction d’impression par défaut de la feuille,
parce qu’elles formatent la valeur en utilisant la fonction
d’impression de colonne (ou par défaut si @code{nil}) et ensuite
post-traite le résultat, par ex.@: le centre :
@ftable @code
@item ses-center
Centre juste.
@item ses-center-span
Centrer en débordant sur les cellules vides suivantes.
@item ses-dashfill
Centrer en utilisant des tirets (@samp{-}) au lieu d’espaces.
@item ses-dashfill-span
Centrer avec tirets et débordement.
@item ses-tildefill-span
Centrer avec tildes (@samp{~}) et débordement.
@item ses-prin1
C’est la fonction d’impression de repli, utilisée quand l’appel à la
fonction d’impression configurée envoie une erreur.
@end ftable
@node Local printer functions
@subsection Les fonctions d’impression locales
@findex ses-define-local-printer
Vous pouvez définir une fonction d’impression locale à la feuille avec
la commande @code{ses-define-local-printer}. Par exemple, définissez
une fonction d’impression @samp{toto} à @code{"%.2f"}, et ensuite
utilisez le symbole @samp{toto} comme fonction d’impression. Ensuite,
si vous rappelez @code{ses-define-local-printer} sur @samp{toto} pour
le redéfinir comme @code{"%.3f"}, alors toutes les cellules utilisant
la fonction d’impression @samp{toto} seront re-imprimées conformément.
Il peut arriver que vous désiriez définir ou redéfinir certaines
fonctions d’impression à chaque fois que vous ouvrez une feuille. Par
exemple, imaginez que vous désiriez définir/re-définir automatiquement
une fonction d’impression locale @code{euro} pour afficher un nombre
comme une somme en euros, par exemple le nombre @code{3.1} serait
affiché comme @code{3.10@dmn{}@euro{}}. Pour faire cela dans tout
tampon SES qui n’est pas en lecture seule, vous pouvez ajouter ce
genre de code à votre fichier d’init @file{.emacs} :
@lisp
(defun my-ses-mode-hook ()
(unless buffer-read-only
(ses-define-local-printer
'euro
(lambda (x)
(cond
((null x) "")
((numberp x) (format "%.2f€" x))
(t (ses-center-span x ?# 'ses-prin1)))))))
(add-hook 'ses-mode-hook 'my-ses-mode-hook)
@end lisp
Si vous remplacez la commande @code{ses-define-local-printer} par la
fonction @code{ses-define-if-new-local-printer}
@findex ses-define-if-new-local-printer
la définition ne se produira que si aucune fonction d’impression de
même nom n’est déjà définie.
@node Writing a lambda printer function
@subsection Écrire une fonctions d’impression lambda
Vous pouvez écrire une fonction d’impression avec une expression
lambda prenant un seul argument en deux cas :
@itemize
@item
quand vous configurez la fonction d’impression s’appliquant à
une cellule ou colonne, ou
@item
quand vous définissez une fonction d’impression avec la commande
@code{ses-define-local-printer}.
@end itemize
En faisant cela, prenez garde à ce que la valeur renvoyée soit une
chaîne, ou une liste contenant une chaîne, même quand l’argument
d’entrée a une valeur inattendue. Voici un exemple :
@example
(lambda (val)
(cond
((null val) "")
((and (numberp val) (>= val 0)) (format "%.1f" val))
(t (ses-center-span val ?# 'ses-prin1))))
@end example
Cet exemple fait ceci :
@itemize
@item
Quand la cellule est vide (c.-à-d.@: quand @code{val} est @code{nil}),
imprime une chaîne vide @code{""}
@item
Quand la valeur de cellule est un nombre positif ou nul, formate la
valeur en notation à virgule fixe avec une decimale après la virgule
@item
Sinon, gère la valeur comme erronnée en l’imprimant comme une
s-expression (avec @code{ses-prin1}), centrée et entourée de
croisillons @code{#} de bourrage.
@end itemize
Une autre précaution à prendre est d’éviter un débordement de pile à
cause d’une fonction d’impression se rappelant elle-même sans
fin. Cette erreur peut se produire quand vous utilisez une fonction
d’impression locale comme fonction d’impression de colonne, et que
cette fonction d’impression locale appelle implicitement la fonction
d’impression de colonne courante, ainsi elle se rappelle elle-même
récursivement. Imaginez par exemple que vous désirez créer une
fonction d’impression locale @code{=bourre} qui centre le contenu
imprimé d’une cellule et l’entoure de signes égal @code{=}, et que
vous le faites (erronnément) comme cela :
@lisp
;; CODE ERRONÉ
(lambda (x)
(cond
((null x) "")
(t (ses-center x 0 ?=))))
@end lisp
Comme @code{=bourre} utilise la fonction d’impression standarde
@code{ses-center} mais sans lui passer exemplicitement une fonction
d’impression, @code{ses-center} appelle la fonction d’impression de
colonne courante s’il y en a une, ou la fonction d’impression par
défaut de la feuille sinon. Aussi, utiliser @code{=bourre} comme
fonction d’impression de colonne aura pour résultat de causer un
débordement de pile dans cette colonne sur toute cellule non vide,
puisque @code{ses-center} rappelle récursivement la fonction qui l'a
appelé. @acronym{SES} ne vérifie pas cela ; il vous faut donc faire
attention. Par exemple, reécrivez @code{=bourre} ainsi :
@lisp
(lambda (x)
(cond
((null x) "")
((stringp x) (ses-center x 0 ?= " %s "))
(t (ses-center-span x ?# 'ses-prin1))))
@end lisp
Le code ci-dessus est réparé au sens où @code{ses-center} et
@code{ses-center-span} sont toutes deux appelées avec un dernier
argument @var{printer} explicite spécifiant la fonction d'impression,
respectivement @code{" %s "} et @code{'ses-prin1}.
Le code ci-dessus applique le bourrage de @code{=} seulement aux
chaînes ; et aussi il entoure la chaîne par un espace de chaque côté
avant de bourrer avec des signes @code{=}. Ainsi la chaîne @samp{Ula}
s’affichera comme @samp{@w{=== Ula ===}} dans une colonne large de 11
caractères. Toute valeur qui n’est ni @code{nil} (c.-à-d.@: une
cellule vide) ni une chaîne est affichée comme une erreur par l’usage
de bourrage par des croisillons @code{#}.
@node Clearing cells
@section Effacer des cellules
@cindex effacer, commandes
@findex ses-clear-cell-backward
@findex ses-clear-cell-forward
Ces commandes règlent à la fois la formule et la fonction d’impression
à @code{nil} :
@table @kbd
@item @key{DEL}
Se deplace à gauche et efface la cellule (@code{ses-clear-cell-backward}).
@item C-d
Efface la cellule et se déplace à droite (@code{ses-clear-cell-forward}).
@end table
@node Copy/cut/paste
@section Copier, couper, et coller
@cindex copier
@cindex couper
@cindex coller
@findex kill-ring-save
@findex mouse-set-region
@findex mouse-set-secondary
@findex ses-kill-override
@findex yank
@findex clipboard-yank
@findex mouse-yank-at-click
@findex mouse-yank-at-secondary
@findex ses-yank-pop
Les fonctions de copie opèrent sur des regions rectangulaires de
cellules. Vous pouvez coller les copies dans des tampons
non-@acronym{SES} pour exporter le texte d’impression.
@table @kbd
@item M-w
@itemx [copy]
@itemx [C-insert]
Copie les cellules en vedette vers l’anneau presse-papier et le
presse-papier primaire (@code{kill-ring-save}).
@item [drag-mouse-1]
Marque une region et la copie vers l’anneau presse-papier et le
presse-papier primaire (@code{mouse-set-region}).
@item [M-drag-mouse-1]
Marque une region et la copie vers l’anneau presse-papier et le
presse-papier secondaire (@code{mouse-set-secondary}).
@item C-w
@itemx [cut]
@itemx [S-delete]
Les fonctions couper ne suppriment pas en fait de lignes ou de
colonnes --- elles les copient et puis les effacent
(@code{ses-kill-override}).
@item C-y
@itemx [S-insert]
Colle à partir de l’anneau presse-papier (@code{yank}). Les fonctions
coller se comportent différemment selon le format du texte qu’elles
insèrent :
@itemize @bullet
@item
Quand on colle des cellules qui ont été coupées ou copiées à partir
d’un tampon @acronym{SES}, le texte d’impression est ignoré et
seulement la formule et fonction d’impression jointes sont insérées ;
les références de cellule de la formule sont relocalisées à moins que
vous n’utilisiez @kbd{C-u}.
@item
Le texte collé écrase un rectangle de cellules dont le coin haut
gauche est la cellule courante. Si une partie du rectangle est
au-délà des bords de la feuille, vous devez confirmer l’augmentation
de la taille de la feuille.
@item
Du texte Non-@acronym{SES} est d’ordinaire inséré comme formule de
remplacement pour la cellule courante. Si la formule serait un
symbole, elle est traitée comme une chaîne à moins que vous
n’utilisiez @kbd{C-u}. Les formules collées comprenant des erreurs de
syntaxe sont toujours traitées comme des chaînes.
@end itemize
@item [paste]
Colle à partir du presse-papier primaire ou de l’anneau presse-papier
(@code{clipboard-yank}).
@item [mouse-2]
Règle le point et colle à partir du presse-papier primaire
(@code{mouse-yank-at-click}).
@item [M-mouse-2]
Règle le point et colle à partir du presse-papier secondaire
(@code{mouse-yank-secondary}).
@item M-y
Immédiatement après un coller, vous pouvez remplacer le texte avec un
élément précédent à partir de l’anneau presse-papier
(@code{ses-yank-pop}). Contrairement au yank-pop standard d’Emacs, la
version de @acronym{SES} utilise @code{undo} pour supprimer l’ancien
collage. Est-ce que cela ne fait aucune différence ?
@end table
@node Customizing @acronym{SES}
@section Personnaliser @acronym{SES}
@cindex personnaliser
@vindex enable-local-eval
Par défaut, une feuille venant d’être créée a 1 ligne et 1 colonne.
La largeur de colonne est 7 et la fonction d’impression par défaut est
@samp{"%.7g"}. Chacune de ces choses peut être personnalisée. Allez
voir dans le groupe « ses ».
Après avoir saisi une valeur de cellule, normalement
@code{forward-char} est appelé, ce qui déplace le point vers la
cellule suivante à droite, ou à la première cellule à gauche de la
ligne suivante si la cellule courante est la plus à droite de la
feuille. Vous pouvez personnaliser @code{ses-after-entry-functions}
pour que le déplacement soit vers la gauche ou le haut ou le bas.
Pour un mouvement diagonal, selectionnez deux fonctions de la liste.
@vindex ses-jump-cell-name-function
@code{ses-jump-cell-name-function} est une variable personnalisable
réglée par défaut à la fonction @code{upcase}. Cette fonction est
appelée quand vous passez un nom de cellule à la commande
@command{ses-jump} (@kbd{j}), et que ce nom n’est pas le nom d’une
cellule renommée. Elle change le nom de cellule saisi en celui de la
cellule vers laquelle sauter. Le réglage par défaut @code{upcase} vous
permet de saisir le nom de cellule en bas de casse. Un autre usage de
@code{ses-jump-cell-name-function} pourrait être une
internationalisation pour convertir des caractères non latins en
équivalents latins pour nommer la cellule. Au lieu d’un nom de
cellule, la fonction peut renvoyer des coordonnées de cellule sous la
forme d’un cons, par exemple @code{(0 . 0)} pour la cellule @code{A1},
@code{(1 . 0)} pour la cellule @code{A2}, etc.
@vindex ses-jump-prefix-function
@code{ses-jump-prefix-function} est une variable personnalisable
réglée par défaut à la fonction @code{ses-jump-prefix}. Cette fonction
est appelée quand vous donnez un argument préfixe à la commande
@command{ses-jump} (@kbd{j}). Elle renvoie un nom de cellule ou des
coordonnées de cellule correspondant à l’argument préfixe. Les
coordonnées de cellule sont sous la forme d’un cons, par exemple
@code{(1 . 0)} pour la cellule @code{A2}. Le réglage par défaut
@code{ses-jump-prefix} numérote les cellules de gauche à droite et
puis de haut en bas, de sorte que si on suppose une feuille 4×3,
l’argument préfixe @samp{0} saute à la cellule @samp{A1}, l’argument
préfixe @samp{2} saute à @samp{C1}, l’argument préfixe @samp{3} saute
à @samp{A2}, etc.
@vindex ses-mode-hook
@code{ses-mode-hook} est un crochet de mode normal (une liste de
fonctions qui s’exécutent quand le mode @acronym{SES} démarre sur un
tampon).
@vindex safe-functions
La variable @code{safe-functions} est une liste de fonctions
potentiellement risquées à traiter comme si elles étaient sûres lors
de l’analyse des formules et fonctions d’impression. @xref{Virus
protection}. Avant de personnaliser @code{safe-functions},
réfléchissez à quel point vous faites confiance à la personne qui vous
suggère cette modification. La valeur @code{t} désactive toute
protection anti-virus. Une valeur donnant une liste-de-fonctions peut
rendre une feuille « trop bien », mais elle crée aussi des portes
dérobées dans votre armure anti-virus. Pour que votre protection
contre les virus fonctionne, vous devez toujours appuyer sur @kbd{n}
quand un avertissement contre un virus vous est présenté, à moins que
vous compreniez ce que le code en question essaie de faire. N’écoutez
pas ceux qui vous racontent de personnaliser @code{enable-local-eval}
--- cette variable est pour les gens qui ne portent pas de ceinture de
sécurité !
@c ===================================================================
@node Advanced Features
@chapter Fonctions avancées
@cindex avancées, fonctions
@findex ses-read-header-row
@table @kbd
@item C-c M-C-h
(@code{ses-set-header-row}).
@findex ses-set-header-row
@kindex C-c M-C-h
La ligne d’en-tête au sommet de la fenêtre @acronym{SES} affiche
normalement la ligne de colonne pour chaque colonne. Vous pouvez la
régler pour afficher une copie de l’une des lignes, tell que qu’une
ligne de titres de colonnes, ainsi cette ligne sera toujours visible.
Par défaut la commande règle la ligne courante comme en-tête ;
utiliser C-u pour une invite à désigner la ligne d’en-têre. Régler la
ligne d’en-tête à la ligne 0 pour afficher les lettres de colonne de
nouveau.
@item [header-line mouse-3]
Affiche un menu pour régler la ligne courante comme en-tête, ou
revenir à des lettres de colonne.
@item M-x ses-rename-cell
@findex ses-rename-cell
Renomme une cellule pour passer d'un nom standard du genre de A1 à
toute chaîne pouvant être un nom valide pour une variable locale (Voir
aussi @ref{Nonrelocatable references}).
@item M-x ses-repair-cell-reference-all
@findex ses-repair-cell-reference-all
Quand vous interrompez la mise à jour d’une formule de cellule en
tapant @kbd{C-g}, alors cela peut casser le lien de référence de
cellule, ce qui compromet la mise à jour automatique de cellule quand
toute autre cellule dont elle dépend est modifiée. Pour réparer cela,
utilisez la fonction @code{ses-repair-cell-reference-all}
@end table
@menu
* La zone d’impression: The print area.
* Plages dans les formules: Ranges in formulas.
* Trier par colonne: Sorting by column.
* Fonctions de formule standardes: Standard formula functions.
* Plus sur l’impression de cellule: More on cell printing.
* Import et export: Import and export.
* Protection contre les virus: Virus protection.
* Feuilles avec détails et synthèse: Spreadsheets with details and summary.
@end menu
@node The print area
@section La zone d’impression
@cindex zone d’impression
@cindex impression, zone d’
@findex widen
@findex ses-renarrow-buffer
@findex ses-reprint-all
Un fichier @acronym{SES} consiste en une zone d’impression et une zone
de données. Normalement le tampon est réduit de sorte à n’afficher
que la zone d’impression. La zone d’impression est en lecture seule,
hormis pour les commandes spéciales de @acronym{SES} ; elle contient
les valeurs de cellule formatées par les fonctions d’impression. La
zone de données enregistre les formules, fonctions d’impression, etc.
@table @kbd
@item C-x n w
Affiche à la fois les zones d’impression et de données (@code{widen}).
@item C-c C-n
Affiche seulement la zone d’impression (@code{ses-renarrow-buffer}).
@item S-C-l
@itemx M-C-l
Recrée la zone d’impression en réévaluant pour toutes les cellules sa
fonction d’impression (@code{ses-reprint-all}).
@end table
@node Ranges in formulas
@section Plages dans les formules
@cindex plages
@findex ses-insert-plage-click
@findex ses-insert-plage
@findex ses-insert-ses-plage-click
@findex ses-insert-ses-plage
@vindex de
@vindex à
Une formule du genre de :
@lisp