Mercurial > emacs
changeset 87393:c5dbee67727b
Add prefix arg handling to indent-for-tab-command
(indent-for-tab-command): Rigidly indent the following sexp along
with the current line when a prefix arg is given in the
non-active-region case. Specify raw prefix in interactive spec.
Simplify main indentation logic to get rid of the conditional call
to `indent-according-to-mode' (it just ended up calling
`indent-line-function' in all cases anyway, which can be done more
simply here). Remove unnecessary test of ARG in active region case.
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-964
author | Miles Bader <miles@gnu.org> |
---|---|
date | Tue, 25 Dec 2007 21:07:12 +0000 |
parents | cbfdfafa4e9d |
children | 06a2cf746b9d |
files | lisp/ChangeLog lisp/indent.el |
diffstat | 2 files changed, 40 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Tue Dec 25 20:19:13 2007 +0000 +++ b/lisp/ChangeLog Tue Dec 25 21:07:12 2007 +0000 @@ -1,3 +1,14 @@ +2007-12-25 Miles Bader <miles@gnu.org> + + * indent.el (indent-for-tab-command): Rigidly indent the following + sexp along with the current line when a prefix arg is given in the + non-active-region case. Specify raw prefix in interactive spec. + Simplify main indentation logic to get rid of the conditional call + to `indent-according-to-mode' (it just ended up calling + `indent-line-function' in all cases anyway, which can be done more + simply here). Remove unnecessary test of ARG in active region + case. + 2007-12-25 Richard Stallman <rms@gnu.org> * simple.el (select-active-regions): New option.
--- a/lisp/indent.el Tue Dec 25 20:19:13 2007 +0000 +++ b/lisp/indent.el Tue Dec 25 21:07:12 2007 +0000 @@ -82,14 +82,20 @@ Depending on `tab-always-indent', either insert a tab or indent. If initial point was within line's indentation, position after the indentation. Else stay at same point in text. + +If a prefix argument is given, also rigidly indent the entire +balanced expression which starts at the beginning the current +line to reflect the current line's change in indentation. + If `transient-mark-mode' is turned on and the region is active, -indent the region. +indent the region (in this case, any prefix argument is ignored). + The function actually called to indent the line is determined by the value of `indent-line-function'." - (interactive "p") + (interactive "P") (cond ;; The region is active, indent it. - ((and arg transient-mark-mode mark-active + ((and transient-mark-mode mark-active (not (eq (region-beginning) (region-end)))) (indent-region (region-beginning) (region-end))) ((or ;; indent-to-left-margin is only meant for indenting, @@ -99,13 +105,27 @@ (or (> (current-column) (current-indentation)) (eq this-command last-command)))) (insert-tab arg)) - ;; Those functions are meant specifically for tabbing and not for - ;; indenting, so we can't pass them to indent-according-to-mode. - ((memq indent-line-function '(indent-relative indent-relative-maybe)) - (funcall indent-line-function)) - ;; Indent the line. (t - (indent-according-to-mode)))) + (let ((end-marker + (and arg + (save-excursion + (forward-line 0) (forward-sexp) (point-marker)))) + (old-indent + (current-indentation))) + + ;; Indent the line. + (funcall indent-line-function) + + ;; If a prefix argument was given, rigidly indent the following + ;; sexp to match the change in the current line's indentation. + ;; + (when arg + (let ((indentation-change (- (current-indentation) old-indent))) + (unless (zerop indentation-change) + (save-excursion + (forward-line 1) + (when (< (point) end-marker) + (indent-rigidly (point) end-marker indentation-change)))))))))) (defun insert-tab (&optional arg) (let ((count (prefix-numeric-value arg)))