Subject: bug#8196: 23.1; Feature request with code: "C-x TAB" to understand tab-stop-list

From: Teemu Likonen <[email-masked]>
Date: Fri, 12 Jul 2013 23:05:00 +0300

Drew Adams [2013-07-12 12:11:31 -07:00] wrote:

>>> I think it would be better if "C-x TAB" (bound to indent-rigidly)
>>> advanced the indentation to the next tab stop (as in tab-stop-list)
>>> by default, instead of by 1. Similarly, if negative prefix argument
>>> were given (with "C-u -") it would change the indentation to the
>>> previous tab stop.
>
> Sorry, that does not make sense to me.

First, here's some reference where this came from:
http://lists.gnu.org/archive/html/help-gnu-emacs/2011-03/msg00243.html
The feature supersedes indent-rigidly. If filed this wishlist bug report
because Stefan Monnier suggested so:

    Indeed, it sounds like a good improvement to the behavior of C-x
    TAB. Maybe you could propose it for inclusion via M-x
    report-emacs-bug.

Here's a concrete use-case. Let's say my tab-stop-list variable is like
(4 8 12 16 20 etc.). I'm in a message-mode buffer writing some email or
news message which is about Lisp programming. I copy a piece of code
from some other buffer, like this:

(defun foo (bar)
  (setq some-variable some-value)
  (some-function-call bar)
  ...)

I want to indent it so that it stands out from my normal text. I mark
the code piece with M-h and press C-x TAB (which runs my improved
indent-rigidly). It results in this:

    (defun foo (bar)
      (setq some-variable some-value)
      (some-function-call bar)
      ...)

The lowest indentation of that paragraph is now column 4. If I had kept
repeating TAB key the code would have been indented to columns 8, 12, 16
etc. as the tab-stop-list variable defines.

The doc string of that command could be like this:

    Indent region to a tab stop column or to the specified column.

    Indent the region from BEG to END according to the command's prefix
    argument ARG. If ARG is nil (i.e., there is no prefix argument)
    indent the region to the next tab stop column in `tab-stop-list'.
    With negative prefix ARG (C-u -) indent the region to the previous
    tab stop column. If ARG is an integer indent the region by ARG
    columns (just like `indent-rigidly' command).

    If this command is invoked by a multi-character key sequence, it can
    be repeated by repeating the final character of the sequence.