changeset 85895:597274bf7123

(comment-indent): Let comment-insert-comment-function, if defined, do all the work of inserting a new comment.
author Glenn Morris <rgm@gnu.org>
date Fri, 02 Nov 2007 08:10:25 +0000
parents cbcf6f4cd4c2
children 3b9c9ca85d1e
files lisp/newcomment.el
diffstat 1 files changed, 39 insertions(+), 38 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/newcomment.el	Fri Nov 02 07:57:55 2007 +0000
+++ b/lisp/newcomment.el	Fri Nov 02 08:10:25 2007 +0000
@@ -599,19 +599,20 @@
     (let* ((eolpos (line-end-position))
 	   (begpos (comment-search-forward eolpos t))
 	   cpos indent)
-      ;; An existing comment?
-      (if begpos
-	  (progn
-	    (if (and (not (looking-at "[\t\n ]"))
-		     (looking-at comment-end-skip))
-		;; The comment is empty and we have skipped all its space
-		;; and landed right before the comment-ender:
-		;; Go back to the middle of the space.
-		(forward-char (/ (skip-chars-backward " \t") -2)))
-	    (setq cpos (point-marker)))
+      (if (and comment-insert-comment-function (not begpos))
+	  ;; If no comment and c-i-c-f is set, let it do everything.
+	  (funcall comment-insert-comment-function)
+	;; An existing comment?
+	(if begpos
+	    (progn
+	      (if (and (not (looking-at "[\t\n ]"))
+		       (looking-at comment-end-skip))
+		  ;; The comment is empty and we have skipped all its space
+		  ;; and landed right before the comment-ender:
+		  ;; Go back to the middle of the space.
+		  (forward-char (/ (skip-chars-backward " \t") -2)))
+	      (setq cpos (point-marker)))
 	  ;; If none, insert one.
-	(if comment-insert-comment-function
-	    (funcall comment-insert-comment-function)
 	  (save-excursion
 	    ;; Some `comment-indent-function's insist on not moving
 	    ;; comments that are in column 0, so we first go to the
@@ -624,32 +625,32 @@
 	    (setq begpos (point))
 	    (insert starter)
 	    (setq cpos (point-marker))
-	    (insert ender))))
-      (goto-char begpos)
-      ;; Compute desired indent.
-      (setq indent (save-excursion (funcall comment-indent-function)))
-      ;; If `indent' is nil and there's code before the comment, we can't
-      ;; use `indent-according-to-mode', so we default to comment-column.
-      (unless (or indent (save-excursion (skip-chars-backward " \t") (bolp)))
-	(setq indent comment-column))
-      (if (not indent)
-	  ;; comment-indent-function refuses: delegate to line-indent.
-	  (indent-according-to-mode)
-	;; If the comment is at the right of code, adjust the indentation.
-	(unless (save-excursion (skip-chars-backward " \t") (bolp))
-          (setq indent (comment-choose-indent indent)))
-	;; Update INDENT to leave at least one space
-	;; after other nonwhite text on the line.
-	(save-excursion
-	  (skip-chars-backward " \t")
-	  (unless (bolp)
-	    (setq indent (max indent (1+ (current-column))))))
-	;; If that's different from comment's current position, change it.
-	(unless (= (current-column) indent)
-	  (delete-region (point) (progn (skip-chars-backward " \t") (point)))
-	  (indent-to indent)))
-      (goto-char cpos)
-      (set-marker cpos nil))))
+	    (insert ender)))
+	(goto-char begpos)
+	;; Compute desired indent.
+	(setq indent (save-excursion (funcall comment-indent-function)))
+	;; If `indent' is nil and there's code before the comment, we can't
+	;; use `indent-according-to-mode', so we default to comment-column.
+	(unless (or indent (save-excursion (skip-chars-backward " \t") (bolp)))
+	  (setq indent comment-column))
+	(if (not indent)
+	    ;; comment-indent-function refuses: delegate to line-indent.
+	    (indent-according-to-mode)
+	  ;; If the comment is at the right of code, adjust the indentation.
+	  (unless (save-excursion (skip-chars-backward " \t") (bolp))
+	    (setq indent (comment-choose-indent indent)))
+	  ;; Update INDENT to leave at least one space
+	  ;; after other nonwhite text on the line.
+	  (save-excursion
+	    (skip-chars-backward " \t")
+	    (unless (bolp)
+	      (setq indent (max indent (1+ (current-column))))))
+	  ;; If that's different from comment's current position, change it.
+	  (unless (= (current-column) indent)
+	    (delete-region (point) (progn (skip-chars-backward " \t") (point)))
+	    (indent-to indent)))
+	(goto-char cpos)
+	(set-marker cpos nil)))))
 
 ;;;###autoload
 (defun comment-set-column (arg)