From 6861432ebdc503bbf0f8886679d169c16060626b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fabi=C3=A1n=20Ezequiel=20Gallina?= Date: Mon, 31 Dec 2012 17:58:57 -0300 Subject: [PATCH] * progmodes/python.el (python-nav-end-of-statement): Rewrite in order to improve efficiency (Based on Daniel Colascione's patch). Fixes: debbugs:13182 --- lisp/ChangeLog | 6 ++++++ lisp/progmodes/python.el | 29 ++++++++++++++++++++--------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e910b2cc50..a62a9cdb18 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-12-31 Fabián Ezequiel Gallina + + * progmodes/python.el (python-nav-end-of-statement): Rewrite in + order to improve efficiency (Based on Daniel Colascione's + patch). (Bug#13182) + 2012-12-31 Glenn Morris * vc/log-edit.el (log-edit-header-contents-regexp): Add doc string. diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 90e0d60421..c168b3813f 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -1177,16 +1177,27 @@ Returns nil if point is not in a def or class." (forward-line -1)))) (point-marker)) -(defun python-nav-end-of-statement () - "Move to end of current statement." +(defun python-nav-end-of-statement (&optional noend) + "Move to end of current statement. +Optional argument NOEND is internal and makes the logic to not +jump to the end of line when moving forward searching for the end +of the statement." (interactive "^") - (while (and (goto-char (line-end-position)) - (not (eobp)) - (when (or - (python-info-line-ends-backslash-p) - (python-syntax-context 'string) - (python-syntax-context 'paren)) - (forward-line 1)))) + (let (string-start bs-pos) + (while (and (or noend (goto-char (line-end-position))) + (not (eobp)) + (cond ((setq string-start (python-syntax-context 'string)) + (goto-char string-start) + (python-nav-end-of-statement t)) + ((python-syntax-context 'paren) + ;; The statement won't end before we've escaped + ;; at least one level of parenthesis. + (condition-case err + (goto-char (scan-lists (point) 1 -1)) + (scan-error (goto-char (nth 3 err))))) + ((setq bs-pos (python-info-line-ends-backslash-p)) + (goto-char bs-pos) + (forward-line 1)))))) (point-marker)) (defun python-nav-backward-statement (&optional arg) -- 2.20.1