Show
Ignore:
Timestamp:
05/27/06 10:35:24 (2 years ago)
Author:
miyoshi
Message:

Sync up with Emacs CVS HEAD.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lisp/ses.el

    r4020 r4091  
    400400  "Load the header row from the spreadsheet file and checks it 
    401401for safety.  This is a macro to prevent propagate-on-load viruses." 
    402   (or (and (wholenump row) (< row ses--numrows)) 
     402  (or (and (wholenump row) (or (zerop ses--numrows) (< row ses--numrows))) 
    403403      (error "Bad header-row")) 
    404404  (setq ses--header-row row) 
     
    941941(defun ses-narrowed-p () (/= (- (point-max) (point-min)) (buffer-size))) 
    942942 
     943(defun ses-widen () 
     944  "Turn off narrowing, to be reenabled at end of command loop." 
     945  (if (ses-narrowed-p) 
     946      (setq ses--deferred-narrow t)) 
     947  (widen)) 
     948 
    943949(defun ses-goto-data (def &optional col) 
    944950  "Move point to data area for (DEF,COL).  If DEF is a row 
     
    946952is one of the symbols ses--col-widths, ses--col-printers, 
    947953ses--default-printer, ses--numrows, or ses--numcols." 
    948   (if (ses-narrowed-p) 
    949       (setq ses--deferred-narrow t)) 
    950   (widen) 
     954  (ses-widen) 
    951955  (let ((inhibit-point-motion-hooks t)) ;In case intangible attrs are wrong 
    952956    (goto-char (point-min)) 
     
    967971    ;;numcols in case one of them is being changed. 
    968972    (ses-goto-data def) 
    969     (if elem 
    970         (ses-aset-with-undo (symbol-value def) elem value) 
    971       (ses-set-with-undo def value)) 
    972973    (let ((inhibit-read-only t) 
    973974          (fmt (plist-get '(ses--col-widths      "(ses-column-widths %S)" 
     
    978979                            ses--numrows         " %S ;numrows" 
    979980                            ses--numcols         " %S ;numcols") 
    980                           def))) 
    981       (delete-region (point) (line-end-position)) 
    982       (insert (format fmt (symbol-value def)))))) 
     981                          def)) 
     982          oldval) 
     983      (if elem 
     984          (progn 
     985            (setq oldval (aref (symbol-value def) elem)) 
     986            (aset (symbol-value def) elem value)) 
     987        (setq oldval (symbol-value def)) 
     988        (set def value)) 
     989      ;;Special undo since it's outside the narrowed buffer 
     990      (let (buffer-undo-list) 
     991        (delete-region (point) (line-end-position)) 
     992        (insert (format fmt (symbol-value def)))) 
     993      (push `(apply ses-set-parameter ,def ,oldval ,elem) buffer-undo-list)))) 
     994 
    983995 
    984996(defun ses-write-cells () 
     
    12791291;;---------------------------------------------------------------------------- 
    12801292 
    1281 ;; This should be unnecessary, because the feature is now built in. 
    1282  
    1283 (defadvice undo-more (around ses-undo-more activate preactivate) 
    1284   "For SES mode, allow undo outside of narrowed buffer range." 
    1285   (if (not (eq major-mode 'ses-mode)) 
    1286       ad-do-it 
    1287     ;;Here is some extra code for SES mode. 
    1288     (setq ses--deferred-narrow 
    1289           (or ses--deferred-narrow (ses-narrowed-p))) 
    1290     (widen) 
    1291     (condition-case x 
    1292         ad-do-it 
    1293       (error 
    1294        ;;Restore narrow if appropriate 
    1295        (ses-command-hook) 
    1296        (signal (car x) (cdr x)))))) 
    1297  
    12981293(defun ses-begin-change () 
    12991294  "For undo, remember point before we start changing hidden stuff." 
     
    13041299(defun ses-set-with-undo (sym newval) 
    13051300  "Like set, but undoable.  Result is t if value has changed." 
    1306   ;;We avoid adding redundant entries to the undo list, but this is 
     1301  ;;We try to avoid adding redundant entries to the undo list, but this is 
    13071302  ;;unavoidable for strings because equal ignores text properties and there's 
    13081303  ;;no easy way to get the whole property list to see if it's different! 
     
    13471342             (numberp (car params)) 
    13481343             (numberp (cadr params)) 
    1349              (> (cadr params) 0) 
     1344             (>= (cadr params) 0) 
    13501345             (numberp (nth 2 params)) 
    13511346             (> (nth 2 params) 0)) 
     
    15691564            (setq ses--deferred-recalc nil) 
    15701565            (ses-update-cells old))) 
    1571         (if ses--deferred-write 
    1572             ;;We don't reset the deferred list before starting -- the most 
    1573             ;;likely error is keyboard-quit, and we do want to keep trying 
    1574             ;;these writes after a quit. 
    1575             (ses-write-cells)) 
     1566        (when ses--deferred-write 
     1567          ;;We don't reset the deferred list before starting -- the most 
     1568          ;;likely error is keyboard-quit, and we do want to keep trying 
     1569          ;;these writes after a quit. 
     1570          (ses-write-cells) 
     1571          (push '(apply ses-widen) buffer-undo-list)) 
    15761572        (when ses--deferred-narrow 
    15771573          ;;We're not allowed to narrow the buffer until after-find-file has 
     
    17951791                              (ses-cell-references yrow ycol))))))) 
    17961792  ;;Delete everything and reconstruct basic data area 
    1797   (if (ses-narrowed-p) 
    1798       (setq ses--deferred-narrow t)) 
    1799   (widen) 
     1793  (ses-widen) 
    18001794  (let ((inhibit-read-only t)) 
    18011795    (goto-char (point-max)) 
     
    18781872            t                         ;Convert to Lisp object 
    18791873            'ses-read-cell-history 
    1880             (prin1-to-string curval))))) 
     1874            (prin1-to-string (if (eq (car-safe curval) 'ses-safe-formula) 
     1875                                 (cadr curval) 
     1876                               curval)))))) 
    18811877  (when (ses-edit-cell row col newval) 
    18821878    (ses-command-hook) ;Update cell widths before movement 
     
    20742070  ;;Reconstruct text attributes 
    20752071  (ses-setup) 
     2072  ;;Prepare for undo 
     2073  (push '(apply ses-widen) buffer-undo-list) 
    20762074  ;;Return to current cell 
    20772075  (if ses--curcell 
     
    21102108  ;;Reconstruct attributes 
    21112109  (ses-setup) 
     2110  ;;Prepare for undo 
     2111  (push '(apply ses-widen) buffer-undo-list) 
    21122112  (ses-jump-safe ses--curcell)) 
    21132113 
     
    26442644      (error "Invalid header-row")) 
    26452645  (ses-begin-change) 
    2646   (ses-set-parameter 'ses--header-row row) 
     2646  (let ((oldval ses--header-row)) 
     2647    (let (buffer-undo-list) 
     2648      (ses-set-parameter 'ses--header-row row)) 
     2649    (push `(apply ses-set-header-row ,oldval) buffer-undo-list)) 
    26472650  (ses-reset-header-string)) 
    26482651