changeset 111515:dd011cba2fbf

* lisp/skeleton.el (skeleton-newline): New function. (skeleton-internal-1): Use it. (skeleton-read): Don't use `newline' since it may strip trailing space.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 12 Nov 2010 08:33:44 -0500
parents e21371bab717
children 80d61d4081a0
files lisp/ChangeLog lisp/skeleton.el
diffstat 2 files changed, 21 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Fri Nov 12 08:32:02 2010 -0500
+++ b/lisp/ChangeLog	Fri Nov 12 08:33:44 2010 -0500
@@ -1,5 +1,10 @@
 2010-11-12  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+	* skeleton.el (skeleton-read): Don't use `newline' since it may strip
+	trailing space.
+	(skeleton-newline): New function.
+	(skeleton-internal-1): Use it.
+
 	* simple.el (open-line): `newline' may strip trailing space.
 
 2010-11-12  Kevin Ryde  <user42@zip.com.au>
--- a/lisp/skeleton.el	Fri Nov 12 08:32:02 2010 -0500
+++ b/lisp/skeleton.el	Fri Nov 12 08:33:44 2010 -0500
@@ -299,7 +299,10 @@
 	(eolp (eolp)))
     ;; since Emacs doesn't show main window's cursor, do something noticeable
     (or eolp
-	(open-line 1))
+        ;; We used open-line before, but that can do a lot more than we want,
+	;; since it runs self-insert-command.  E.g. it may remove spaces
+	;; before point.
+        (save-excursion (insert "\n")))
     (unwind-protect
 	(setq prompt (if (stringp prompt)
 			 (read-string (format prompt skeleton-subprompt)
@@ -352,6 +355,16 @@
       (signal 'quit 'recursive)
     recursive))
 
+(defun skeleton-newline ()
+  (if (or (eq (point) skeleton-point)
+          (eq (point) (car skeleton-positions)))
+      ;; If point is recorded, avoid `newline' since it may do things like
+      ;; strip trailing spaces, and since recorded points are commonly placed
+      ;; right after a trailing space, calling `newline' can destroy the
+      ;; position and renders the recorded position incorrect.
+      (insert "\n")
+    (newline)))
+
 (defun skeleton-internal-1 (element &optional literal recursive)
   (cond
    ((or (integerp element) (stringp element))
@@ -379,13 +392,13 @@
 	(if pos (indent-according-to-mode)))
        (skeleton-newline-indent-rigidly
 	(let ((pt (point)))
-	  (newline)
+	  (skeleton-newline)
 	  (indent-to (save-excursion
 		       (goto-char pt)
 		       (if pos (indent-according-to-mode))
 		       (current-indentation)))))
        (t (if pos (reindent-then-newline-and-indent)
-	    (newline)
+	    (skeleton-newline)
 	    (indent-according-to-mode))))))
    ((eq element '>)
     (if (and skeleton-regions (eq (nth 1 skeleton-il) '_))