emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] Changes to emacs/lisp/ses.el,v


From: Jonathan Yavner
Subject: [Emacs-diffs] Changes to emacs/lisp/ses.el,v
Date: Thu, 15 May 2008 19:24:30 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Jonathan Yavner <JYavner>       08/05/15 19:24:28

Index: ses.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/ses.el,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -b -r1.38 -r1.39
--- ses.el      6 May 2008 07:57:49 -0000       1.38
+++ ses.el      15 May 2008 19:24:27 -0000      1.39
@@ -726,11 +726,18 @@
 ;;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))
+  (let ((inhibit-point-motion-hooks t)
+       (n 0))
     (goto-char (point-min))
     (forward-line row)
+    ;; calculate column position
     (dotimes (c col)
-      (forward-char (1+ (ses-col-width c))))))
+      (setq n (+ n (ses-col-width c) 1)))
+    ;; move to the position
+    (and (> n (move-to-column n))
+        (eolp)
+        ;; move point to the bol of next line (for TAB at the last cell)
+        (forward-char))))
 
 (defun ses-set-curcell ()
   "Sets `ses--curcell' to the current cell symbol, or a cons (BEG,END) for a
@@ -806,7 +813,7 @@
            (setq sig ses-call-printer-return))))
       ;;Adjust print width to match column width
       (let ((width (ses-col-width col))
-           (len   (length text)))
+           (len   (string-width text)))
        (cond
         ((< len width)
          ;;Fill field to length with spaces
@@ -834,7 +841,7 @@
              (setq sig `(error "Too wide" ,text))
              (cond
               ((stringp value)
-               (setq text (substring text 0 maxwidth)))
+               (setq text (truncate-string-to-width text maxwidth 0 ?\s)))
               ((and (numberp value)
                     (string-match "\\.[0-9]+" text)
                     (>= 0 (setq width
@@ -855,7 +862,11 @@
       ;;Install the printed result.  This is not interruptible.
       (let ((inhibit-read-only t)
            (inhibit-quit      t))
-       (delete-char (1+ (length text)))
+       (let ((inhibit-point-motion-hooks t))
+         (delete-region (point) (progn
+                                  (move-to-column (+ (current-column)
+                                                     (string-width text)))
+                                  (1+ (point)))))
        ;;We use concat instead of inserting separate strings in order to
        ;;reduce the number of cells in the undo list.
        (setq x (concat text (if (< maxcol ses--numcols) " " "\n")))
@@ -1443,6 +1454,7 @@
   (interactive)
   (let ((end (point-min))
        (inhibit-read-only t)
+       (inhibit-point-motion-hooks t)
        (was-modified (buffer-modified-p))
        pos sym)
     (ses-goto-data 0 0) ;;Include marker between print-area and data-area
@@ -1466,7 +1478,14 @@
                    (eq (ses-cell-value row (1+ col)) '*skip*))
          (setq end (+ end (ses-col-width col) 1)
                col (1+ col)))
-       (setq end (+ end (ses-col-width col) 1))
+       (setq end (save-excursion
+                   (goto-char pos)
+                   (move-to-column (+ (current-column) (- end pos)
+                                      (ses-col-width col)))
+                   (if (eolp)
+                       (+ end (ses-col-width col) 1)
+                     (forward-char)
+                     (point))))
        (put-text-property pos end 'intangible sym)))
     ;;Adding these properties did not actually alter the text
     (unless was-modified
@@ -1519,7 +1538,10 @@
          ;;SES deliberately puts lots of trailing whitespace in its buffer
          show-trailing-whitespace nil
          ;;Cell ranges do not work reasonably without this
-         transient-mark-mode    t)
+         transient-mark-mode    t
+         ;;not to use tab characters for safe
+         ;;(tabs may do bad for column calculation)
+         indent-tabs-mode       nil)
     (1value (add-hook 'change-major-mode-hook 'ses-cleanup nil t))
     (1value (add-hook 'before-revert-hook 'ses-cleanup nil t))
     (setq ses--curcell         nil
@@ -2938,7 +2960,8 @@
     (setq value (ses-call-printer printer value))
     (dotimes (x span)
       (setq width (+ width 1 (ses-col-width (+ col span (- x))))))
-    (setq width (- width (length value)))
+    ;; set column width
+    (setq width (- width (string-width value)))
     (if (<= width 0)
        value ;Too large for field, anyway
       (setq half (make-string (/ width 2) fill))




reply via email to

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