[Top][All Lists]

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

Re: reindent-then-newline-and-indent doesn't indent properly in emacs 22

From: martin rudalics
Subject: Re: reindent-then-newline-and-indent doesn't indent properly in emacs 22.1
Date: Sat, 13 Oct 2007 10:40:59 +0200
User-agent: Mozilla Thunderbird 1.0 (Windows/20041206)

> reindent-then-newline-and-indent doesn't indent properly.
> The command currently calls delete-horizontal-space after indenting the
> line, which in effect deletes the re-indentation since at that very
> moment the point is at the beginning of the text. If you swap the order
> of the delete-horizontal-space and indent-according-to-mode functions it
> then works as intended, like this :

`delete-horizontal-space' is needed to get rid of whitespace at the
_end_ of the old line, that is, after the position of `point' when you
invoked that command.  If `reindent-then-newline-and-indent' really
deletes whitespace inserted by `indent-according-to-mode' before text on
the old line there is a bug.  Can you give us a practical example where
this happens?

> (defun reindent-then-newline-and-indent ()
>   "Reindent current line, insert newline, then indent the new line.
> Indentation of both lines is done according to the current major mode,
> which means calling the current value of `indent-line-function'.
> In programming language modes, this is the same as TAB.
> In some text modes, where TAB inserts a tab, this indents to the
> column specified by the function `current-left-margin'."
>   (interactive "*")
>   (let ((pos (point)))
>     ;; Be careful to insert the newline before indenting the line.
>     ;; Otherwise, the indentation might be wrong.
>     (newline)
>     (save-excursion
>       (goto-char pos)
>       (delete-horizontal-space t)
>       (indent-according-to-mode))
>     (indent-according-to-mode)))

The problem with this is that the first `indent-according-to-mode' may
insert whitespace at the end of an otherwise empty line.  Try to invoke
your function at the beginning of a non-empty line.

reply via email to

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