]> git.eshelyaron.com Git - emacs.git/commitdiff
* progmodes/python.el (python-indent-line): More consistent cursor
authorFabián Ezequiel Gallina <fgallina@gnu.org>
Sun, 23 Sep 2012 18:21:33 +0000 (15:21 -0300)
committerFabián Ezequiel Gallina <fgallina@gnu.org>
Sun, 23 Sep 2012 18:21:33 +0000 (15:21 -0300)
movement behavior.

lisp/ChangeLog
lisp/progmodes/python.el

index eb0c75d66d910c209479d20a2a5e2aa0db74315d..420e4d992bdefc5fa5d621401e082c2e21cbdf52 100644 (file)
@@ -1,3 +1,8 @@
+2012-09-23  Fabián Ezequiel Gallina  <fgallina@cuca>
+
+       * progmodes/python.el (python-indent-line): More consistent cursor
+       movement behavior.
+
 2012-09-23  Stefan Merten  <smerten@oekonux.de>
 
        * textmodes/rst.el: Fix compiler warning.
index ffc6c1ac885ceb53530a744b64f5aaa071a03b73..8b8002b84b72a27dfb0429c850ef2de40e98f34e 100644 (file)
@@ -897,16 +897,27 @@ possible indentation levels and saves it in the variable
 `python-indent-levels'.  Afterwards it sets the variable
 `python-indent-current-level' correctly so offset is equal
 to (`nth' `python-indent-current-level' `python-indent-levels')"
-  (if (or (and (eq this-command 'indent-for-tab-command)
-               (eq last-command this-command))
-          force-toggle)
-      (if (not (equal python-indent-levels '(0)))
-          (python-indent-toggle-levels)
-        (python-indent-calculate-levels))
-    (python-indent-calculate-levels))
-  (beginning-of-line)
-  (delete-horizontal-space)
-  (indent-to (nth python-indent-current-level python-indent-levels))
+  (or
+   (and (or (and (eq this-command 'indent-for-tab-command)
+                 (eq last-command this-command))
+            force-toggle)
+        (not (equal python-indent-levels '(0)))
+        (or (python-indent-toggle-levels) t))
+   (python-indent-calculate-levels))
+  (let* ((starting-pos (point-marker))
+         (indent-ending-position
+          (+ (line-beginning-position) (current-indentation)))
+         (follow-indentation-p
+          (or (bolp)
+              (and (<= (line-beginning-position) starting-pos)
+                   (>= indent-ending-position starting-pos))))
+         (next-indent (nth python-indent-current-level python-indent-levels)))
+    (unless (= next-indent (current-indentation))
+      (beginning-of-line)
+      (delete-horizontal-space)
+      (indent-to next-indent)
+      (goto-char starting-pos))
+    (and follow-indentation-p (back-to-indentation)))
   (python-info-closing-block-message))
 
 (defun python-indent-line-function ()