bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#385: [PATCH] comment-indent doesn't respect comment-indent-function


From: Christopher J. Madsen
Subject: bug#385: [PATCH] comment-indent doesn't respect comment-indent-function
Date: 11 Jun 2008 17:11:02 -0000

Please describe exactly what actions triggered the bug
and the precise symptoms of the bug:

It appears that comment-indent changed in 22.1.  It gained some code
to attempt to align the comment with those on surrounding lines.
Unfortunately, this made it impossible to do certain things with
comment-indent-function.

For example, I had a custom indent function that placed comments
immediately after a closing brace.  However, in Emacs 22, I'd see this:

  while (1) {
    while (2) {

    } # end 2 <-- this comment placed correctly
  }   # end 1 <-- this comment was aligned with the previous one

instead of this:

  while (1) {
    while (2) {

    } # end 2
  } # end 1 <-- here's where comment-indent-function placed it

On the other hand, I do like the idea of automatically aligning
comments.  I had code in my custom indent functions to do that, but it
would be nice if I didn't need to handle that in every indent
function.

I think what's needed is a way for comment-indent-function to
distinguish between "Here's where the comment goes, and that's final"
and "I suggest this position, but make it blend in with the
neighborhood".  Ideally, this would be backwards-compatible with older
versions of Emacs.

Here's a patch I came up with to provide that.  If
comment-indent-function sets comment-indent-fixed to non-nil, then the
return value will be used as-is.  Otherwise, it behaves like Emacs
22.2 did.

Perhaps the sense should be reversed, and it should always respect the
value of comment-indent-function unless told it's ok to adjust it.


*** orig/newcomment.el  Fri Mar 07 18:01:12 2008
--- new/newcomment.el   Wed Jun 11 11:13:24 2008
*************** (defvar comment-indent-function 'comment
*** 135,140 ****
--- 135,143 ----
  This function is called with no args with point at the beginning of
  the comment's starting delimiter and should return either the desired
  column indentation or nil.
+ The returned value may be adjusted by `comment-choose-indent'.
+ To prevent that, the function should set `comment-indent-fixed'
+ to a non-nil value.
  If nil is returned, indentation is delegated to `indent-according-to-mode'.")
  
  ;;;###autoload
*************** (defun comment-indent (&optional continu
*** 585,591 ****
      (beginning-of-line)
      (let* ((eolpos (line-end-position))
           (begpos (comment-search-forward eolpos t))
!          cpos indent)
        ;; An existing comment?
        (if begpos
          (progn
--- 588,594 ----
      (beginning-of-line)
      (let* ((eolpos (line-end-position))
           (begpos (comment-search-forward eolpos t))
!          cpos indent comment-indent-fixed)
        ;; An existing comment?
        (if begpos
          (progn
*************** (defun comment-indent (&optional continu
*** 622,636 ****
        (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)))
--- 625,640 ----
        (if (not indent)
          ;; comment-indent-function refuses: delegate to line-indent.
          (indent-according-to-mode)
!         (unless comment-indent-fixed
!           ;; 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)))


In GNU Emacs 22.2.1 (i386-mingw-nt5.1.2600)
 of 2008-03-26 on RELEASE
Windowing system distributor `Microsoft Corp.', version 5.1.2600
configured using `configure --with-gcc (3.4)'

-- 
Chris Madsen                                           cjm cjmweb.net
  --------------------  http://www.cjmweb.net  --------------------








reply via email to

[Prev in Thread] Current Thread [Next in Thread]