Changeset 4091 for trunk/lisp/ses.el
- Timestamp:
- 05/27/06 10:35:24 (2 years ago)
- Files:
-
- trunk/lisp/ses.el (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lisp/ses.el
r4020 r4091 400 400 "Load the header row from the spreadsheet file and checks it 401 401 for 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))) 403 403 (error "Bad header-row")) 404 404 (setq ses--header-row row) … … 941 941 (defun ses-narrowed-p () (/= (- (point-max) (point-min)) (buffer-size))) 942 942 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 943 949 (defun ses-goto-data (def &optional col) 944 950 "Move point to data area for (DEF,COL). If DEF is a row … … 946 952 is one of the symbols ses--col-widths, ses--col-printers, 947 953 ses--default-printer, ses--numrows, or ses--numcols." 948 (if (ses-narrowed-p) 949 (setq ses--deferred-narrow t)) 950 (widen) 954 (ses-widen) 951 955 (let ((inhibit-point-motion-hooks t)) ;In case intangible attrs are wrong 952 956 (goto-char (point-min)) … … 967 971 ;;numcols in case one of them is being changed. 968 972 (ses-goto-data def) 969 (if elem970 (ses-aset-with-undo (symbol-value def) elem value)971 (ses-set-with-undo def value))972 973 (let ((inhibit-read-only t) 973 974 (fmt (plist-get '(ses--col-widths "(ses-column-widths %S)" … … 978 979 ses--numrows " %S ;numrows" 979 980 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 983 995 984 996 (defun ses-write-cells () … … 1279 1291 ;;---------------------------------------------------------------------------- 1280 1292 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-it1287 ;;Here is some extra code for SES mode.1288 (setq ses--deferred-narrow1289 (or ses--deferred-narrow (ses-narrowed-p)))1290 (widen)1291 (condition-case x1292 ad-do-it1293 (error1294 ;;Restore narrow if appropriate1295 (ses-command-hook)1296 (signal (car x) (cdr x))))))1297 1298 1293 (defun ses-begin-change () 1299 1294 "For undo, remember point before we start changing hidden stuff." … … 1304 1299 (defun ses-set-with-undo (sym newval) 1305 1300 "Like set, but undoable. Result is t if value has changed." 1306 ;;We avoid adding redundant entries to the undo list, but this is1301 ;;We try to avoid adding redundant entries to the undo list, but this is 1307 1302 ;;unavoidable for strings because equal ignores text properties and there's 1308 1303 ;;no easy way to get the whole property list to see if it's different! … … 1347 1342 (numberp (car params)) 1348 1343 (numberp (cadr params)) 1349 (> (cadr params) 0)1344 (>= (cadr params) 0) 1350 1345 (numberp (nth 2 params)) 1351 1346 (> (nth 2 params) 0)) … … 1569 1564 (setq ses--deferred-recalc nil) 1570 1565 (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)) 1576 1572 (when ses--deferred-narrow 1577 1573 ;;We're not allowed to narrow the buffer until after-find-file has … … 1795 1791 (ses-cell-references yrow ycol))))))) 1796 1792 ;;Delete everything and reconstruct basic data area 1797 (if (ses-narrowed-p) 1798 (setq ses--deferred-narrow t)) 1799 (widen) 1793 (ses-widen) 1800 1794 (let ((inhibit-read-only t)) 1801 1795 (goto-char (point-max)) … … 1878 1872 t ;Convert to Lisp object 1879 1873 '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)))))) 1881 1877 (when (ses-edit-cell row col newval) 1882 1878 (ses-command-hook) ;Update cell widths before movement … … 2074 2070 ;;Reconstruct text attributes 2075 2071 (ses-setup) 2072 ;;Prepare for undo 2073 (push '(apply ses-widen) buffer-undo-list) 2076 2074 ;;Return to current cell 2077 2075 (if ses--curcell … … 2110 2108 ;;Reconstruct attributes 2111 2109 (ses-setup) 2110 ;;Prepare for undo 2111 (push '(apply ses-widen) buffer-undo-list) 2112 2112 (ses-jump-safe ses--curcell)) 2113 2113 … … 2644 2644 (error "Invalid header-row")) 2645 2645 (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)) 2647 2650 (ses-reset-header-string)) 2648 2651
