[gnu.emacs.bug] move-to-tab-stop and picture-tab

ram-ashwin@YALE.ARPA (Ashwin Ram) (10/25/88)

The following function moves the cursor to the next tab stop.  It is
analogous to tab-to-tab-stop, except that it moves the cursor over existing
text, if any, rather than inserting spaces and pushing existing text to the
right.  It uses move-to-column-force which is defined in picture.el.

(defun move-to-tab-stop ()
  "Move to next defined tab-stop column.
The variable tab-stop-list is a list of columns at which there are tab stops.
Use \\[edit-tab-stops] to edit them interactively."
  (interactive)
  (if abbrev-mode (expand-abbrev))
  (let ((tabs tab-stop-list))
    (while (and tabs (>= (current-column) (car tabs)))
      (setq tabs (cdr tabs)))
    (if tabs
	(move-to-column-force (car tabs))
      (insert ? ))))

I suggest that this should be added to indent.el (where tab-to-tab-stop is).
The reason that I prefer it there instead of inside picture.el is that this
function should be available independent of whether picture-mode is loaded,
since it is often useful outside picture-mode.  For the same reason,
move-to-column-force should be moved outside of picture.el.  In fact, it
might be a better idea to add an optional argument to move-to-column that
determines its behavior at the end of a line.

picture-tab, in picture.el, should be altered to use move-to-tab-stop since
as written picture-tab is a destructive function.  It marks the buffer as
modified even if no modification has occurred (conceptually, only the cursor
has moved).  Furthermore, for that reason it cannot be used in read-only
buffers.

-- Ashwin.

ARPA:    Ram-Ashwin@cs.yale.edu
UUCP:    {decvax,ucbvax,harvard,cmcl2,...}!yale!Ram-Ashwin
BITNET:  Ram@yalecs