mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-30 04:10:54 -08:00
Add coding cookie. Fix up docstrings, follow new commenting conventions.
(ses-header-line-menu): Fix missing variable rename for header-row. (ses-cell-size): Remove. (ses-make-cell): New function. (ses-cell, ses-insert-row, ses-insert-column): Use it. (ses-calculate-cell): Remove unused var `symbol'. (ses-narrowed-p): New function. (ses-goto-data, undo-more, ses-reconstruct-all): Use it. (ses-initial-file-trailer): Change ;;; to ;; for local vars. (ses-load, ses-reconstruct-all): Adjust string search accordingly. (ses-setup): Use restore-buffer-modified-p. (ses-cleanup): Remove unused var `end'. (ses-header-string-left-offset): Remove. (ses-create-header-string): Adjust to new behavior of `align-to'. Truncate excessively large fields to preserve alignment. (ses-reconstruct-all): Remove unused var `refs'. (ses-read-cell-printer): Remove unused var `prompt'. (ses-delete-row): Remove unused var `pos'. (ses-delete-column): Remove unused var `new'.
This commit is contained in:
parent
83aebfe622
commit
58cf70d3fd
2 changed files with 169 additions and 160 deletions
|
|
@ -1,3 +1,26 @@
|
|||
2004-11-21 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* ses.el: Add coding cookie.
|
||||
Fix up docstrings, follow new commenting conventions.
|
||||
(ses-header-line-menu): Fix missing variable rename for header-row.
|
||||
(ses-cell-size): Remove.
|
||||
(ses-make-cell): New function.
|
||||
(ses-cell, ses-insert-row, ses-insert-column): Use it.
|
||||
(ses-calculate-cell): Remove unused var `symbol'.
|
||||
(ses-narrowed-p): New function.
|
||||
(ses-goto-data, undo-more, ses-reconstruct-all): Use it.
|
||||
(ses-initial-file-trailer): Change ;;; to ;; for local vars.
|
||||
(ses-load, ses-reconstruct-all): Adjust string search accordingly.
|
||||
(ses-setup): Use restore-buffer-modified-p.
|
||||
(ses-cleanup): Remove unused var `end'.
|
||||
(ses-header-string-left-offset): Remove.
|
||||
(ses-create-header-string): Adjust to new behavior of `align-to'.
|
||||
Truncate excessively large fields to preserve alignment.
|
||||
(ses-reconstruct-all): Remove unused var `refs'.
|
||||
(ses-read-cell-printer): Remove unused var `prompt'.
|
||||
(ses-delete-row): Remove unused var `pos'.
|
||||
(ses-delete-column): Remove unused var `new'.
|
||||
|
||||
2004-11-21 Vinicius Jose Latorre <viniciusjl@ig.com.br>
|
||||
|
||||
* ps-print.el: Insert :version tag into all defgroup and defcustom.
|
||||
|
|
@ -26,8 +49,7 @@
|
|||
(calcFunc-typeof): Replace undeclared variable by expression.
|
||||
|
||||
(math-exp-env): New variable.
|
||||
(math-define-body, math-define-exp): Replace exp-env by declared
|
||||
variable.
|
||||
(math-define-body, math-define-exp): Replace exp-env by declared var.
|
||||
|
||||
(math-define-exp): Replace misplaced variable by expression.
|
||||
|
||||
|
|
@ -136,8 +158,7 @@
|
|||
(calc-finish-selection-edit): Replace variable disp-trail by
|
||||
declared variable.
|
||||
|
||||
(calc-selection-cache-entry): Move declaration to earlier in
|
||||
the file.
|
||||
(calc-selection-cache-entry): Move declaration to earlier in the file.
|
||||
|
||||
(calc-selection-cache-num, calc-selection-cache-comp)
|
||||
(calc-selection-cache-offset, calc-selection-true-num)
|
||||
|
|
@ -146,8 +167,7 @@
|
|||
|
||||
(calc-fnp-op, calc-fnp-num): New variables.
|
||||
(calc-find-nth-part, calc-find-nth-part-rec)
|
||||
(calc-select-previous): Replace op and num by declared
|
||||
variables.
|
||||
(calc-select-previous): Replace op and num by declared variables.
|
||||
|
||||
(calc-rsf-old, calc-rsf-new): New variables.
|
||||
(calc-replace-sub-formula, calc-replace-sub-formula-rec):
|
||||
|
|
@ -193,8 +213,7 @@
|
|||
|
||||
(math-apply-rw-regs): New variable.
|
||||
(math-apply-rewrites, math-rwapply-replace-regs)
|
||||
(math-rwapply-reg-looks-negp): Replace variable regs by declared
|
||||
variable.
|
||||
(math-rwapply-reg-looks-negp): Replace variable regs by declared var.
|
||||
|
||||
(math-apply-rw-ruleset): New variable.
|
||||
(math-apply-rewrites, math-rwapply-remember): Replace variable
|
||||
|
|
@ -218,8 +237,7 @@
|
|||
|
||||
2004-11-18 Jay Belanger <belanger@truman.edu>
|
||||
|
||||
* calc/calc-alg.el (math-simplify-divisor): Remove unnecessary
|
||||
variables.
|
||||
* calc/calc-alg.el (math-simplify-divisor): Remove unnecessary vars.
|
||||
|
||||
2004-11-17 Vinicius Jose Latorre <viniciusjl@ig.com.br>
|
||||
|
||||
|
|
|
|||
291
lisp/ses.el
291
lisp/ses.el
|
|
@ -1,4 +1,4 @@
|
|||
;;; ses.el -- Simple Emacs Spreadsheet
|
||||
;;; ses.el -- Simple Emacs Spreadsheet -*- coding: utf-8 -*-
|
||||
|
||||
;; Copyright (C) 2002,03,04 Free Software Foundation, Inc.
|
||||
|
||||
|
|
@ -23,7 +23,10 @@
|
|||
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
;; Boston, MA 02111-1307, USA.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;;; To-do list:
|
||||
|
||||
;; * Use $ or … for truncated fields
|
||||
;; * Add command to make a range of columns be temporarily invisible.
|
||||
;; * Allow paste of one cell to a range of cells -- copy formula to each.
|
||||
|
|
@ -35,12 +38,15 @@
|
|||
;; * Left-margin column for row number.
|
||||
;; * Move a row by dragging its number in the left-margin.
|
||||
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'unsafep)
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; User-customizable variables
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; User-customizable variables
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defgroup ses nil
|
||||
"Simple Emacs Spreadsheet"
|
||||
|
|
@ -66,8 +72,9 @@
|
|||
function))
|
||||
|
||||
(defcustom ses-after-entry-functions '(forward-char)
|
||||
"Things to do after entering a value into a cell. An abnormal hook that
|
||||
usually runs a cursor-movement function. Each function is called with ARG=1."
|
||||
"Things to do after entering a value into a cell.
|
||||
An abnormal hook that usually runs a cursor-movement function.
|
||||
Each function is called with ARG=1."
|
||||
:group 'ses
|
||||
:type 'hook
|
||||
:options '(forward-char backward-char next-line previous-line))
|
||||
|
|
@ -78,9 +85,9 @@ usually runs a cursor-movement function. Each function is called with ARG=1."
|
|||
:type 'hook)
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; Global variables and constants
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; Global variables and constants
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defvar ses-read-cell-history nil
|
||||
"List of formulas that have been typed in.")
|
||||
|
|
@ -92,7 +99,7 @@ usually runs a cursor-movement function. Each function is called with ARG=1."
|
|||
"Context menu when mouse-3 is used on the header-line in an SES buffer."
|
||||
'("SES header row"
|
||||
["Set current row" ses-set-header-row t]
|
||||
["Unset row" ses-unset-header-row (> header-row 0)]))
|
||||
["Unset row" ses-unset-header-row (> ses--header-row 0)]))
|
||||
|
||||
(defconst ses-mode-map
|
||||
(let ((keys `("\C-c\M-\C-l" ses-reconstruct-all
|
||||
|
|
@ -208,14 +215,14 @@ usually runs a cursor-movement function. Each function is called with ARG=1."
|
|||
map))
|
||||
|
||||
(defconst ses-print-data-boundary "\n\014\n"
|
||||
"Marker string denoting the boundary between print area and data area")
|
||||
"Marker string denoting the boundary between print area and data area.")
|
||||
|
||||
(defconst ses-initial-global-parameters
|
||||
"\n( ;Global parameters (these are read first)\n 2 ;SES file-format\n 1 ;numrows\n 1 ;numcols\n)\n\n"
|
||||
"Initial contents for the three-element list at the bottom of the data area")
|
||||
"Initial contents for the three-element list at the bottom of the data area.")
|
||||
|
||||
(defconst ses-initial-file-trailer
|
||||
";;; Local Variables:\n;;; mode: ses\n;;; End:\n"
|
||||
";; Local Variables:\n;; mode: ses\n;; End:\n"
|
||||
"Initial contents for the file-trailer area at the bottom of the file.")
|
||||
|
||||
(defconst ses-initial-file-contents
|
||||
|
|
@ -231,10 +238,6 @@ usually runs a cursor-movement function. Each function is called with ARG=1."
|
|||
ses-initial-file-trailer)
|
||||
"The initial contents of an empty spreadsheet.")
|
||||
|
||||
(defconst ses-cell-size 4
|
||||
"A cell consists of a SYMBOL, a FORMULA, a PRINTER-function, and a list of
|
||||
REFERENCES.")
|
||||
|
||||
(defconst ses-paramlines-plist
|
||||
'(ses--col-widths 2 ses--col-printers 3 ses--default-printer 4
|
||||
ses--header-row 5 ses--file-format 8 ses--numrows 9
|
||||
|
|
@ -271,13 +274,13 @@ default printer and then modify its output.")
|
|||
(set x nil)))
|
||||
|
||||
|
||||
;;;
|
||||
;;; "Side-effect variables". They are set in one function, altered in
|
||||
;;; another as a side effect, then read back by the first, as a way of
|
||||
;;; passing back more than one value. These declarations are just to make
|
||||
;;; the compiler happy, and to conform to standard Emacs-Lisp practice (I
|
||||
;;; think the make-local-variable trick above is cleaner).
|
||||
;;;
|
||||
;;
|
||||
;; "Side-effect variables". They are set in one function, altered in
|
||||
;; another as a side effect, then read back by the first, as a way of
|
||||
;; passing back more than one value. These declarations are just to make
|
||||
;; the compiler happy, and to conform to standard Emacs-Lisp practice (I
|
||||
;; think the make-local-variable trick above is cleaner).
|
||||
;;
|
||||
|
||||
(defvar ses-relocate-return nil
|
||||
"Set by `ses-relocate-formula' and `ses-relocate-range', read by
|
||||
|
|
@ -296,14 +299,19 @@ encountered an error during printing. Nil otherwise.")
|
|||
when to emit a progress message.")
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; Macros
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; Macros
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defmacro ses-get-cell (row col)
|
||||
"Return the cell structure that stores information about cell (ROW,COL)."
|
||||
`(aref (aref ses--cells ,row) ,col))
|
||||
|
||||
;; We might want to use defstruct here, but cells are explicitly used as
|
||||
;; arrays in ses-set-cell, so we'd need to fix this first. --Stef
|
||||
(defsubst ses-make-cell (&optional symbol formula printer references)
|
||||
(vector symbol formula printer references))
|
||||
|
||||
(defmacro ses-cell-symbol (row &optional col)
|
||||
"From a CELL or a pair (ROW,COL), get the symbol that names the local-variable holding its value. (0,0) => A1."
|
||||
`(aref ,(if col `(ses-get-cell ,row ,col) row) 0))
|
||||
|
|
@ -355,7 +363,7 @@ PRINTER are deferred until first use."
|
|||
(setq printer `(ses-safe-printer ,printer)))
|
||||
(aset (aref ses--cells (car rowcol))
|
||||
(cdr rowcol)
|
||||
(vector sym formula printer references)))
|
||||
(ses-make-cell sym formula printer references)))
|
||||
(set sym value)
|
||||
sym)
|
||||
|
||||
|
|
@ -455,9 +463,9 @@ the same value."
|
|||
form)
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; Utility functions
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; Utility functions
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defun ses-vector-insert (array idx new)
|
||||
"Create a new vector which is one larger than ARRAY and has NEW inserted
|
||||
|
|
@ -538,9 +546,9 @@ for this spreadsheet."
|
|||
(put sym 'ses-cell (cons xrow xcol))
|
||||
(make-local-variable sym)))))
|
||||
|
||||
;;;We do not delete the ses-cell properties for the cell-variables, in case a
|
||||
;;;formula that refers to this cell is in the kill-ring and is later pasted
|
||||
;;;back in.
|
||||
;;We do not delete the ses-cell properties for the cell-variables, in case a
|
||||
;;formula that refers to this cell is in the kill-ring and is later pasted
|
||||
;;back in.
|
||||
(defun ses-destroy-cell-variable-range (minrow maxrow mincol maxcol)
|
||||
"Destroy buffer-local variables for cells. This is undoable."
|
||||
(let (sym)
|
||||
|
|
@ -570,9 +578,9 @@ and (eval ARG) and reset `ses-start-time' to the current time."
|
|||
nil)
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; The cells
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; The cells
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defun ses-set-cell (row col field val)
|
||||
"Install VAL as the contents for field FIELD (named by a quoted symbol) of
|
||||
|
|
@ -634,8 +642,7 @@ processing for the current keystroke, unless the new value is the same as
|
|||
the old and FORCE is nil."
|
||||
(let ((cell (ses-get-cell row col))
|
||||
formula-error printer-error)
|
||||
(let ((symbol (ses-cell-symbol cell))
|
||||
(oldval (ses-cell-value cell))
|
||||
(let ((oldval (ses-cell-value cell))
|
||||
(formula (ses-cell-formula cell))
|
||||
newval)
|
||||
(if (eq (car-safe formula) 'ses-safe-formula)
|
||||
|
|
@ -717,17 +724,17 @@ if the cell's value is unchanged if FORCE is nil."
|
|||
(goto-char pos)))
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; The print area
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; The print area
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defun ses-in-print-area ()
|
||||
"Returns t if point is in print area of spreadsheet."
|
||||
(eq (get-text-property (point) 'keymap) 'ses-mode-print-map))
|
||||
|
||||
;;;We turn off point-motion-hooks and explicitly position the cursor, in case
|
||||
;;;the intangible properties have gotten screwed up (e.g., when
|
||||
;;;ses-goto-print is called during a recursive ses-print-cell).
|
||||
;;We turn off point-motion-hooks and explicitly position the cursor, in case
|
||||
;;the intangible properties have gotten screwed up (e.g., when
|
||||
;;ses-goto-print is called during a recursive ses-print-cell).
|
||||
(defun ses-goto-print (row col)
|
||||
"Move point to print area for cell (ROW,COL)."
|
||||
(let ((inhibit-point-motion-hooks t))
|
||||
|
|
@ -772,11 +779,11 @@ argument is 'range. A single cell is appropriate unless some argument is
|
|||
(error "Need a range"))))
|
||||
|
||||
(defun ses-print-cell (row col)
|
||||
"Format and print the value of cell (ROW,COL) to the print area, using the
|
||||
cell's printer function. If the cell's new print form is too wide, it will
|
||||
spill over into the following cell, but will not run off the end of the row
|
||||
or overwrite the next non-nil field. Result is nil for normal operation, or
|
||||
the error signal if the printer function failed and the cell was formatted
|
||||
"Format and print the value of cell (ROW,COL) to the print area.
|
||||
Use the cell's printer function. If the cell's new print form is too wide,
|
||||
it will spill over into the following cell, but will not run off the end of the
|
||||
row or overwrite the next non-nil field. Result is nil for normal operation,
|
||||
or the error signal if the printer function failed and the cell was formatted
|
||||
with \"%s\". If the cell's value is *skip*, nothing is printed because the
|
||||
preceding cell has spilled over."
|
||||
(catch 'ses-print-cell
|
||||
|
|
@ -948,16 +955,18 @@ cell (ROW,COL) has changed."
|
|||
(ses-print-cell (car rowcol) (cdr rowcol)))))
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; The data area
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; The data area
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defun ses-narrowed-p () (/= (- (point-max) (point-min)) (buffer-size)))
|
||||
|
||||
(defun ses-goto-data (def &optional col)
|
||||
"Move point to data area for (DEF,COL). If DEF is a row
|
||||
number, COL is the column number for a data cell -- otherwise DEF
|
||||
is one of the symbols ses--col-widths, ses--col-printers,
|
||||
ses--default-printer, ses--numrows, or ses--numcols."
|
||||
(if (< (point-max) (buffer-size))
|
||||
(if (ses-narrowed-p)
|
||||
(setq ses--deferred-narrow t))
|
||||
(widen)
|
||||
(let ((inhibit-point-motion-hooks t)) ;In case intangible attrs are wrong
|
||||
|
|
@ -971,10 +980,9 @@ ses--default-printer, ses--numrows, or ses--numcols."
|
|||
(forward-line (+ (* ses--numrows (+ ses--numcols 2)) def)))))
|
||||
|
||||
(defun ses-set-parameter (def value &optional elem)
|
||||
"Sets parameter DEF to VALUE (with undo) and writes the value to the data
|
||||
area. See `ses-goto-data' for meaning of DEF. Newlines in the data
|
||||
are escaped. If ELEM is specified, it is the array subscript within DEF to
|
||||
be set to VALUE."
|
||||
"Set parameter DEF to VALUE (with undo) and write the value to the data area.
|
||||
See `ses-goto-data' for meaning of DEF. Newlines in the data are escaped.
|
||||
If ELEM is specified, it is the array subscript within DEF to be set to VALUE."
|
||||
(save-excursion
|
||||
;;We call ses-goto-data early, using the old values of numrows and
|
||||
;;numcols in case one of them is being changed.
|
||||
|
|
@ -995,8 +1003,8 @@ be set to VALUE."
|
|||
(insert (format fmt (symbol-value def))))))
|
||||
|
||||
(defun ses-write-cells ()
|
||||
"`ses--deferred-write' is a list of (ROW,COL) for cells to be written from
|
||||
buffer-local variables to data area. Newlines in the data are escaped."
|
||||
"Write cells in `ses--deferred-write' from local variables to data area.
|
||||
Newlines in the data are escaped."
|
||||
(let* ((inhibit-read-only t)
|
||||
(print-escape-newlines t)
|
||||
rowcol row col cell sym formula printer text)
|
||||
|
|
@ -1041,9 +1049,9 @@ buffer-local variables to data area. Newlines in the data are escaped."
|
|||
(message " "))))
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; Formula relocation
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; Formula relocation
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defun ses-formula-references (formula &optional result-so-far)
|
||||
"Produce a list of symbols for cells that this formula's value
|
||||
|
|
@ -1284,9 +1292,9 @@ to each symbol."
|
|||
(message nil))))
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; Undo control
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; Undo control
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defadvice undo-more (around ses-undo-more activate preactivate)
|
||||
"Define a meaning for conses in buffer-undo-list whose car is a symbol
|
||||
|
|
@ -1308,7 +1316,7 @@ cdr--its arglist."
|
|||
ad-do-it
|
||||
;;Here is some extra code for SES mode.
|
||||
(setq ses--deferred-narrow
|
||||
(or ses--deferred-narrow (< (point-max) (buffer-size))))
|
||||
(or ses--deferred-narrow (ses-narrowed-p)))
|
||||
(widen)
|
||||
(condition-case x
|
||||
ad-do-it
|
||||
|
|
@ -1353,9 +1361,9 @@ stuff."
|
|||
t))
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; Startup for major mode
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; Startup for major mode
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defun ses-load ()
|
||||
"Parse the current buffer and sets up buffer-local variables. Does not
|
||||
|
|
@ -1363,10 +1371,9 @@ execute cell formulas or print functions."
|
|||
(widen)
|
||||
;;Read our global parameters, which should be a 3-element list
|
||||
(goto-char (point-max))
|
||||
(search-backward ";;; Local Variables:\n" nil t)
|
||||
(search-backward ";; Local Variables:\n" nil t)
|
||||
(backward-list 1)
|
||||
(let ((params (condition-case nil (read (current-buffer)) (error nil)))
|
||||
sym)
|
||||
(let ((params (condition-case nil (read (current-buffer)) (error nil))))
|
||||
(or (and (= (safe-length params) 3)
|
||||
(numberp (car params))
|
||||
(numberp (cadr params))
|
||||
|
|
@ -1481,7 +1488,7 @@ Narrows the buffer to show only the print area. Gives it `read-only' and
|
|||
(put-text-property pos end 'intangible sym)))
|
||||
;;Adding these properties did not actually alter the text
|
||||
(unless was-modified
|
||||
(set-buffer-modified-p nil)
|
||||
(restore-buffer-modified-p nil)
|
||||
(buffer-disable-undo)
|
||||
(buffer-enable-undo)))
|
||||
;;Create the underlining overlay. It's impossible for (point) to be 2,
|
||||
|
|
@ -1494,8 +1501,7 @@ Narrows the buffer to show only the print area. Gives it `read-only' and
|
|||
overlay, remove special text properties."
|
||||
(widen)
|
||||
(let ((inhibit-read-only t)
|
||||
(was-modified (buffer-modified-p))
|
||||
end)
|
||||
(was-modified (buffer-modified-p)))
|
||||
;;Delete read-only, keymap, and intangible properties
|
||||
(set-text-properties (point-min) (point-max) nil)
|
||||
;;Delete overlay
|
||||
|
|
@ -1639,50 +1645,37 @@ narrows the buffer now."
|
|||
(message (error-message-string err))))
|
||||
nil) ;Make coverage-tester happy
|
||||
|
||||
(defun ses-header-string-left-offset ()
|
||||
"Number of characters in left fringe and left scrollbar (if any)."
|
||||
(let ((left-fringe (round (or (frame-parameter nil 'left-fringe) 0)
|
||||
(frame-char-width)))
|
||||
(left-scrollbar (if (not (eq (frame-parameter nil
|
||||
'vertical-scroll-bars)
|
||||
'left))
|
||||
0
|
||||
(let ((x (frame-parameter nil 'scroll-bar-width)))
|
||||
;;Non-toolkil bar is always 14 pixels?
|
||||
(unless x (setq x 14))
|
||||
;;Always round up
|
||||
(ceiling x (frame-char-width))))))
|
||||
(+ left-fringe left-scrollbar)))
|
||||
|
||||
(defun ses-create-header-string ()
|
||||
"Sets up `ses--header-string' as the buffer's header line, based on the
|
||||
current set of columns and window-scroll position."
|
||||
(let* ((left-offset (ses-header-string-left-offset))
|
||||
(totwidth (- left-offset (window-hscroll)))
|
||||
result width result x)
|
||||
"Set up `ses--header-string' as the buffer's header line.
|
||||
Based on the current set of columns and `window-hscroll' position."
|
||||
(let ((totwidth (- (window-hscroll)))
|
||||
result width x)
|
||||
;;Leave room for the left-side fringe and scrollbar
|
||||
(push (make-string left-offset ? ) result)
|
||||
(push (propertize " " 'display '((space :align-to 0))) result)
|
||||
(dotimes (col ses--numcols)
|
||||
(setq width (ses-col-width col)
|
||||
totwidth (+ totwidth width 1))
|
||||
(if (= totwidth (+ left-offset 1))
|
||||
(if (= totwidth 1)
|
||||
;;Scrolled so intercolumn space is leftmost
|
||||
(push " " result))
|
||||
(when (> totwidth (+ left-offset 1))
|
||||
(when (> totwidth 1)
|
||||
(if (> ses--header-row 0)
|
||||
(save-excursion
|
||||
(ses-goto-print (1- ses--header-row) col)
|
||||
(setq x (buffer-substring-no-properties (point)
|
||||
(+ (point) width)))
|
||||
(if (>= width (- totwidth left-offset))
|
||||
(setq x (substring x (- width totwidth left-offset -1))))
|
||||
(push (propertize x 'face ses-box-prop) result))
|
||||
(setq x (ses-column-letter col))
|
||||
;; Strip trailing space.
|
||||
(if (string-match "[ \t]+\\'" x)
|
||||
(setq x (substring x 0 (match-beginning 0))))
|
||||
;; Cut off excess text.
|
||||
(if (>= (length x) totwidth)
|
||||
(setq x (substring x 0 (- totwidth -1)))))
|
||||
(setq x (ses-column-letter col)))
|
||||
(push (propertize x 'face ses-box-prop) result)
|
||||
(push (propertize (make-string (- width (length x)) ?.)
|
||||
(push (propertize "."
|
||||
'display `((space :align-to ,(1- totwidth)))
|
||||
'face ses-box-prop)
|
||||
result))
|
||||
result)
|
||||
;;Allow the following space to be squished to make room for the 3-D box
|
||||
;;Coverage test ignores properties, thinks this is always a space!
|
||||
(push (1value (propertize " " 'display `((space :align-to ,totwidth))))
|
||||
|
|
@ -1694,9 +1687,9 @@ current set of columns and window-scroll position."
|
|||
(setq ses--header-string (apply 'concat (nreverse result)))))
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; Redisplay and recalculation
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; Redisplay and recalculation
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defun ses-jump (sym)
|
||||
"Move point to cell SYM."
|
||||
|
|
@ -1814,7 +1807,7 @@ cells."
|
|||
(interactive "*")
|
||||
(ses-begin-change)
|
||||
;;Reconstruct reference lists.
|
||||
(let (refs x yrow ycol)
|
||||
(let (x yrow ycol)
|
||||
;;Delete old reference lists
|
||||
(ses-dotimes-msg (row ses--numrows) "Deleting references..."
|
||||
(dotimes (col ses--numcols)
|
||||
|
|
@ -1830,12 +1823,12 @@ cells."
|
|||
(cons (ses-cell-symbol row col)
|
||||
(ses-cell-references yrow ycol)))))))
|
||||
;;Delete everything and reconstruct basic data area
|
||||
(if (< (point-max) (buffer-size))
|
||||
(if (ses-narrowed-p)
|
||||
(setq ses--deferred-narrow t))
|
||||
(widen)
|
||||
(let ((inhibit-read-only t))
|
||||
(goto-char (point-max))
|
||||
(if (search-backward ";;; Local Variables:\n" nil t)
|
||||
(if (search-backward ";; Local Variables:\n" nil t)
|
||||
(delete-region (point-min) (point))
|
||||
;;Buffer is quite screwed up - can't even save the user-specified locals
|
||||
(delete-region (point-min) (point-max))
|
||||
|
|
@ -1862,9 +1855,9 @@ cells."
|
|||
(goto-char (point-min)))
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; Input of cell formulas
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; Input of cell formulas
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defun ses-edit-cell (row col newval)
|
||||
"Display current cell contents in minibuffer, for editing. Returns nil if
|
||||
|
|
@ -1968,9 +1961,9 @@ cells."
|
|||
(ses-clear-cell (car rowcol) (cdr rowcol))))))
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; Input of cell-printer functions
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; Input of cell-printer functions
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defun ses-read-printer (prompt default)
|
||||
"Common code for `ses-read-cell-printer', `ses-read-column-printer', and `ses-read-default-printer'.
|
||||
|
|
@ -2009,7 +2002,7 @@ latter two cases, the function's result should be either a string (will be
|
|||
right-justified) or a list of one string (will be left-justified)."
|
||||
(interactive
|
||||
(let ((default t)
|
||||
prompt x)
|
||||
x)
|
||||
(ses-check-curcell 'range)
|
||||
;;Default is none if not all cells in range have same printer
|
||||
(catch 'ses-read-cell-printer
|
||||
|
|
@ -2059,9 +2052,9 @@ right-justified) or a list of one string (will be left-justified)."
|
|||
(ses-reprint-all t)))
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; Spreadsheet size adjustments
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; Spreadsheet size adjustments
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defun ses-insert-row (count)
|
||||
"Insert a new row before the current one. With prefix, insert COUNT rows
|
||||
|
|
@ -2085,7 +2078,7 @@ before current one."
|
|||
;;the call to ses-relocate-all.
|
||||
(setq newrow (make-vector ses--numcols nil))
|
||||
(dotimes (col ses--numcols)
|
||||
(aset newrow col (make-vector ses-cell-size nil)))
|
||||
(aset newrow col (ses-make-cell)))
|
||||
(setq ses--cells (ses-vector-insert ses--cells row newrow))
|
||||
(push `(ses-vector-delete ses--cells ,row 1) buffer-undo-list)
|
||||
(insert ses--blank-line))
|
||||
|
|
@ -2122,8 +2115,7 @@ current one."
|
|||
(or (> count 0) (signal 'args-out-of-range nil))
|
||||
(let ((inhibit-quit t)
|
||||
(inhibit-read-only t)
|
||||
(row (car (ses-sym-rowcol ses--curcell)))
|
||||
pos)
|
||||
(row (car (ses-sym-rowcol ses--curcell))))
|
||||
(setq count (min count (- ses--numrows row)))
|
||||
(ses-begin-change)
|
||||
(ses-set-parameter 'ses--numrows (- ses--numrows count))
|
||||
|
|
@ -2149,10 +2141,10 @@ current one."
|
|||
(ses-jump-safe ses--curcell))
|
||||
|
||||
(defun ses-insert-column (count &optional col width printer)
|
||||
"Insert a new column before COL (default is the current one). With prefix,
|
||||
insert COUNT columns before current one. If COL is specified, the new
|
||||
column(s) get the specified WIDTH and PRINTER (otherwise they're taken from
|
||||
the current column)."
|
||||
"Insert a new column before COL (default is the current one).
|
||||
With prefix, insert COUNT columns before current one.
|
||||
If COL is specified, the new column(s) get the specified WIDTH and PRINTER
|
||||
\(otherwise they're taken from the current column)."
|
||||
(interactive "*p")
|
||||
(ses-check-curcell)
|
||||
(or (> count 0) (signal 'args-out-of-range nil))
|
||||
|
|
@ -2181,8 +2173,7 @@ the current column)."
|
|||
(setq has-skip t))
|
||||
(ses-aset-with-undo ses--cells row
|
||||
(ses-vector-insert (aref ses--cells row)
|
||||
col
|
||||
(make-vector ses-cell-size nil)))
|
||||
col (ses-make-cell)))
|
||||
;;Insert empty lines in cell data area (will be replaced by
|
||||
;;ses-relocate-all)
|
||||
(ses-goto-data row col)
|
||||
|
|
@ -2217,7 +2208,7 @@ from the current one."
|
|||
(inhibit-read-only t)
|
||||
(rowcol (ses-sym-rowcol ses--curcell))
|
||||
(width 0)
|
||||
new col origrow has-skip)
|
||||
col origrow has-skip)
|
||||
(setq origrow (car rowcol)
|
||||
col (cdr rowcol)
|
||||
count (min count (- ses--numcols col)))
|
||||
|
|
@ -2320,9 +2311,9 @@ inserts a new row if at bottom of print area. Repeat COUNT times."
|
|||
(ses-print-cell-new-width row col))))
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; Cut and paste, import and export
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; Cut and paste, import and export
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defadvice copy-region-as-kill (around ses-copy-region-as-kill
|
||||
activate preactivate)
|
||||
|
|
@ -2654,9 +2645,9 @@ WANT-FORMULAS is non-nil. Newlines and tabs in the export text are escaped."
|
|||
(kill-new result)))
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; Other user commands
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; Other user commands
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defun ses-unset-header-row ()
|
||||
"Select the default header row."
|
||||
|
|
@ -2829,9 +2820,9 @@ highlighted range in the spreadsheet."
|
|||
(ses-insert-ses-range))
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; Checking formulas for safety
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; Checking formulas for safety
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defun ses-safe-printer (printer)
|
||||
"Returns PRINTER if safe, or the substitute printer `ses-unsafe' otherwise."
|
||||
|
|
@ -2862,9 +2853,9 @@ is safe or user allows execution anyway. Always returns t if
|
|||
formula checker)))))
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; Standard formulas
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; Standard formulas
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
(defmacro ses-range (from to)
|
||||
"Expands to a list of cell-symbols for the range. The range automatically
|
||||
|
|
@ -2880,8 +2871,8 @@ alias for this macro!"
|
|||
"Return ARGS reversed, with the blank elements (nil and *skip*) removed."
|
||||
(let (result)
|
||||
(dolist (cur args)
|
||||
(and cur (not (eq cur '*skip*))
|
||||
(push cur result)))
|
||||
(unless (memq cur '(nil *skip*))
|
||||
(push cur result)))
|
||||
result))
|
||||
|
||||
(defun ses+ (&rest args)
|
||||
|
|
@ -2916,9 +2907,9 @@ TEST is evaluated."
|
|||
(put x 'side-effect-free t))
|
||||
|
||||
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;;; Standard print functions
|
||||
;;;----------------------------------------------------------------------------
|
||||
;;----------------------------------------------------------------------------
|
||||
;; Standard print functions
|
||||
;;----------------------------------------------------------------------------
|
||||
|
||||
;;These functions use the variables 'row' and 'col' that are
|
||||
;;dynamically bound by ses-print-cell. We define these varables at
|
||||
|
|
@ -2982,5 +2973,5 @@ current column and continues until the next nonblank column."
|
|||
|
||||
(provide 'ses)
|
||||
|
||||
;;; arch-tag: 88c1ccf0-4293-4824-8c5d-0757b52217f3
|
||||
;; ses.el ends here.
|
||||
;; arch-tag: 88c1ccf0-4293-4824-8c5d-0757b52217f3
|
||||
;;; ses.el ends here
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue