metz@iam.unibe.ch (Igor Metz) (01/09/90)
several people (including me ..) found a bug in the region commenting code
of c++-mode.el.
The problem was, that commenting/uncommenting a region which begins at point 1
(or ends at (point-last)) caused a infinite loop.
Replace the two defuns in c++-mode.el with the code below.
--------- snip, snip, snip -------------
(defun c++-comment-region ()
"Comment out all lines in a region between mark and current point by
inserting \"// \" (comment-start)in front of each line."
(interactive)
(let* ((m (if (eq (mark) nil) (error "Mark is not set!") (mark)))
(start (if (< (point) m) (point) m))
(end (if (> (point) m) (point) m))
(mymark (copy-marker end)))
(save-excursion
(goto-char start)
(while (< (point) (marker-position mymark))
(beginning-of-line)
(insert comment-start)
(beginning-of-line)
(next-line 1)
))))
(defun c++-uncomment-region ()
"Uncomment all lines in region between mark and current point by deleting
the leading \"// \" from each line, if any."
(interactive)
(let* ((m (if (eq (mark) nil) (error "Mark is not set!") (mark)))
(start (if (< (point) m) (point) m))
(end (if (> (point) m) (point) m))
(mymark (copy-marker end))
(len (length comment-start))
(char (string-to-char comment-start))
)
(save-excursion
(goto-char start)
(while (< (point) (marker-position mymark))
(beginning-of-line)
(if (looking-at (concat " *" comment-start))
(progn
(zap-to-char 1 char)
(delete-char len)))
(beginning-of-line)
(next-line 1)
))))
--------- snip, snip, snip -------------
Igor Metz X400: metz@iam.unibe.ch
Institut fuer Informatik ARPA: metz%iam.unibe.ch@relay.cs.net
und angewandte Mathematik UUCP: ..!uunet!mcsun!iam.unibe.ch!metz
Universitaet Bern Phone: (0041) 31 65 49 90
Switzerland Fax: (0041) 31 65 39 65