Commit e70b5064 authored by Chong Yidong's avatar Chong Yidong
Browse files

Update doc for behavior of TAB in Text based modes.

* lisp/indent.el (indent-for-tab-command, indent-according-to-mode): Doc fix.
(indent-region): Doc fix.  Switch nested ifs to equivalent cond.
parent f3af92b7
...@@ -551,6 +551,13 @@ at high rate, e.g. if you lean on some key, because stopping redisplay ...@@ -551,6 +551,13 @@ at high rate, e.g. if you lean on some key, because stopping redisplay
in the middle (when this variable is nil) forces more expensive in the middle (when this variable is nil) forces more expensive
updates later on, and Emacs appears to be unable to keep up. updates later on, and Emacs appears to be unable to keep up.
+++
** The behavior of <TAB> for active regions in Text mode has changed.
In Text and related modes, typing <TAB> (`indent-for-tab-command')
when the region is active causes Emacs to indent all the lines in the
region, aligning them with the line previous to the first line in the
region (or with the left margin if there is no previous line).
* Changes in Specialized Modes and Packages in Emacs 24.1 * Changes in Specialized Modes and Packages in Emacs 24.1
......
2011-11-29 Chong Yidong <cyd@gnu.org>
* indent.el (indent-for-tab-command, indent-according-to-mode):
Doc fix.
(indent-region): Doc fix. Switch nested ifs to equivalent cond.
2011-11-29 Michael Albinus <michael.albinus@gmx.de> 2011-11-29 Michael Albinus <michael.albinus@gmx.de>
* vc/diff-mode.el (diff-find-file-name): Make `read-file-name' * vc/diff-mode.el (diff-find-file-name): Make `read-file-name'
......
...@@ -63,9 +63,11 @@ e.g., `c-tab-always-indent', and do not respect this variable." ...@@ -63,9 +63,11 @@ e.g., `c-tab-always-indent', and do not respect this variable."
(defun indent-according-to-mode () (defun indent-according-to-mode ()
"Indent line in proper way for current major mode. "Indent line in proper way for current major mode.
The buffer-local variable `indent-line-function' determines how to do this, Normally, this is done by calling the function specified by the
but the functions `indent-relative' and `indent-relative-maybe' are variable `indent-line-function'. However, if the value of that
special; we don't actually use them here." variable is `indent-relative' or `indent-relative-maybe', handle
it specially (since those functions are used for tabbing); in
that case, indent by aligning to the previous non-blank line."
(interactive) (interactive)
(syntax-propertize (line-end-position)) (syntax-propertize (line-end-position))
(if (memq indent-line-function (if (memq indent-line-function
...@@ -84,22 +86,25 @@ special; we don't actually use them here." ...@@ -84,22 +86,25 @@ special; we don't actually use them here."
(funcall indent-line-function))) (funcall indent-line-function)))
(defun indent-for-tab-command (&optional arg) (defun indent-for-tab-command (&optional arg)
"Indent line or region in proper way for current major mode or insert a tab. "Indent the current line or region, or insert a tab, as appropriate.
Depending on `tab-always-indent', either insert a tab or indent. This function either inserts a tab, or indents the current line,
or performs symbol completion, depending on `tab-always-indent'.
In most major modes, if point was in the current line's indentation, The function called to actually indent the line or insert a tab
it is moved to the first non-whitespace character after indenting; is given by the variable `indent-line-function'.
otherwise it stays at the same position in the text.
If a prefix argument is given, after this function indents the
If a prefix argument is given, also rigidly indent the entire current line or inserts a tab, it also rigidly indents the entire
balanced expression which starts at the beginning of the current balanced expression which starts at the beginning of the current
line to reflect the current line's change in indentation. line, to reflect the current line's indentation.
If `transient-mark-mode' is turned on and the region is active, In most major modes, if point was in the current line's
indent the region (in this case, any prefix argument is ignored). indentation, it is moved to the first non-whitespace character
after indenting; otherwise it stays at the same position relative
to the text.
The function actually called to indent the line is determined by the value of If `transient-mark-mode' is turned on and the region is active,
`indent-line-function'." this function instead calls `indent-region'. In this case, any
prefix argument is ignored."
(interactive "P") (interactive "P")
(cond (cond
;; The region is active, indent it. ;; The region is active, indent it.
...@@ -393,34 +398,14 @@ indents all the lines with it: ...@@ -393,34 +398,14 @@ indents all the lines with it:
with it. with it.
2) If `indent-region-function' is non-nil, call that function 2) If `indent-region-function' is non-nil, call that function
to indent the region. to indent the region.
3) Indent each line as specified by the variable `indent-line-function'. 3) Indent each line via `indent-according-to-mode'.
Called from a program, START and END specify the region to indent. Called from a program, START and END specify the region to indent.
If the third argument COLUMN is an integer, it specifies the If the third argument COLUMN is an integer, it specifies the
column to indent to; if it is nil, use one of the three methods above." column to indent to; if it is nil, use one of the three methods above."
(interactive "r\nP") (interactive "r\nP")
(if (null column) (cond
(if fill-prefix (column
(save-excursion
(goto-char end)
(setq end (point-marker))
(goto-char start)
(let ((regexp (regexp-quote fill-prefix)))
(while (< (point) end)
(or (looking-at regexp)
(and (bolp) (eolp))
(insert fill-prefix))
(forward-line 1))))
(if indent-region-function
(funcall indent-region-function start end)
(save-excursion
(setq end (copy-marker end))
(goto-char start)
(while (< (point) end)
(or (and (bolp) (eolp))
(indent-according-to-mode))
(forward-line 1))
(move-marker end nil))))
(setq column (prefix-numeric-value column)) (setq column (prefix-numeric-value column))
(save-excursion (save-excursion
(goto-char end) (goto-char end)
...@@ -433,6 +418,28 @@ column to indent to; if it is nil, use one of the three methods above." ...@@ -433,6 +418,28 @@ column to indent to; if it is nil, use one of the three methods above."
(indent-to column 0)) (indent-to column 0))
(forward-line 1)) (forward-line 1))
(move-marker end nil))) (move-marker end nil)))
(fill-prefix
(save-excursion
(goto-char end)
(setq end (point-marker))
(goto-char start)
(let ((regexp (regexp-quote fill-prefix)))
(while (< (point) end)
(or (looking-at regexp)
(and (bolp) (eolp))
(insert fill-prefix))
(forward-line 1)))))
(indent-region-function
(funcall indent-region-function start end))
(t
(save-excursion
(setq end (copy-marker end))
(goto-char start)
(while (< (point) end)
(or (and (bolp) (eolp))
(indent-according-to-mode))
(forward-line 1))
(move-marker end nil))))
;; In most cases, reindenting modifies the buffer, but it may also ;; In most cases, reindenting modifies the buffer, but it may also
;; leave it unmodified, in which case we have to deactivate the mark ;; leave it unmodified, in which case we have to deactivate the mark
;; by hand. ;; by hand.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment