emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to ses.texi


From: Glenn Morris
Subject: [Emacs-diffs] Changes to ses.texi
Date: Thu, 06 Sep 2007 05:02:06 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Glenn Morris <gm>       07/09/06 05:02:05

Index: ses.texi
===================================================================
RCS file: ses.texi
diff -N ses.texi
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ ses.texi    6 Sep 2007 05:02:05 -0000       1.1
@@ -0,0 +1,982 @@
+\input texinfo   @c -*-texinfo-*-
address@hidden %**start of header
address@hidden ../info/ses
address@hidden SES: Simple Emacs Spreadsheet
address@hidden off
address@hidden fn cp
address@hidden vr cp
address@hidden ky cp
address@hidden %**end of header
+
address@hidden
+This file documents SES: the Simple Emacs Spreadsheet.
+
+Copyright @copyright{} 2002, 2003, 2004, 2005, 2006, 2007
+Free Software Foundation, Inc.
+
address@hidden
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2 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'' in the Emacs manual.
+
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
+
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
address@hidden quotation
address@hidden copying
+
address@hidden Emacs
address@hidden
+* SES: (ses).       Simple Emacs Spreadsheet
address@hidden direntry
+
address@hidden
+
address@hidden
address@hidden SES
address@hidden Simple Emacs Spreadsheet
address@hidden Jonathan A. Yavner
address@hidden @email{jyavner@@member.fsf.org}
+
address@hidden
address@hidden 0pt plus 1filll
address@hidden
address@hidden titlepage
+
address@hidden
+
address@hidden 
===================================================================
+
address@hidden
address@hidden Top, Sales Pitch, (dir), (dir)
address@hidden  node-name,  next,  previous,  up
address@hidden SES: Simple Emacs Spreadsheet
+
address@hidden
+SES is a major mode for GNU Emacs to edit spreadsheet files, which
+contain a rectangular grid of cells.  The cells' values are specified
+by formulas that can refer to the values of other cells.
address@hidden display
address@hidden ifnottex
+
+To report bugs, send email to @email{jyavner@@member.fsf.org}.
+
address@hidden
+* Sales Pitch::                 Why use SES?
+* The Basics::                  Basic spreadsheet commands
+* Advanced Features::           Want to know more?
+* For Gurus::                   Want to know @emph{even more}?
+* Index::                       Concept, Function and Variable Index
+* Acknowledgements::            Acknowledgements
+* GNU Free Documentation License:: The license for this documentation.
address@hidden menu
+
address@hidden 
===================================================================
+
address@hidden Sales Pitch, The Basics, Top, Top
address@hidden  node-name,  next,  previous,  up
address@hidden Sales Pitch
address@hidden features
+
address@hidden @bullet
address@hidden Create and edit simple spreadsheets with a minimum of fuss.
address@hidden Full undo/redo/autosave.
address@hidden Immune to viruses in spreadsheet files.
address@hidden Cell formulas are straight Emacs Lisp.
address@hidden Printer functions for control of cell appearance.
address@hidden Intuitive keystroke commands: C-o = insert row, M-o = insert 
column, etc.
address@hidden ``Spillover'' of lengthy cell values into following blank cells.
address@hidden Header line shows column letters or a selected row.
address@hidden Completing-read for entering symbols as cell values.
address@hidden Cut, copy, and paste can transfer formulas and printer functions.
address@hidden Import and export of tab-separated values or tab-separated 
formulas.
address@hidden Plaintext, easily-hacked file format.
address@hidden itemize
+
address@hidden 
===================================================================
+
address@hidden The Basics, Advanced Features, Sales Pitch, Top
address@hidden  node-name,  next,  previous,  up
address@hidden The Basics
address@hidden basic commands
address@hidden ses-jump
address@hidden ses-mark-row
address@hidden ses-mark-column
address@hidden ses-mark-whole-buffer
address@hidden set-mark-command
address@hidden keyboard-quit
+
+A @dfn{cell identifier} is a symbol with a column letter and a row
+number.  Cell B7 is the 2nd column of the 7th row.  For very wide
+spreadsheets, there are two column letters: cell AB7 is the 28th
+column of the 7th row.
+
address@hidden @kbd
address@hidden j
+Moves point to cell, specified by identifier (@code{ses-jump}).
address@hidden table
+
+Point is always at the left edge of a cell, or at the empty endline.
+When mark is inactive, the current cell is underlined.  When mark is
+active, the range is the highlighted rectangle of cells (SES always
+uses transient mark mode).  Drag the mouse from A1 to A3 to create the
+range A1-A2.  Many SES commands operate only on single cells, not
+ranges.
+
address@hidden @kbd
address@hidden C-SPC
address@hidden C-@@
+Set mark at point (@code{set-mark-command}).
+
address@hidden C-g
+Turn off the mark (@code{keyboard-quit}).
+
address@hidden M-h
+Highlight current row (@code{ses-mark-row}).
+
address@hidden S-M-h
+Highlight current column (@code{ses-mark-column}).
+
address@hidden C-x h
+Highlight all cells (@code{mark-whole-buffer}).
address@hidden table
+
address@hidden
+* Formulas::
+* Resizing::
+* Printer functions::
+* Clearing cells::
+* Copy/cut/paste::
+* Customizing SES::
address@hidden menu
+
address@hidden Formulas, Resizing, The Basics, The Basics
address@hidden Cell formulas
address@hidden formulas
address@hidden formulas, entering
address@hidden ses-read-cell
address@hidden ses-read-symbol
address@hidden ses-edit-cell
address@hidden ses-recalculate-cell
address@hidden ses-recalculate-all
+
+To enter a number into the current cell, just start typing:
+
address@hidden @kbd
address@hidden 0..9
+Self-insert a digit (@code{ses-read-cell}).
+
address@hidden -
+Self-insert a negative number (@code{ses-read-cell}).
+
address@hidden .
+Self-insert a fractional number (@code{ses-read-cell}).
+
address@hidden "
+Self-insert a quoted string.  The ending double-quote
+is inserted for you (@code{ses-read-cell}).
+
address@hidden (
+Self-insert an expression.  The right-parenthesis is inserted for you
+(@code{ses-read-cell}).  To access another cell's value, just use its
+identifier in your expression.  Whenever the other cell is changed,
+this cell's formula will be reevaluated.  While typing in the
+expression, you can use @address@hidden to complete symbol names.
+
address@hidden ' @r{(apostrophe)}
+Enter a symbol (ses-read-symbol).  SES remembers all symbols that have
+been used as formulas, so you can type just the beginning of a symbol
+and use @address@hidden, @address@hidden, and @kbd{?} to complete it.
address@hidden table
+
+To enter something else (e.g., a vector), begin with a digit, then
+erase the digit and type whatever you want.
+
address@hidden @kbd
address@hidden RET
+Edit the existing formula in the current cell (@code{ses-edit-cell}).
+
address@hidden C-c C-c
+Force recalculation of the current cell or range (@code{ses-recalculate-cell}).
+
address@hidden C-c C-l
+Recalculate the entire spreadsheet (@code{ses-recalculate-all}).
address@hidden table
+
address@hidden Resizing, Printer functions, Formulas, The Basics
address@hidden Resizing the spreadsheet
address@hidden resizing spreadsheets
address@hidden ses-insert-row
address@hidden ses-insert-column
address@hidden ses-delete-row
address@hidden ses-delete-column
address@hidden ses-set-column-width
address@hidden ses-forward-or-insert
address@hidden ses-append-row-jump-first-column
+
+
+Basic commands:
+
address@hidden @kbd
address@hidden C-o
+(@code{ses-insert-row})
+
address@hidden M-o
+(@code{ses-insert-column})
+
address@hidden C-k
+(@code{ses-delete-row})
+
address@hidden M-k
+(@code{ses-delete-column})
+
address@hidden w
+(@code{ses-set-column-width})
+
address@hidden TAB
+Moves point to the next rightward cell, or inserts a new column if
+already at last cell on line, or inserts a new row if at endline
+(@code{ses-forward-or-insert}).
+
address@hidden C-j
+Linefeed inserts below the current row and moves to column A
+(@code{ses-append-row-jump-first-column}).
address@hidden table
+
+Resizing the spreadsheet (unless you're just changing a column width)
+relocates all the cell-references in formulas so they still refer to
+the same cells.  If a formula mentioned B1 and you insert a new first
+row, the formula will now mention B2.
+
+If you delete a cell that a formula refers to, the cell-symbol is
+deleted from the formula, so @code{(+ A1 B1 C1)} after deleting the third
+column becomes @code{(+ A1 B1)}.  In case this is not what you wanted:
+
address@hidden @kbd
address@hidden C-_
address@hidden C-x u
+Undo previous action (@code{(undo)}).
address@hidden table
+
+
address@hidden Printer functions, Clearing cells, Resizing, The Basics
address@hidden Printer functions
address@hidden printer functions
address@hidden ses-read-cell-printer
address@hidden ses-read-column-printer
address@hidden ses-read-default-printer
address@hidden ses-center
address@hidden ses-center-span
address@hidden ses-dashfill
address@hidden ses-dashfill-span
address@hidden ses-tildefill-span
+
+
+Printer functions convert binary cell values into the print forms that
+Emacs will display on the screen.
+
+A printer can be a format string, like @samp{"$%.2f"}.  The result
+string is right-aligned within the print cell.  To get left-alignment,
+use parentheses: @samp{("$%.2f")}.  A printer can also be a
+one-argument function (a symbol or a lambda), whose result is a string
+(right-aligned) or list of one string (left-aligned).  While typing in
+a lambda, you can use @address@hidden to complete the names of symbols.
+
+Each cell has a printer.  If @code{nil}, the column-printer for the cell's
+column is used.  If that is also @code{nil}, the default-printer for the
+spreadsheet is used.
+
address@hidden @kbd
address@hidden p
+Enter a printer for current cell or range (@code{ses-read-cell-printer}).
+
address@hidden M-p
+Enter a printer for the current column (@code{ses-read-column-printer}).
+
address@hidden C-c C-p
+Enter the default printer for the spreadsheet
+(@code{ses-read-default-printer}).
address@hidden table
+
+The @address@hidden commands have their own minibuffer
+history, which is preloaded with the set of all printers used in this
+spreadsheet, plus the standard printers.
+
+The standard printers are suitable only for cells, not columns or
+default, because they format the value using the column-printer (or
+default-printer if @code{nil}) and then center the result:
+
address@hidden @code
address@hidden ses-center
+Just centering.
+
address@hidden ses-center-span
+Centering with spill-over to following blank cells.
+
address@hidden ses-dashfill
+Centering using dashes (-) instead of spaces.
+
address@hidden ses-dashfill-span
+Centering with dashes and spill-over.
+
address@hidden ses-tildefill-span
+Centering with tildes (~) and spill-over.
address@hidden table
+
+
address@hidden Clearing cells, Copy/cut/paste, Printer functions, The Basics
address@hidden Clearing cells
address@hidden clearing commands
address@hidden ses-clear-cell-backward
address@hidden ses-clear-cell-forward
+
+These commands set both formula and printer to @code{nil}:
+
address@hidden @kbd
address@hidden DEL
+Clear cell and move left (@code{ses-clear-cell-backward}).
+
address@hidden C-d
+Clear cell and move right (@code{ses-clear-cell-forward}).
address@hidden table
+
+
address@hidden Copy/cut/paste, Customizing SES, Clearing cells, The Basics
address@hidden Copy, cut, and paste
address@hidden copy
address@hidden cut
address@hidden paste
address@hidden kill-ring-save
address@hidden mouse-set-region
address@hidden mouse-set-secondary
address@hidden ses-kill-override
address@hidden yank
address@hidden clipboard-yank
address@hidden mouse-yank-at-click
address@hidden mouse-yank-at-secondary
address@hidden ses-yank-pop
+
+The copy functions work on rectangular regions of cells.  You can paste the
+copies into non-SES buffers to export the print text.
+
address@hidden @kbd
address@hidden M-w
address@hidden [copy]
address@hidden [C-insert]
+Copy the highlighted cells to kill ring and primary clipboard
+(@code{kill-ring-save}).
+
address@hidden [drag-mouse-1]
+Mark a region and copy it to kill ring and primary clipboard
+(@code{mouse-set-region}).
+
address@hidden [M-drag-mouse-1]
+Mark a region and copy it to kill ring and secondary clipboard
+(@code{mouse-set-secondary}).
+
address@hidden C-w
address@hidden [cut]
address@hidden [S-delete]
+The cut functions do not actually delete rows or columns---they copy
+and then clear (@code{ses-kill-override}).
+
address@hidden C-y
address@hidden [S-insert]
+Paste from kill ring (@code{yank}).  The paste functions behave
+differently depending on the format of the text being inserted:
address@hidden @bullet
address@hidden
+When pasting cells that were cut from a SES buffer, the print text is
+ignored and only the attached formula and printer are inserted; cell
+references in the formula are relocated unless you use @kbd{C-u}.
address@hidden
+The pasted text overwrites a rectangle of cells whose top left corner
+is the current cell.  If part of the rectangle is beyond the edges of
+the spreadsheet, you must confirm the increase in spreadsheet size.
address@hidden
+Non-SES text is usually inserted as a replacement formula for the
+current cell.  If the formula would be a symbol, it's treated as a
+string unless you use @kbd{C-u}.  Pasted formulas with syntax errors
+are always treated as strings.
address@hidden itemize
+
address@hidden [paste]
+Paste from primary clipboard or kill ring (@code{clipboard-yank}).
+
address@hidden [mouse-2]
+Set point and paste from primary clipboard (@code{mouse-yank-at-click}).
+
address@hidden [M-mouse-2]
+Set point and paste from secondary clipboard (@code{mouse-yank-secondary}).
+
address@hidden M-y
+Immediately after a paste, you can replace the text with a preceding
+element from the kill ring (@code{ses-yank-pop}).  Unlike the standard
+Emacs yank-pop, the SES version uses @code{undo} to delete the old
+yank.  This doesn't make any difference?
address@hidden table
+
address@hidden Customizing SES,  , Copy/cut/paste, The Basics
address@hidden Customizing SES
address@hidden customizing
address@hidden enable-local-eval
address@hidden ses-mode-hook
address@hidden safe-functions
address@hidden enable-local-eval
+
+
+By default, a newly-created spreadsheet has 1 row and 1 column.  The
+column width is 7 and the default printer is @samp{"%.7g"}.  Each of these
+can be customized.  Look in group ``ses''.
+
+After entering a cell value, point normally moves right to the next
+cell.  You can customize @code{ses-after-entry-functions} to move left or
+up or down.  For diagonal movement, select two functions from the
+list.
+
address@hidden is a normal mode hook (list of functions to
+execute when starting SES mode for a buffer).
+
+The variable @code{safe-functions} is a list of possibly-unsafe
+functions to be treated as safe when analysing formulas and printers.
address@hidden protection}.  Before customizing @code{safe-functions},
+think about how much you trust the person who's suggesting this
+change.  The value @code{t} turns off all anti-virus protection.  A
+list-of-functions value might enable a ``gee whiz'' spreadsheet, but it
+also creates trapdoors in your anti-virus armor.  In order for virus
+protection to work, you must always press @kbd{n} when presented with
+a virus warning, unless you understand what the questionable code is
+trying to do.  Do not listen to those who tell you to customize
address@hidden variable is for people who don't wear
+safety belts!
+
+
address@hidden 
===================================================================
+
address@hidden Advanced Features, For Gurus, The Basics, Top
address@hidden Advanced Features
address@hidden advanced features
address@hidden ses-read-header-row
+
+
address@hidden @kbd
address@hidden C-c M-C-h
+(@code{ses-set-header-row}).  The header line at the top of the SES
+window normally shows the column letter for each column.  You can set
+it to show a copy of some row, such as a row of column titles, so that
+row will always be visible.  Default is to set the current row as the
+header; use C-u to prompt for header row.  Set the header to row 0 to
+show column letters again.
address@hidden [header-line mouse-3]
+Pops up a menu to set the current row as the header, or revert to
+column letters.
address@hidden table
+
address@hidden
+* The print area::
+* Ranges in formulas::
+* Sorting by column::
+* Standard formula functions::
+* More on cell printing::
+* Import and export::
+* Virus protection::
+* Spreadsheets with details and summary::
address@hidden menu
+
address@hidden The print area, Ranges in formulas, Advanced Features, Advanced 
Features
address@hidden The print area
address@hidden print area
address@hidden widen
address@hidden ses-renarrow-buffer
address@hidden ses-reprint-all
+
+A SES file consists of a print area and a data area.  Normally the
+buffer is narrowed to show only the print area.  The print area is
+read-only except for special SES commands; it contains cell values
+formatted by printer functions.  The data area records the formula and
+printer functions, etc.
+
address@hidden @kbd
address@hidden C-x n w
+Show print and data areas (@code{widen}).
+
address@hidden C-c C-n
+Show only print area (@code{ses-renarrow-buffer}).
+
address@hidden S-C-l
address@hidden M-C-l
+Recreate print area by reevaluating printer functions for all cells
+(@code{ses-reprint-all}).
address@hidden table
+
address@hidden Ranges in formulas, Sorting by column, The print area, Advanced 
Features
address@hidden Ranges in formulas
address@hidden ranges
address@hidden ses-insert-range-click
address@hidden ses-insert-range
address@hidden ses-insert-ses-range-click
address@hidden ses-insert-ses-range
address@hidden from
address@hidden to
+
+A formula like
address@hidden
+(+ A1 A2 A3)
address@hidden lisp
+is the sum of three specific cells.  If you insert a new second row,
+the formula becomes
address@hidden
+(+ A1 A3 A4)
address@hidden lisp
+and the new row is not included in the sum.
+
+The macro @code{(ses-range @var{from} @var{to})} evaluates to a list of
+the values in a rectangle of cells.  If your formula is
address@hidden
+(apply '+ (ses-range A1 A3))
address@hidden lisp
+and you insert a new second row, it becomes
address@hidden
+(apply '+ (ses-range A1 A4))
address@hidden lisp
+and the new row is included in the sum.
+
+While entering or editing a formula in the minibuffer, you can select
+a range in the spreadsheet (using mouse or keyboard), then paste a
+representation of that range into your formula.  Suppose you select
+A1-C1:
+
address@hidden @kbd
address@hidden [S-mouse-3]
+Inserts "A1 B1 C1" @code{(ses-insert-range-click})
+
address@hidden C-c C-r
+Keyboard version (@code{ses-insert-range}).
+
address@hidden [C-S-mouse-3]
+Inserts "(ses-range A1 C1)" (@code{ses-insert-ses-range-click}).
+
address@hidden C-c C-s
+Keyboard version (@code{ses-insert-ses-range}).
address@hidden table
+
+If you delete the @var{from} or @var{to} cell for a range, the nearest
+still-existing cell is used instead.  If you delete the entire range,
+the formula relocator will delete the ses-range from the formula.
+
+If you insert a new row just beyond the end of a one-column range, or
+a new column just beyond a one-row range, the new cell is included in
+the range.  New cells inserted just before a range are not included.
+
+
address@hidden Sorting by column, Standard formula functions, Ranges in 
formulas, Advanced Features
address@hidden Sorting by column
address@hidden sorting
address@hidden ses-sort-column
address@hidden ses-sort-column-click
+
address@hidden @kbd
address@hidden C-c M-C-s
+Sort the cells of a range using one of the columns
+(@code{ses-sort-column}).  The rows (or partial rows if the range
+doesn't include all columns) are rearranged so the chosen column will
+be in order.
+
address@hidden [header-line mouse-2]
+The easiest way to sort is to click mouse-2 on the chosen column's header row
+(@code{ses-sort-column-click}).
address@hidden table
+
+The sort comparison uses @code{string<}, which works well for
+right-justified numbers and left-justified strings.
+
+With prefix arg, sort is in descending order.
+
+Rows are moved one at a time, with relocation of formulas.  This works
+well if formulas refer to other cells in their row, not so well for
+formulas that refer to other rows in the range or to cells outside the
+range.
+
+
address@hidden Standard formula functions, More on cell printing, Sorting by 
column, Advanced Features
address@hidden Standard formula functions
address@hidden standard formula functions
address@hidden *skip*
address@hidden *error*
address@hidden ses-delete-blanks
address@hidden ses-average
address@hidden ses+
+
+Oftentimes you want a calculation to exclude the blank cells.  Here
+are some useful functions to call from your formulas:
+
address@hidden @code
address@hidden (ses-delete-blanks &rest @var{args})
+Returns a list from which all blank cells (value is either @code{nil} or
+'*skip*) have been deleted.
+
address@hidden (ses+ &rest @var{args})
+Sum of non-blank arguments.
+
address@hidden (ses-average @var{list})
+Average of non-blank elements in @var{list}.  Here the list is passed
+as a single argument, since you'll probably use it with @code{ses-range}.
address@hidden table
+
address@hidden More on cell printing, Import and export, Standard formula 
functions, Advanced Features
address@hidden More on cell printing
address@hidden cell printing, more
address@hidden ses-truncate-cell
address@hidden ses-recalculate-cell
+
+Special cell values:
address@hidden
address@hidden nil prints the same as "", but allows previous cell to spill 
over.
address@hidden '*skip* replaces nil when the previous cell actually does spill 
over;
+nothing is printed for it.
address@hidden '*error* indicates that the formula signaled an error instead of
+producing a value: the print cell is filled with hash marks (#).
address@hidden itemize
+
+If the result from the printer function is too wide for the cell and
+the following cell is @code{nil}, the result will spill over into the
+following cell.  Very wide results can spill over several cells.  If
+the result is too wide for the available space (up to the end of the
+row or the next address@hidden cell), the result is truncated if the cell's
+value is a string, or replaced with hash marks otherwise.
+
+SES could get confused by printer results that contain newlines or
+tabs, so these are replaced with question marks.
+
address@hidden @kbd
address@hidden C-c C-t
+Confine a cell to its own column (@code{ses-truncate-cell}).  This
+allows you to move point to a rightward cell that would otherwise be
+covered by a spill-over.  If you don't change the rightward cell, the
+confined cell will spill over again the next time it is reprinted.
+
address@hidden C-c C-c
+When applied to a single cell, this command displays in the echo area any
+formula error or printer error that occurred during
+recalculation/reprinting (@code{ses-recalculate-cell}).
address@hidden table
+
+When a printer function signals an error, the default printer
address@hidden"%s"} is substituted.  This is useful when your column printer
+is numeric-only and you use a string as a cell value.
+
+
address@hidden Import and export, Virus protection, More on cell printing, 
Advanced Features
address@hidden Import and export
address@hidden import and export
address@hidden export, and import
address@hidden ses-export-tsv
address@hidden ses-export-tsf
+
address@hidden @kbd
address@hidden x t
+Export a range of cells as tab-separated values (@code{ses-export-tsv}).
address@hidden x T
+Export a range of cells as tab-separated formulas (@code{ses-export-tsf}).
address@hidden table
+
+The exported text goes to the kill ring --- you can paste it into
+another buffer.  Columns are separated by tabs, rows by newlines.
+
+To import text, use any of the yank commands where the text to paste
+contains tabs and/or newlines.  Imported formulas are not relocated.
+
address@hidden Virus protection, Spreadsheets with details and summary, Import 
and export, Advanced Features
address@hidden Virus protection
address@hidden virus protection
+
+Whenever a formula or printer is read from a file or is pasted into
+the spreadsheet, it receives a ``needs safety check'' marking.  Later,
+when the formula or printer is evaluated for the first time, it is
+checked for safety using the @code{unsafep} predicate; if found to be
+``possibly unsafe'', the questionable formula or printer is displayed
+and you must press Y to approve it or N to use a substitute.  The
+substitute always signals an error.
+
+Formulas or printers that you type in are checked immediately for
+safety.  If found to be possibly unsafe and you press N to disapprove,
+the action is canceled and the old formula or printer will remain.
+
+Besides viruses (which try to copy themselves to other files),
address@hidden can also detect all other kinds of Trojan horses, such as
+spreadsheets that delete files, send email, flood Web sites, alter
+your Emacs settings, etc.
+
+Generally, spreadsheet formulas and printers are simple things that
+don't need to do any fancy computing, so all potentially-dangerous
+parts of the Emacs Lisp environment can be excluded without cramping
+your style as a formula-writer.  See the documentation in @file{unsafep.el}
+for more info on how Lisp forms are classified as safe or unsafe.
+
address@hidden Spreadsheets with details and summary,  , Virus protection, 
Advanced Features
address@hidden Spreadsheets with details and summary
address@hidden details and summary
address@hidden summary, and details
+
+A common organization for spreadsheets is to have a bunch of ``detail''
+rows, each perhaps describing a transaction, and then a set of
+``summary'' rows that each show reduced data for some subset of the
+details.  SES supports this organization via the @code{ses-select}
+function.
+
address@hidden @code
address@hidden (ses-select @var{fromrange} @var{test} @var{torange})
+Returns a subset of @var{torange}.  For each member in @var{fromrange}
+that is equal to @var{test}, the corresponding member of @var{torange}
+is included in the result.
address@hidden table
+
+Example of use:
address@hidden
+(ses-average (ses-select (ses-range A1 A5) 'Smith (ses-range B1 B5)))
address@hidden lisp
+This computes the average of the B column values for those rows whose
+A column value is the symbol 'Smith.
+
+Arguably one could specify only @var{fromrange} plus
address@hidden and @var{to-column-offset}.  The @var{torange} is
+stated explicitly to ensure that the formula will be recalculated if
+any cell in either range is changed.
+
+File @file{etc/ses-example.el} in the Emacs distribution is an example of a
+details-and-summary spreadsheet.
+
+
address@hidden 
===================================================================
+
address@hidden For Gurus, Index, Advanced Features, Top
address@hidden For Gurus
address@hidden advanced features
+
address@hidden
+* Deferred updates::
+* Nonrelocatable references::
+* The data area::
+* Buffer-local variables in spreadsheets::
+* Uses of defadvice in SES::
address@hidden menu
+
address@hidden Deferred updates, Nonrelocatable references, For Gurus, For Gurus
address@hidden Deferred updates
address@hidden deferred updates
address@hidden updates, deferred
address@hidden run-with-idle-timer
+
+To save time by avoiding redundant computations, cells that need
+recalculation due to changes in other cells are added to a set.  At
+the end of the command, each cell in the set is recalculated once.
+This can create a new set of cells that need recalculation.  The
+process is repeated until either the set is empty or it stops changing
+(due to circular references among the cells).  In extreme cases, you
+might see progress messages of the form ``Recalculating... (@var{nnn}
+cells left)''.  If you interrupt the calculation using @kbd{C-g}, the
+spreadsheet will be left in an inconsistent state, so use @kbd{C-_} or
address@hidden C-l} to fix it.
+
+To save even more time by avoiding redundant writes, cells that have
+changes are added to a set instead of being written immediately to the
+data area.  Each cell in the set is written once, at the end of the
+command.  If you change vast quantities of cells, you might see a
+progress message of the form ``Writing... (@var{nnn} cells left)''.
+These deferred cell-writes cannot be interrupted by @kbd{C-g}, so
+you'll just have to wait.
+
+SES uses @code{run-with-idle-timer} to move the cell underline when
+Emacs will be scrolling the buffer after the end of a command, and
+also to narrow and underline after @kbd{C-x C-v}.  This is visible as
+a momentary glitch after C-x C-v and certain scrolling commands.  You
+can type ahead without worrying about the glitch.
+
+
address@hidden Nonrelocatable references, The data area, Deferred updates, For 
Gurus
address@hidden Nonrelocatable references
address@hidden nonrelocatable references
address@hidden references, nonrelocatable
+
address@hidden relocates all cell-references in a pasted formula, while
address@hidden C-y} relocates none of the cell-references.  What about mixed
+cases?
+
+You can use
address@hidden
+(symbol-value 'B3)
address@hidden lisp
+to make an @dfn{absolute reference}.  The formula relocator skips over
+quoted things, so this will not be relocated when pasted or when
+rows/columns are inserted/deleted.  However, B3 will not be recorded
+as a dependency of this cell, so this cell will not be updated
+automatically when B3 is changed.
+
+The variables @code{row} and @code{col} are dynamically bound while a
+cell formula is being evaluated.  You can use
address@hidden
+(ses-cell-value row 0)
address@hidden lisp
+to get the value from the leftmost column in the current row.  This
+kind of dependency is also not recorded.
+
+
address@hidden The data area, Buffer-local variables in spreadsheets, 
Nonrelocatable references, For Gurus
address@hidden The data area
address@hidden data area
address@hidden ses-reconstruct-all
+
+Begins with an 014 character, followed by sets of cell-definition
+macros for each row, followed by column-widths, column-printers,
+default-printer, and header-row.  Then there's the global parameters
+(file-format ID, numrows, numcols) and the local variables (specifying
+SES mode for the buffer, etc.)
+
+When a SES file is loaded, first the numrows and numcols values are
+loaded, then the entire data area is @code{eval}ed, and finally the local
+variables are processed.
+
+You can edit the data area, but don't insert or delete any newlines
+except in the local-variables part, since SES locates things by
+counting newlines.  Use @kbd{C-x C-e} at the end of a line to install
+your edits into the spreadsheet data structures (this does not update
+the print area, use e.g. @kbd{C-c C-l} for that).
+
+The data area is maintained as an image of spreadsheet data
+structures that area stored in buffer-local variables.  If the data
+area gets messed up, you can try reconstructing the data area from the
+data structures:
+
address@hidden @kbd
address@hidden C-c M-C-l
+(@code{ses-reconstruct-all}).
address@hidden table
+
+
address@hidden Buffer-local variables in spreadsheets, Uses of defadvice in 
SES, The data area, For Gurus
address@hidden Buffer-local variables in spreadsheets
address@hidden buffer-local variables
address@hidden variables, buffer-local
+
+You can add additional local variables to the list at the bottom of
+the data area, such as hidden constants you want to refer to in your
+formulas.
+
+You can override the variable @code{symbolic-formulas} to be a list of
+symbols (as parenthesized strings) to show as completions for the '
+command.  This initial completions list is used instead of the actual
+set of symbols-as-formulas in the spreadsheet.
+
+For examples of these, see file @file{etc/ses-example.ses}.
+
+If (for some reason) you want your formulas or printers to save data
+into variables, you must declare these variables as buffer-locals in
+order to avoid a virus warning.
+
+You can define functions by making them values for the fake local
+variable @code{eval}.  Such functions can then be used in your
+formulas and printers, but usually each @code{eval} is presented to
+the user during file loading as a potential virus --- this can get
+annoying.
+
+You can define functions in your @file{.emacs} file.  Other people can
+still read the print area of your spreadsheet, but they won't be able
+to recalculate or reprint anything that depends on your functions.  To
+avoid virus warnings, each function used in a formula needs
address@hidden
+(put 'your-function-name 'safe-function t)
address@hidden lisp
+
address@hidden Uses of defadvice in SES,  , Buffer-local variables in 
spreadsheets, For Gurus
address@hidden Uses of defadvice in SES
address@hidden defadvice
address@hidden undo-more
address@hidden copy-region-as-kill
address@hidden yank
+
address@hidden @code
address@hidden undo-more
+Defines a new undo element format (@var{fun} . @var{args}), which
+means ``undo by applying @var{fun} to @var{args}''.  For spreadsheet
+buffers, it allows undos in the data area even though that's outside
+the narrowing.
+
address@hidden copy-region-as-kill
+When copying from the print area of a spreadsheet, treat the region as
+a rectangle and attach each cell's formula and printer as 'ses
+properties.
+
address@hidden yank
+When yanking into the print area of a spreadsheet, first try to yank
+as cells (if the yank text has 'ses properties), then as tab-separated
+formulas, then (if all else fails) as a single formula for the current
+cell.
address@hidden table
+
address@hidden 
===================================================================
address@hidden Index, Acknowledgements, For Gurus, Top
address@hidden Index
+
address@hidden cp
+
address@hidden 
===================================================================
+
address@hidden Acknowledgements, GNU Free Documentation License, Index, Top
address@hidden Acknowledgements
+
+Coding by:
address@hidden
+Jonathan Yavner @email{jyavner@@address@hidden
+Stefan Monnier @email{monnier@@gnu.org}
address@hidden quotation
+
address@hidden
+Texinfo manual by:
address@hidden
+Jonathan Yavner @email{jyavner@@address@hidden
+Brad Collins <brad@@chenla.org>
address@hidden quotation
+
address@hidden
+Ideas from:
address@hidden
+Christoph Conrad @email{christoph.conrad@@address@hidden
+CyberBob @email{cyberbob@@address@hidden
+Syver Enstad @email{syver-en@@address@hidden
+Ami Fischman @email{fischman@@address@hidden
+Thomas Gehrlein @email{Thomas.Gehrlein@@address@hidden
+Chris F.A. Johnson @email{c.f.a.johnson@@address@hidden
+Yusong Li @email{lyusong@@address@hidden
+Juri Linkov @email{juri@@address@hidden
+Harald Maier @email{maierh@@address@hidden
+Alan Nash @email{anash@@address@hidden
+François Pinard @email{pinard@@address@hidden
+Pedro Pinto @email{ppinto@@address@hidden
+Stefan Reichör @email{xsteve@@address@hidden
+Oliver Scholz @email{epameinondas@@address@hidden
+Richard M. Stallman @email{rms@@address@hidden
+Luc Teirlinck @email{teirllm@@address@hidden
+J. Otto Tennant @email{jotto@@address@hidden
+Jean-Philippe Theberge @email{jphil@@acs.pagesjaunes.fr}
address@hidden quotation
+
address@hidden 
===================================================================
+
address@hidden GNU Free Documentation License, , Acknowledgements, Top
address@hidden GNU Free Documentation License
address@hidden doclicense.texi
+
address@hidden
+
address@hidden
+   arch-tag: 10a4ee1c-7ef4-4c06-8b7a-f975e39f0dec
address@hidden ignore




reply via email to

[Prev in Thread] Current Thread [Next in Thread]