[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: comment-dwim bug
From: |
Dan Nicolaescu |
Subject: |
Re: comment-dwim bug |
Date: |
Mon, 30 Aug 2004 15:20:10 -0700 |
Stefan Monnier <address@hidden> writes:
> >> The person who used to work on that code is Stefan,
> >> but he is busy nowadays and we are waiting for him to fix
> >> several bugs. Could you possibly investigate and fix this one?
>
> > Sure.
>
> Cool, thanks, your analysis makes perfect sense. But the binding of
> comment-use-global-state should be in uncomment-region rather than in
> comment-dwim.
OK, here's an updated patch. Please apply.
2004-08-30 Dan Nicolaescu <address@hidden>
* newcomment.el (uncomment-region): Bind comment-use-global-state to
nil.
Index: newcomment.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/newcomment.el,v
retrieving revision 1.77
diff -c -3 -p -r1.77 newcomment.el
*** newcomment.el 17 Jun 2004 00:02:13 -0000 1.77
--- newcomment.el 30 Aug 2004 22:19:54 -0000
*************** comment markers."
*** 710,763 ****
(interactive "*r\nP")
(comment-normalize-vars)
(when (> beg end) (setq beg (prog1 end (setq end beg))))
! (save-excursion
! (if uncomment-region-function
! (funcall uncomment-region-function beg end arg)
! (goto-char beg)
! (setq end (copy-marker end))
! (let* ((numarg (prefix-numeric-value arg))
! (ccs comment-continue)
! (srei (comment-padright ccs 're))
! (csre (comment-padright comment-start 're))
! (sre (and srei (concat "^\\s-*?\\(" srei "\\)")))
! spt)
! (while (and (< (point) end)
! (setq spt (comment-search-forward end t)))
! (let ((ipt (point))
! ;; Find the end of the comment.
! (ept (progn
! (goto-char spt)
! (unless (or (comment-forward)
! ;; Allow non-terminated comments.
! (eobp))
! (error "Can't find the comment end"))
! (point)))
! (box nil)
! (box-equal nil)) ;Whether we might be using `=' for boxes.
! (save-restriction
! (narrow-to-region spt ept)
!
! ;; Remove the comment-start.
! (goto-char ipt)
! (skip-syntax-backward " ")
! ;; A box-comment starts with a looong comment-start marker.
! (when (and (or (and (= (- (point) (point-min)) 1)
! (setq box-equal t)
! (looking-at "=\\{7\\}")
! (not (eq (char-before (point-max)) ?\n))
! (skip-chars-forward "="))
! (> (- (point) (point-min) (length comment-start)) 7))
! (> (count-lines (point-min) (point-max)) 2))
! (setq box t))
! ;; Skip the padding. Padding can come from comment-padding and/or
! ;; from comment-start, so we first check comment-start.
! (if (or (save-excursion (goto-char (point-min)) (looking-at csre))
! (looking-at (regexp-quote comment-padding)))
! (goto-char (match-end 0)))
! (when (and sre (looking-at (concat "\\s-*\n\\s-*" srei)))
! (goto-char (match-end 0)))
! (if (null arg) (delete-region (point-min) (point))
! (skip-syntax-backward " ")
(delete-char (- numarg))
(unless (or (bobp)
(save-excursion (goto-char (point-min))
--- 710,768 ----
(interactive "*r\nP")
(comment-normalize-vars)
(when (> beg end) (setq beg (prog1 end (setq end beg))))
!
! ;; Bind `comment-use-global-state' to nil. While uncommenting a
! ;; (which works a line at a time) region a comment can appear to be
! ;; included in a mult-line string, but it is actually not.
! (let ((comment-use-global-state nil))
! (save-excursion
! (if uncomment-region-function
! (funcall uncomment-region-function beg end arg)
! (goto-char beg)
! (setq end (copy-marker end))
! (let* ((numarg (prefix-numeric-value arg))
! (ccs comment-continue)
! (srei (comment-padright ccs 're))
! (csre (comment-padright comment-start 're))
! (sre (and srei (concat "^\\s-*?\\(" srei "\\)")))
! spt)
! (while (and (< (point) end)
! (setq spt (comment-search-forward end t)))
! (let ((ipt (point))
! ;; Find the end of the comment.
! (ept (progn
! (goto-char spt)
! (unless (or (comment-forward)
! ;; Allow non-terminated comments.
! (eobp))
! (error "Can't find the comment end"))
! (point)))
! (box nil)
! (box-equal nil)) ;Whether we might be using `=' for boxes.
! (save-restriction
! (narrow-to-region spt ept)
!
! ;; Remove the comment-start.
! (goto-char ipt)
! (skip-syntax-backward " ")
! ;; A box-comment starts with a looong comment-start marker.
! (when (and (or (and (= (- (point) (point-min)) 1)
! (setq box-equal t)
! (looking-at "=\\{7\\}")
! (not (eq (char-before (point-max)) ?\n))
! (skip-chars-forward "="))
! (> (- (point) (point-min) (length
comment-start)) 7))
! (> (count-lines (point-min) (point-max)) 2))
! (setq box t))
! ;; Skip the padding. Padding can come from comment-padding
and/or
! ;; from comment-start, so we first check comment-start.
! (if (or (save-excursion (goto-char (point-min)) (looking-at
csre))
! (looking-at (regexp-quote comment-padding)))
! (goto-char (match-end 0)))
! (when (and sre (looking-at (concat "\\s-*\n\\s-*" srei)))
! (goto-char (match-end 0)))
! (if (null arg) (delete-region (point-min) (point))
! (skip-syntax-backward " ")
(delete-char (- numarg))
(unless (or (bobp)
(save-excursion (goto-char (point-min))
*************** comment markers."
*** 765,771 ****
;; If there's something left but it doesn't look like
;; a comment-start any more, just remove it.
(delete-region (point-min) (point))))
!
;; Remove the end-comment (and leading padding and such).
(goto-char (point-max)) (comment-enter-backward)
;; Check for special `=' used sometimes in comment-box.
--- 770,776 ----
;; If there's something left but it doesn't look like
;; a comment-start any more, just remove it.
(delete-region (point-min) (point))))
!
;; Remove the end-comment (and leading padding and such).
(goto-char (point-max)) (comment-enter-backward)
;; Check for special `=' used sometimes in comment-box.
*************** comment markers."
*** 803,809 ****
(replace-match "" t t nil (if (match-end 2) 2 1)))))
;; Go to the end for the next comment.
(goto-char (point-max)))))))
! (set-marker end nil)))
(defun comment-make-extra-lines (cs ce ccs cce min-indent max-indent
&optional block)
"Make the leading and trailing extra lines.
--- 808,814 ----
(replace-match "" t t nil (if (match-end 2) 2 1)))))
;; Go to the end for the next comment.
(goto-char (point-max)))))))
! (set-marker end nil))))
(defun comment-make-extra-lines (cs ce ccs cce min-indent max-indent
&optional block)
"Make the leading and trailing extra lines.