Tweak C-x TAB behavior changes, and update docs.
* lisp/indent.el (indent-rigidly-map): Add docstring, and move commands into named functions. (indent-rigidly-left, indent-rigidly-right) (indent-rigidly-left-to-tab-stop) (indent-rigidly-right-to-tab-stop): New functions. Decide on indentation direction based on bidi direction, and accumulate sequential commands in a single undo boundary. (indent-rigidly--pop-undo): New utility function. * doc/emacs/indent.texi (Indentation Commands): Document C-x TAB changes. * doc/lispref/text.texi (Region Indent): Note the new interactive behavior of indent-rigidly.
This commit is contained in:
parent
70c8f5ca14
commit
77221051a2
6 changed files with 110 additions and 41 deletions
|
@ -1,3 +1,7 @@
|
|||
2013-12-21 Chong Yidong <cyd@gnu.org>
|
||||
|
||||
* indent.texi (Indentation Commands): Document C-x TAB changes.
|
||||
|
||||
2013-12-20 Tassilo Horn <tsdh@gnu.org>
|
||||
|
||||
* rmail.texi: Document `S-SPC' as alternative to scrolling down
|
||||
|
|
|
@ -127,14 +127,26 @@ that column number.
|
|||
@kindex C-x TAB
|
||||
@findex indent-rigidly
|
||||
@cindex remove indentation
|
||||
Shift each line in the region by a fixed distance, to the right or
|
||||
left (@code{indent-rigidly}). The distance to move is determined by
|
||||
the numeric argument (positive to move rightward, negative to move
|
||||
leftward).
|
||||
This command is used to change the indentation of all lines that begin
|
||||
in the region, moving the affected lines as a ``rigid'' unit.
|
||||
|
||||
This command can be used to remove all indentation from the lines in
|
||||
the region, by invoking it with a large negative argument,
|
||||
e.g., @kbd{C-u -1000 C-x @key{TAB}}.
|
||||
If called with no argument, the command activates a transient mode for
|
||||
adjusting the indentation of the affected lines interactively. While
|
||||
this transient mode is active, typing @key{LEFT} or @key{RIGHT}
|
||||
indents leftward and rightward, respectively, by one space. You can
|
||||
also type @kbd{S-@key{LEFT}} or @kbd{S-@key{RIGHT}} to indent leftward
|
||||
or rightward to the next tab stop (@pxref{Tab Stops}). Typing any
|
||||
other key disables the transient mode, and resumes normal editing.
|
||||
|
||||
If called with a prefix argument @var{n}, this command indents the
|
||||
lines forward by @var{n} spaces (without enabling the transient mode).
|
||||
Negative values of @var{n} indent backward, so you can remove all
|
||||
indentation from the lines in the region using a large negative
|
||||
argument, like this:
|
||||
|
||||
@smallexample
|
||||
C-u -999 C-x @key{TAB}
|
||||
@end smallexample
|
||||
@end table
|
||||
|
||||
@node Tab Stops
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2013-12-21 Chong Yidong <cyd@gnu.org>
|
||||
|
||||
* text.texi (Region Indent): Note the new interactive behavior of
|
||||
indent-rigidly.
|
||||
|
||||
2013-12-20 Tassilo Horn <tsdh@gnu.org>
|
||||
|
||||
* numbers.texi (numbers): Document that =, <, <=, >, >= now accept
|
||||
|
|
|
@ -2344,21 +2344,19 @@ a different meaning and does not use this variable.
|
|||
@end defvar
|
||||
|
||||
@deffn Command indent-rigidly start end count
|
||||
This command indents all lines starting between @var{start}
|
||||
This function indents all lines starting between @var{start}
|
||||
(inclusive) and @var{end} (exclusive) sideways by @var{count} columns.
|
||||
This ``preserves the shape'' of the affected region, moving it as a
|
||||
rigid unit. Consequently, this command is useful not only for indenting
|
||||
regions of unindented text, but also for indenting regions of formatted
|
||||
code.
|
||||
rigid unit.
|
||||
|
||||
For example, if @var{count} is 3, this command adds 3 columns of
|
||||
indentation to each of the lines beginning in the region specified.
|
||||
This is useful not only for indenting regions of unindented text, but
|
||||
also for indenting regions of formatted code. For example, if
|
||||
@var{count} is 3, this command adds 3 columns of indentation to every
|
||||
line that begins in the specified region.
|
||||
|
||||
@c FIXME: I suggest using message-indent-citation as the example, or
|
||||
@c just remove this paragraph. --xfq
|
||||
In Mail mode, @kbd{C-c C-y} (@code{mail-yank-original}) uses
|
||||
@code{indent-rigidly} to indent the text copied from the message being
|
||||
replied to.
|
||||
If called interactively with no prefix argument, this command invokes
|
||||
a transient mode for adjusting indentation rigidly. @xref{Indentation
|
||||
Commands,,, emacs, The GNU Emacs Manual}.
|
||||
@end deffn
|
||||
|
||||
@deffn Command indent-code-rigidly start end columns &optional nochange-regexp
|
||||
|
|
|
@ -1,3 +1,14 @@
|
|||
2013-12-21 Chong Yidong <cyd@gnu.org>
|
||||
|
||||
* indent.el (indent-rigidly-map): Add docstring, and move commands
|
||||
into named functions.
|
||||
(indent-rigidly-left, indent-rigidly-right)
|
||||
(indent-rigidly-left-to-tab-stop)
|
||||
(indent-rigidly-right-to-tab-stop): New functions. Decide on
|
||||
indentation direction based on bidi direction, and accumulate
|
||||
sequential commands in a single undo boundary.
|
||||
(indent-rigidly--pop-undo): New utility function.
|
||||
|
||||
2013-12-20 Juanma Barranquero <lekktu@gmail.com>
|
||||
|
||||
* faces.el (read-face-name): Require crm.el when using crm-separator.
|
||||
|
|
|
@ -169,31 +169,28 @@ Blank lines are ignored."
|
|||
|
||||
(defvar indent-rigidly-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(define-key map [left]
|
||||
(lambda (beg end) (interactive "r") (indent-rigidly beg end -1)))
|
||||
|
||||
(define-key map [right]
|
||||
(lambda (beg end) (interactive "r") (indent-rigidly beg end 1)))
|
||||
|
||||
(define-key map [S-right]
|
||||
(lambda (beg end) (interactive "r")
|
||||
(let* ((current (indent-rigidly--current-indentation beg end))
|
||||
(next (indent--next-tab-stop current)))
|
||||
(indent-rigidly beg end (- next current)))))
|
||||
|
||||
(define-key map [S-left]
|
||||
(lambda (beg end) (interactive "r")
|
||||
(let* ((current (indent-rigidly--current-indentation beg end))
|
||||
(next (indent--next-tab-stop current 'prev)))
|
||||
(indent-rigidly beg end (- next current)))))
|
||||
map))
|
||||
(define-key map [left] 'indent-rigidly-left)
|
||||
(define-key map [right] 'indent-rigidly-right)
|
||||
(define-key map [S-left] 'indent-rigidly-left-to-tab-stop)
|
||||
(define-key map [S-right] 'indent-rigidly-right-to-tab-stop)
|
||||
map)
|
||||
"Transient keymap for adjusting indentation interactively.
|
||||
It is activated by calling `indent-rigidly' interactively.")
|
||||
|
||||
(defun indent-rigidly (start end arg &optional interactive)
|
||||
"Indent all lines starting in the region sideways by ARG columns.
|
||||
Called from a program, takes three arguments, START, END and ARG.
|
||||
You can remove all indentation from a region by giving a large negative ARG.
|
||||
If used interactively and no prefix argument is given, use a transient
|
||||
mode that lets you move the text with cursor keys."
|
||||
"Indent all lines starting in the region.
|
||||
If called interactively with no prefix argument, activate a
|
||||
transient mode in which the indentation can be adjusted interactively
|
||||
by typing \\<indent-rigidly-map>\\[indent-rigidly-left], \\[indent-rigidly-right], \\[indent-rigidly-left-to-tab-stop], or \\[indent-rigidly-right-to-tab-stop].
|
||||
Typing any other key deactivates the transient mode.
|
||||
|
||||
If called from a program, or interactively with prefix ARG,
|
||||
indent all lines starting in the region forward by ARG columns.
|
||||
If called from a program, START and END specify the beginning and
|
||||
end of the text to act on, in place of the region.
|
||||
|
||||
Negative values of ARG indent backward, so you can remove all
|
||||
indentation by specifying a large negative ARG."
|
||||
(interactive "r\nP\np")
|
||||
(if (and (not arg) interactive)
|
||||
(progn
|
||||
|
@ -217,6 +214,48 @@ and <S-right>.")
|
|||
(forward-line 1))
|
||||
(move-marker end nil))))
|
||||
|
||||
(defun indent-rigidly--pop-undo ()
|
||||
(and (memq last-command '(indent-rigidly-left indent-rigidly-right
|
||||
indent-rigidly-left-to-tab-stop
|
||||
indent-rigidly-right-to-tab-stop))
|
||||
(consp buffer-undo-list)
|
||||
(eq (car buffer-undo-list) nil)
|
||||
(pop buffer-undo-list)))
|
||||
|
||||
(defun indent-rigidly-left (beg end)
|
||||
"Indent all lines between BEG and END leftward by one space."
|
||||
(interactive "r")
|
||||
(indent-rigidly--pop-undo)
|
||||
(indent-rigidly
|
||||
beg end
|
||||
(if (eq (current-bidi-paragraph-direction) 'right-to-left) 1 -1)))
|
||||
|
||||
(defun indent-rigidly-right (beg end)
|
||||
"Indent all lines between BEG and END rightward by one space."
|
||||
(interactive "r")
|
||||
(indent-rigidly--pop-undo)
|
||||
(indent-rigidly
|
||||
beg end
|
||||
(if (eq (current-bidi-paragraph-direction) 'right-to-left) -1 1)))
|
||||
|
||||
(defun indent-rigidly-left-to-tab-stop (beg end)
|
||||
"Indent all lines between BEG and END leftward to a tab stop."
|
||||
(interactive "r")
|
||||
(indent-rigidly--pop-undo)
|
||||
(let* ((current (indent-rigidly--current-indentation beg end))
|
||||
(rtl (eq (current-bidi-paragraph-direction) 'right-to-left))
|
||||
(next (indent--next-tab-stop current (if rtl nil 'prev))))
|
||||
(indent-rigidly beg end (- next current))))
|
||||
|
||||
(defun indent-rigidly-right-to-tab-stop (beg end)
|
||||
"Indent all lines between BEG and END rightward to a tab stop."
|
||||
(interactive "r")
|
||||
(indent-rigidly--pop-undo)
|
||||
(let* ((current (indent-rigidly--current-indentation beg end))
|
||||
(rtl (eq (current-bidi-paragraph-direction) 'right-to-left))
|
||||
(next (indent--next-tab-stop current (if rtl 'prev))))
|
||||
(indent-rigidly beg end (- next current))))
|
||||
|
||||
(defun indent-line-to (column)
|
||||
"Indent current line to COLUMN.
|
||||
This function removes or adds spaces and tabs at beginning of line
|
||||
|
|
Loading…
Add table
Reference in a new issue