]> git.eshelyaron.com Git - emacs.git/commitdiff
(skeleton-internal-1): Really make sure the first line of
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 22 Dec 2000 22:56:36 +0000 (22:56 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 22 Dec 2000 22:56:36 +0000 (22:56 +0000)
the region is also re-indented.
(skeleton-end-newline): New var.
(skeleton-end-hook): Use it.

lisp/ChangeLog
lisp/skeleton.el

index f294d1ff27f8366c479da00eac6307f8365f18eb..dfb64e4f158509c858718445bb79d1fa9bb6f489 100644 (file)
@@ -2,6 +2,8 @@
 
        * skeleton.el (skeleton-internal-1): Make sure the first line of
        the region is also re-indented.
+       (skeleton-end-newline): New var.
+       (skeleton-end-hook): Use it.
 
 2000-12-22  Markus Rost  <markus.rost@mathematik.uni-regensburg.de>
 
index 7e29eb6a32256bf99c3672c00fc043215c7429de..9274c3ca8c94b704e42854c88af51169ad774e8e 100644 (file)
@@ -60,11 +60,16 @@ We will probably delete this variable in a future Emacs version
 unless we get a substantial number of complaints about the auto-wrap
 feature.")
 
+(defvar skeleton-end-newline t
+  "If non-nil, make sure that the skeleton inserted ends with a newline.
+This just influences the way the default `skeleton-end-hook' behaves.")
+
 (defvar skeleton-end-hook
   (lambda ()
-    (or (eolp) (newline-and-indent)))
+    (or (eolp) (not skeleton-end-newline) (newline-and-indent)))
   "Hook called at end of skeleton but before going to point of interest.
-By default this moves out anything following to next line.
+By default this moves out anything following to next line,
+  unless `skeleton-end-newline' is set to nil.
 The variables `v1' and `v2' are still set when calling this.")
 
 
@@ -375,6 +380,9 @@ automatically, and you are prompted to fill in the variable parts.")))
         opoint)
     (or str
        (setq str `(setq str (skeleton-read ',(car skeleton) nil ,recursive))))
+    (when (and (eq (car skeleton) '\n)
+              (save-excursion (beginning-of-line) (looking-at "[ \t]*$")))
+      (setq skeleton (cons '> (cdr skeleton))))
     (while (setq skeleton-modified (eq opoint (point))
                 opoint (point)
                 skeleton (cdr skeleton))
@@ -412,20 +420,17 @@ automatically, and you are prompted to fill in the variable parts.")))
                                      (funcall skeleton-transformation element)
                                    element))))
        ((eq element '\n)               ; actually (eq '\n 'n)
-        (if (and skeleton-regions
-                 (eq (nth 1 skeleton) '_))
-            (progn
-              (or (eolp)
-                  (newline))
-              (indent-region (point) (car skeleton-regions) nil))
-          (if skeleton-newline-indent-rigidly
-              (indent-to (prog1 (current-indentation)
-                           (newline)))
-            (newline)
-            (indent-according-to-mode))))
+        (cond
+         ((and skeleton-regions (eq (nth 1 skeleton) '_))
+          (or (eolp) (newline))
+          (indent-region (line-beginning-position)
+                         (car skeleton-regions) nil))
+         ((and (null (cdr skeleton)) (eolp)) nil)
+         (skeleton-newline-indent-rigidly
+          (indent-to (prog1 (current-indentation) (newline))))
+         (t (newline) (indent-according-to-mode))))
        ((eq element '>)
-        (if (and skeleton-regions
-                 (eq (nth 1 skeleton) '_))
+        (if (and skeleton-regions (eq (nth 1 skeleton) '_))
             (indent-region (line-beginning-position)
                            (car skeleton-regions) nil)
           (indent-according-to-mode)))
@@ -446,7 +451,9 @@ automatically, and you are prompted to fill in the variable parts.")))
         (or skeleton-modified
             (setq skeleton (cdr skeleton))))
        ((eq element '@)
-        (setq skeleton-positions (cons (point) skeleton-positions)))
+        (if skeleton-point
+            (push (point) skeleton-positions)
+          (setq skeleton-point (point))))
        ((eq 'quote (car-safe element))
         (eval (nth 1 element)))
        ((or (stringp (car-safe element))