changeset 52338:ea32bf7cfca1

(c-electric-brace): Work around for a misfeature in `expand-abbrev' which caused electric keywords like "else" to disappear if an open brace was typed directly afterwards.
author Martin Stjernholm <mast@lysator.liu.se>
date Tue, 26 Aug 2003 11:50:03 +0000
parents 9bdd2608958e
children 721da86ff178
files lisp/progmodes/cc-cmds.el
diffstat 1 files changed, 12 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/progmodes/cc-cmds.el	Tue Aug 26 08:58:11 2003 +0000
+++ b/lisp/progmodes/cc-cmds.el	Tue Aug 26 11:50:03 2003 +0000
@@ -498,10 +498,19 @@
 	(when (save-excursion
 		(skip-chars-backward " \t")
 		(not (bolp)))
+	  (c-newline-and-indent)
+	  ;; Set markers around the newline and indention inserted
+	  ;; above.  We insert the start marker here and not before
+	  ;; the call to kludge around a misfeature in expand-abbrev:
+	  ;; If the line contains e.g. "else" then expand-abbrev will
+	  ;; be called when c-newline-and-indent inserts the newline.
+	  ;; That function first removes the abbrev "else" and then
+	  ;; inserts the expansion, which is an identical "else" in
+	  ;; this case.  So the marker that we put after "else" would
+	  ;; end up before it.
 	  (setq delete-temp-newline
-		(list (point-marker)))
-	  (c-newline-and-indent)
-	  (setcdr delete-temp-newline (point-marker)))
+		(cons (copy-marker (c-point 'eopl) t)
+		      (point-marker))))
 	(unwind-protect
 	    (progn
 	      (if (eq last-command-char ?{)