X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/b578f267af27af50e3c091f8c9c9eee939b69978..6a70ef0d8173b57817bcc8a013eb86c8583e74fc:/lisp/indent.el diff --git a/lisp/indent.el b/lisp/indent.el index 2690d2f86d..1a7193893c 100644 --- a/lisp/indent.el +++ b/lisp/indent.el @@ -28,11 +28,17 @@ ;;; Code: -(defvar standard-indent 4 "\ -Default number of columns for margin-changing functions to indent.") +(defgroup indent nil + "Indentation commands" + :group 'editing) -(defvar indent-line-function 'indent-to-left-margin "\ -Function to indent current line.") +(defcustom standard-indent 4 + "*Default number of columns for margin-changing functions to indent." + :group 'indent + :type 'integer) + +(defvar indent-line-function 'indent-to-left-margin + "Function to indent current line.") (defun indent-according-to-mode () "Indent line in proper way for current major mode." @@ -40,20 +46,26 @@ Function to indent current line.") (funcall indent-line-function)) (defun indent-for-tab-command (&optional prefix-arg) - "Indent line in proper way for current major mode." + "Indent line in proper way for current major mode. +If initial point was within line's indentation, position after +the indentation. Else stay at same point in text. +The function actually called is determined by the value of +`indent-line-function'." (interactive "P") (if (eq indent-line-function 'indent-to-left-margin) - (insert-tab) + (insert-tab prefix-arg) (if prefix-arg (funcall indent-line-function prefix-arg) (funcall indent-line-function)))) -(defun insert-tab () - (if abbrev-mode - (expand-abbrev)) - (if indent-tabs-mode - (insert ?\t) - (indent-to (* tab-width (1+ (/ (current-column) tab-width)))))) +(defun insert-tab (&optional prefix-arg) + (let ((count (prefix-numeric-value prefix-arg))) + (if (and abbrev-mode + (eq (char-syntax (preceding-char)) ?w)) + (expand-abbrev)) + (if indent-tabs-mode + (insert-char ?\t count) + (indent-to (* tab-width (+ count (/ (current-column) tab-width))))))) (defun indent-rigidly (start end arg) "Indent all lines starting in the region sideways by ARG columns. @@ -83,7 +95,7 @@ only if necessary. It leaves point at end of indentation." (back-to-indentation) (let ((cur-col (current-column))) (cond ((< cur-col column) - (if (> (- column (* (/ cur-col tab-width) tab-width)) tab-width) + (if (>= (- column (* (/ cur-col tab-width) tab-width)) tab-width) (delete-region (point) (progn (skip-chars-backward " ") (point)))) (indent-to column)) @@ -264,7 +276,7 @@ line, but does not move past any whitespace that was explicitly inserted (buffer-substring (point) (min (point-max) (+ (length fill-prefix) (point))))) (forward-char (length fill-prefix))) - (if (and adaptive-fill-mode + (if (and adaptive-fill-mode adaptive-fill-regexp (looking-at adaptive-fill-regexp)) (goto-char (match-end 0)))) ;; Skip centering or flushright indentation @@ -277,11 +289,14 @@ A value of nil means really run `indent-according-to-mode' on each line.") (defun indent-region (start end column) "Indent each nonblank line in the region. -With no argument, indent each line using `indent-according-to-mode', +With prefix no argument, indent each line using `indent-according-to-mode', or use `indent-region-function' to do the whole region if that's non-nil. If there is a fill prefix, make each line start with the fill prefix. With argument COLUMN, indent each line to that column. -Called from a program, takes three args: START, END and COLUMN." + +When you call this from a program, START and END specify +the region to indent, and COLUMN specifies the indentation column. +If COLUMN is nil, then indent each line according to the mode." (interactive "r\nP") (if (null column) (if fill-prefix @@ -328,10 +343,14 @@ Called from a program, takes three args: START, END and COLUMN." (defun indent-relative (&optional unindented-ok) "Space out to under next indent point in previous nonblank line. An indent point is a non-whitespace character following whitespace. +The following line shows the indentation points in this line. + ^ ^ ^ ^ ^ ^ ^ ^ ^ If the previous nonblank line has no indent points beyond the column point starts at, `tab-to-tab-stop' is done instead." (interactive "P") - (if abbrev-mode (expand-abbrev)) + (if (and abbrev-mode + (eq (char-syntax (preceding-char)) ?w)) + (expand-abbrev)) (let ((start-column (current-column)) indent) (save-excursion @@ -356,10 +375,12 @@ column point starts at, `tab-to-tab-stop' is done instead." (move-marker opoint nil)) (tab-to-tab-stop)))) -(defvar tab-stop-list +(defcustom tab-stop-list '(8 16 24 32 40 48 56 64 72 80 88 96 104 112 120) - "*List of tab stop positions used by `tab-to-tab-stops'. -This should be a list of integers, ordered from smallest to largest.") + "*List of tab stop positions used by `tab-to-tab-stop'. +This should be a list of integers, ordered from smallest to largest." + :group 'indent + :type '(repeat integer)) (defvar edit-tab-stops-map nil "Keymap used in `edit-tab-stops'.") (if edit-tab-stops-map