# HG changeset patch # User Stefan Monnier # Date 1289568824 18000 # Node ID dd011cba2fbf2ac51c17d4dccb0d22706787ffc6 # Parent e21371bab7173d9a1edc19a4918b5d76b0fa3003 * lisp/skeleton.el (skeleton-newline): New function. (skeleton-internal-1): Use it. (skeleton-read): Don't use `newline' since it may strip trailing space. diff -r e21371bab717 -r dd011cba2fbf lisp/ChangeLog --- 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 + * 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 diff -r e21371bab717 -r dd011cba2fbf lisp/skeleton.el --- 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) '_))