comparison man/ses.texi @ 88155:d7ddb3e565de

sync with trunk
author Henrik Enberg <henrik.enberg@telia.com>
date Mon, 16 Jan 2006 00:03:54 +0000
parents 0a70200bde27
children
comparison
equal deleted inserted replaced
88154:8ce476d3ba36 88155:d7ddb3e565de
1 \input texinfo @c -*-texinfo-*- 1 \input texinfo @c -*-texinfo-*-
2 @c %**start of header 2 @c %**start of header
3 @setfilename ../info/ses 3 @setfilename ../info/ses
4 @settitle SES: Simple Emacs Spreadsheet 4 @settitle SES: Simple Emacs Spreadsheet
5 @setchapternewpage off 5 @setchapternewpage off
6 @syncodeindex fn cp
7 @syncodeindex vr cp
8 @syncodeindex ky cp
6 @c %**end of header 9 @c %**end of header
7 10
8 @copying 11 @copying
9 This file documents SES: the Simple Emacs Spreadsheet. 12 This file documents SES: the Simple Emacs Spreadsheet.
10 13
11 Copyright @copyright{} 2002 Free Software Foundation, Inc. 14 Copyright @copyright{} 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
12 15
13 @quotation 16 @quotation
14 Permission is granted to copy, distribute and/or modify this document 17 Permission is granted to copy, distribute and/or modify this document
15 under the terms of the GNU Free Documentation License, Version 1.1 or 18 under the terms of the GNU Free Documentation License, Version 1.2 or
16 any later version published by the Free Software Foundation; with no 19 any later version published by the Free Software Foundation; with no
17 Invariant Sections, with the Front-Cover texts being ``A GNU 20 Invariant Sections, with the Front-Cover texts being ``A GNU
18 Manual,'' and with the Back-Cover Texts as in (a) below. A copy of the 21 Manual,'' and with the Back-Cover Texts as in (a) below. A copy of the
19 license is included in the section entitled ``GNU Free Documentation 22 license is included in the section entitled ``GNU Free Documentation
20 License'' in the Emacs manual. 23 License'' in the Emacs manual.
39 42
40 @titlepage 43 @titlepage
41 @title SES 44 @title SES
42 @subtitle Simple Emacs Spreadsheet 45 @subtitle Simple Emacs Spreadsheet
43 @author Jonathan A. Yavner 46 @author Jonathan A. Yavner
44 @author @email{jyavner@@engineer.com} 47 @author @email{jyavner@@member.fsf.org}
45 48
46 @page 49 @page
47 @vskip 0pt plus 1filll 50 @vskip 0pt plus 1filll
48 @insertcopying 51 @insertcopying
49 @end titlepage 52 @end titlepage
62 contain a rectangular grid of cells. The cells' values are specified 65 contain a rectangular grid of cells. The cells' values are specified
63 by formulas that can refer to the values of other cells. 66 by formulas that can refer to the values of other cells.
64 @end display 67 @end display
65 @end ifnottex 68 @end ifnottex
66 69
67 This (such as @pxref{Top,calc,,calc}) is good. 70 To report bugs, send email to @email{jyavner@@member.fsf.org}.
68
69 To report bugs, send email to @email{jyavner@@engineer.com}.
70 71
71 @menu 72 @menu
72 * Sales Pitch:: Why use SES? 73 * Sales Pitch:: Why use SES?
73 * The Basics:: Basic spreadsheet commands 74 * The Basics:: Basic spreadsheet commands
74 * Advanced Features:: Want to know more? 75 * Advanced Features:: Want to know more?
75 * For Gurus:: Want to know @emph{even more}? 76 * For Gurus:: Want to know @emph{even more}?
77 * Index:: Concept, Function and Variable Index
76 * Acknowledgements:: Acknowledgements 78 * Acknowledgements:: Acknowledgements
77 @end menu 79 @end menu
78 80
79 @c =================================================================== 81 @c ===================================================================
80 82
81 @node Sales Pitch, The Basics, Top, Top 83 @node Sales Pitch, The Basics, Top, Top
82 @comment node-name, next, previous, up 84 @comment node-name, next, previous, up
83 @chapter Sales Pitch 85 @chapter Sales Pitch
86 @cindex features
84 87
85 @itemize @bullet 88 @itemize @bullet
86 @item Create and edit simple spreadsheets with a minimum of fuss. 89 @item Create and edit simple spreadsheets with a minimum of fuss.
87 @item Full undo/redo/autosave. 90 @item Full undo/redo/autosave.
88 @item Immune to viruses in spreadsheet files. 91 @item Immune to viruses in spreadsheet files.
100 @c =================================================================== 103 @c ===================================================================
101 104
102 @node The Basics, Advanced Features, Sales Pitch, Top 105 @node The Basics, Advanced Features, Sales Pitch, Top
103 @comment node-name, next, previous, up 106 @comment node-name, next, previous, up
104 @chapter The Basics 107 @chapter The Basics
108 @cindex basic commands
109 @findex ses-jump
110 @findex ses-mark-row
111 @findex ses-mark-column
112 @findex ses-mark-whole-buffer
113 @findex set-mark-command
114 @findex keyboard-quit
105 115
106 A @dfn{cell identifier} is a symbol with a column letter and a row 116 A @dfn{cell identifier} is a symbol with a column letter and a row
107 number. Cell B7 is the 2nd column of the 7th row. For very wide 117 number. Cell B7 is the 2nd column of the 7th row. For very wide
108 spreadsheets, there are two column letters: cell AB7 is the 28th 118 spreadsheets, there are two column letters: cell AB7 is the 28th
109 column of the 7th row. 119 column of the 7th row.
147 * Customizing SES:: 157 * Customizing SES::
148 @end menu 158 @end menu
149 159
150 @node Formulas, Resizing, The Basics, The Basics 160 @node Formulas, Resizing, The Basics, The Basics
151 @section Cell formulas 161 @section Cell formulas
162 @cindex formulas
163 @cindex formulas, entering
164 @findex ses-read-cell
165 @findex ses-read-symbol
166 @findex ses-edit-cell
167 @findex ses-recalculate-cell
168 @findex ses-recalculate-all
152 169
153 To enter a number into the current cell, just start typing: 170 To enter a number into the current cell, just start typing:
154 171
155 @table @kbd 172 @table @kbd
156 @item 0..9 173 @item 0..9
193 Recalculate the entire spreadsheet (@code{ses-recalculate-all}). 210 Recalculate the entire spreadsheet (@code{ses-recalculate-all}).
194 @end table 211 @end table
195 212
196 @node Resizing, Printer functions, Formulas, The Basics 213 @node Resizing, Printer functions, Formulas, The Basics
197 @section Resizing the spreadsheet 214 @section Resizing the spreadsheet
215 @cindex resizing spreadsheets
216 @findex ses-insert-row
217 @findex ses-insert-column
218 @findex ses-delete-row
219 @findex ses-delete-column
220 @findex ses-set-column-width
221 @findex ses-forward-or-insert
222 @findex ses-append-row-jump-first-column
223
198 224
199 Basic commands: 225 Basic commands:
200 226
201 @table @kbd 227 @table @kbd
202 @item C-o 228 @item C-o
240 @end table 266 @end table
241 267
242 268
243 @node Printer functions, Clearing cells, Resizing, The Basics 269 @node Printer functions, Clearing cells, Resizing, The Basics
244 @section Printer functions 270 @section Printer functions
271 @cindex printer functions
272 @findex ses-read-cell-printer
273 @findex ses-read-column-printer
274 @findex ses-read-default-printer
275 @findex ses-center
276 @findex ses-center-span
277 @findex ses-dashfill
278 @findex ses-dashfill-span
279 @findex ses-tildefill-span
280
245 281
246 Printer functions convert binary cell values into the print forms that 282 Printer functions convert binary cell values into the print forms that
247 Emacs will display on the screen. 283 Emacs will display on the screen.
248 284
249 A printer can be a format string, like @samp{"$%.2f"}. The result 285 A printer can be a format string, like @samp{"$%.2f"}. The result
251 use parentheses: @samp{("$%.2f")}. A printer can also be a 287 use parentheses: @samp{("$%.2f")}. A printer can also be a
252 one-argument function (a symbol or a lambda), whose result is a string 288 one-argument function (a symbol or a lambda), whose result is a string
253 (right-aligned) or list of one string (left-aligned). While typing in 289 (right-aligned) or list of one string (left-aligned). While typing in
254 a lambda, you can use @kbd{M-TAB} to complete the names of symbols. 290 a lambda, you can use @kbd{M-TAB} to complete the names of symbols.
255 291
256 Each cell has a printer. If nil, the column-printer for the cell's 292 Each cell has a printer. If @code{nil}, the column-printer for the cell's
257 column is used. If that is also nil, the default-printer for the 293 column is used. If that is also @code{nil}, the default-printer for the
258 spreadsheet is used. 294 spreadsheet is used.
259 295
260 @table @kbd 296 @table @kbd
261 @item p 297 @item p
262 Enter a printer for current cell or range (@code{ses-read-cell-printer}). 298 Enter a printer for current cell or range (@code{ses-read-cell-printer}).
273 history, which is preloaded with the set of all printers used in this 309 history, which is preloaded with the set of all printers used in this
274 spreadsheet, plus the standard printers. 310 spreadsheet, plus the standard printers.
275 311
276 The standard printers are suitable only for cells, not columns or 312 The standard printers are suitable only for cells, not columns or
277 default, because they format the value using the column-printer (or 313 default, because they format the value using the column-printer (or
278 default-printer if nil) and then center the result: 314 default-printer if @code{nil}) and then center the result:
279 315
280 @table @code 316 @table @code
281 @item ses-center 317 @item ses-center
282 Just centering. 318 Just centering.
283 319
295 @end table 331 @end table
296 332
297 333
298 @node Clearing cells, Copy/cut/paste, Printer functions, The Basics 334 @node Clearing cells, Copy/cut/paste, Printer functions, The Basics
299 @section Clearing cells 335 @section Clearing cells
300 336 @cindex clearing commands
301 These commands set both formula and printer to nil: 337 @findex ses-clear-cell-backward
338 @findex ses-clear-cell-forward
339
340 These commands set both formula and printer to @code{nil}:
302 341
303 @table @kbd 342 @table @kbd
304 @item DEL 343 @item DEL
305 Clear cell and move left (@code{ses-clear-cell-backward}). 344 Clear cell and move left (@code{ses-clear-cell-backward}).
306 345
309 @end table 348 @end table
310 349
311 350
312 @node Copy/cut/paste, Customizing SES, Clearing cells, The Basics 351 @node Copy/cut/paste, Customizing SES, Clearing cells, The Basics
313 @section Copy, cut, and paste 352 @section Copy, cut, and paste
353 @cindex copy
354 @cindex cut
355 @cindex paste
356 @findex kill-ring-save
357 @findex mouse-set-region
358 @findex mouse-set-secondary
359 @findex ses-kill-override
360 @findex yank
361 @findex clipboard-yank
362 @findex mouse-yank-at-click
363 @findex mouse-yank-at-secondary
364 @findex ses-yank-pop
314 365
315 The copy functions work on rectangular regions of cells. You can paste the 366 The copy functions work on rectangular regions of cells. You can paste the
316 copies into non-SES buffers to export the print text. 367 copies into non-SES buffers to export the print text.
317 368
318 @table @kbd 369 @table @kbd
331 (@code{mouse-set-secondary}). 382 (@code{mouse-set-secondary}).
332 383
333 @item C-w 384 @item C-w
334 @itemx [cut] 385 @itemx [cut]
335 @itemx [S-delete] 386 @itemx [S-delete]
336 The cut functions do not actually delete rows or columns - they copy 387 The cut functions do not actually delete rows or columns---they copy
337 and then clear (@code{ses-kill-override}). 388 and then clear (@code{ses-kill-override}).
338 389
339 @item C-y 390 @item C-y
340 @itemx [S-insert] 391 @itemx [S-insert]
341 Paste from kill ring (@code{yank}). The paste functions behave 392 Paste from kill ring (@code{yank}). The paste functions behave
372 yank. This doesn't make any difference? 423 yank. This doesn't make any difference?
373 @end table 424 @end table
374 425
375 @node Customizing SES, , Copy/cut/paste, The Basics 426 @node Customizing SES, , Copy/cut/paste, The Basics
376 @section Customizing SES 427 @section Customizing SES
428 @cindex customizing
429 @vindex enable-local-eval
430 @vindex ses-mode-hook
431 @vindex safe-functions
432 @vindex enable-local-eval
433
377 434
378 By default, a newly-created spreadsheet has 1 row and 1 column. The 435 By default, a newly-created spreadsheet has 1 row and 1 column. The
379 column width is 7 and the default printer is @samp{"%.7g"}. Each of these 436 column width is 7 and the default printer is @samp{"%.7g"}. Each of these
380 can be customized. Look in group ``ses''. 437 can be customized. Look in group ``ses''.
381 438
385 list. 442 list.
386 443
387 @code{ses-mode-hook} is a normal mode hook (list of functions to 444 @code{ses-mode-hook} is a normal mode hook (list of functions to
388 execute when starting SES mode for a buffer). 445 execute when starting SES mode for a buffer).
389 446
390 The variable @code{safe-functions} is a a list of possibly-unsafe 447 The variable @code{safe-functions} is a list of possibly-unsafe
391 functions to be treated as safe when analysing formulas and printers. 448 functions to be treated as safe when analysing formulas and printers.
392 @xref{Virus protection}. Before customizing @code{safe-functions}, 449 @xref{Virus protection}. Before customizing @code{safe-functions},
393 think about how much you trust the person who's suggesting this 450 think about how much you trust the person who's suggesting this
394 change. The value t turns off all anti-virus protection. A 451 change. The value @code{t} turns off all anti-virus protection. A
395 list-of-functions value might enable a ``gee whiz'' spreadsheet, but it 452 list-of-functions value might enable a ``gee whiz'' spreadsheet, but it
396 also creates trapdoors in your anti-virus armor. In order for virus 453 also creates trapdoors in your anti-virus armor. In order for virus
397 protection to work, you must always press @kbd{n} when presented with 454 protection to work, you must always press @kbd{n} when presented with
398 a virus warning, unless you understand what the questionable code is 455 a virus warning, unless you understand what the questionable code is
399 trying to do. Do not listen to those who tell you to customize 456 trying to do. Do not listen to those who tell you to customize
403 460
404 @c =================================================================== 461 @c ===================================================================
405 462
406 @node Advanced Features, For Gurus, The Basics, Top 463 @node Advanced Features, For Gurus, The Basics, Top
407 @chapter Advanced Features 464 @chapter Advanced Features
465 @cindex advanced features
466 @findex ses-read-header-row
467
408 468
409 @table @kbd 469 @table @kbd
410 @item C-c M-C-h 470 @item C-c M-C-h
411 (@code{ses-read-header-row}). The header line at the top of the SES 471 (@code{ses-set-header-row}). The header line at the top of the SES
412 window normally shows the column letter for each column. You can set 472 window normally shows the column letter for each column. You can set
413 it to show a copy of some row, such as a row of column titles, so that 473 it to show a copy of some row, such as a row of column titles, so that
414 row will always be visible. Set the header line to row 0 to show 474 row will always be visible. Default is to set the current row as the
415 column letters again. 475 header; use C-u to prompt for header row. Set the header to row 0 to
476 show column letters again.
477 @item [header-line mouse-3]
478 Pops up a menu to set the current row as the header, or revert to
479 column letters.
416 @end table 480 @end table
417 481
418 @menu 482 @menu
419 * The print area:: 483 * The print area::
420 * Ranges in formulas:: 484 * Ranges in formulas::
426 * Spreadsheets with details and summary:: 490 * Spreadsheets with details and summary::
427 @end menu 491 @end menu
428 492
429 @node The print area, Ranges in formulas, Advanced Features, Advanced Features 493 @node The print area, Ranges in formulas, Advanced Features, Advanced Features
430 @section The print area 494 @section The print area
495 @cindex print area
496 @findex widen
497 @findex ses-renarrow-buffer
498 @findex ses-reprint-all
431 499
432 A SES file consists of a print area and a data area. Normally the 500 A SES file consists of a print area and a data area. Normally the
433 buffer is narrowed to show only the print area. The print area is 501 buffer is narrowed to show only the print area. The print area is
434 read-only except for special SES commands; it contains cell values 502 read-only except for special SES commands; it contains cell values
435 formatted by printer functions. The data area records the formula and 503 formatted by printer functions. The data area records the formula and
448 (@code{ses-reprint-all}). 516 (@code{ses-reprint-all}).
449 @end table 517 @end table
450 518
451 @node Ranges in formulas, Sorting by column, The print area, Advanced Features 519 @node Ranges in formulas, Sorting by column, The print area, Advanced Features
452 @section Ranges in formulas 520 @section Ranges in formulas
521 @cindex ranges
522 @findex ses-insert-range-click
523 @findex ses-insert-range
524 @findex ses-insert-ses-range-click
525 @findex ses-insert-ses-range
526 @vindex from
527 @vindex to
453 528
454 A formula like 529 A formula like
455 @lisp 530 @lisp
456 (+ A1 A2 A3) 531 (+ A1 A2 A3)
457 @end lisp 532 @end lisp
460 @lisp 535 @lisp
461 (+ A1 A3 A4) 536 (+ A1 A3 A4)
462 @end lisp 537 @end lisp
463 and the new row is not included in the sum. 538 and the new row is not included in the sum.
464 539
465 The macro @code{(ses-range @var{from} @var{to})} evalutes to a list of 540 The macro @code{(ses-range @var{from} @var{to})} evaluates to a list of
466 the values in a rectangle of cells. If your formula is 541 the values in a rectangle of cells. If your formula is
467 @lisp 542 @lisp
468 (apply '+ (ses-range A1 A3)) 543 (apply '+ (ses-range A1 A3))
469 @end lisp 544 @end lisp
470 and you insert a new second row, it becomes 545 and you insert a new second row, it becomes
501 the range. New cells inserted just before a range are not included. 576 the range. New cells inserted just before a range are not included.
502 577
503 578
504 @node Sorting by column, Standard formula functions, Ranges in formulas, Advanced Features 579 @node Sorting by column, Standard formula functions, Ranges in formulas, Advanced Features
505 @section Sorting by column 580 @section Sorting by column
581 @cindex sorting
582 @findex ses-sort-column
583 @findex ses-sort-column-click
506 584
507 @table @kbd 585 @table @kbd
508 @item C-c M-C-s 586 @item C-c M-C-s
509 Sort the cells of a range using one of the columns 587 Sort the cells of a range using one of the columns
510 (@code{ses-sort-column}). The rows (or partial rows if the range 588 (@code{ses-sort-column}). The rows (or partial rows if the range
527 range. 605 range.
528 606
529 607
530 @node Standard formula functions, More on cell printing, Sorting by column, Advanced Features 608 @node Standard formula functions, More on cell printing, Sorting by column, Advanced Features
531 @section Standard formula functions 609 @section Standard formula functions
610 @cindex standard formula functions
611 @cindex *skip*
612 @cindex *error*
613 @findex ses-delete-blanks
614 @findex ses-average
615 @findex ses+
532 616
533 Oftentimes you want a calculation to exclude the blank cells. Here 617 Oftentimes you want a calculation to exclude the blank cells. Here
534 are some useful functions to call from your formulas: 618 are some useful functions to call from your formulas:
535 619
536 @table @code 620 @table @code
537 @item (ses-delete-blanks &rest @var{args}) 621 @item (ses-delete-blanks &rest @var{args})
538 Returns a list from which all blank cells (value is either nil or 622 Returns a list from which all blank cells (value is either @code{nil} or
539 '*skip*) have been deleted. 623 '*skip*) have been deleted.
540 624
541 @item (ses+ &rest @var{args}) 625 @item (ses+ &rest @var{args})
542 Sum of non-blank arguments. 626 Sum of non-blank arguments.
543 627
546 as a single argument, since you'll probably use it with @code{ses-range}. 630 as a single argument, since you'll probably use it with @code{ses-range}.
547 @end table 631 @end table
548 632
549 @node More on cell printing, Import and export, Standard formula functions, Advanced Features 633 @node More on cell printing, Import and export, Standard formula functions, Advanced Features
550 @section More on cell printing 634 @section More on cell printing
635 @cindex cell printing, more
636 @findex ses-truncate-cell
637 @findex ses-recalculate-cell
551 638
552 Special cell values: 639 Special cell values:
553 @itemize 640 @itemize
554 @item nil prints the same as "", but allows previous cell to spill over. 641 @item nil prints the same as "", but allows previous cell to spill over.
555 @item '*skip* replaces nil when the previous cell actually does spill over; 642 @item '*skip* replaces nil when the previous cell actually does spill over;
556 nothing is printed for it. 643 nothing is printed for it.
557 @item '*error* indicates that the formula signalled an error instead of 644 @item '*error* indicates that the formula signaled an error instead of
558 producing a value: the print cell is filled with hash marks (#). 645 producing a value: the print cell is filled with hash marks (#).
559 @end itemize 646 @end itemize
560 647
561 If the result from the printer function is too wide for the cell and 648 If the result from the printer function is too wide for the cell and
562 the following cell is nil, the result will spill over into the 649 the following cell is @code{nil}, the result will spill over into the
563 following cell. Very wide results can spill over several cells. If 650 following cell. Very wide results can spill over several cells. If
564 the result is too wide for the available space (up to the end of the 651 the result is too wide for the available space (up to the end of the
565 row or the next non-nil cell), the result is truncated if the cell's 652 row or the next non-@code{nil} cell), the result is truncated if the cell's
566 value is a string, or replaced with hash marks otherwise. 653 value is a string, or replaced with hash marks otherwise.
567 654
568 SES could get confused by printer results that contain newlines or 655 SES could get confused by printer results that contain newlines or
569 tabs, so these are replaced with question marks. 656 tabs, so these are replaced with question marks.
570 657
571 @table @kbd 658 @table @kbd
572 @item C-c C-t 659 @item C-c C-t
573 Confine a cell to its own column (@code{ses-truncate-cell}). This 660 Confine a cell to its own column (@code{ses-truncate-cell}). This
574 alows you to move point to a rightward cell that would otherwise be 661 allows you to move point to a rightward cell that would otherwise be
575 covered by a spill-over. If you don't change the rightward cell, the 662 covered by a spill-over. If you don't change the rightward cell, the
576 confined cell will spill over again the next time it is reprinted. 663 confined cell will spill over again the next time it is reprinted.
577 664
578 @item C-c C-c 665 @item C-c C-c
579 When applied to a single cell, this command displays in the echo area any 666 When applied to a single cell, this command displays in the echo area any
586 is numeric-only and you use a string as a cell value. 673 is numeric-only and you use a string as a cell value.
587 674
588 675
589 @node Import and export, Virus protection, More on cell printing, Advanced Features 676 @node Import and export, Virus protection, More on cell printing, Advanced Features
590 @section Import and export 677 @section Import and export
678 @cindex import and export
679 @cindex export, and import
680 @findex ses-export-tsv
681 @findex ses-export-tsf
591 682
592 @table @kbd 683 @table @kbd
593 @item x t 684 @item x t
594 Export a range of cells as tab-separated values (@code{ses-export-tsv}). 685 Export a range of cells as tab-separated values (@code{ses-export-tsv}).
595 @item x T 686 @item x T
602 To import text, use any of the yank commands where the text to paste 693 To import text, use any of the yank commands where the text to paste
603 contains tabs and/or newlines. Imported formulas are not relocated. 694 contains tabs and/or newlines. Imported formulas are not relocated.
604 695
605 @node Virus protection, Spreadsheets with details and summary, Import and export, Advanced Features 696 @node Virus protection, Spreadsheets with details and summary, Import and export, Advanced Features
606 @section Virus protection 697 @section Virus protection
698 @cindex virus protection
607 699
608 Whenever a formula or printer is read from a file or is pasted into 700 Whenever a formula or printer is read from a file or is pasted into
609 the spreadsheet, it receives a ``needs safety check'' marking. Later, 701 the spreadsheet, it receives a ``needs safety check'' marking. Later,
610 when the formula or printer is evaluated for the first time, it is 702 when the formula or printer is evaluated for the first time, it is
611 checked for safety using the @code{unsafep} predicate; if found to be 703 checked for safety using the @code{unsafep} predicate; if found to be
613 and you must press Y to approve it or N to use a substitute. The 705 and you must press Y to approve it or N to use a substitute. The
614 substitute always signals an error. 706 substitute always signals an error.
615 707
616 Formulas or printers that you type in are checked immediately for 708 Formulas or printers that you type in are checked immediately for
617 safety. If found to be possibly unsafe and you press N to disapprove, 709 safety. If found to be possibly unsafe and you press N to disapprove,
618 the action is cancelled and the old formula or printer will remain. 710 the action is canceled and the old formula or printer will remain.
619 711
620 Besides viruses (which try to copy themselves to other files), 712 Besides viruses (which try to copy themselves to other files),
621 @code{unsafep} can also detect all other kinds of Trojan horses, such as 713 @code{unsafep} can also detect all other kinds of Trojan horses, such as
622 spreadsheets that delete files, send email, flood Web sites, alter 714 spreadsheets that delete files, send email, flood Web sites, alter
623 your Emacs settings, etc. 715 your Emacs settings, etc.
628 your style as a formula-writer. See the documentation in @file{unsafep.el} 720 your style as a formula-writer. See the documentation in @file{unsafep.el}
629 for more info on how Lisp forms are classified as safe or unsafe. 721 for more info on how Lisp forms are classified as safe or unsafe.
630 722
631 @node Spreadsheets with details and summary, , Virus protection, Advanced Features 723 @node Spreadsheets with details and summary, , Virus protection, Advanced Features
632 @section Spreadsheets with details and summary 724 @section Spreadsheets with details and summary
725 @cindex details and summary
726 @cindex summary, and details
633 727
634 A common organization for spreadsheets is to have a bunch of ``detail'' 728 A common organization for spreadsheets is to have a bunch of ``detail''
635 rows, each perhaps describing a transaction, and then a set of 729 rows, each perhaps describing a transaction, and then a set of
636 ``summary'' rows that each show reduced data for some subset of the 730 ``summary'' rows that each show reduced data for some subset of the
637 details. SES supports this organization via the @code{ses-select} 731 details. SES supports this organization via the @code{ses-select}
660 details-and-summary spreadsheet. 754 details-and-summary spreadsheet.
661 755
662 756
663 @c =================================================================== 757 @c ===================================================================
664 758
665 @node For Gurus, Acknowledgements, Advanced Features, Top 759 @node For Gurus, Index, Advanced Features, Top
666 @chapter For Gurus 760 @chapter For Gurus
761 @cindex advanced features
667 762
668 @menu 763 @menu
669 * Deferred updates:: 764 * Deferred updates::
670 * Nonrelocatable references:: 765 * Nonrelocatable references::
671 * The data area:: 766 * The data area::
673 * Uses of defadvice in SES:: 768 * Uses of defadvice in SES::
674 @end menu 769 @end menu
675 770
676 @node Deferred updates, Nonrelocatable references, For Gurus, For Gurus 771 @node Deferred updates, Nonrelocatable references, For Gurus, For Gurus
677 @section Deferred updates 772 @section Deferred updates
773 @cindex deferred updates
774 @cindex updates, deferred
775 @vindex run-with-idle-timer
678 776
679 To save time by avoiding redundant computations, cells that need 777 To save time by avoiding redundant computations, cells that need
680 recalculation due to changes in other cells are added to a set. At 778 recalculation due to changes in other cells are added to a set. At
681 the end of the command, each cell in the set is recalculated once. 779 the end of the command, each cell in the set is recalculated once.
682 This can create a new set of cells that need recalculation. The 780 This can create a new set of cells that need recalculation. The
702 can type ahead without worrying about the glitch. 800 can type ahead without worrying about the glitch.
703 801
704 802
705 @node Nonrelocatable references, The data area, Deferred updates, For Gurus 803 @node Nonrelocatable references, The data area, Deferred updates, For Gurus
706 @section Nonrelocatable references 804 @section Nonrelocatable references
805 @cindex nonrelocatable references
806 @cindex references, nonrelocatable
707 807
708 @kbd{C-y} relocates all cell-references in a pasted formula, while 808 @kbd{C-y} relocates all cell-references in a pasted formula, while
709 @kbd{C-u C-y} relocates none of the cell-references. What about mixed 809 @kbd{C-u C-y} relocates none of the cell-references. What about mixed
710 cases? 810 cases?
711 811
728 kind of dependency is also not recorded. 828 kind of dependency is also not recorded.
729 829
730 830
731 @node The data area, Buffer-local variables in spreadsheets, Nonrelocatable references, For Gurus 831 @node The data area, Buffer-local variables in spreadsheets, Nonrelocatable references, For Gurus
732 @section The data area 832 @section The data area
833 @cindex data area
834 @findex ses-reconstruct-all
733 835
734 Begins with an 014 character, followed by sets of cell-definition 836 Begins with an 014 character, followed by sets of cell-definition
735 macros for each row, followed by column-widths, column-printers, 837 macros for each row, followed by column-widths, column-printers,
736 default-printer, and header-row. Then there's the global parameters 838 default-printer, and header-row. Then there's the global parameters
737 (file-format ID, numrows, numcols) and the local variables (specifying 839 (file-format ID, numrows, numcols) and the local variables (specifying
758 @end table 860 @end table
759 861
760 862
761 @node Buffer-local variables in spreadsheets, Uses of defadvice in SES, The data area, For Gurus 863 @node Buffer-local variables in spreadsheets, Uses of defadvice in SES, The data area, For Gurus
762 @section Buffer-local variables in spreadsheets 864 @section Buffer-local variables in spreadsheets
865 @cindex buffer-local variables
866 @cindex variables, buffer-local
763 867
764 You can add additional local variables to the list at the bottom of 868 You can add additional local variables to the list at the bottom of
765 the data area, such as hidden constants you want to refer to in your 869 the data area, such as hidden constants you want to refer to in your
766 formulas. 870 formulas.
767 871
790 (put 'your-function-name 'safe-function t) 894 (put 'your-function-name 'safe-function t)
791 @end lisp 895 @end lisp
792 896
793 @node Uses of defadvice in SES, , Buffer-local variables in spreadsheets, For Gurus 897 @node Uses of defadvice in SES, , Buffer-local variables in spreadsheets, For Gurus
794 @section Uses of defadvice in SES 898 @section Uses of defadvice in SES
899 @cindex defadvice
900 @cindex undo-more
901 @cindex copy-region-as-kill
902 @cindex yank
795 903
796 @table @code 904 @table @code
797 @item undo-more 905 @item undo-more
798 Defines a new undo element format (@var{fun} . @var{args}), which 906 Defines a new undo element format (@var{fun} . @var{args}), which
799 means ``undo by applying @var{fun} to @var{args}''. For spreadsheet 907 means ``undo by applying @var{fun} to @var{args}''. For spreadsheet
810 as cells (if the yank text has 'ses properties), then as tab-separated 918 as cells (if the yank text has 'ses properties), then as tab-separated
811 formulas, then (if all else fails) as a single formula for the current 919 formulas, then (if all else fails) as a single formula for the current
812 cell. 920 cell.
813 @end table 921 @end table
814 922
815
816 @c =================================================================== 923 @c ===================================================================
817 924 @node Index, Acknowledgements, For Gurus, Top
818 @node Acknowledgements, , For Gurus, Top 925 @unnumbered Index
926
927 @printindex cp
928
929 @c ===================================================================
930
931 @node Acknowledgements, , Index, Top
819 @chapter Acknowledgements 932 @chapter Acknowledgements
820 933
934 Coding by:
935 @quotation
936 Jonathan Yavner @email{jyavner@@member.fsf.org}@*
937 Stefan Monnier @email{monnier@@gnu.org}
938 @end quotation
939
940 @noindent
941 Texinfo manual by:
942 @quotation
943 Jonathan Yavner @email{jyavner@@member.fsf.org}@*
944 Brad Collins <brad@@chenla.org>
945 @end quotation
946
947 @noindent
948 Ideas from:
821 @quotation 949 @quotation
822 Christoph Conrad @email{christoph.conrad@@gmx.de}@* 950 Christoph Conrad @email{christoph.conrad@@gmx.de}@*
823 CyberBob @email{cyberbob@@redneck.gacracker.org}@* 951 CyberBob @email{cyberbob@@redneck.gacracker.org}@*
824 Syver Enstad @email{syver-en@@online.no}@* 952 Syver Enstad @email{syver-en@@online.no}@*
825 Ami Fischman @email{fischman@@zion.bpnetworks.com}@* 953 Ami Fischman @email{fischman@@zion.bpnetworks.com}@*
826 Thomas Gehrlein @email{Thomas.Gehrlein@@t-online.de}@* 954 Thomas Gehrlein @email{Thomas.Gehrlein@@t-online.de}@*
827 Chris F.A. Johnson @email{c.f.a.johnson@@rogers.com}@* 955 Chris F.A. Johnson @email{c.f.a.johnson@@rogers.com}@*
828 Yusong Li @email{lyusong@@hotmail.com}@* 956 Yusong Li @email{lyusong@@hotmail.com}@*
829 Yuri Linkov @email{link0ff@@yahoo.com}@* 957 Juri Linkov @email{juri@@jurta.org}@*
830 Harald Maier @email{maierh@@myself.com}@* 958 Harald Maier @email{maierh@@myself.com}@*
831 Alan Nash @email{anash@@san.rr.com}@* 959 Alan Nash @email{anash@@san.rr.com}@*
832 François Pinard @email{pinard@@iro.umontreal.ca}@* 960 François Pinard @email{pinard@@iro.umontreal.ca}@*
833 Pedro Pinto @email{ppinto@@cs.cmu.edu}@* 961 Pedro Pinto @email{ppinto@@cs.cmu.edu}@*
834 Stefan Reichör @email{xsteve@@riic.at}@* 962 Stefan Reichör @email{xsteve@@riic.at}@*
835 Oliver Scholz @email{epameinondas@@gmx.de}@* 963 Oliver Scholz @email{epameinondas@@gmx.de}@*
836 Richard M. Stallman @email{rms@@gnu.org}@* 964 Richard M. Stallman @email{rms@@gnu.org}@*
965 Luc Teirlinck @email{teirllm@@dms.auburn.edu}@*
837 J. Otto Tennant @email{jotto@@pobox.com}@* 966 J. Otto Tennant @email{jotto@@pobox.com}@*
838 Jean-Philippe Theberge @email{jphil@@acs.pagesjaunes.fr} 967 Jean-Philippe Theberge @email{jphil@@acs.pagesjaunes.fr}
839 @end quotation 968 @end quotation
840 969
841 @c =================================================================== 970 @c ===================================================================
842 971
843 @bye 972 @bye
973
974 @ignore
975 arch-tag: 10a4ee1c-7ef4-4c06-8b7a-f975e39f0dec
976 @end ignore