]> git.eshelyaron.com Git - emacs.git/commitdiff
python-shell-send-defun doesn't find the (whole) definition
authorPer Starbäck <per@starback.se>
Fri, 2 Oct 2020 03:11:06 +0000 (05:11 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Fri, 2 Oct 2020 03:11:06 +0000 (05:11 +0200)
* lisp/progmodes/python.el (python-shell-send-defun): Fix C-M-x
for definitions like @property\ndef bar(): (bug#37828).

lisp/progmodes/python.el

index 95b6a037bb32caf5596f932cb88337983be3030f..3bdf46ddc4186a52d2eeae9a645253064b5307d8 100644 (file)
@@ -3200,27 +3200,29 @@ optional argument MSG is non-nil, forces display of a
 user-friendly message if there's no process running; defaults to
 t when called interactively."
   (interactive (list current-prefix-arg t))
-  (save-excursion
-    (python-shell-send-region
-     (progn
-       (end-of-line 1)
-       (while (and (or (python-nav-beginning-of-defun)
-                       (beginning-of-line 1))
-                   (> (current-indentation) 0)))
-       (when (not arg)
-         (while (and
-                 (eq (forward-line -1) 0)
-                 (if (looking-at (python-rx decorator))
-                     t
-                   (forward-line 1)
-                   nil))))
-       (point-marker))
-     (progn
-       (or (python-nav-end-of-defun)
-           (end-of-line 1))
-       (point-marker))
-     nil  ;; noop
-     msg)))
+  (let ((starting-pos (point)))
+    (save-excursion
+      (python-shell-send-region
+       (progn
+         (end-of-line 1)
+         (while (and (or (python-nav-beginning-of-defun)
+                         (beginning-of-line 1))
+                     (> (current-indentation) 0)))
+         (when (not arg)
+           (while (and
+                   (eq (forward-line -1) 0)
+                   (if (looking-at (python-rx decorator))
+                       t
+                     (forward-line 1)
+                     nil))))
+         (point-marker))
+       (progn
+         (goto-char starting-pos)
+         (or (python-nav-end-of-defun)
+             (end-of-line 1))
+         (point-marker))
+       nil ;; noop
+       msg))))
 
 (defun python-shell-send-file (file-name &optional process temp-file-name
                                          delete msg)