;;; indent.el --- indentation commands for Emacs
-;; Copyright (C) 1985, 1995, 2001, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1995, 2001, 2002, 2003, 2004,
+;; 2005, 2006, 2007 Free Software Foundation, Inc.
;; Maintainer: FSF
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
+;; the Free Software Foundation; either version 3, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
"*Controls the operation of the TAB key.
If t, hitting TAB always just indents the current line.
If nil, hitting TAB indents the current line if point is at the left margin
- or in the line's indentation, otherwise it insert a \"real\" tab character."
+or in the line's indentation, otherwise it insert a \"real\" TAB character.
+Most programming language modes have their own variable to control this,
+e.g., `c-tab-always-indent', and do not respect this variable."
:group 'indent
:type '(choice (const nil) (const t) (const always)))
;; used in Fundamental Mode, Text Mode, etc.
(defun indent-to-left-margin ()
"Indent current line to the column given by `current-left-margin'."
- (indent-line-to (current-left-margin)))
+ (save-excursion (indent-line-to (current-left-margin)))
+ ;; If we are within the indentation, move past it.
+ (when (save-excursion
+ (skip-chars-backward " \t")
+ (bolp))
+ (skip-chars-forward " \t")))
(defun delete-to-left-margin (&optional from to)
"Remove left margin indentation from a region.
(let ((opoint (point)))
(delete-horizontal-space t)
(indent-to (car tabs)))
- (insert ?\ ))))
+ (insert ?\s))))
(defun move-to-tab-stop ()
"Move point to next defined tab-stop column.
(goto-char before)
;; If we just added a tab, or moved over one,
;; delete any superfluous spaces before the old point.
- (if (and (eq (preceding-char) ?\ )
+ (if (and (eq (preceding-char) ?\s)
(eq (following-char) ?\t))
(let ((tabend (* (/ (current-column) tab-width) tab-width)))
(while (and (> (current-column) tabend)
- (eq (preceding-char) ?\ ))
+ (eq (preceding-char) ?\s))
(forward-char -1))
(delete-region (point) before))))))))