]> code.delx.au - gnu-emacs/blobdiff - lisp/indent.el
*** empty log message ***
[gnu-emacs] / lisp / indent.el
index 11f01068397d3d0cc4f43c6a8bef954e31c05814..3c51b4f37a840397dd2eb5f5245cfe0437866d71 100644 (file)
@@ -1,6 +1,7 @@
 ;;; 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
 
@@ -8,7 +9,7 @@
 
 ;; 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,
@@ -18,8 +19,8 @@
 
 ;; 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:
 
@@ -49,7 +50,9 @@ Don't rebind TAB unless you really need to.")
   "*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)))
 
@@ -181,7 +184,12 @@ interactively or with optional argument FORCE, it will be fixed."
 ;; 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.
@@ -511,7 +519,7 @@ Use \\[edit-tab-stops] to edit them interactively."
        (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.
@@ -528,11 +536,11 @@ Use \\[edit-tab-stops] to edit them interactively."
            (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))))))))