emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] trunk r114095: * progmodes/python.el (python-nav-if-name-m


From: Fabián Ezequiel Gallina
Subject: [Emacs-diffs] trunk r114095: * progmodes/python.el (python-nav-if-name-main): New command.
Date: Mon, 02 Sep 2013 03:37:26 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 114095
revision-id: address@hidden
parent: address@hidden
committer: Fabián Ezequiel Gallina <address@hidden>
branch nick: trunk
timestamp: Mon 2013-09-02 00:37:18 -0300
message:
  * progmodes/python.el (python-nav-if-name-main): New command.
modified:
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/progmodes/python.el       python.el-20091113204419-o5vbwnq5f7feedwu-3008
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-09-02 03:21:13 +0000
+++ b/lisp/ChangeLog    2013-09-02 03:37:18 +0000
@@ -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  <address@hidden>
 

=== modified file 'lisp/progmodes/python.el'
--- a/lisp/progmodes/python.el  2013-09-02 03:21:13 +0000
+++ b/lisp/progmodes/python.el  2013-09-02 03:37:18 +0000
@@ -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 @@
   (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
 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]