From: Fabián Ezequiel Gallina Date: Mon, 2 Sep 2013 03:37:18 +0000 (-0300) Subject: * progmodes/python.el (python-nav-if-name-main): New command. X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~1686^2~28 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=e5c144d64de3f87d2f8d264960e24f65aeb67857;p=emacs.git * progmodes/python.el (python-nav-if-name-main): New command. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b48ff2f5030..f99a4e8b1fb 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -2,6 +2,7 @@ * progmodes/python.el (python-shell-completion-get-completions): Drop use of deleted `comint-last-prompt-overlay'. + (python-nav-if-name-main): New command. 2013-09-01 Glenn Morris diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index b8e2f4c8de9..af55854bbc4 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -52,12 +52,12 @@ ;; Extra functions `python-nav-forward-statement', ;; `python-nav-backward-statement', ;; `python-nav-beginning-of-statement', `python-nav-end-of-statement', -;; `python-nav-beginning-of-block' and `python-nav-end-of-block' are -;; included but no bound to any key. At last but not least the -;; specialized `python-nav-forward-sexp' allows easy navigation -;; between code blocks. If you prefer `cc-mode'-like `forward-sexp' -;; movement, setting `forward-sexp-function' to nil is enough, You can -;; do that using the `python-mode-hook': +;; `python-nav-beginning-of-block', `python-nav-end-of-block' and +;; `python-nav-if-name-main' are included but no bound to any key. At +;; last but not least the specialized `python-nav-forward-sexp' allows +;; easy navigation between code blocks. If you prefer `cc-mode'-like +;; `forward-sexp' movement, setting `forward-sexp-function' to nil is +;; enough, You can do that using the `python-mode-hook': ;; (add-hook 'python-mode-hook ;; (lambda () (setq forward-sexp-function nil))) @@ -1583,6 +1583,29 @@ This command assumes point is not in a string or comment." (or arg (setq arg 1)) (python-nav-up-list (- arg))) +(defun python-nav-if-name-main () + "Move point at the beginning the __main__ block. +When \"if __name__ == '__main__':\" is found returns its +position, else returns nil." + (interactive) + (let ((point (point)) + (found (catch 'found + (goto-char (point-min)) + (while (re-search-forward + (python-rx line-start + "if" (+ space) + "__name__" (+ space) + "==" (+ space) + (group-n 1 (or ?\" ?\')) + "__main__" (backref 1) (* space) ":") + nil t) + (when (not (python-syntax-context-type)) + (beginning-of-line) + (throw 'found t)))))) + (if found + (point) + (ignore (goto-char point))))) + ;;; Shell integration