python-mode.el-6.1.3/0000755000000000000000000000000012271450615014324 5ustar rootroot00000000000000python-mode.el-6.1.3/test/0000755000000000000000000000000012271450615015303 5ustar rootroot00000000000000python-mode.el-6.1.3/test/py-shell-completion-tests.el0000644000000000000000000001411012271450574022672 0ustar rootroot00000000000000;;; py-shell-completion-tests.el --- Test completion for available Python shell ;; Author: Andreas Roehler ;; Keywords: languages, convenience ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: Edit `py-test-pyshellname-list' before ;; running this test-builder or give a list of shells as ;; arguments ;;; Code: (setq python-mode-shell-complete-tests (list 'python-shell-complete-test 'usr-bin-python-shell-complete-test 'usr-bin-python2.7-shell-complete-test ;; 'arbeit-python-epdfree-epd_free-7.2-2-rh5-x86-bin-python2.7-shell-complete-test 'usr-bin-python3-shell-complete-test ;; 'usr-bin-python3.2-shell-complete-test ;; 'ipython-shell-complete-test ;; 'usr-bin-ipython-shell-complete-test ;; 'arbeit-python-epd_free-7.1-2-rh5-x86-bin-ipython-shell-complete-test ) ) (defun py-run-shell-complete-tests () (interactive) (dolist (ele python-mode-shell-complete-tests) (funcall ele) ;; (sit-for 1) )) (defun python-shell-complete-test () (interactive) (let (py-shell-switch-buffers-on-execute-p py-split-windows-on-execute-p) ;; (set-buffer (py-shell nil t "python" nil "/")) (set-buffer (py-shell nil t "python")) (when (interactive-p) (switch-to-buffer (current-buffer))) (sit-for 0.2 t) (goto-char (point-max)) (save-excursion (insert "pri") (py-shell-complete)) (sit-for 0.5) (assert (looking-at "print") nil "python-shell-complete-test failed") (message "%s" "python-shell-complete-test passed"))) (defun usr-bin-python-shell-complete-test () (interactive) (let (py-shell-switch-buffers-on-execute-p py-split-windows-on-execute-p) (set-buffer (py-shell nil t "/usr/bin/python" nil "/")) (switch-to-buffer (current-buffer)) (sit-for 0.1) (goto-char (point-max)) (insert "pri") (py-shell-complete) (forward-word -1) (sit-for 0.1) (assert (looking-at "print") nil "usr-bin-python-shell-complete-test failed") (when py-verbose-p (message "%s" "usr-bin-python-shell-complete-test passed")))) (defun usr-bin-python2.7-shell-complete-test () (interactive) (let (py-shell-switch-buffers-on-execute-p py-split-windows-on-execute-p) (set-buffer (py-shell nil t "/usr/bin/python2.7" nil "/")) (when (interactive-p) (switch-to-buffer (current-buffer))) (sit-for 0.1) (goto-char (point-max)) (insert "pri") (py-shell-complete) (forward-word -1) (assert (looking-at "print") nil "usr-bin-python2.7-shell-complete-test failed") (message "%s" "usr-bin-python2.7-shell-complete-test passed"))) (defun arbeit-python-epdfree-epd_free-7.2-2-rh5-x86-bin-python2.7-shell-complete-test () (interactive) (let (py-shell-switch-buffers-on-execute-p py-split-windows-on-execute-p) (set-buffer (py-shell nil t "~/arbeit/python/epdfree/epd_free-7.2-2-rh5-x86/bin/python2.7" nil "/")) (sit-for 0.2 t) (goto-char (point-max)) (insert "pri") (py-shell-complete) (sit-for 0.1) (forward-word -1) (assert (looking-at "print") nil "arbeit-python-epdfree-epd_free-7.2-2-rh5-x86-bin-python2.7-shell-complete-test failed") (when py-verbose-p (message "%s" "arbeit-python-epdfree-epd_free-7.2-2-rh5-x86-bin-python2.7-shell-complete-test passed")))) (defun usr-bin-python3-shell-complete-test () (interactive) (let (py-shell-switch-buffers-on-execute-p py-split-windows-on-execute-p) (set-buffer (py-shell nil t "/usr/local/bin/python3" nil "/")) (when (interactive-p) (switch-to-buffer (current-buffer))) (goto-char (point-max)) (insert "pri") (py-shell-complete) (forward-word -1) (sit-for 0.1) (assert (looking-at "print") nil "usr-bin-python3-shell-complete-test failed") (message "%s" "usr-bin-python3-shell-complete-test passed"))) (defun ipython-shell-complete-test () (interactive) (let (py-shell-switch-buffers-on-execute-p py-split-windows-on-execute-p) (set-buffer (py-shell nil t "ipython")) (switch-to-buffer (current-buffer)) (sit-for 2) (goto-char (point-max)) ;; (comint-send-input) (insert "pri") (py-shell-complete) (sit-for 0.1) (assert (looking-back "print") nil "ipython-shell-complete-test failed") (message "%s" "ipython-shell-complete-test passed"))) (defun usr-bin-ipython-shell-complete-test () (interactive) (let (py-shell-switch-buffers-on-execute-p py-split-windows-on-execute-p) (set-buffer (py-shell nil t "/usr/bin/ipython" nil "/")) (sit-for 0.1) (goto-char (point-max)) (insert "pri") (py-shell-complete) (sit-for 1 t) (forward-word -1) (assert (looking-at "print") nil "usr-bin-ipython-shell-complete-test failed") (message "%s" "usr-bin-ipython-shell-complete-test passed"))) (defun arbeit-python-epd_free-7.1-2-rh5-x86-bin-ipython-shell-complete-test () (interactive) (let (py-shell-switch-buffers-on-execute-p py-split-windows-on-execute-p) (set-buffer (py-shell nil t "~/arbeit/python/epd_free-7.1-2-rh5-x86/bin/ipython" nil "/")) (sit-for 0.1) (switch-to-buffer (current-buffer)) (goto-char (point-max)) (insert "pri") (py-shell-complete) (sit-for 1 t) (forward-word -1) (assert (looking-at "print") nil "arbeit-python-epd_free-7.1-2-rh5-x86-bin-ipython-shell-complete-test failed") (message "%s" "arbeit-python-epd_free-7.1-2-rh5-x86-bin-ipython-shell-complete-test passed"))) (provide 'py-shell-completion-tests) ;;; py-shell-completion-tests ends here python-mode.el-6.1.3/test/python-extended-executes-test.el0000644000000000000000000042137012271450574023557 0ustar rootroot00000000000000;;; python-extended-executes-test.el --- extended-executes test ;; Author: Andreas Roehler ;; Keywords: languages, convenience ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Code: (defun py-execute-statement-python-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python-test\")")) (py-bug-tests-intern 'py-execute-statement-python-base arg teststring))) (defun py-execute-statement-python-base () (assert (py-execute-statement-python) nil "py-execute-statement-python-test failed")) (defun py-execute-statement-python-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-python-switch-base arg teststring))) (defun py-execute-statement-python-switch-base () (assert (py-execute-statement-python-switch) nil "py-execute-statement-python-switch-test failed")) (defun py-execute-statement-python-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python-no-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-python-no-switch-base arg teststring))) (defun py-execute-statement-python-no-switch-base () (assert (py-execute-statement-python-no-switch) nil "py-execute-statement-python-no-switch-test failed")) (defun py-execute-statement-python-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python-dedicated-test\")")) (py-bug-tests-intern 'py-execute-statement-python-dedicated-base arg teststring))) (defun py-execute-statement-python-dedicated-base () (assert (py-execute-statement-python-dedicated) nil "py-execute-statement-python-dedicated-test failed")) (defun py-execute-statement-python-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-python-dedicated-switch-base arg teststring))) (defun py-execute-statement-python-dedicated-switch-base () (assert (py-execute-statement-python-dedicated-switch) nil "py-execute-statement-python-dedicated-switch-test failed")) (defun py-execute-statement-ipython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-ipython-test\")")) (py-bug-tests-intern 'py-execute-statement-ipython-base arg teststring))) (defun py-execute-statement-ipython-base () (sit-for 0.1) (assert (py-execute-statement-ipython) nil "py-execute-statement-ipython-test failed")) (defun py-execute-statement-ipython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-ipython-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-ipython-switch-base arg teststring))) (defun py-execute-statement-ipython-switch-base () (assert (py-execute-statement-ipython-switch) nil "py-execute-statement-ipython-switch-test failed")) (defun py-execute-statement-ipython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-ipython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-ipython-no-switch-base arg teststring))) (defun py-execute-statement-ipython-no-switch-base () (assert (py-execute-statement-ipython-no-switch) nil "py-execute-statement-ipython-no-switch-test failed")) (defun py-execute-statement-ipython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-ipython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-statement-ipython-dedicated-base arg teststring))) (defun py-execute-statement-ipython-dedicated-base () (assert (py-execute-statement-ipython-dedicated) nil "py-execute-statement-ipython-dedicated-test failed")) (defun py-execute-statement-ipython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-ipython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-ipython-dedicated-switch-base arg teststring))) (defun py-execute-statement-ipython-dedicated-switch-base () (assert (py-execute-statement-ipython-dedicated-switch) nil "py-execute-statement-ipython-dedicated-switch-test failed")) (defun py-execute-statement-python3-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python3-test\")")) (py-bug-tests-intern 'py-execute-statement-python3-base arg teststring))) (defun py-execute-statement-python3-base () (assert (py-execute-statement-python3) nil "py-execute-statement-python3-test failed")) (defun py-execute-statement-python3-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python3-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-python3-switch-base arg teststring))) (defun py-execute-statement-python3-switch-base () (assert (py-execute-statement-python3-switch) nil "py-execute-statement-python3-switch-test failed")) (defun py-execute-statement-python3-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python3-no-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-python3-no-switch-base arg teststring))) (defun py-execute-statement-python3-no-switch-base () (assert (py-execute-statement-python3-no-switch) nil "py-execute-statement-python3-no-switch-test failed")) (defun py-execute-statement-python3-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python3-dedicated-test\")")) (py-bug-tests-intern 'py-execute-statement-python3-dedicated-base arg teststring))) (defun py-execute-statement-python3-dedicated-base () (assert (py-execute-statement-python3-dedicated) nil "py-execute-statement-python3-dedicated-test failed")) (defun py-execute-statement-python3-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python3-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-python3-dedicated-switch-base arg teststring))) (defun py-execute-statement-python3-dedicated-switch-base () (assert (py-execute-statement-python3-dedicated-switch) nil "py-execute-statement-python3-dedicated-switch-test failed")) (defun py-execute-statement-python2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python2-test\")")) (py-bug-tests-intern 'py-execute-statement-python2-base arg teststring))) (defun py-execute-statement-python2-base () (assert (py-execute-statement-python2) nil "py-execute-statement-python2-test failed")) (defun py-execute-statement-python2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python2-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-python2-switch-base arg teststring))) (defun py-execute-statement-python2-switch-base () (assert (py-execute-statement-python2-switch) nil "py-execute-statement-python2-switch-test failed")) (defun py-execute-statement-python2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-python2-no-switch-base arg teststring))) (defun py-execute-statement-python2-no-switch-base () (assert (py-execute-statement-python2-no-switch) nil "py-execute-statement-python2-no-switch-test failed")) (defun py-execute-statement-python2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-statement-python2-dedicated-base arg teststring))) (defun py-execute-statement-python2-dedicated-base () (assert (py-execute-statement-python2-dedicated) nil "py-execute-statement-python2-dedicated-test failed")) (defun py-execute-statement-python2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-python2-dedicated-switch-base arg teststring))) (defun py-execute-statement-python2-dedicated-switch-base () (assert (py-execute-statement-python2-dedicated-switch) nil "py-execute-statement-python2-dedicated-switch-test failed")) (defun py-execute-statement-python2.7-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python2.7-test\")")) (py-bug-tests-intern 'py-execute-statement-python2.7-base arg teststring))) (defun py-execute-statement-python2.7-base () (assert (py-execute-statement-python2.7) nil "py-execute-statement-python2.7-test failed")) (defun py-execute-statement-python2.7-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python2.7-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-python2.7-switch-base arg teststring))) (defun py-execute-statement-python2.7-switch-base () (assert (py-execute-statement-python2.7-switch) nil "py-execute-statement-python2.7-switch-test failed")) (defun py-execute-statement-python2.7-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python2.7-no-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-python2.7-no-switch-base arg teststring))) (defun py-execute-statement-python2.7-no-switch-base () (assert (py-execute-statement-python2.7-no-switch) nil "py-execute-statement-python2.7-no-switch-test failed")) (defun py-execute-statement-python2.7-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python2.7-dedicated-test\")")) (py-bug-tests-intern 'py-execute-statement-python2.7-dedicated-base arg teststring))) (defun py-execute-statement-python2.7-dedicated-base () (assert (py-execute-statement-python2.7-dedicated) nil "py-execute-statement-python2.7-dedicated-test failed")) (defun py-execute-statement-python2.7-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python2.7-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-python2.7-dedicated-switch-base arg teststring))) (defun py-execute-statement-python2.7-dedicated-switch-base () (assert (py-execute-statement-python2.7-dedicated-switch) nil "py-execute-statement-python2.7-dedicated-switch-test failed")) (defun py-execute-statement-jython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-jython-test\")")) (py-bug-tests-intern 'py-execute-statement-jython-base arg teststring))) (defun py-execute-statement-jython-base () (assert (py-execute-statement-jython) nil "py-execute-statement-jython-test failed")) (defun py-execute-statement-jython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-jython-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-jython-switch-base arg teststring))) (defun py-execute-statement-jython-switch-base () (assert (py-execute-statement-jython-switch) nil "py-execute-statement-jython-switch-test failed")) (defun py-execute-statement-jython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-jython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-jython-no-switch-base arg teststring))) (defun py-execute-statement-jython-no-switch-base () (assert (py-execute-statement-jython-no-switch) nil "py-execute-statement-jython-no-switch-test failed")) (defun py-execute-statement-jython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-jython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-statement-jython-dedicated-base arg teststring))) (defun py-execute-statement-jython-dedicated-base () (assert (py-execute-statement-jython-dedicated) nil "py-execute-statement-jython-dedicated-test failed")) (defun py-execute-statement-jython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-jython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-jython-dedicated-switch-base arg teststring))) (defun py-execute-statement-jython-dedicated-switch-base () (assert (py-execute-statement-jython-dedicated-switch) nil "py-execute-statement-jython-dedicated-switch-test failed")) (defun py-execute-statement-python3.2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python3.2-test\")")) (py-bug-tests-intern 'py-execute-statement-python3.2-base arg teststring))) (defun py-execute-statement-python3.2-base () (assert (py-execute-statement-python3.2) nil "py-execute-statement-python3.2-test failed")) (defun py-execute-statement-python3.2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python3.2-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-python3.2-switch-base arg teststring))) (defun py-execute-statement-python3.2-switch-base () (assert (py-execute-statement-python3.2-switch) nil "py-execute-statement-python3.2-switch-test failed")) (defun py-execute-statement-python3.2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python3.2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-python3.2-no-switch-base arg teststring))) (defun py-execute-statement-python3.2-no-switch-base () (assert (py-execute-statement-python3.2-no-switch) nil "py-execute-statement-python3.2-no-switch-test failed")) (defun py-execute-statement-python3.2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python3.2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-statement-python3.2-dedicated-base arg teststring))) (defun py-execute-statement-python3.2-dedicated-base () (assert (py-execute-statement-python3.2-dedicated) nil "py-execute-statement-python3.2-dedicated-test failed")) (defun py-execute-statement-python3.2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-python3.2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-statement-python3.2-dedicated-switch-base arg teststring))) (defun py-execute-statement-python3.2-dedicated-switch-base () (assert (py-execute-statement-python3.2-dedicated-switch) nil "py-execute-statement-python3.2-dedicated-switch-test failed")) (defun py-execute-block-python-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python-test\")")) (py-bug-tests-intern 'py-execute-block-python-base arg teststring))) (defun py-execute-block-python-base () (sit-for 0.1) (assert (py-execute-block-python) nil "py-execute-block-python-test failed")) (defun py-execute-block-python-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python-switch-test\")")) (py-bug-tests-intern 'py-execute-block-python-switch-base arg teststring))) (defun py-execute-block-python-switch-base () (assert (py-execute-block-python-switch) nil "py-execute-block-python-switch-test failed")) (defun py-execute-block-python-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python-no-switch-test\")")) (py-bug-tests-intern 'py-execute-block-python-no-switch-base arg teststring))) (defun py-execute-block-python-no-switch-base () (assert (py-execute-block-python-no-switch) nil "py-execute-block-python-no-switch-test failed")) (defun py-execute-block-python-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python-dedicated-test\")")) (py-bug-tests-intern 'py-execute-block-python-dedicated-base arg teststring))) (defun py-execute-block-python-dedicated-base () (assert (py-execute-block-python-dedicated) nil "py-execute-block-python-dedicated-test failed")) (defun py-execute-block-python-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-block-python-dedicated-switch-base arg teststring))) (defun py-execute-block-python-dedicated-switch-base () (assert (py-execute-block-python-dedicated-switch) nil "py-execute-block-python-dedicated-switch-test failed")) (defun py-execute-block-ipython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-ipython-test\")")) (py-bug-tests-intern 'py-execute-block-ipython-base arg teststring))) (defun py-execute-block-ipython-base () (assert (py-execute-block-ipython) nil "py-execute-block-ipython-test failed")) (defun py-execute-block-ipython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-ipython-switch-test\")")) (py-bug-tests-intern 'py-execute-block-ipython-switch-base arg teststring))) (defun py-execute-block-ipython-switch-base () (assert (py-execute-block-ipython-switch) nil "py-execute-block-ipython-switch-test failed")) (defun py-execute-block-ipython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-ipython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-block-ipython-no-switch-base arg teststring))) (defun py-execute-block-ipython-no-switch-base () (assert (py-execute-block-ipython-no-switch) nil "py-execute-block-ipython-no-switch-test failed")) (defun py-execute-block-ipython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-ipython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-block-ipython-dedicated-base arg teststring))) (defun py-execute-block-ipython-dedicated-base () (assert (py-execute-block-ipython-dedicated) nil "py-execute-block-ipython-dedicated-test failed")) (defun py-execute-block-ipython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-ipython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-block-ipython-dedicated-switch-base arg teststring))) (defun py-execute-block-ipython-dedicated-switch-base () (assert (py-execute-block-ipython-dedicated-switch) nil "py-execute-block-ipython-dedicated-switch-test failed")) (defun py-execute-block-python3-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python3-test\")")) (py-bug-tests-intern 'py-execute-block-python3-base arg teststring))) (defun py-execute-block-python3-base () (assert (py-execute-block-python3) nil "py-execute-block-python3-test failed")) (defun py-execute-block-python3-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python3-switch-test\")")) (py-bug-tests-intern 'py-execute-block-python3-switch-base arg teststring))) (defun py-execute-block-python3-switch-base () (assert (py-execute-block-python3-switch) nil "py-execute-block-python3-switch-test failed")) (defun py-execute-block-python3-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python3-no-switch-test\")")) (py-bug-tests-intern 'py-execute-block-python3-no-switch-base arg teststring))) (defun py-execute-block-python3-no-switch-base () (assert (py-execute-block-python3-no-switch) nil "py-execute-block-python3-no-switch-test failed")) (defun py-execute-block-python3-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python3-dedicated-test\")")) (py-bug-tests-intern 'py-execute-block-python3-dedicated-base arg teststring))) (defun py-execute-block-python3-dedicated-base () (assert (py-execute-block-python3-dedicated) nil "py-execute-block-python3-dedicated-test failed")) (defun py-execute-block-python3-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python3-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-block-python3-dedicated-switch-base arg teststring))) (defun py-execute-block-python3-dedicated-switch-base () (assert (py-execute-block-python3-dedicated-switch) nil "py-execute-block-python3-dedicated-switch-test failed")) (defun py-execute-block-python2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python2-test\")")) (py-bug-tests-intern 'py-execute-block-python2-base arg teststring))) (defun py-execute-block-python2-base () (assert (py-execute-block-python2) nil "py-execute-block-python2-test failed")) (defun py-execute-block-python2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python2-switch-test\")")) (py-bug-tests-intern 'py-execute-block-python2-switch-base arg teststring))) (defun py-execute-block-python2-switch-base () (assert (py-execute-block-python2-switch) nil "py-execute-block-python2-switch-test failed")) (defun py-execute-block-python2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-block-python2-no-switch-base arg teststring))) (defun py-execute-block-python2-no-switch-base () (assert (py-execute-block-python2-no-switch) nil "py-execute-block-python2-no-switch-test failed")) (defun py-execute-block-python2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-block-python2-dedicated-base arg teststring))) (defun py-execute-block-python2-dedicated-base () (assert (py-execute-block-python2-dedicated) nil "py-execute-block-python2-dedicated-test failed")) (defun py-execute-block-python2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-block-python2-dedicated-switch-base arg teststring))) (defun py-execute-block-python2-dedicated-switch-base () (assert (py-execute-block-python2-dedicated-switch) nil "py-execute-block-python2-dedicated-switch-test failed")) (defun py-execute-block-python2.7-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python2.7-test\")")) (py-bug-tests-intern 'py-execute-block-python2.7-base arg teststring))) (defun py-execute-block-python2.7-base () (assert (py-execute-block-python2.7) nil "py-execute-block-python2.7-test failed")) (defun py-execute-block-python2.7-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python2.7-switch-test\")")) (py-bug-tests-intern 'py-execute-block-python2.7-switch-base arg teststring))) (defun py-execute-block-python2.7-switch-base () (assert (py-execute-block-python2.7-switch) nil "py-execute-block-python2.7-switch-test failed")) (defun py-execute-block-python2.7-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python2.7-no-switch-test\")")) (py-bug-tests-intern 'py-execute-block-python2.7-no-switch-base arg teststring))) (defun py-execute-block-python2.7-no-switch-base () (assert (py-execute-block-python2.7-no-switch) nil "py-execute-block-python2.7-no-switch-test failed")) (defun py-execute-block-python2.7-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python2.7-dedicated-test\")")) (py-bug-tests-intern 'py-execute-block-python2.7-dedicated-base arg teststring))) (defun py-execute-block-python2.7-dedicated-base () (assert (py-execute-block-python2.7-dedicated) nil "py-execute-block-python2.7-dedicated-test failed")) (defun py-execute-block-python2.7-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python2.7-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-block-python2.7-dedicated-switch-base arg teststring))) (defun py-execute-block-python2.7-dedicated-switch-base () (assert (py-execute-block-python2.7-dedicated-switch) nil "py-execute-block-python2.7-dedicated-switch-test failed")) (defun py-execute-block-jython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-jython-test\")")) (py-bug-tests-intern 'py-execute-block-jython-base arg teststring))) (defun py-execute-block-jython-base () (assert (py-execute-block-jython) nil "py-execute-block-jython-test failed")) (defun py-execute-block-jython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-jython-switch-test\")")) (py-bug-tests-intern 'py-execute-block-jython-switch-base arg teststring))) (defun py-execute-block-jython-switch-base () (assert (py-execute-block-jython-switch) nil "py-execute-block-jython-switch-test failed")) (defun py-execute-block-jython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-jython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-block-jython-no-switch-base arg teststring))) (defun py-execute-block-jython-no-switch-base () (assert (py-execute-block-jython-no-switch) nil "py-execute-block-jython-no-switch-test failed")) (defun py-execute-block-jython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-jython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-block-jython-dedicated-base arg teststring))) (defun py-execute-block-jython-dedicated-base () (assert (py-execute-block-jython-dedicated) nil "py-execute-block-jython-dedicated-test failed")) (defun py-execute-block-jython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-jython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-block-jython-dedicated-switch-base arg teststring))) (defun py-execute-block-jython-dedicated-switch-base () (assert (py-execute-block-jython-dedicated-switch) nil "py-execute-block-jython-dedicated-switch-test failed")) (defun py-execute-block-python3.2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python3.2-test\")")) (py-bug-tests-intern 'py-execute-block-python3.2-base arg teststring))) (defun py-execute-block-python3.2-base () (assert (py-execute-block-python3.2) nil "py-execute-block-python3.2-test failed")) (defun py-execute-block-python3.2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python3.2-switch-test\")")) (py-bug-tests-intern 'py-execute-block-python3.2-switch-base arg teststring))) (defun py-execute-block-python3.2-switch-base () (assert (py-execute-block-python3.2-switch) nil "py-execute-block-python3.2-switch-test failed")) (defun py-execute-block-python3.2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python3.2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-block-python3.2-no-switch-base arg teststring))) (defun py-execute-block-python3.2-no-switch-base () (assert (py-execute-block-python3.2-no-switch) nil "py-execute-block-python3.2-no-switch-test failed")) (defun py-execute-block-python3.2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python3.2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-block-python3.2-dedicated-base arg teststring))) (defun py-execute-block-python3.2-dedicated-base () (assert (py-execute-block-python3.2-dedicated) nil "py-execute-block-python3.2-dedicated-test failed")) (defun py-execute-block-python3.2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-python3.2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-block-python3.2-dedicated-switch-base arg teststring))) (defun py-execute-block-python3.2-dedicated-switch-base () (assert (py-execute-block-python3.2-dedicated-switch) nil "py-execute-block-python3.2-dedicated-switch-test failed")) (defun py-execute-block-or-clause-python-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python-base arg teststring))) (defun py-execute-block-or-clause-python-base () (assert (py-execute-block-or-clause-python) nil "py-execute-block-or-clause-python-test failed")) (defun py-execute-block-or-clause-python-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python-switch-base arg teststring))) (defun py-execute-block-or-clause-python-switch-base () (assert (py-execute-block-or-clause-python-switch) nil "py-execute-block-or-clause-python-switch-test failed")) (defun py-execute-block-or-clause-python-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python-no-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python-no-switch-base arg teststring))) (defun py-execute-block-or-clause-python-no-switch-base () (assert (py-execute-block-or-clause-python-no-switch) nil "py-execute-block-or-clause-python-no-switch-test failed")) (defun py-execute-block-or-clause-python-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python-dedicated-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python-dedicated-base arg teststring))) (defun py-execute-block-or-clause-python-dedicated-base () (assert (py-execute-block-or-clause-python-dedicated) nil "py-execute-block-or-clause-python-dedicated-test failed")) (defun py-execute-block-or-clause-python-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python-dedicated-switch-base arg teststring))) (defun py-execute-block-or-clause-python-dedicated-switch-base () (assert (py-execute-block-or-clause-python-dedicated-switch) nil "py-execute-block-or-clause-python-dedicated-switch-test failed")) (defun py-execute-block-or-clause-ipython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-ipython-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-ipython-base arg teststring))) (defun py-execute-block-or-clause-ipython-base () (assert (py-execute-block-or-clause-ipython) nil "py-execute-block-or-clause-ipython-test failed")) (defun py-execute-block-or-clause-ipython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-ipython-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-ipython-switch-base arg teststring))) (defun py-execute-block-or-clause-ipython-switch-base () (assert (py-execute-block-or-clause-ipython-switch) nil "py-execute-block-or-clause-ipython-switch-test failed")) (defun py-execute-block-or-clause-ipython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-ipython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-ipython-no-switch-base arg teststring))) (defun py-execute-block-or-clause-ipython-no-switch-base () (assert (py-execute-block-or-clause-ipython-no-switch) nil "py-execute-block-or-clause-ipython-no-switch-test failed")) (defun py-execute-block-or-clause-ipython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-ipython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-ipython-dedicated-base arg teststring))) (defun py-execute-block-or-clause-ipython-dedicated-base () (assert (py-execute-block-or-clause-ipython-dedicated) nil "py-execute-block-or-clause-ipython-dedicated-test failed")) (defun py-execute-block-or-clause-ipython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-ipython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-ipython-dedicated-switch-base arg teststring))) (defun py-execute-block-or-clause-ipython-dedicated-switch-base () (assert (py-execute-block-or-clause-ipython-dedicated-switch) nil "py-execute-block-or-clause-ipython-dedicated-switch-test failed")) (defun py-execute-block-or-clause-python3-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python3-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python3-base arg teststring))) (defun py-execute-block-or-clause-python3-base () (assert (py-execute-block-or-clause-python3) nil "py-execute-block-or-clause-python3-test failed")) (defun py-execute-block-or-clause-python3-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python3-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python3-switch-base arg teststring))) (defun py-execute-block-or-clause-python3-switch-base () (assert (py-execute-block-or-clause-python3-switch) nil "py-execute-block-or-clause-python3-switch-test failed")) (defun py-execute-block-or-clause-python3-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python3-no-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python3-no-switch-base arg teststring))) (defun py-execute-block-or-clause-python3-no-switch-base () (assert (py-execute-block-or-clause-python3-no-switch) nil "py-execute-block-or-clause-python3-no-switch-test failed")) (defun py-execute-block-or-clause-python3-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python3-dedicated-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python3-dedicated-base arg teststring))) (defun py-execute-block-or-clause-python3-dedicated-base () (assert (py-execute-block-or-clause-python3-dedicated) nil "py-execute-block-or-clause-python3-dedicated-test failed")) (defun py-execute-block-or-clause-python3-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python3-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python3-dedicated-switch-base arg teststring))) (defun py-execute-block-or-clause-python3-dedicated-switch-base () (assert (py-execute-block-or-clause-python3-dedicated-switch) nil "py-execute-block-or-clause-python3-dedicated-switch-test failed")) (defun py-execute-block-or-clause-python2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python2-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python2-base arg teststring))) (defun py-execute-block-or-clause-python2-base () (assert (py-execute-block-or-clause-python2) nil "py-execute-block-or-clause-python2-test failed")) (defun py-execute-block-or-clause-python2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python2-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python2-switch-base arg teststring))) (defun py-execute-block-or-clause-python2-switch-base () (assert (py-execute-block-or-clause-python2-switch) nil "py-execute-block-or-clause-python2-switch-test failed")) (defun py-execute-block-or-clause-python2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python2-no-switch-base arg teststring))) (defun py-execute-block-or-clause-python2-no-switch-base () (assert (py-execute-block-or-clause-python2-no-switch) nil "py-execute-block-or-clause-python2-no-switch-test failed")) (defun py-execute-block-or-clause-python2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python2-dedicated-base arg teststring))) (defun py-execute-block-or-clause-python2-dedicated-base () (assert (py-execute-block-or-clause-python2-dedicated) nil "py-execute-block-or-clause-python2-dedicated-test failed")) (defun py-execute-block-or-clause-python2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python2-dedicated-switch-base arg teststring))) (defun py-execute-block-or-clause-python2-dedicated-switch-base () (assert (py-execute-block-or-clause-python2-dedicated-switch) nil "py-execute-block-or-clause-python2-dedicated-switch-test failed")) (defun py-execute-block-or-clause-python2.7-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python2.7-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python2.7-base arg teststring))) (defun py-execute-block-or-clause-python2.7-base () (assert (py-execute-block-or-clause-python2.7) nil "py-execute-block-or-clause-python2.7-test failed")) (defun py-execute-block-or-clause-python2.7-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python2.7-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python2.7-switch-base arg teststring))) (defun py-execute-block-or-clause-python2.7-switch-base () (assert (py-execute-block-or-clause-python2.7-switch) nil "py-execute-block-or-clause-python2.7-switch-test failed")) (defun py-execute-block-or-clause-python2.7-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python2.7-no-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python2.7-no-switch-base arg teststring))) (defun py-execute-block-or-clause-python2.7-no-switch-base () (assert (py-execute-block-or-clause-python2.7-no-switch) nil "py-execute-block-or-clause-python2.7-no-switch-test failed")) (defun py-execute-block-or-clause-python2.7-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python2.7-dedicated-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python2.7-dedicated-base arg teststring))) (defun py-execute-block-or-clause-python2.7-dedicated-base () (assert (py-execute-block-or-clause-python2.7-dedicated) nil "py-execute-block-or-clause-python2.7-dedicated-test failed")) (defun py-execute-block-or-clause-python2.7-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python2.7-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python2.7-dedicated-switch-base arg teststring))) (defun py-execute-block-or-clause-python2.7-dedicated-switch-base () (assert (py-execute-block-or-clause-python2.7-dedicated-switch) nil "py-execute-block-or-clause-python2.7-dedicated-switch-test failed")) (defun py-execute-block-or-clause-jython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-jython-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-jython-base arg teststring))) (defun py-execute-block-or-clause-jython-base () (assert (py-execute-block-or-clause-jython) nil "py-execute-block-or-clause-jython-test failed")) (defun py-execute-block-or-clause-jython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-jython-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-jython-switch-base arg teststring))) (defun py-execute-block-or-clause-jython-switch-base () (assert (py-execute-block-or-clause-jython-switch) nil "py-execute-block-or-clause-jython-switch-test failed")) (defun py-execute-block-or-clause-jython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-jython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-jython-no-switch-base arg teststring))) (defun py-execute-block-or-clause-jython-no-switch-base () (assert (py-execute-block-or-clause-jython-no-switch) nil "py-execute-block-or-clause-jython-no-switch-test failed")) (defun py-execute-block-or-clause-jython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-jython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-jython-dedicated-base arg teststring))) (defun py-execute-block-or-clause-jython-dedicated-base () (assert (py-execute-block-or-clause-jython-dedicated) nil "py-execute-block-or-clause-jython-dedicated-test failed")) (defun py-execute-block-or-clause-jython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-jython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-jython-dedicated-switch-base arg teststring))) (defun py-execute-block-or-clause-jython-dedicated-switch-base () (assert (py-execute-block-or-clause-jython-dedicated-switch) nil "py-execute-block-or-clause-jython-dedicated-switch-test failed")) (defun py-execute-block-or-clause-python3.2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python3.2-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python3.2-base arg teststring))) (defun py-execute-block-or-clause-python3.2-base () (assert (py-execute-block-or-clause-python3.2) nil "py-execute-block-or-clause-python3.2-test failed")) (defun py-execute-block-or-clause-python3.2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python3.2-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python3.2-switch-base arg teststring))) (defun py-execute-block-or-clause-python3.2-switch-base () (assert (py-execute-block-or-clause-python3.2-switch) nil "py-execute-block-or-clause-python3.2-switch-test failed")) (defun py-execute-block-or-clause-python3.2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python3.2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python3.2-no-switch-base arg teststring))) (defun py-execute-block-or-clause-python3.2-no-switch-base () (assert (py-execute-block-or-clause-python3.2-no-switch) nil "py-execute-block-or-clause-python3.2-no-switch-test failed")) (defun py-execute-block-or-clause-python3.2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python3.2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python3.2-dedicated-base arg teststring))) (defun py-execute-block-or-clause-python3.2-dedicated-base () (assert (py-execute-block-or-clause-python3.2-dedicated) nil "py-execute-block-or-clause-python3.2-dedicated-test failed")) (defun py-execute-block-or-clause-python3.2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-python3.2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-python3.2-dedicated-switch-base arg teststring))) (defun py-execute-block-or-clause-python3.2-dedicated-switch-base () (assert (py-execute-block-or-clause-python3.2-dedicated-switch) nil "py-execute-block-or-clause-python3.2-dedicated-switch-test failed")) (defun py-execute-def-python-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python-test\")")) (py-bug-tests-intern 'py-execute-def-python-base arg teststring))) (defun py-execute-def-python-base () (assert (py-execute-def-python) nil "py-execute-def-python-test failed")) (defun py-execute-def-python-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python-switch-test\")")) (py-bug-tests-intern 'py-execute-def-python-switch-base arg teststring))) (defun py-execute-def-python-switch-base () (assert (py-execute-def-python-switch) nil "py-execute-def-python-switch-test failed")) (defun py-execute-def-python-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python-no-switch-test\")")) (py-bug-tests-intern 'py-execute-def-python-no-switch-base arg teststring))) (defun py-execute-def-python-no-switch-base () (assert (py-execute-def-python-no-switch) nil "py-execute-def-python-no-switch-test failed")) (defun py-execute-def-python-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python-dedicated-test\")")) (py-bug-tests-intern 'py-execute-def-python-dedicated-base arg teststring))) (defun py-execute-def-python-dedicated-base () (assert (py-execute-def-python-dedicated) nil "py-execute-def-python-dedicated-test failed")) (defun py-execute-def-python-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-def-python-dedicated-switch-base arg teststring))) (defun py-execute-def-python-dedicated-switch-base () (assert (py-execute-def-python-dedicated-switch) nil "py-execute-def-python-dedicated-switch-test failed")) (defun py-execute-def-ipython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-ipython-test\")")) (py-bug-tests-intern 'py-execute-def-ipython-base arg teststring))) (defun py-execute-def-ipython-base () (assert (py-execute-def-ipython) nil "py-execute-def-ipython-test failed")) (defun py-execute-def-ipython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-ipython-switch-test\")")) (py-bug-tests-intern 'py-execute-def-ipython-switch-base arg teststring))) (defun py-execute-def-ipython-switch-base () (assert (py-execute-def-ipython-switch) nil "py-execute-def-ipython-switch-test failed")) (defun py-execute-def-ipython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-ipython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-def-ipython-no-switch-base arg teststring))) (defun py-execute-def-ipython-no-switch-base () (assert (py-execute-def-ipython-no-switch) nil "py-execute-def-ipython-no-switch-test failed")) (defun py-execute-def-ipython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-ipython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-def-ipython-dedicated-base arg teststring))) (defun py-execute-def-ipython-dedicated-base () (assert (py-execute-def-ipython-dedicated) nil "py-execute-def-ipython-dedicated-test failed")) (defun py-execute-def-ipython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-ipython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-def-ipython-dedicated-switch-base arg teststring))) (defun py-execute-def-ipython-dedicated-switch-base () (assert (py-execute-def-ipython-dedicated-switch) nil "py-execute-def-ipython-dedicated-switch-test failed")) (defun py-execute-def-python3-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python3-test\")")) (py-bug-tests-intern 'py-execute-def-python3-base arg teststring))) (defun py-execute-def-python3-base () (assert (py-execute-def-python3) nil "py-execute-def-python3-test failed")) (defun py-execute-def-python3-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python3-switch-test\")")) (py-bug-tests-intern 'py-execute-def-python3-switch-base arg teststring))) (defun py-execute-def-python3-switch-base () (assert (py-execute-def-python3-switch) nil "py-execute-def-python3-switch-test failed")) (defun py-execute-def-python3-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python3-no-switch-test\")")) (py-bug-tests-intern 'py-execute-def-python3-no-switch-base arg teststring))) (defun py-execute-def-python3-no-switch-base () (assert (py-execute-def-python3-no-switch) nil "py-execute-def-python3-no-switch-test failed")) (defun py-execute-def-python3-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python3-dedicated-test\")")) (py-bug-tests-intern 'py-execute-def-python3-dedicated-base arg teststring))) (defun py-execute-def-python3-dedicated-base () (assert (py-execute-def-python3-dedicated) nil "py-execute-def-python3-dedicated-test failed")) (defun py-execute-def-python3-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python3-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-def-python3-dedicated-switch-base arg teststring))) (defun py-execute-def-python3-dedicated-switch-base () (assert (py-execute-def-python3-dedicated-switch) nil "py-execute-def-python3-dedicated-switch-test failed")) (defun py-execute-def-python2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python2-test\")")) (py-bug-tests-intern 'py-execute-def-python2-base arg teststring))) (defun py-execute-def-python2-base () (assert (py-execute-def-python2) nil "py-execute-def-python2-test failed")) (defun py-execute-def-python2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python2-switch-test\")")) (py-bug-tests-intern 'py-execute-def-python2-switch-base arg teststring))) (defun py-execute-def-python2-switch-base () (assert (py-execute-def-python2-switch) nil "py-execute-def-python2-switch-test failed")) (defun py-execute-def-python2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-def-python2-no-switch-base arg teststring))) (defun py-execute-def-python2-no-switch-base () (assert (py-execute-def-python2-no-switch) nil "py-execute-def-python2-no-switch-test failed")) (defun py-execute-def-python2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-def-python2-dedicated-base arg teststring))) (defun py-execute-def-python2-dedicated-base () (assert (py-execute-def-python2-dedicated) nil "py-execute-def-python2-dedicated-test failed")) (defun py-execute-def-python2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-def-python2-dedicated-switch-base arg teststring))) (defun py-execute-def-python2-dedicated-switch-base () (assert (py-execute-def-python2-dedicated-switch) nil "py-execute-def-python2-dedicated-switch-test failed")) (defun py-execute-def-python2.7-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python2.7-test\")")) (py-bug-tests-intern 'py-execute-def-python2.7-base arg teststring))) (defun py-execute-def-python2.7-base () (assert (py-execute-def-python2.7) nil "py-execute-def-python2.7-test failed")) (defun py-execute-def-python2.7-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python2.7-switch-test\")")) (py-bug-tests-intern 'py-execute-def-python2.7-switch-base arg teststring))) (defun py-execute-def-python2.7-switch-base () (assert (py-execute-def-python2.7-switch) nil "py-execute-def-python2.7-switch-test failed")) (defun py-execute-def-python2.7-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python2.7-no-switch-test\")")) (py-bug-tests-intern 'py-execute-def-python2.7-no-switch-base arg teststring))) (defun py-execute-def-python2.7-no-switch-base () (assert (py-execute-def-python2.7-no-switch) nil "py-execute-def-python2.7-no-switch-test failed")) (defun py-execute-def-python2.7-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python2.7-dedicated-test\")")) (py-bug-tests-intern 'py-execute-def-python2.7-dedicated-base arg teststring))) (defun py-execute-def-python2.7-dedicated-base () (assert (py-execute-def-python2.7-dedicated) nil "py-execute-def-python2.7-dedicated-test failed")) (defun py-execute-def-python2.7-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python2.7-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-def-python2.7-dedicated-switch-base arg teststring))) (defun py-execute-def-python2.7-dedicated-switch-base () (assert (py-execute-def-python2.7-dedicated-switch) nil "py-execute-def-python2.7-dedicated-switch-test failed")) (defun py-execute-def-jython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-jython-test\")")) (py-bug-tests-intern 'py-execute-def-jython-base arg teststring))) (defun py-execute-def-jython-base () (assert (py-execute-def-jython) nil "py-execute-def-jython-test failed")) (defun py-execute-def-jython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-jython-switch-test\")")) (py-bug-tests-intern 'py-execute-def-jython-switch-base arg teststring))) (defun py-execute-def-jython-switch-base () (assert (py-execute-def-jython-switch) nil "py-execute-def-jython-switch-test failed")) (defun py-execute-def-jython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-jython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-def-jython-no-switch-base arg teststring))) (defun py-execute-def-jython-no-switch-base () (assert (py-execute-def-jython-no-switch) nil "py-execute-def-jython-no-switch-test failed")) (defun py-execute-def-jython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-jython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-def-jython-dedicated-base arg teststring))) (defun py-execute-def-jython-dedicated-base () (assert (py-execute-def-jython-dedicated) nil "py-execute-def-jython-dedicated-test failed")) (defun py-execute-def-jython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-jython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-def-jython-dedicated-switch-base arg teststring))) (defun py-execute-def-jython-dedicated-switch-base () (assert (py-execute-def-jython-dedicated-switch) nil "py-execute-def-jython-dedicated-switch-test failed")) (defun py-execute-def-python3.2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python3.2-test\")")) (py-bug-tests-intern 'py-execute-def-python3.2-base arg teststring))) (defun py-execute-def-python3.2-base () (assert (py-execute-def-python3.2) nil "py-execute-def-python3.2-test failed")) (defun py-execute-def-python3.2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python3.2-switch-test\")")) (py-bug-tests-intern 'py-execute-def-python3.2-switch-base arg teststring))) (defun py-execute-def-python3.2-switch-base () (assert (py-execute-def-python3.2-switch) nil "py-execute-def-python3.2-switch-test failed")) (defun py-execute-def-python3.2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python3.2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-def-python3.2-no-switch-base arg teststring))) (defun py-execute-def-python3.2-no-switch-base () (assert (py-execute-def-python3.2-no-switch) nil "py-execute-def-python3.2-no-switch-test failed")) (defun py-execute-def-python3.2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python3.2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-def-python3.2-dedicated-base arg teststring))) (defun py-execute-def-python3.2-dedicated-base () (assert (py-execute-def-python3.2-dedicated) nil "py-execute-def-python3.2-dedicated-test failed")) (defun py-execute-def-python3.2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-python3.2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-def-python3.2-dedicated-switch-base arg teststring))) (defun py-execute-def-python3.2-dedicated-switch-base () (assert (py-execute-def-python3.2-dedicated-switch) nil "py-execute-def-python3.2-dedicated-switch-test failed")) (defun py-execute-class-python-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python-test\")")) (py-bug-tests-intern 'py-execute-class-python-base arg teststring))) (defun py-execute-class-python-base () (assert (py-execute-class-python) nil "py-execute-class-python-test failed")) (defun py-execute-class-python-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python-switch-test\")")) (py-bug-tests-intern 'py-execute-class-python-switch-base arg teststring))) (defun py-execute-class-python-switch-base () (assert (py-execute-class-python-switch) nil "py-execute-class-python-switch-test failed")) (defun py-execute-class-python-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python-no-switch-test\")")) (py-bug-tests-intern 'py-execute-class-python-no-switch-base arg teststring))) (defun py-execute-class-python-no-switch-base () (assert (py-execute-class-python-no-switch) nil "py-execute-class-python-no-switch-test failed")) (defun py-execute-class-python-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python-dedicated-test\")")) (py-bug-tests-intern 'py-execute-class-python-dedicated-base arg teststring))) (defun py-execute-class-python-dedicated-base () (assert (py-execute-class-python-dedicated) nil "py-execute-class-python-dedicated-test failed")) (defun py-execute-class-python-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-class-python-dedicated-switch-base arg teststring))) (defun py-execute-class-python-dedicated-switch-base () (assert (py-execute-class-python-dedicated-switch) nil "py-execute-class-python-dedicated-switch-test failed")) (defun py-execute-class-ipython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-ipython-test\")")) (py-bug-tests-intern 'py-execute-class-ipython-base arg teststring))) (defun py-execute-class-ipython-base () (assert (py-execute-class-ipython) nil "py-execute-class-ipython-test failed")) (defun py-execute-class-ipython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-ipython-switch-test\")")) (py-bug-tests-intern 'py-execute-class-ipython-switch-base arg teststring))) (defun py-execute-class-ipython-switch-base () (assert (py-execute-class-ipython-switch) nil "py-execute-class-ipython-switch-test failed")) (defun py-execute-class-ipython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-ipython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-class-ipython-no-switch-base arg teststring))) (defun py-execute-class-ipython-no-switch-base () (assert (py-execute-class-ipython-no-switch) nil "py-execute-class-ipython-no-switch-test failed")) (defun py-execute-class-ipython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-ipython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-class-ipython-dedicated-base arg teststring))) (defun py-execute-class-ipython-dedicated-base () (assert (py-execute-class-ipython-dedicated) nil "py-execute-class-ipython-dedicated-test failed")) (defun py-execute-class-ipython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-ipython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-class-ipython-dedicated-switch-base arg teststring))) (defun py-execute-class-ipython-dedicated-switch-base () (assert (py-execute-class-ipython-dedicated-switch) nil "py-execute-class-ipython-dedicated-switch-test failed")) (defun py-execute-class-python3-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python3-test\")")) (py-bug-tests-intern 'py-execute-class-python3-base arg teststring))) (defun py-execute-class-python3-base () (assert (py-execute-class-python3) nil "py-execute-class-python3-test failed")) (defun py-execute-class-python3-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python3-switch-test\")")) (py-bug-tests-intern 'py-execute-class-python3-switch-base arg teststring))) (defun py-execute-class-python3-switch-base () (assert (py-execute-class-python3-switch) nil "py-execute-class-python3-switch-test failed")) (defun py-execute-class-python3-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python3-no-switch-test\")")) (py-bug-tests-intern 'py-execute-class-python3-no-switch-base arg teststring))) (defun py-execute-class-python3-no-switch-base () (assert (py-execute-class-python3-no-switch) nil "py-execute-class-python3-no-switch-test failed")) (defun py-execute-class-python3-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python3-dedicated-test\")")) (py-bug-tests-intern 'py-execute-class-python3-dedicated-base arg teststring))) (defun py-execute-class-python3-dedicated-base () (assert (py-execute-class-python3-dedicated) nil "py-execute-class-python3-dedicated-test failed")) (defun py-execute-class-python3-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python3-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-class-python3-dedicated-switch-base arg teststring))) (defun py-execute-class-python3-dedicated-switch-base () (assert (py-execute-class-python3-dedicated-switch) nil "py-execute-class-python3-dedicated-switch-test failed")) (defun py-execute-class-python2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python2-test\")")) (py-bug-tests-intern 'py-execute-class-python2-base arg teststring))) (defun py-execute-class-python2-base () (assert (py-execute-class-python2) nil "py-execute-class-python2-test failed")) (defun py-execute-class-python2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python2-switch-test\")")) (py-bug-tests-intern 'py-execute-class-python2-switch-base arg teststring))) (defun py-execute-class-python2-switch-base () (assert (py-execute-class-python2-switch) nil "py-execute-class-python2-switch-test failed")) (defun py-execute-class-python2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-class-python2-no-switch-base arg teststring))) (defun py-execute-class-python2-no-switch-base () (assert (py-execute-class-python2-no-switch) nil "py-execute-class-python2-no-switch-test failed")) (defun py-execute-class-python2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-class-python2-dedicated-base arg teststring))) (defun py-execute-class-python2-dedicated-base () (assert (py-execute-class-python2-dedicated) nil "py-execute-class-python2-dedicated-test failed")) (defun py-execute-class-python2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-class-python2-dedicated-switch-base arg teststring))) (defun py-execute-class-python2-dedicated-switch-base () (assert (py-execute-class-python2-dedicated-switch) nil "py-execute-class-python2-dedicated-switch-test failed")) (defun py-execute-class-python2.7-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python2.7-test\")")) (py-bug-tests-intern 'py-execute-class-python2.7-base arg teststring))) (defun py-execute-class-python2.7-base () (assert (py-execute-class-python2.7) nil "py-execute-class-python2.7-test failed")) (defun py-execute-class-python2.7-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python2.7-switch-test\")")) (py-bug-tests-intern 'py-execute-class-python2.7-switch-base arg teststring))) (defun py-execute-class-python2.7-switch-base () (assert (py-execute-class-python2.7-switch) nil "py-execute-class-python2.7-switch-test failed")) (defun py-execute-class-python2.7-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python2.7-no-switch-test\")")) (py-bug-tests-intern 'py-execute-class-python2.7-no-switch-base arg teststring))) (defun py-execute-class-python2.7-no-switch-base () (assert (py-execute-class-python2.7-no-switch) nil "py-execute-class-python2.7-no-switch-test failed")) (defun py-execute-class-python2.7-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python2.7-dedicated-test\")")) (py-bug-tests-intern 'py-execute-class-python2.7-dedicated-base arg teststring))) (defun py-execute-class-python2.7-dedicated-base () (assert (py-execute-class-python2.7-dedicated) nil "py-execute-class-python2.7-dedicated-test failed")) (defun py-execute-class-python2.7-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python2.7-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-class-python2.7-dedicated-switch-base arg teststring))) (defun py-execute-class-python2.7-dedicated-switch-base () (assert (py-execute-class-python2.7-dedicated-switch) nil "py-execute-class-python2.7-dedicated-switch-test failed")) (defun py-execute-class-jython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-jython-test\")")) (py-bug-tests-intern 'py-execute-class-jython-base arg teststring))) (defun py-execute-class-jython-base () (assert (py-execute-class-jython) nil "py-execute-class-jython-test failed")) (defun py-execute-class-jython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-jython-switch-test\")")) (py-bug-tests-intern 'py-execute-class-jython-switch-base arg teststring))) (defun py-execute-class-jython-switch-base () (assert (py-execute-class-jython-switch) nil "py-execute-class-jython-switch-test failed")) (defun py-execute-class-jython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-jython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-class-jython-no-switch-base arg teststring))) (defun py-execute-class-jython-no-switch-base () (assert (py-execute-class-jython-no-switch) nil "py-execute-class-jython-no-switch-test failed")) (defun py-execute-class-jython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-jython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-class-jython-dedicated-base arg teststring))) (defun py-execute-class-jython-dedicated-base () (assert (py-execute-class-jython-dedicated) nil "py-execute-class-jython-dedicated-test failed")) (defun py-execute-class-jython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-jython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-class-jython-dedicated-switch-base arg teststring))) (defun py-execute-class-jython-dedicated-switch-base () (assert (py-execute-class-jython-dedicated-switch) nil "py-execute-class-jython-dedicated-switch-test failed")) (defun py-execute-class-python3.2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python3.2-test\")")) (py-bug-tests-intern 'py-execute-class-python3.2-base arg teststring))) (defun py-execute-class-python3.2-base () (assert (py-execute-class-python3.2) nil "py-execute-class-python3.2-test failed")) (defun py-execute-class-python3.2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python3.2-switch-test\")")) (py-bug-tests-intern 'py-execute-class-python3.2-switch-base arg teststring))) (defun py-execute-class-python3.2-switch-base () (assert (py-execute-class-python3.2-switch) nil "py-execute-class-python3.2-switch-test failed")) (defun py-execute-class-python3.2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python3.2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-class-python3.2-no-switch-base arg teststring))) (defun py-execute-class-python3.2-no-switch-base () (assert (py-execute-class-python3.2-no-switch) nil "py-execute-class-python3.2-no-switch-test failed")) (defun py-execute-class-python3.2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python3.2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-class-python3.2-dedicated-base arg teststring))) (defun py-execute-class-python3.2-dedicated-base () (assert (py-execute-class-python3.2-dedicated) nil "py-execute-class-python3.2-dedicated-test failed")) (defun py-execute-class-python3.2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-python3.2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-class-python3.2-dedicated-switch-base arg teststring))) (defun py-execute-class-python3.2-dedicated-switch-base () (assert (py-execute-class-python3.2-dedicated-switch) nil "py-execute-class-python3.2-dedicated-switch-test failed")) (defun py-execute-region-python-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python-test\")")) (py-bug-tests-intern 'py-execute-region-python-base arg teststring))) (defun py-execute-region-python-base () (assert (py-execute-region-python (line-beginning-position) (line-end-position)) nil "py-execute-region-python-test failed")) (defun py-execute-region-python-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python-switch-test\")")) (py-bug-tests-intern 'py-execute-region-python-switch-base arg teststring))) (defun py-execute-region-python-switch-base () (assert (py-execute-region-python-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-python-switch-test failed")) (defun py-execute-region-python-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python-no-switch-test\")")) (py-bug-tests-intern 'py-execute-region-python-no-switch-base arg teststring))) (defun py-execute-region-python-no-switch-base () (assert (py-execute-region-python-no-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-python-no-switch-test failed")) (defun py-execute-region-python-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python-dedicated-test\")")) (py-bug-tests-intern 'py-execute-region-python-dedicated-base arg teststring))) (defun py-execute-region-python-dedicated-base () (assert (py-execute-region-python-dedicated (line-beginning-position) (line-end-position)) nil "py-execute-region-python-dedicated-test failed")) (defun py-execute-region-python-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-region-python-dedicated-switch-base arg teststring))) (defun py-execute-region-python-dedicated-switch-base () (assert (py-execute-region-python-dedicated-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-python-dedicated-switch-test failed")) (defun py-execute-region-ipython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-ipython-test\")")) (py-bug-tests-intern 'py-execute-region-ipython-base arg teststring))) (defun py-execute-region-ipython-base () (assert (py-execute-region-ipython (line-beginning-position) (line-end-position)) nil "py-execute-region-ipython-test failed")) (defun py-execute-region-ipython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-ipython-switch-test\")")) (py-bug-tests-intern 'py-execute-region-ipython-switch-base arg teststring))) (defun py-execute-region-ipython-switch-base () (assert (py-execute-region-ipython-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-ipython-switch-test failed")) (defun py-execute-region-ipython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-ipython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-region-ipython-no-switch-base arg teststring))) (defun py-execute-region-ipython-no-switch-base () (assert (py-execute-region-ipython-no-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-ipython-no-switch-test failed")) (defun py-execute-region-ipython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-ipython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-region-ipython-dedicated-base arg teststring))) (defun py-execute-region-ipython-dedicated-base () (assert (py-execute-region-ipython-dedicated (line-beginning-position) (line-end-position)) nil "py-execute-region-ipython-dedicated-test failed")) (defun py-execute-region-ipython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-ipython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-region-ipython-dedicated-switch-base arg teststring))) (defun py-execute-region-ipython-dedicated-switch-base () (assert (py-execute-region-ipython-dedicated-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-ipython-dedicated-switch-test failed")) (defun py-execute-region-python3-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python3-test\")")) (py-bug-tests-intern 'py-execute-region-python3-base arg teststring))) (defun py-execute-region-python3-base () (assert (py-execute-region-python3 (line-beginning-position) (line-end-position)) nil "py-execute-region-python3-test failed")) (defun py-execute-region-python3-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python3-switch-test\")")) (py-bug-tests-intern 'py-execute-region-python3-switch-base arg teststring))) (defun py-execute-region-python3-switch-base () (assert (py-execute-region-python3-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-python3-switch-test failed")) (defun py-execute-region-python3-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python3-no-switch-test\")")) (py-bug-tests-intern 'py-execute-region-python3-no-switch-base arg teststring))) (defun py-execute-region-python3-no-switch-base () (assert (py-execute-region-python3-no-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-python3-no-switch-test failed")) (defun py-execute-region-python3-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python3-dedicated-test\")")) (py-bug-tests-intern 'py-execute-region-python3-dedicated-base arg teststring))) (defun py-execute-region-python3-dedicated-base () (assert (py-execute-region-python3-dedicated (line-beginning-position) (line-end-position)) nil "py-execute-region-python3-dedicated-test failed")) (defun py-execute-region-python3-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python3-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-region-python3-dedicated-switch-base arg teststring))) (defun py-execute-region-python3-dedicated-switch-base () (assert (py-execute-region-python3-dedicated-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-python3-dedicated-switch-test failed")) (defun py-execute-region-python2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python2-test\")")) (py-bug-tests-intern 'py-execute-region-python2-base arg teststring))) (defun py-execute-region-python2-base () (assert (py-execute-region-python2 (line-beginning-position) (line-end-position)) nil "py-execute-region-python2-test failed")) (defun py-execute-region-python2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python2-switch-test\")")) (py-bug-tests-intern 'py-execute-region-python2-switch-base arg teststring))) (defun py-execute-region-python2-switch-base () (assert (py-execute-region-python2-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-python2-switch-test failed")) (defun py-execute-region-python2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-region-python2-no-switch-base arg teststring))) (defun py-execute-region-python2-no-switch-base () (assert (py-execute-region-python2-no-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-python2-no-switch-test failed")) (defun py-execute-region-python2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-region-python2-dedicated-base arg teststring))) (defun py-execute-region-python2-dedicated-base () (assert (py-execute-region-python2-dedicated (line-beginning-position) (line-end-position)) nil "py-execute-region-python2-dedicated-test failed")) (defun py-execute-region-python2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-region-python2-dedicated-switch-base arg teststring))) (defun py-execute-region-python2-dedicated-switch-base () (assert (py-execute-region-python2-dedicated-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-python2-dedicated-switch-test failed")) (defun py-execute-region-python2.7-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python2.7-test\")")) (py-bug-tests-intern 'py-execute-region-python2.7-base arg teststring))) (defun py-execute-region-python2.7-base () (assert (py-execute-region-python2.7 (line-beginning-position) (line-end-position)) nil "py-execute-region-python2.7-test failed")) (defun py-execute-region-python2.7-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python2.7-switch-test\")")) (py-bug-tests-intern 'py-execute-region-python2.7-switch-base arg teststring))) (defun py-execute-region-python2.7-switch-base () (assert (py-execute-region-python2.7-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-python2.7-switch-test failed")) (defun py-execute-region-python2.7-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python2.7-no-switch-test\")")) (py-bug-tests-intern 'py-execute-region-python2.7-no-switch-base arg teststring))) (defun py-execute-region-python2.7-no-switch-base () (sit-for 0.1) (assert (py-execute-region-python2.7-no-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-python2.7-no-switch-test failed")) (defun py-execute-region-python2.7-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python2.7-dedicated-test\")")) (py-bug-tests-intern 'py-execute-region-python2.7-dedicated-base arg teststring))) (defun py-execute-region-python2.7-dedicated-base () (assert (py-execute-region-python2.7-dedicated (line-beginning-position) (line-end-position)) nil "py-execute-region-python2.7-dedicated-test failed")) (defun py-execute-region-python2.7-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python2.7-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-region-python2.7-dedicated-switch-base arg teststring))) (defun py-execute-region-python2.7-dedicated-switch-base () (assert (py-execute-region-python2.7-dedicated-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-python2.7-dedicated-switch-test failed")) (defun py-execute-region-jython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-jython-test\")")) (py-bug-tests-intern 'py-execute-region-jython-base arg teststring))) (defun py-execute-region-jython-base () (assert (py-execute-region-jython (line-beginning-position) (line-end-position)) nil "py-execute-region-jython-test failed")) (defun py-execute-region-jython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-jython-switch-test\")")) (py-bug-tests-intern 'py-execute-region-jython-switch-base arg teststring))) (defun py-execute-region-jython-switch-base () (assert (py-execute-region-jython-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-jython-switch-test failed")) (defun py-execute-region-jython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-jython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-region-jython-no-switch-base arg teststring))) (defun py-execute-region-jython-no-switch-base () (assert (py-execute-region-jython-no-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-jython-no-switch-test failed")) (defun py-execute-region-jython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-jython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-region-jython-dedicated-base arg teststring))) (defun py-execute-region-jython-dedicated-base () (assert (py-execute-region-jython-dedicated (line-beginning-position) (line-end-position)) nil "py-execute-region-jython-dedicated-test failed")) (defun py-execute-region-jython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-jython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-region-jython-dedicated-switch-base arg teststring))) (defun py-execute-region-jython-dedicated-switch-base () (assert (py-execute-region-jython-dedicated-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-jython-dedicated-switch-test failed")) (defun py-execute-region-python3.2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python3.2-test\")")) (py-bug-tests-intern 'py-execute-region-python3.2-base arg teststring))) (defun py-execute-region-python3.2-base () (assert (py-execute-region-python3.2 (line-beginning-position) (line-end-position)) nil "py-execute-region-python3.2-test failed")) (defun py-execute-region-python3.2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python3.2-switch-test\")")) (py-bug-tests-intern 'py-execute-region-python3.2-switch-base arg teststring))) (defun py-execute-region-python3.2-switch-base () (assert (py-execute-region-python3.2-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-python3.2-switch-test failed")) (defun py-execute-region-python3.2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python3.2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-region-python3.2-no-switch-base arg teststring))) (defun py-execute-region-python3.2-no-switch-base () (assert (py-execute-region-python3.2-no-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-python3.2-no-switch-test failed")) (defun py-execute-region-python3.2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python3.2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-region-python3.2-dedicated-base arg teststring))) (defun py-execute-region-python3.2-dedicated-base () (assert (py-execute-region-python3.2-dedicated (line-beginning-position) (line-end-position)) nil "py-execute-region-python3.2-dedicated-test failed")) (defun py-execute-region-python3.2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-python3.2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-region-python3.2-dedicated-switch-base arg teststring))) (defun py-execute-region-python3.2-dedicated-switch-base () (assert (py-execute-region-python3.2-dedicated-switch (line-beginning-position) (line-end-position)) nil "py-execute-region-python3.2-dedicated-switch-test failed")) (defun py-execute-buffer-python-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python-test\")")) (py-bug-tests-intern 'py-execute-buffer-python-base arg teststring))) (defun py-execute-buffer-python-base () (assert (py-execute-buffer-python) nil "py-execute-buffer-python-test failed")) (defun py-execute-buffer-python-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-python-switch-base arg teststring))) (defun py-execute-buffer-python-switch-base () (assert (py-execute-buffer-python-switch) nil "py-execute-buffer-python-switch-test failed")) (defun py-execute-buffer-python-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python-no-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-python-no-switch-base arg teststring))) (defun py-execute-buffer-python-no-switch-base () (assert (py-execute-buffer-python-no-switch) nil "py-execute-buffer-python-no-switch-test failed")) (defun py-execute-buffer-python-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python-dedicated-test\")")) (py-bug-tests-intern 'py-execute-buffer-python-dedicated-base arg teststring))) (defun py-execute-buffer-python-dedicated-base () (assert (py-execute-buffer-python-dedicated) nil "py-execute-buffer-python-dedicated-test failed")) (defun py-execute-buffer-python-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-python-dedicated-switch-base arg teststring))) (defun py-execute-buffer-python-dedicated-switch-base () (assert (py-execute-buffer-python-dedicated-switch) nil "py-execute-buffer-python-dedicated-switch-test failed")) (defun py-execute-buffer-ipython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-ipython-test\")")) (py-bug-tests-intern 'py-execute-buffer-ipython-base arg teststring))) (defun py-execute-buffer-ipython-base () (assert (py-execute-buffer-ipython) nil "py-execute-buffer-ipython-test failed")) (defun py-execute-buffer-ipython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-ipython-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-ipython-switch-base arg teststring))) (defun py-execute-buffer-ipython-switch-base () (assert (py-execute-buffer-ipython-switch) nil "py-execute-buffer-ipython-switch-test failed")) (defun py-execute-buffer-ipython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-ipython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-ipython-no-switch-base arg teststring))) (defun py-execute-buffer-ipython-no-switch-base () (assert (py-execute-buffer-ipython-no-switch) nil "py-execute-buffer-ipython-no-switch-test failed")) (defun py-execute-buffer-ipython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-ipython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-buffer-ipython-dedicated-base arg teststring))) (defun py-execute-buffer-ipython-dedicated-base () (assert (py-execute-buffer-ipython-dedicated) nil "py-execute-buffer-ipython-dedicated-test failed")) (defun py-execute-buffer-ipython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-ipython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-ipython-dedicated-switch-base arg teststring))) (defun py-execute-buffer-ipython-dedicated-switch-base () (assert (py-execute-buffer-ipython-dedicated-switch) nil "py-execute-buffer-ipython-dedicated-switch-test failed")) (defun py-execute-buffer-python3-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python3-test\")")) (py-bug-tests-intern 'py-execute-buffer-python3-base arg teststring))) (defun py-execute-buffer-python3-base () (assert (py-execute-buffer-python3) nil "py-execute-buffer-python3-test failed")) (defun py-execute-buffer-python3-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python3-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-python3-switch-base arg teststring))) (defun py-execute-buffer-python3-switch-base () (assert (py-execute-buffer-python3-switch) nil "py-execute-buffer-python3-switch-test failed")) (defun py-execute-buffer-python3-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python3-no-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-python3-no-switch-base arg teststring))) (defun py-execute-buffer-python3-no-switch-base () (assert (py-execute-buffer-python3-no-switch) nil "py-execute-buffer-python3-no-switch-test failed")) (defun py-execute-buffer-python3-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python3-dedicated-test\")")) (py-bug-tests-intern 'py-execute-buffer-python3-dedicated-base arg teststring))) (defun py-execute-buffer-python3-dedicated-base () (assert (py-execute-buffer-python3-dedicated) nil "py-execute-buffer-python3-dedicated-test failed")) (defun py-execute-buffer-python3-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python3-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-python3-dedicated-switch-base arg teststring))) (defun py-execute-buffer-python3-dedicated-switch-base () (assert (py-execute-buffer-python3-dedicated-switch) nil "py-execute-buffer-python3-dedicated-switch-test failed")) (defun py-execute-buffer-python2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python2-test\")")) (py-bug-tests-intern 'py-execute-buffer-python2-base arg teststring))) (defun py-execute-buffer-python2-base () (assert (py-execute-buffer-python2) nil "py-execute-buffer-python2-test failed")) (defun py-execute-buffer-python2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python2-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-python2-switch-base arg teststring))) (defun py-execute-buffer-python2-switch-base () (assert (py-execute-buffer-python2-switch) nil "py-execute-buffer-python2-switch-test failed")) (defun py-execute-buffer-python2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-python2-no-switch-base arg teststring))) (defun py-execute-buffer-python2-no-switch-base () (assert (py-execute-buffer-python2-no-switch) nil "py-execute-buffer-python2-no-switch-test failed")) (defun py-execute-buffer-python2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-buffer-python2-dedicated-base arg teststring))) (defun py-execute-buffer-python2-dedicated-base () (assert (py-execute-buffer-python2-dedicated) nil "py-execute-buffer-python2-dedicated-test failed")) (defun py-execute-buffer-python2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-python2-dedicated-switch-base arg teststring))) (defun py-execute-buffer-python2-dedicated-switch-base () (assert (py-execute-buffer-python2-dedicated-switch) nil "py-execute-buffer-python2-dedicated-switch-test failed")) (defun py-execute-buffer-python2.7-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python2.7-test\")")) (py-bug-tests-intern 'py-execute-buffer-python2.7-base arg teststring))) (defun py-execute-buffer-python2.7-base () (assert (py-execute-buffer-python2.7) nil "py-execute-buffer-python2.7-test failed")) (defun py-execute-buffer-python2.7-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python2.7-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-python2.7-switch-base arg teststring))) (defun py-execute-buffer-python2.7-switch-base () (assert (py-execute-buffer-python2.7-switch) nil "py-execute-buffer-python2.7-switch-test failed")) (defun py-execute-buffer-python2.7-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python2.7-no-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-python2.7-no-switch-base arg teststring))) (defun py-execute-buffer-python2.7-no-switch-base () (assert (py-execute-buffer-python2.7-no-switch) nil "py-execute-buffer-python2.7-no-switch-test failed")) (defun py-execute-buffer-python2.7-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python2.7-dedicated-test\")")) (py-bug-tests-intern 'py-execute-buffer-python2.7-dedicated-base arg teststring))) (defun py-execute-buffer-python2.7-dedicated-base () (assert (py-execute-buffer-python2.7-dedicated) nil "py-execute-buffer-python2.7-dedicated-test failed")) (defun py-execute-buffer-python2.7-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python2.7-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-python2.7-dedicated-switch-base arg teststring))) (defun py-execute-buffer-python2.7-dedicated-switch-base () (assert (py-execute-buffer-python2.7-dedicated-switch) nil "py-execute-buffer-python2.7-dedicated-switch-test failed")) (defun py-execute-buffer-jython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-jython-test\")")) (py-bug-tests-intern 'py-execute-buffer-jython-base arg teststring))) (defun py-execute-buffer-jython-base () (assert (py-execute-buffer-jython) nil "py-execute-buffer-jython-test failed")) (defun py-execute-buffer-jython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-jython-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-jython-switch-base arg teststring))) (defun py-execute-buffer-jython-switch-base () (assert (py-execute-buffer-jython-switch) nil "py-execute-buffer-jython-switch-test failed")) (defun py-execute-buffer-jython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-jython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-jython-no-switch-base arg teststring))) (defun py-execute-buffer-jython-no-switch-base () (assert (py-execute-buffer-jython-no-switch) nil "py-execute-buffer-jython-no-switch-test failed")) (defun py-execute-buffer-jython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-jython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-buffer-jython-dedicated-base arg teststring))) (defun py-execute-buffer-jython-dedicated-base () (assert (py-execute-buffer-jython-dedicated) nil "py-execute-buffer-jython-dedicated-test failed")) (defun py-execute-buffer-jython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-jython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-jython-dedicated-switch-base arg teststring))) (defun py-execute-buffer-jython-dedicated-switch-base () (assert (py-execute-buffer-jython-dedicated-switch) nil "py-execute-buffer-jython-dedicated-switch-test failed")) (defun py-execute-buffer-python3.2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python3.2-test\")")) (py-bug-tests-intern 'py-execute-buffer-python3.2-base arg teststring))) (defun py-execute-buffer-python3.2-base () (assert (py-execute-buffer-python3.2) nil "py-execute-buffer-python3.2-test failed")) (defun py-execute-buffer-python3.2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python3.2-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-python3.2-switch-base arg teststring))) (defun py-execute-buffer-python3.2-switch-base () (assert (py-execute-buffer-python3.2-switch) nil "py-execute-buffer-python3.2-switch-test failed")) (defun py-execute-buffer-python3.2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python3.2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-python3.2-no-switch-base arg teststring))) (defun py-execute-buffer-python3.2-no-switch-base () (assert (py-execute-buffer-python3.2-no-switch) nil "py-execute-buffer-python3.2-no-switch-test failed")) (defun py-execute-buffer-python3.2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python3.2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-buffer-python3.2-dedicated-base arg teststring))) (defun py-execute-buffer-python3.2-dedicated-base () (assert (py-execute-buffer-python3.2-dedicated) nil "py-execute-buffer-python3.2-dedicated-test failed")) (defun py-execute-buffer-python3.2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-python3.2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-buffer-python3.2-dedicated-switch-base arg teststring))) (defun py-execute-buffer-python3.2-dedicated-switch-base () (assert (py-execute-buffer-python3.2-dedicated-switch) nil "py-execute-buffer-python3.2-dedicated-switch-test failed")) (defun py-execute-expression-python-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python-test\")")) (py-bug-tests-intern 'py-execute-expression-python-base arg teststring))) (defun py-execute-expression-python-base () (assert (py-execute-expression-python) nil "py-execute-expression-python-test failed")) (defun py-execute-expression-python-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-python-switch-base arg teststring))) (defun py-execute-expression-python-switch-base () (assert (py-execute-expression-python-switch) nil "py-execute-expression-python-switch-test failed")) (defun py-execute-expression-python-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python-no-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-python-no-switch-base arg teststring))) (defun py-execute-expression-python-no-switch-base () (assert (py-execute-expression-python-no-switch) nil "py-execute-expression-python-no-switch-test failed")) (defun py-execute-expression-python-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python-dedicated-test\")")) (py-bug-tests-intern 'py-execute-expression-python-dedicated-base arg teststring))) (defun py-execute-expression-python-dedicated-base () (assert (py-execute-expression-python-dedicated) nil "py-execute-expression-python-dedicated-test failed")) (defun py-execute-expression-python-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-python-dedicated-switch-base arg teststring))) (defun py-execute-expression-python-dedicated-switch-base () (assert (py-execute-expression-python-dedicated-switch) nil "py-execute-expression-python-dedicated-switch-test failed")) (defun py-execute-expression-ipython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-ipython-test\")")) (py-bug-tests-intern 'py-execute-expression-ipython-base arg teststring))) (defun py-execute-expression-ipython-base () (assert (py-execute-expression-ipython) nil "py-execute-expression-ipython-test failed")) (defun py-execute-expression-ipython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-ipython-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-ipython-switch-base arg teststring))) (defun py-execute-expression-ipython-switch-base () (assert (py-execute-expression-ipython-switch) nil "py-execute-expression-ipython-switch-test failed")) (defun py-execute-expression-ipython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-ipython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-ipython-no-switch-base arg teststring))) (defun py-execute-expression-ipython-no-switch-base () (assert (py-execute-expression-ipython-no-switch) nil "py-execute-expression-ipython-no-switch-test failed")) (defun py-execute-expression-ipython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-ipython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-expression-ipython-dedicated-base arg teststring))) (defun py-execute-expression-ipython-dedicated-base () (assert (py-execute-expression-ipython-dedicated) nil "py-execute-expression-ipython-dedicated-test failed")) (defun py-execute-expression-ipython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-ipython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-ipython-dedicated-switch-base arg teststring))) (defun py-execute-expression-ipython-dedicated-switch-base () (assert (py-execute-expression-ipython-dedicated-switch) nil "py-execute-expression-ipython-dedicated-switch-test failed")) (defun py-execute-expression-python3-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python3-test\")")) (py-bug-tests-intern 'py-execute-expression-python3-base arg teststring))) (defun py-execute-expression-python3-base () (assert (py-execute-expression-python3) nil "py-execute-expression-python3-test failed")) (defun py-execute-expression-python3-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python3-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-python3-switch-base arg teststring))) (defun py-execute-expression-python3-switch-base () (assert (py-execute-expression-python3-switch) nil "py-execute-expression-python3-switch-test failed")) (defun py-execute-expression-python3-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python3-no-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-python3-no-switch-base arg teststring))) (defun py-execute-expression-python3-no-switch-base () (assert (py-execute-expression-python3-no-switch) nil "py-execute-expression-python3-no-switch-test failed")) (defun py-execute-expression-python3-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python3-dedicated-test\")")) (py-bug-tests-intern 'py-execute-expression-python3-dedicated-base arg teststring))) (defun py-execute-expression-python3-dedicated-base () (assert (py-execute-expression-python3-dedicated) nil "py-execute-expression-python3-dedicated-test failed")) (defun py-execute-expression-python3-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python3-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-python3-dedicated-switch-base arg teststring))) (defun py-execute-expression-python3-dedicated-switch-base () (assert (py-execute-expression-python3-dedicated-switch) nil "py-execute-expression-python3-dedicated-switch-test failed")) (defun py-execute-expression-python2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python2-test\")")) (py-bug-tests-intern 'py-execute-expression-python2-base arg teststring))) (defun py-execute-expression-python2-base () (assert (py-execute-expression-python2) nil "py-execute-expression-python2-test failed")) (defun py-execute-expression-python2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python2-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-python2-switch-base arg teststring))) (defun py-execute-expression-python2-switch-base () (assert (py-execute-expression-python2-switch) nil "py-execute-expression-python2-switch-test failed")) (defun py-execute-expression-python2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-python2-no-switch-base arg teststring))) (defun py-execute-expression-python2-no-switch-base () (assert (py-execute-expression-python2-no-switch) nil "py-execute-expression-python2-no-switch-test failed")) (defun py-execute-expression-python2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-expression-python2-dedicated-base arg teststring))) (defun py-execute-expression-python2-dedicated-base () (assert (py-execute-expression-python2-dedicated) nil "py-execute-expression-python2-dedicated-test failed")) (defun py-execute-expression-python2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-python2-dedicated-switch-base arg teststring))) (defun py-execute-expression-python2-dedicated-switch-base () (assert (py-execute-expression-python2-dedicated-switch) nil "py-execute-expression-python2-dedicated-switch-test failed")) (defun py-execute-expression-python2.7-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python2.7-test\")")) (py-bug-tests-intern 'py-execute-expression-python2.7-base arg teststring))) (defun py-execute-expression-python2.7-base () (assert (py-execute-expression-python2.7) nil "py-execute-expression-python2.7-test failed")) (defun py-execute-expression-python2.7-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python2.7-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-python2.7-switch-base arg teststring))) (defun py-execute-expression-python2.7-switch-base () (assert (py-execute-expression-python2.7-switch) nil "py-execute-expression-python2.7-switch-test failed")) (defun py-execute-expression-python2.7-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python2.7-no-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-python2.7-no-switch-base arg teststring))) (defun py-execute-expression-python2.7-no-switch-base () (assert (py-execute-expression-python2.7-no-switch) nil "py-execute-expression-python2.7-no-switch-test failed")) (defun py-execute-expression-python2.7-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python2.7-dedicated-test\")")) (py-bug-tests-intern 'py-execute-expression-python2.7-dedicated-base arg teststring))) (defun py-execute-expression-python2.7-dedicated-base () (assert (py-execute-expression-python2.7-dedicated) nil "py-execute-expression-python2.7-dedicated-test failed")) (defun py-execute-expression-python2.7-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python2.7-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-python2.7-dedicated-switch-base arg teststring))) (defun py-execute-expression-python2.7-dedicated-switch-base () (assert (py-execute-expression-python2.7-dedicated-switch) nil "py-execute-expression-python2.7-dedicated-switch-test failed")) (defun py-execute-expression-jython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-jython-test\")")) (py-bug-tests-intern 'py-execute-expression-jython-base arg teststring))) (defun py-execute-expression-jython-base () (assert (py-execute-expression-jython) nil "py-execute-expression-jython-test failed")) (defun py-execute-expression-jython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-jython-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-jython-switch-base arg teststring))) (defun py-execute-expression-jython-switch-base () (assert (py-execute-expression-jython-switch) nil "py-execute-expression-jython-switch-test failed")) (defun py-execute-expression-jython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-jython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-jython-no-switch-base arg teststring))) (defun py-execute-expression-jython-no-switch-base () (assert (py-execute-expression-jython-no-switch) nil "py-execute-expression-jython-no-switch-test failed")) (defun py-execute-expression-jython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-jython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-expression-jython-dedicated-base arg teststring))) (defun py-execute-expression-jython-dedicated-base () (assert (py-execute-expression-jython-dedicated) nil "py-execute-expression-jython-dedicated-test failed")) (defun py-execute-expression-jython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-jython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-jython-dedicated-switch-base arg teststring))) (defun py-execute-expression-jython-dedicated-switch-base () (assert (py-execute-expression-jython-dedicated-switch) nil "py-execute-expression-jython-dedicated-switch-test failed")) (defun py-execute-expression-python3.2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python3.2-test\")")) (py-bug-tests-intern 'py-execute-expression-python3.2-base arg teststring))) (defun py-execute-expression-python3.2-base () (assert (py-execute-expression-python3.2) nil "py-execute-expression-python3.2-test failed")) (defun py-execute-expression-python3.2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python3.2-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-python3.2-switch-base arg teststring))) (defun py-execute-expression-python3.2-switch-base () (assert (py-execute-expression-python3.2-switch) nil "py-execute-expression-python3.2-switch-test failed")) (defun py-execute-expression-python3.2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python3.2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-python3.2-no-switch-base arg teststring))) (defun py-execute-expression-python3.2-no-switch-base () (assert (py-execute-expression-python3.2-no-switch) nil "py-execute-expression-python3.2-no-switch-test failed")) (defun py-execute-expression-python3.2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python3.2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-expression-python3.2-dedicated-base arg teststring))) (defun py-execute-expression-python3.2-dedicated-base () (assert (py-execute-expression-python3.2-dedicated) nil "py-execute-expression-python3.2-dedicated-test failed")) (defun py-execute-expression-python3.2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-python3.2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-expression-python3.2-dedicated-switch-base arg teststring))) (defun py-execute-expression-python3.2-dedicated-switch-base () (assert (py-execute-expression-python3.2-dedicated-switch) nil "py-execute-expression-python3.2-dedicated-switch-test failed")) (defun py-execute-line-python-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python-test\")")) (py-bug-tests-intern 'py-execute-line-python-base t teststring))) (defun py-execute-line-python-base () (assert (py-execute-line-python) nil "py-execute-line-python-test failed")) (defun py-execute-line-python-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python-switch-test\")")) (py-bug-tests-intern 'py-execute-line-python-switch-base arg teststring))) (defun py-execute-line-python-switch-base () (assert (py-execute-line-python-switch) nil "py-execute-line-python-switch-test failed")) (defun py-execute-line-python-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python-no-switch-test\")")) (py-bug-tests-intern 'py-execute-line-python-no-switch-base arg teststring))) (defun py-execute-line-python-no-switch-base () (assert (py-execute-line-python-no-switch) nil "py-execute-line-python-no-switch-test failed")) (defun py-execute-line-python-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python-dedicated-test\")")) (py-bug-tests-intern 'py-execute-line-python-dedicated-base arg teststring))) (defun py-execute-line-python-dedicated-base () (assert (py-execute-line-python-dedicated) nil "py-execute-line-python-dedicated-test failed")) (defun py-execute-line-python-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-line-python-dedicated-switch-base arg teststring))) (defun py-execute-line-python-dedicated-switch-base () (assert (py-execute-line-python-dedicated-switch) nil "py-execute-line-python-dedicated-switch-test failed")) (defun py-execute-line-ipython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-ipython-test\")")) (py-bug-tests-intern 'py-execute-line-ipython-base arg teststring))) (defun py-execute-line-ipython-base () (assert (py-execute-line-ipython) nil "py-execute-line-ipython-test failed")) (defun py-execute-line-ipython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-ipython-switch-test\")")) (py-bug-tests-intern 'py-execute-line-ipython-switch-base arg teststring))) (defun py-execute-line-ipython-switch-base () (assert (py-execute-line-ipython-switch) nil "py-execute-line-ipython-switch-test failed")) (defun py-execute-line-ipython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-ipython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-line-ipython-no-switch-base arg teststring))) (defun py-execute-line-ipython-no-switch-base () (assert (py-execute-line-ipython-no-switch) nil "py-execute-line-ipython-no-switch-test failed")) (defun py-execute-line-ipython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-ipython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-line-ipython-dedicated-base arg teststring))) (defun py-execute-line-ipython-dedicated-base () (assert (py-execute-line-ipython-dedicated) nil "py-execute-line-ipython-dedicated-test failed")) (defun py-execute-line-ipython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-ipython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-line-ipython-dedicated-switch-base arg teststring))) (defun py-execute-line-ipython-dedicated-switch-base () (assert (py-execute-line-ipython-dedicated-switch) nil "py-execute-line-ipython-dedicated-switch-test failed")) (defun py-execute-line-python3-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python3-test\")")) (py-bug-tests-intern 'py-execute-line-python3-base arg teststring))) (defun py-execute-line-python3-base () (assert (py-execute-line-python3) nil "py-execute-line-python3-test failed")) (defun py-execute-line-python3-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python3-switch-test\")")) (py-bug-tests-intern 'py-execute-line-python3-switch-base arg teststring))) (defun py-execute-line-python3-switch-base () (assert (py-execute-line-python3-switch) nil "py-execute-line-python3-switch-test failed")) (defun py-execute-line-python3-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python3-no-switch-test\")")) (py-bug-tests-intern 'py-execute-line-python3-no-switch-base arg teststring))) (defun py-execute-line-python3-no-switch-base () (assert (py-execute-line-python3-no-switch) nil "py-execute-line-python3-no-switch-test failed")) (defun py-execute-line-python3-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python3-dedicated-test\")")) (py-bug-tests-intern 'py-execute-line-python3-dedicated-base arg teststring))) (defun py-execute-line-python3-dedicated-base () (assert (py-execute-line-python3-dedicated) nil "py-execute-line-python3-dedicated-test failed")) (defun py-execute-line-python3-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python3-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-line-python3-dedicated-switch-base arg teststring))) (defun py-execute-line-python3-dedicated-switch-base () (assert (py-execute-line-python3-dedicated-switch) nil "py-execute-line-python3-dedicated-switch-test failed")) (defun py-execute-line-python2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python2-test\")")) (py-bug-tests-intern 'py-execute-line-python2-base arg teststring))) (defun py-execute-line-python2-base () (assert (py-execute-line-python2) nil "py-execute-line-python2-test failed")) (defun py-execute-line-python2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python2-switch-test\")")) (py-bug-tests-intern 'py-execute-line-python2-switch-base arg teststring))) (defun py-execute-line-python2-switch-base () (assert (py-execute-line-python2-switch) nil "py-execute-line-python2-switch-test failed")) (defun py-execute-line-python2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-line-python2-no-switch-base arg teststring))) (defun py-execute-line-python2-no-switch-base () (assert (py-execute-line-python2-no-switch) nil "py-execute-line-python2-no-switch-test failed")) (defun py-execute-line-python2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-line-python2-dedicated-base arg teststring))) (defun py-execute-line-python2-dedicated-base () (assert (py-execute-line-python2-dedicated) nil "py-execute-line-python2-dedicated-test failed")) (defun py-execute-line-python2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-line-python2-dedicated-switch-base arg teststring))) (defun py-execute-line-python2-dedicated-switch-base () (assert (py-execute-line-python2-dedicated-switch) nil "py-execute-line-python2-dedicated-switch-test failed")) (defun py-execute-line-python2.7-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python2.7-test\")")) (py-bug-tests-intern 'py-execute-line-python2.7-base arg teststring))) (defun py-execute-line-python2.7-base () (assert (py-execute-line-python2.7) nil "py-execute-line-python2.7-test failed")) (defun py-execute-line-python2.7-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python2.7-switch-test\")")) (py-bug-tests-intern 'py-execute-line-python2.7-switch-base arg teststring))) (defun py-execute-line-python2.7-switch-base () (assert (py-execute-line-python2.7-switch) nil "py-execute-line-python2.7-switch-test failed")) (defun py-execute-line-python2.7-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python2.7-no-switch-test\")")) (py-bug-tests-intern 'py-execute-line-python2.7-no-switch-base arg teststring))) (defun py-execute-line-python2.7-no-switch-base () (assert (py-execute-line-python2.7-no-switch) nil "py-execute-line-python2.7-no-switch-test failed")) (defun py-execute-line-python2.7-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python2.7-dedicated-test\")")) (py-bug-tests-intern 'py-execute-line-python2.7-dedicated-base arg teststring))) (defun py-execute-line-python2.7-dedicated-base () (assert (py-execute-line-python2.7-dedicated) nil "py-execute-line-python2.7-dedicated-test failed")) (defun py-execute-line-python2.7-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python2.7-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-line-python2.7-dedicated-switch-base arg teststring))) (defun py-execute-line-python2.7-dedicated-switch-base () (assert (py-execute-line-python2.7-dedicated-switch) nil "py-execute-line-python2.7-dedicated-switch-test failed")) (defun py-execute-line-jython-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-jython-test\")")) (py-bug-tests-intern 'py-execute-line-jython-base arg teststring))) (defun py-execute-line-jython-base () (assert (py-execute-line-jython) nil "py-execute-line-jython-test failed")) (defun py-execute-line-jython-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-jython-switch-test\")")) (py-bug-tests-intern 'py-execute-line-jython-switch-base arg teststring))) (defun py-execute-line-jython-switch-base () (assert (py-execute-line-jython-switch) nil "py-execute-line-jython-switch-test failed")) (defun py-execute-line-jython-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-jython-no-switch-test\")")) (py-bug-tests-intern 'py-execute-line-jython-no-switch-base arg teststring))) (defun py-execute-line-jython-no-switch-base () (assert (py-execute-line-jython-no-switch) nil "py-execute-line-jython-no-switch-test failed")) (defun py-execute-line-jython-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-jython-dedicated-test\")")) (py-bug-tests-intern 'py-execute-line-jython-dedicated-base arg teststring))) (defun py-execute-line-jython-dedicated-base () (assert (py-execute-line-jython-dedicated) nil "py-execute-line-jython-dedicated-test failed")) (defun py-execute-line-jython-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-jython-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-line-jython-dedicated-switch-base arg teststring))) (defun py-execute-line-jython-dedicated-switch-base () (assert (py-execute-line-jython-dedicated-switch) nil "py-execute-line-jython-dedicated-switch-test failed")) (defun py-execute-line-python3.2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python3.2-test\")")) (py-bug-tests-intern 'py-execute-line-python3.2-base arg teststring))) (defun py-execute-line-python3.2-base () (assert (py-execute-line-python3.2) nil "py-execute-line-python3.2-test failed")) (defun py-execute-line-python3.2-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python3.2-switch-test\")")) (py-bug-tests-intern 'py-execute-line-python3.2-switch-base arg teststring))) (defun py-execute-line-python3.2-switch-base () (assert (py-execute-line-python3.2-switch) nil "py-execute-line-python3.2-switch-test failed")) (defun py-execute-line-python3.2-no-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python3.2-no-switch-test\")")) (py-bug-tests-intern 'py-execute-line-python3.2-no-switch-base arg teststring))) (defun py-execute-line-python3.2-no-switch-base () (assert (py-execute-line-python3.2-no-switch) nil "py-execute-line-python3.2-no-switch-test failed")) (defun py-execute-line-python3.2-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python3.2-dedicated-test\")")) (py-bug-tests-intern 'py-execute-line-python3.2-dedicated-base arg teststring))) (defun py-execute-line-python3.2-dedicated-base () (assert (py-execute-line-python3.2-dedicated) nil "py-execute-line-python3.2-dedicated-test failed")) (defun py-execute-line-python3.2-dedicated-switch-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-python3.2-dedicated-switch-test\")")) (py-bug-tests-intern 'py-execute-line-python3.2-dedicated-switch-base arg teststring))) (defun py-execute-line-python3.2-dedicated-switch-base () (assert (py-execute-line-python3.2-dedicated-switch) nil "py-execute-line-python3.2-dedicated-switch-test failed")) (provide 'python-extended-executes-test) ;;; python-extended-executes-test.el ends here python-mode.el-6.1.3/test/test-triple-strings.py0000644000000000000000000000316012016643135021616 0ustar rootroot00000000000000# Source: # http://launchpadlibrarian.net/22565844/test-triple-strings.py # Author: Ed Loper # This file tests python-mode's ability to handle triple-quoted # string. Here's how to tell if python-mode's doing the right thing: # # - All dashes (-) should *not* be marked as strings. # - All Os, Xs, s should be marked as strings. # - None of the quote marks around O's should be marked as strings. # - Quote marks that are between angle brackets (<...>) should be # marked as strings. Think of "X" as a pair of angle brackets # right next to one another. Also, quotes to the left of >s # and the right of with other characters should not affect # the fontificatin any; these characters were just used to make it # easier to see what the intended colorization is.) # Some easy cases: "O" 'O' "<'>" '<">' "O" 'O' "<'>" '<">' " O " ' O ' " < ' > " ' < " > ' """O""" '''O''' "<<<'>>>" '''<">''' # Some harder cases: """<">""" '''<'>''' # Some tricky cases with backslashes. '''<'>''' '''<\'''>''' '''<\\''' # Some tricky cases with more than 3 quotes in a row. "O""" "O" """">""" """">>""" """"X">""" """"X"">""" """O""""O" "" """O""""" "O" """O""""""<">""" """O"""""""X">""" """O""""""""X">""" """O""" "<<<>>>>" """""""""O""" "O" """O""""O""O""O""" """">""" """">>""" """">>>""" """"">""" """"">>""" """"">>>""" """"">>>""""O" """"">>>""""" """""""""<""X"X"">""" # One version had a bug with comments ending in string markers: " """O""" "" "" """<">""" '''<'>''' # Spanning multiple lines: "< >" '< >' """ < < < < ' X X X " > > """ python-mode.el-6.1.3/test/py-bug-numbered-tests.el0000644000000000000000000072752112271450574022011 0ustar rootroot00000000000000;;; py-bug-numbered-tests.el --- run single tests according to bug number ;; Author: Andreas Roehler ;; Keywords: languages ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; ;;; Code: (defvar py-test-shebang-list (list "#! /usr/bin/env python" "#! /usr/bin/env ipython" "#! /usr/bin/python" "#! /usr/bin/ipython") "Values to test as `py-test-shebang', resp. `py-shell-name'. ") (setq py-test-shebang-list (list "#! /usr/bin/env python" "#! /usr/bin/ipython")) (defvar py-test-shebang "#! /usr/bin/env python" "Default value used for tests. ") (defvar py-ipython-test-shebang "#! /usr/bin/env ipython" "Default value used for testing IPython. ") (defvar bug-numbered-tests nil "Tests following reports at https://bugs.launchpad.net/python-mode") (defun py-run-bug-numbered-tests (&optional arg) "With ARG greater 1 keep test buffers open. " (interactive "p") (dolist (ele bug-numbered-tests) (funcall ele arg))) (setq bug-numbered-tests (list 'py-execute-buffer-ipython-lp-1252643-test 'py-empty-line-closes-p-lp-1235324-test 'C-c-C-c-lp:1221310-and-store-result-test 'Bogus-whitespace-left-in-docstring-after-wrapping-lp-1178455-test 'Bogus-dedent-when-typing-colon-in-dictionary-literal-lp-1197171-test 'python-mode-very-slow-lp-1107037-test 'cascading-indent-lp-1101962-test 'line-after-colon-with-inline-comment-lp-1109946-test 'more-docstring-filling-woes-lp-1102296-pep-257-nn-test 'more-docstring-filling-woes-lp-1102296-pep-257-test 'more-docstring-filling-woes-lp-1102296-nil-test 'more-docstring-filling-woes-lp-1102296-onetwo-test 'more-docstring-filling-woes-lp-1102296-django-test 'more-docstring-filling-woes-lp-1102296-symmetric-test 'module-docstring-when-following-comment-lp-1102011-test 'py-newline-and-indent-leaves-eol-whitespace-lp-1100892-test 'py-underscore-word-syntax-p-customization-has-no-effect-lp-1100947-test 'py-up-test-python-el-111-test 'py-down-python-el-112-test 'enter-key-does-not-indent-properly-after-return-statement-lp-1098793-test 'filename-completion-fails-in-ipython-lp-1027265-n1-test 'filename-completion-fails-in-ipython-lp-1027265-n2-test 'comments-start-a-new-line-lp-1092847-n1-test 'comments-start-a-new-line-lp-1092847-n2-test 'temporary-files-remain-when-python-raises-exception-lp-1083973-n1-test 'temporary-files-remain-when-python-raises-exception-lp-1083973-n2-test 'temporary-files-remain-when-python-raises-exception-lp-1083973-n3-test 'temporary-files-remain-when-python-raises-exception-lp-1083973-n4-test 'wrong-indentation-after-return-or-pass-keyword-lp-1087499-test 'wrong-indent-after-asignment-lp-1087404-test 'py-execute-buffer-python3-looks-broken-lp-1085386-test 'fill-paragraph-in-comments-results-in-mess-lp-1084769-test 'imenu-add-menubar-index-fails-lp-1084503-test 'spuriously-indents-whole-line-while-making-some-portion-inline-comment-lp-1080973-test 'fill-paragraph-in-a-comment-does-not-stop-at-empty-comment-lines-lp-1077139-test 'incorrect-indentation-of-comments-in-a-multiline-list-lp-1077063-test 'fails-to-indent-abs-wrong-type-argument-lp-1075673-test 'incorrect-indentation-of-one-line-functions-lp-1067633-test 'several-new-bugs-with-paragraph-filling-lp-1066489-test 'impossible-to-execute-a-buffer-with-from-future-imports-lp-1063884-test 'exception-in-except-clause-highlighted-as-keyword-lp-909205-test 'pyindex-mishandles-class-definitions-lp-1018164-test 'stalls-emacs-probably-due-to-syntax-highlighting-lp-1058261-test 'py-find-imports-lp-1023236-test 'pycomplete-imports-not-found-error-when-no-symbol-lp:1019791-test 'return-statement-indented-incorrectly-lp-1019601-test 'converts-tabs-to-spaces-in-indent-tabs-mode-t-lp-1019128-test 'empty-triple-quote-lp:1009318-test 'spurious-trailing-whitespace-lp-1008679-test 'completion-fails-in-python-script-r989-lp:1004613-test 'no-completion-at-all-lp:1001328-test 'py-narrow-to-defun-lp-1020531-test 'not-that-useful-completion-lp:1003580-test 'pycomplete-same-folder-class-lp:889052-test 'pycomplete-same-folder-def-lp:889052-test 'indent-region-lp:997958-test 'py-describe-symbol-fails-on-modules-lp:919719-test 'mark-block-region-lp:328806-test 'mark-decorators-lp:328851-test 'nested-dictionaries-indent-lp:328791-test 'tqs-lp:302834-lp:1018994-test 'fore-00007F-breaks-indentation-lp:328788-test 'dq-in-tqs-string-lp:328813-test 'flexible-indentation-lp:328842-test 'py-current-defun-lp:328846-test 'cls-pseudo-keyword-lp:328849-test 'hungry-delete-backwards-lp:328853-test 'hungry-delete-forward-lp:328853-test 'beg-end-of-defun-lp:303622-test 'bullet-lists-in-comments-lp:328782-test 'imenu-newline-arglist-lp:328783-test 'imenu-matches-in-docstring-lp:436285-test 'exceptions-not-highlighted-lp:473525-test 'fill-paragraph-problems-lp:710373-test 'nested-indents-lp:328775-test 'previous-statement-lp:637955-test 'inbound-indentation-multiline-assignment-lp:629916-test 'indentation-of-continuation-lines-lp:691185-test ;; test passes only when run from edebug ;; assistance appreciated ;; 'syntaxerror-on-py-execute-region-lp:691542-test 'goto-beginning-of-tqs-lp:735328-test 'class-treated-as-keyword-lp:709478-test 'py-decorators-face-lp:744335-test 'indent-after-return-lp:745208-test 'keep-assignments-column-lp:748198-test 'indent-triplequoted-to-itself-lp:752252-test 'multiline-listings-indent-lp:761946-test 'new-page-char-causes-loop-lp:762498-test 'nested-dicts-indent-lp:763756-test 'bad-indent-after-except-lp:771289-test 'indent-open-paren-not-last-lp:771291-test 'wrong-indent-after-else-lp:772610-test 'except-indents-wrong-lp:784432-test 'indent-explicitly-set-in-multiline-tqs-lp:784225-test 'unbalanced-parentheses-lp:784645-test 'explicitly-indent-in-list-lp:785018-test 'explicit-backslashed-continuation-line-indent-lp:785091-test 'indentation-error-lp:795773-test 'indent-function-arglist-lp:800088-test 'python-mode-hangs-lp:801780-test 'stops-backslashed-line-lp:802504-test 'stops-backslashed-line-lp:802504-test2 'python-mode-slow-lp:803275-test 'master-file-not-honored-lp:794850-test 'py-variable-name-face-lp:798538-test 'colon-causes-error-lp:818665-test 'if-indentation-lp:818720-test 'closing-parenthesis-indent-lp:821820-test 'py-indent-line-lp:822532-test 'indent-honor-arglist-whitespaces-lp:822540-test 'comments-indent-honor-setting-lp:824427-test 'infinite-loop-after-tqs-lp:826044-test 'closing-list-lp:826144-test 'py-electric-comment-add-space-lp:828398-test 'py-electric-comment-add-space-t-lp:828398-test 'execute-indented-code-lp:828314-test 'py-hungry-delete-backwards-needs-cc-lp:850595-test 'wrong-guess-for-py-indent-offset-lp:852052-test 'indent-match-import-pkg-lp:852500-test 'py-shift-line-when-no-region-lp:855565-test 'indentation-of-from-import-continuation-lines-lp:858041-test 'indentation-after-one-line-suites-lp:858044-test 'py-compute-indentation-wrong-at-eol-lp:858043-test 'comment-indentation-level-lp:869854-test 'indentation-wrong-after-multi-line-parameter-list-lp:871698-test 'no-indent-after-continue-lp:872676-test 'indent-after-inline-comment-lp:873372-test 'else-clause-indentation-lp:874470-test 'py-complete-lp:858621-test 'incorrect-use-of-region-in-py-shift-left-lp:875951-test 'indent-after-multiple-except-statements-lp:883815-test 'wrongly-highlighted-as-keywords-lp:885144-test 'glitch-when-indenting-lists-lp:886473-test 'indentation-keyword-lp:885143-test 'indentation-bug-inside-docstrings-lp:899455-test 'another-indentation-bug-inside-docstrings-lp:900684-test 'py-shebang-consider-ipython-lp:849293-test 'py-shebang-ipython-env-lp:849293-test 'indent-offset-not-guessed-when-loading-lp:902890-test 'from-__future__-import-absolute_import-mishighlighted-lp:907084-test ;; 'automatic-indentation-is-broken-lp:889643-test 'chars-uU-preceding-triple-quoted-get-string-face-lp:909517-test 'problem-with-py-separator-char-under-windows-lp:975539-test 'tuple-unpacking-highlighted-incorrectly-lp:961496-test 'new-problem-with-py-temp-directory-lp:965762-test 'wrong-type-argument-lp:901541-test 'py-pychecker-run-missing-lp:910783-test 'py-forward-into-nomenclature-lp:916818-test 'py-forward-into-nomenclature-jumps-over-CamelCased-words-lp:919540-test 'py-backward-into-nomenclature-caps-names-lp:919541-test 'execute-buffer-ipython-fails-lp:928087-test 'py-indent-comments-nil-ignored-lp:958721-test 'broken-font-locking-lp:961231-test 'regression-in-py-execute-region-lp:962227-test 'py-shell-invoking-python-lp:835151-test 'py-shell-invoking-ipython-lp:835151-test 'py-shell-invoking-python3-lp:835151-test 'py-shell-invoking-python2-lp:835151-test 'py-shell-invoking-python2.7-lp:835151-test 'py-shell-invoking-jython-lp:835151-test 'py-mark-block-clause-misbehave-lp:949310-test 'py-mark-clause-misbehave-lp:949310-test 'py-mark-block-misbehave-lp:949310-test 'script-buffer-appears-instead-of-python-shell-buffer-lp:957561-test 'UnicodeEncodeError-lp:550661-test 'py-shell-complete-lp:328836-test)) (defmacro py-bug-tests-intern (testname &optional dedicated teststring use-find-file) "`use-find-file' is used to make sure that the new buffer is created local to the project that autocomplete is being tested on." `(let ((debug-on-error t) (enable-local-variables :all) py-load-pymacs-p py-split-windows-on-execute-p py-shell-switch-buffers-on-execute-p py-start-run-py-shell proc py-fontify-shell-buffer-p ) (if ,use-find-file (find-file (concat (py-normalize-directory py-temp-directory) (replace-regexp-in-string "\\\\" "" (replace-regexp-in-string "-base$" "-test" (prin1-to-string ,testname))))) (set-buffer (get-buffer-create (replace-regexp-in-string "\\\\" "" (replace-regexp-in-string "-base$" "-test" (prin1-to-string ,testname)))))) ;; (with-temp-buffer (switch-to-buffer (current-buffer)) (delete-other-windows) (erase-buffer) (fundamental-mode) (insert ,teststring) (local-unset-key (kbd "RET")) (python-mode) (when (and (boundp 'company-mode) company-mode) (company-abort)) (funcall ,testname) (message "%s" (replace-regexp-in-string "\\\\" "" (concat (replace-regexp-in-string "-base$" "-test" (prin1-to-string ,testname)) " passed"))) (unless (< 1 arg) (set-buffer-modified-p 'nil) (and (get-buffer-process (current-buffer)) (set-process-query-on-exit-flag (get-buffer-process (current-buffer)) nil) (kill-process (get-buffer-process (current-buffer)))) (kill-buffer (current-buffer))))) ;; py-if-name-main-permission-p (defun py-if-name-main-permission-lp-326620-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def py_if_name_main_permission_test(): if __name__ == \"__main__\" : print(\"__name__ == '__main__' run\") return True else: print(\"__name__ == '__main__' supressed\") return False py_if_name_main_permission_test() ")) (py-bug-tests-intern 'py-if-name-main-permission-lp-326620-base arg teststring))) (defun py-if-name-main-permission-lp-326620-base () (save-excursion (let ((py-if-name-main-permission-p t) (py-shell-name (py-choose-shell))) (py-execute-buffer) (set-buffer "*Python*") ;; (switch-to-buffer (current-buffer)) (goto-char (point-max)) (forward-line -1) (end-of-line) (sit-for 0.2) (assert (looking-back "run") nil "py-if-name-main-permission-lp-326620-test #1 failed"))) (switch-to-buffer (current-buffer)) (let (py-if-name-main-permission-p) (py-execute-buffer) (set-buffer "*Python*") ;; (switch-to-buffer (current-buffer)) (goto-char (point-max)) (forward-line -1) (end-of-line) (sit-for 0.2) (assert (looking-back "supressed") nil "py-if-name-main-permission-lp-326620-test #2 failed"))) (defun sexp-commands-lp:328778-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked. Reported by Montanaro on 2003-08-05 \[ ... ] You can kill balanced expressions on a particular line but it's not possible to remove the whole of an 'if' or 'while' block." (interactive "p") (let ((teststring "# Examples from http://diveintopython.org/ def main(argv): grammar = \"kant.xml\" try: opts, args = getopt.getopt(argv, \"hg:d\", [\"help\", \"grammar=\"]) except getopt.GetoptError: usage() sys.exit(2) for opt, arg in opts: if opt in (\"-h\", \"--help\"): usage() sys.exit() elif opt == '-d': global _debug _debug = 1 elif opt in (\"-g\", \"--grammar\"): grammar = arg ")) (py-bug-tests-intern 'sexp-commands-lp:328778 arg teststring))) (defun sexp-commands-lp:328778 () (let ((size (buffer-size))) (goto-char (point-min)) (forward-line 15) (py-kill-clause) (assert (< (buffer-size) size) nil "sexp-commands-lp:328778-test failed") (assert (eq (buffer-size) 526) nil "sexp-commands-lp:328778-test failed") (kill-line 1) (indent-according-to-mode) (forward-line -4) (py-kill-block) (assert (eq (buffer-size) 324) nil "sexp-commands-lp:328778-test failed") )) (defun nested-dictionaries-indent-lp:328791-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked. " (interactive "p") (let ((teststring " # hanging asdf = { 'a':{ 'b':3, 'c':4 } } # closing asdf = { 'a':{ 'b':3, 'c':4 } } data = { 'key': { 'objlist': [ { 'pk': 1, 'name': 'first', }, { 'pk': 2, 'name': 'second', } ] } } ")) (py-bug-tests-intern 'nested-dictionaries-indent-lp:328791 arg teststring))) (defun nested-dictionaries-indent-lp:328791 () (let ((py-indent-honors-multiline-listing t) py-closing-list-dedents-bos) (goto-char (point-min)) (search-forward "'a':{") (assert (eq 4 (py-compute-indentation)) nil "nested-dictionaries-indent-lp:328791-test #1 failed") (search-forward "}") (assert (eq 8 (py-compute-indentation)) nil "nested-dictionaries-indent-lp:328791-test #2 failed") (search-forward "}") (assert (eq 4 (py-compute-indentation)) nil "nested-dictionaries-indent-lp:328791-test #3 failed") ;; py-closing-list-dedents-bos (setq py-closing-list-dedents-bos t) (search-forward "'a':{") (assert (eq 4 (py-compute-indentation)) nil "nested-dictionaries-indent-lp:328791-test #1 failed") (search-forward "}") (assert (eq 4 (py-compute-indentation)) nil "nested-dictionaries-indent-lp:328791-test #1 failed") (search-forward "}") (assert (eq 0 (py-compute-indentation)) nil "nested-dictionaries-indent-lp:328791-test #2 failed") (search-forward "}" nil nil 2) (assert (eq 12 (py-compute-indentation)) nil "nested-dictionaries-indent-lp:328791-test #2 failed") (search-forward "]") (assert (eq 8 (py-compute-indentation)) nil "nested-dictionaries-indent-lp:328791-test #2 failed") (search-forward "}") (assert (eq 4 (py-compute-indentation)) nil "nested-dictionaries-indent-lp:328791-test #2 failed") (search-forward "}") (assert (eq 0 (py-compute-indentation)) nil "nested-dictionaries-indent-lp:328791-test #2 failed"))) (defun mark-block-region-lp:328806-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring "def f(): \"\"\" class blah blah \"\"\" if a: ar_atpt_python_list_roh = ([ 'python-expression', # def ar_thingatpt_write_lists (&optional datei): 'python-partial-expression', 'python-statement', ]) ")) (py-bug-tests-intern 'mark-block-region-lp:328806-base arg teststring))) (defun mark-block-region-lp:328806-base () (forward-line -2) (py-mark-block) (assert (< (region-beginning) (region-end)) nil "mark-block-region-lp:328806-test failed!")) (defun flexible-indentation-lp:328842-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring " \(long, sequence, of_items, that, needs, to_be, wrapped) = input_list packed_entry = (long, sequence, of_items, that, needs, to_be, wrapped) \( whitespaced, long, sequence, of_items, that, needs, to_be, wrapped) = input_list ")) (py-bug-tests-intern 'flexible-indentation-lp:328842-base arg teststring))) (defun flexible-indentation-lp:328842-base () (let ((py-indent-honors-multiline-listing t)) (goto-char 33) (assert (eq 1 (py-compute-indentation)) nil "flexible-indentation-lp:328842-test failed") (goto-char 115) (assert (eq 16 (py-compute-indentation)) nil "flexible-indentation-lp:328842-test failed") (goto-char 202) (assert (eq 2 (py-compute-indentation)) nil "flexible-indentation-lp:328842-test failed"))) (defun py-current-defun-lp:328846-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring python-mode-teststring)) (py-bug-tests-intern 'py-current-defun-lp:328846-base arg teststring))) (defun py-current-defun-lp:328846-base () (goto-char 331) (assert (string= "f" (py-current-defun)) nil "py-current-defun-lp:328846-test failed")) (defun cls-pseudo-keyword-lp:328849-test (&optional arg) (interactive "p") (let ((teststring "class Foo(object): def summat(cls, x): ..... summat = classmethod(summat) ")) (py-bug-tests-intern 'cls-pseudo-keyword-lp:328849-base arg teststring))) (defun cls-pseudo-keyword-lp:328849-base () (let ((font-lock-verbose nil)) (font-lock-mode 1) (font-lock-fontify-buffer) (goto-char 36) (sit-for 0.1) (assert (eq (get-char-property (point) 'face) 'py-pseudo-keyword-face) nil "cls-pseudo-keyword-lp:328849-test failed "))) (defun mark-decorators-lp:328851-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring "@foo.bar def baz(): pass ")) (py-bug-tests-intern 'mark-decorators-lp:328851-base arg teststring))) (defun mark-decorators-lp:328851-base () (goto-char 10) (py-mark-def t) (assert (eq 28 (- (region-end)(region-beginning))) nil "mark-decorators-lp:328851-test failed")) (defun beg-end-of-defun-lp:303622-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring " class f(): \"\"\" class blah blah \"\"\" if a: ar_atpt_python_list_roh = ([ 'python-expression', # def ar_thingatpt_write_lists (&optional datei): 'python-partial-expression', 'python-statement', ]) ")) (py-bug-tests-intern 'beg-end-of-defun-lp:303622 arg teststring))) (defun beg-end-of-defun-lp:303622 () (goto-char 13) (py-end-of-def-or-class) (sit-for 0.1) (assert (eq 275 (point)) nil "beg-end-of-defun-lp:303622-test #1 failed!") (beginning-of-defun) (sit-for 0.1) (assert (eq 2 (point)) nil "beg-end-of-defun-lp:303622-test #2 failed!")) (defun dq-in-tqs-string-lp:328813-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring " # Bug #328813 (sf1775975) print(\"\"\" \"Hi!\" I'm a doc string\"\"\") print(''' 'Hi!' I'm a doc string''') print(\"\"\" ''' \"Hi!\" I'm a doc string ''' \"\"\") print(''' \"\"\" \"Hi!\" I'm a doc string \"\"\" ''') ")) (py-bug-tests-intern 'dq-in-tqs-string-lp:328813 arg teststring))) (defun dq-in-tqs-string-lp:328813 () (let ((font-lock-verbose nil)) (font-lock-mode 1) (font-lock-fontify-buffer) (goto-char 78) (let ((erg (get-char-property (point) 'face))) (insert "\"") (font-lock-fontify-buffer) (assert (eq erg (get-char-property (point) 'face)) nil "dq-in-tqs-string-lp:328813-test failed ") (goto-char 122)))) (defun imenu-matches-in-docstring-lp:436285-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring " class foo(): \"\"\" class hello(object): def __init__(self): ... \"\"\" pass ")) (py-bug-tests-intern 'imenu-matches-in-docstring-lp:436285-base arg teststring))) (defun imenu-matches-in-docstring-lp:436285-base () (goto-char 40) (assert (eq (py-beginning-of-def-or-class) 2) nil "imenu-matches-in-docstring-lp:436285-test failed")) (defun fill-paragraph-problems-lp:710373-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring " \"\"\" triple-quoted string containing \"quotation\" marks. triple-quoted string containing \"quotation\" marks. triple-quoted string containing \"quotation\" marks. triple-quoted string containing \"quotation\" marks. triple-quoted string containing \"quotation\" marks. \"\"\" ")) (fill-paragraph-problems-lp:710373-test-intern arg teststring))) (defun fill-paragraph-problems-lp:710373-test-intern (arg teststring) (let ((tmp-dir "/tmp/") (fpp-exec-buffer "fill-paragraph-problems-lp:710373") (diff-buffer "fpp-lp:710373-old")) (set-buffer (get-buffer-create diff-buffer)) (erase-buffer) (fundamental-mode) (insert teststring) (write-file (concat tmp-dir diff-buffer)) (if arg (progn (set-buffer (get-buffer-create fpp-exec-buffer)) (switch-to-buffer (current-buffer)) (erase-buffer) (insert teststring) (fundamental-mode) (fill-paragraph-problems-lp:710373-test-base arg tmp-dir fpp-exec-buffer diff-buffer)) (with-temp-buffer (insert teststring) (fill-paragraph-problems-lp:710373-test-base arg tmp-dir fpp-exec-buffer diff-buffer))))) (defun fill-paragraph-problems-lp:710373-test-base (arg tmp-dir fpp-exec-buffer diff-buffer) (goto-char 48) (py-fill-paragraph) (write-file (concat tmp-dir fpp-exec-buffer)) (diff (concat tmp-dir fpp-exec-buffer) (concat tmp-dir diff-buffer) "-u") (if (featurep 'xemacs) (progn (set-buffer "*Diff Output*") (switch-to-buffer (current-buffer))) (set-buffer "*Diff*") (sit-for 1) (assert (numberp (progn (goto-char (point-min))(search-forward "no differences" nil t 1))) t) (message "%s" "fill-paragraph-problems-lp:710373 passed")) (set-buffer "fill-paragraph-problems-lp:710373") (unless (< 1 arg) (set-buffer-modified-p 'nil) (kill-buffer (current-buffer)))) (defun tqs-lp:302834-lp:1018994-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring "class OrderedDict1(dict): \"\"\" This implementation of a dictionary keeps track of the order in which keys were inserted. \"\"\" '''I'asdfa''' ")) (py-bug-tests-intern 'triple-quoted-string-dq-lp:302834 arg teststring))) (defun triple-quoted-string-dq-lp:302834 () (let ((font-lock-verbose nil)) (font-lock-mode 1) (font-lock-fontify-buffer) (goto-char 78) (let ((erg (get-char-property (point) 'face))) (insert "\"") (font-lock-fontify-buffer) (sit-for 0.2) (assert (eq erg (get-char-property (point) 'face)) "tqs-lp:302834-lp:1018994-test #1 failed.") (goto-char 153) (assert (eq erg (get-char-property (point) 'face)) "tqs-lp:302834-lp:1018994-test #2 failed.") ))) (defun inbound-indentation-multiline-assignment-lp:629916-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring "foo_long_long_long_long = ( bar_long_long_long_long[ (x_long_long_long_long == X) & (y_long_long_long_long == Y)]) ")) (py-bug-tests-intern 'inbound-indentation-multiline-assignment-lp:629916 arg teststring))) (defun inbound-indentation-multiline-assignment-lp:629916 () (let ((py-indent-honors-multiline-listing t)) (goto-char 33) (assert (eq 4 (py-compute-indentation)) nil "inbound-indentation-multiline-assignment-lp:629916-test #1 failed") (goto-char 62) (assert (eq 8 (current-indentation)) nil "inbound-indentation-multiline-assignment-lp:629916-test #2 failed"))) (defun previous-statement-lp:637955-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring "class OrderedDict1(dict): \"\"\" This implementation of a dictionary keeps track of the order in which keys were inserted. \"\"\"")) (py-bug-tests-intern 'previous-statement-lp:637955 arg teststring))) (defun previous-statement-lp:637955 () (beginning-of-line) (py-previous-statement) (sit-for 0.1) (assert (eq 31 (point)) nil "previous-statement-lp:637955-test failed.")) (defun nested-indents-lp:328775-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring " if x > 0: for i in range(100): print(i) else: print(\"All done\") elif x < 0: print(\"x is negative\") ")) (py-bug-tests-intern 'nested-indents-lp:328775 arg teststring))) (defun nested-indents-lp:328775 () (assert (eq 4 (py-compute-indentation)) nil "nested-indents-lp:328775-test #1 failed!") (goto-char 41) (assert (eq 8 (py-compute-indentation)) nil "nested-indents-lp:328775-test #2 failed!") (goto-char 54) (assert (eq 4 (py-compute-indentation)) nil "nested-indents-lp:328775-test #3 failed!")) (defun bullet-lists-in-comments-lp:328782-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring)) (bullet-lists-in-comments-lp:328782-test-intern arg teststring))) (defun bullet-lists-in-comments-lp:328782-test-intern (&optional arg teststring) (let ((font-lock-verbose nil)) (set-buffer (get-buffer-create "bullet-lists-in-comments-lp:328782-test")) (erase-buffer) (insert " ## * If the filename is a directory and not a Maildir nor ## an MH Mailbox, it will be processed as a Mailbox --this bug named here: bullet-lists-in-comments-lp:328782.htm-- ## directory consisting of just .txt and .lorien files. ") (when arg (switch-to-buffer (current-buffer))) (python-mode) (font-lock-mode 1) (font-lock-fontify-buffer) (goto-char 100) (py-fill-paragraph) (set-buffer "bullet-lists-in-comments-lp:328782-test") (unless (< 1 arg) (set-buffer-modified-p 'nil) (kill-buffer (current-buffer))))) (defun imenu-newline-arglist-lp:328783-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring "def editor(db, db_name, table_name, #api dbapi,dbapi_exceptions): pass")) (py-bug-tests-intern 'imenu-newline-arglist-lp:328783-base arg teststring))) (defun imenu-newline-arglist-lp:328783-base () (goto-char 60) (py-beginning-of-def-or-class) (assert (eq (point) 1) nil "imenu-newline-arglist-lp:328783-test failed")) (defun hungry-delete-backwards-lp:328853-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring python-mode-teststring)) (py-bug-tests-intern 'hungry-delete-backwards-lp:328853 arg teststring))) (defun hungry-delete-backwards-lp:328853 () (goto-char 421) (py-hungry-delete-backwards) (assert (eq 409 (point)) nil "hungry-delete-backwards-lp:328853-test failed")) (defun hungry-delete-forward-lp:328853-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring python-mode-teststring)) (py-bug-tests-intern 'hungry-delete-forward-lp:328853 arg teststring))) (defun hungry-delete-forward-lp:328853 () (goto-char 409) (py-hungry-delete-forward) (assert (looking-at "#") nil "hungry-delete-backwards test failed")) (defun UnicodeEncodeError-lp:550661-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -\*- coding: utf-8 -\*- print(u'\\xA9') "))) (py-bug-tests-intern 'UnicodeEncodeError-lp:550661-base 2 teststring))) (defun UnicodeEncodeError-lp:550661-base () (goto-char 48) (push-mark) (end-of-line) (py-execute-region-switch (line-beginning-position) (point)) (sit-for 0.2) (unless (looking-at "©") (when (looking-back comint-prompt-regexp) (goto-char (1- (match-beginning 0)))) (sit-for 0.1)) (assert (or (looking-back "©")(looking-at "©")) nil "UnicodeEncodeError-lp:550661-test failed")) (defun indentation-of-continuation-lines-lp:691185-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring " def f(val): # current behavior - indent to just after the first space a_verry_loonng_variable_nammmee = \\ val ")) (py-bug-tests-intern 'indentation-of-continuation-lines-lp:691185 arg teststring))) (defun indentation-of-continuation-lines-lp:691185 () (let ((py-continuation-offset 2)) (goto-char 127) (delete-horizontal-space) (indent-to (py-compute-indentation)) (assert (eq 10 (current-indentation)) nil "indentation-of-continuation-lines-lp:691185-test failed!"))) (defun goto-beginning-of-tqs-lp:735328-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring "class Foo(object): \"\"\" This docstring isn't indented, test should pass anyway. \"\"\" ")) (py-bug-tests-intern 'goto-beginning-of-tqs-lp:735328 arg teststring))) (defun goto-beginning-of-tqs-lp:735328 () (goto-char 84) (assert (eq 4 (py-compute-indentation)) nil "goto-beginning-of-tqs-lp:735328-test failed") ) (defun class-treated-as-keyword-lp:709478-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring "foo = [ T.div( T.tabl(*trows), CLASS='blok',) ] ")) (py-bug-tests-intern 'class-treated-as-keyword-lp:709478 arg teststring))) (defun class-treated-as-keyword-lp:709478 () (let ((font-lock-verbose nil)) (font-lock-fontify-buffer) (goto-char 63) (sit-for 0.1) (assert (eq (get-char-property (point) 'face) 'font-lock-string-face) nil "class-treated-as-keyword-lp:709478d 1th test failed") (goto-char 57) ;; (assert (if (get-char-property (point) 'face)(eq (get-char-property (point) 'face) 'py-variable-name-face)t) nil "class-treated-as-keyword-lp:709478-test 2th failed"))) (assert (eq (get-char-property (point) 'face) 'py-variable-name-face) nil "class-treated-as-keyword-lp:709478-test 2th failed"))) (defun fore-00007F-breaks-indentation-lp:328788-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring "class a: def __init__(self): self.StyleSetSpec(self.STYLE_FIELD, \"fore:#00007F\" ) self.StyleSetSpec(self.STYLE_FIELD, \"fore:#00007F\" ) ")) (py-bug-tests-intern 'fore-00007F-breaks-indentation-lp:328788 arg teststring))) (defun fore-00007F-breaks-indentation-lp:328788 () (switch-to-buffer (current-buffer)) (goto-char 34) (sit-for 0.1) ;; (debug-on-entry 'py-compute-indentation) (assert (eq 8 (py-compute-indentation)) nil "fore-00007F-breaks-indentation-lp:328788-test #1 failed") (goto-char 121) (assert (eq 8 (py-compute-indentation)) nil "fore-00007F-breaks-indentation-lp:328788-test #2 failed")) (defun exceptions-not-highlighted-lp:473525-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring "excs = (SystemExit, Exception, KeyboardInterrupt)")) (py-bug-tests-intern 'exceptions-not-highlighted-lp:473525 arg teststring))) (defun exceptions-not-highlighted-lp:473525 () (let ((font-lock-verbose nil)) (goto-char 39) (font-lock-fontify-buffer) (sit-for 0.1) (assert (eq (get-char-property (point) 'face) 'py-exception-name-face) nil "exceptions-not-highlighted-lp:473525-test failed"))) (defun syntaxerror-on-py-execute-region-lp:691542-test (&optional arg) (interactive "p") (let ((teststring "# -*- coding: utf-8 -*- print(\"Poet Friedrich Hölderlin\"")) (py-bug-tests-intern 'syntaxerror-on-py-execute-region-lp:691542-base arg teststring))) (defun syntaxerror-on-py-execute-region-lp:691542-base () (let ((oldbuf (current-buffer)) erg kill-buffer-query-functions py-switch-to-python) (when (buffer-live-p (get-buffer (concat "*" py-which-bufname "*"))) (when (processp (get-process py-which-bufname)) (set-process-query-on-exit-flag (get-process py-which-bufname) nil)) (kill-buffer (concat "*" py-which-bufname "*"))) (py-execute-region (line-beginning-position) (line-end-position)) (when (interactive-p) (switch-to-buffer (current-buffer))) (set-buffer (get-buffer (concat "*" py-which-bufname "*"))) (assert (or (search-forward "Hölderlin" nil t 1) (search-backward "Hölderlin" nil t 1)) nil "syntaxerror-on-py-execute-region-lp:691542-test failed"))) (defun backslashed-continuation-line-indent-lp:742993-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring " # py-continuation-offset: 2 self.last_abc_attr = \\ self.last_xyz_attr = \\ self.last_abc_other = \\ self.last_xyz_other = None # py-continuation-offset: 4 self.last_abc_attr = \\ self.last_xyz_attr = \\ self.last_abc_other = \\ self.last_xyz_other = None # py-continuation-offset: 6 self.last_abc_attr = \\ self.last_xyz_attr = \\ self.last_abc_other = \\ self.last_xyz_other = None ")) (py-bug-tests-intern 'backslashed-continuation-line-indent-lp:742993 arg teststring))) (defun backslashed-continuation-line-indent-lp:742993 () (let ((py-continuation-offset 2)) (goto-char 54) (assert (eq 2 (py-compute-indentation)) nil "backslashed-continuation-line-indent-lp:742993-test #1a failed") (assert (eq (py-compute-indentation) py-continuation-offset) nil "backslashed-continuation-line-indent-lp:742993-test #1b failed") (setq py-continuation-offset 4) (goto-char 180) (assert (eq 4 (py-compute-indentation)) nil "backslashed-continuation-line-indent-lp:742993-test #2a failed") (assert (eq (py-compute-indentation) py-continuation-offset) nil "backslashed-continuation-line-indent-lp:742993-test #2b failed") (setq py-continuation-offset 6) (goto-char 306) (assert (eq 6 (py-compute-indentation)) nil "backslashed-continuation-line-indent-lp:742993-test #3a failed") (assert (eq (py-compute-indentation) py-continuation-offset) nil "backslashed-continuation-line-indent-lp:742993-test #3b failed") )) (defun py-decorators-face-lp:744335-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring "@foo.bar def baz(): pass ")) (py-bug-tests-intern 'py-decorators-face-lp:744335 arg teststring))) (defun py-decorators-face-lp:744335 () (let ((font-lock-verbose nil)) (goto-char 7) (font-lock-fontify-buffer) (sit-for 0.1) (assert (eq (get-char-property (point) 'face) 'py-decorators-face) nil "py-decorators-face-lp:744335-test failed"))) (defun indent-after-return-lp:745208-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring "class FOO\(): if len(sys.argv)==1: usage\() sys.exit\() def build_extension\(self, ext): if ext.name == '_ctypes': if not self.configure_ctypes\(ext): return try: build_ext.build_extension\(self, ext) except \(CCompilerError, DistutilsError) as why: self.announce\('WARNING: building of extension \"%s\" failed: %s' % \(ext.name, sys.exc_info()\[1])) self.failed.append(ext.name) return # Workaround for Mac OS X: The Carbon-based modules cannot be # reliably imported into a command-line Python if 'Carbon' in ext.extra_link_args: self.announce\( 'WARNING: skipping import check for Carbon-based \"%s\"' % ext.name) return ")) (py-bug-tests-intern 'indent-after-return-lp:745208 arg teststring))) (defun indent-after-return-lp:745208 () (assert (eq 8 (py-compute-indentation)) nil "indent-after-return-lp:745208-test failed")) (defun keep-assignments-column-lp:748198-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring "bar = foo(a=1, b=2, c=3) ")) (py-bug-tests-intern 'keep-assignments-column-lp:748198 arg teststring))) (defun keep-assignments-column-lp:748198 () (goto-char 45) (py-newline-and-indent) (assert (eq 0 (current-column)) nil "py-vor test failed")) (defun indent-triplequoted-to-itself-lp:752252-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked." (interactive "p") (let ((teststring "def foo(): \"\"\"The real foo thing.\n")) (py-bug-tests-intern 'indent-triplequoted-to-itself-lp:752252-base arg teststring))) (defun indent-triplequoted-to-itself-lp:752252-base () (sit-for 0.1) ;; (message "(py-compute-indentation): %s" (py-compute-indentation)) (assert (eq 4 (py-compute-indentation)) nil "indent-triplequoted-to-itself-lp:752252-test failed")) (defun multiline-listings-indent-lp:761946-test (&optional arg) (interactive "p") (let ((teststring "def foo(): do_something_first( a=1, b=2, ")) (py-bug-tests-intern 'multiline-listings-indent-lp:761946-base arg teststring))) (defun multiline-listings-indent-lp:761946-base () (goto-char 49) (assert (eq 8 (py-compute-indentation)) nil "multiline-listings-indent-lp:761946-test failed")) (defun new-page-char-causes-loop-lp:762498-test (&optional arg) (interactive "p") (let ((teststring "class Foo: def baz(self): ")) (py-bug-tests-intern 'new-page-char-causes-loop-lp:762498-base arg teststring))) (defun new-page-char-causes-loop-lp:762498-base () (goto-char 31) (assert (eq 8 (py-compute-indentation)) "new-page-char-causes-loop-lp:762498-test failed")) (defun nested-dicts-indent-lp:763756-test (&optional arg) (interactive "p") (let ((teststring "feature_operation_matrix = { \"character\": { \"kill\": \"{ctrl-k}\",{ } } } )) ")) (py-bug-tests-intern 'nested-dicts-indent-lp:763756-base arg teststring))) (defun nested-dicts-indent-lp:763756-base () (let ((py-indent-honors-multiline-listing nil)) (goto-char 30) (assert (eq 4 (py-compute-indentation)) nil "nested-dicts-indent-lp:763756-test failed") (goto-char 49) (assert (eq 8 (py-compute-indentation)) nil "nested-dicts-indent-lp:763756-test failed") (forward-line 1) (assert (eq 12 (py-compute-indentation)) nil "nested-dicts-indent-lp:763756-test failed"))) (defun bad-indent-after-except-lp:771289-test (&optional arg) (interactive "p") (let ((teststring "def foo(): try: baz() except ValueError: ")) (py-bug-tests-intern 'bad-indent-after-except-lp:771289-base arg teststring))) (defun bad-indent-after-except-lp:771289-base () (assert (eq 8 (py-compute-indentation)) nil "bad-indent-after-except-lp:771289-test failed")) (defun indent-open-paren-not-last-lp:771291-test (&optional arg) (interactive "p") (let ((teststring " # Put point after the comma on the last line and hit return. You # end up in column 8 (i.e. under the 'g' in 'thing') when you # should end up in column 20 (under the 'w' in 'with_something'). # Note that this is a different case than previously reported, # where the open paren was the last thing on the line. When the # open paren is *not* the last thing on the line, the next line's # indentation should line up under the first non-whitespace # character following the open paren. def foo(): thing = call_it(with_something, ")) (py-bug-tests-intern 'indent-open-paren-not-last-lp:771291-base arg teststring))) (defun indent-open-paren-not-last-lp:771291-base () (assert (eq 20 (py-compute-indentation)) nil "indent-open-paren-not-last-lp:771291-test failed")) (defun wrong-indent-after-else-lp:772610-test (&optional arg) (interactive "p") (let ((teststring "if True: pass else: ")) (py-bug-tests-intern 'wrong-indent-after-else-lp:772610-base arg teststring))) (defun wrong-indent-after-else-lp:772610-base () (assert (eq 4 (py-compute-indentation)) nil "wrong-indent-after-else-lp:772610-test failed")) (defun except-indents-wrong-lp:784432-test (&optional arg) (interactive "p") (let ((teststring "try: block1 except: block2")) (py-bug-tests-intern 'except-indents-wrong-lp:784432-base arg teststring))) (defun except-indents-wrong-lp:784432-base () (goto-char 17) (assert (eq 0 (py-compute-indentation)) nil "except-indents-wrong-lp:784432-test #1 failed") (goto-char 25) (assert (eq 4 (py-compute-indentation)) nil "except-indents-wrong-lp:784432-test #2 failed")) (defun indent-explicitly-set-in-multiline-tqs-lp:784225-test (&optional arg) (interactive "p") (let ((teststring "def foo(): with bar('x', \"\"\" [hello] " )) (py-bug-tests-intern 'indent-explicitly-set-in-multiline-tqs-lp:784225-base arg teststring))) (defun indent-explicitly-set-in-multiline-tqs-lp:784225-base () (assert (eq 8 (py-compute-indentation)) nil "indent-explicitly-set-in-multiline-tqs-lp:784225-test failed")) (defun unbalanced-parentheses-lp:784645-test (&optional arg) (interactive "p") (let ((teststring "def foo(): something() another( ")) (py-bug-tests-intern 'unbalanced-parentheses-lp:784645-base arg teststring))) (defun unbalanced-parentheses-lp:784645-base () (goto-char 28) (assert (eq 4 (py-compute-indentation)) nil "unbalanced-parentheses-lp:784645-test failed")) (defun explicitly-indent-in-list-lp:785018-test (&optional arg) (interactive "p") (let ((teststring "def foo(): with bar('x', [hello] " )) (py-bug-tests-intern 'explicitly-indent-in-list-lp:785018-base arg teststring))) (defun explicitly-indent-in-list-lp:785018-base () (assert (eq 8 (py-compute-indentation)) nil "explicitly-dedented-in-list-lp:784225-test failed")) (defun explicit-backslashed-continuation-line-indent-lp:785091-test (&optional arg) (interactive "p") (let ((teststring " a_verry_loonng_variable_nammmee = \\ val \\ ")) (py-bug-tests-intern 'explicit-backslashed-continuation-line-indent-lp:785091-base arg teststring))) (defun explicit-backslashed-continuation-line-indent-lp:785091-base () (assert (eq 40 (py-compute-indentation)) nil "explicit-backslashed-continuation-line-indent-lp:785091 test failed")) (defun indentation-error-lp:795773-test (&optional arg) (interactive "p") (let ((teststring "class MailTransportAgentAliases: \"\"\"Utility for generating all the aliases of a mailing list.\"\"\" implements(IMailTransportAgentAliases) def aliases(self, mlist): \"\"\"See `IMailTransportAgentAliases`.\"\"\" # Always return yield mlist.posting_address for destination in SUBDESTINATIONS: yield '{0}-{1}@{2}'.format(mlist.list_name, destination, mlist.host_name) ")) (py-bug-tests-intern 'indentation-error-lp:795773-base arg teststring))) (defun indentation-error-lp:795773-base () (goto-char 385) (assert (eq 39 (py-compute-indentation)) nil "indentation-error-lp:795773-test failed")) (defun class-highlighted-as-keywords-lp:798287-test (&optional arg) (interactive "p") (let ((teststring "class X: pass # Everything is highlighted as a keyword. ")) (py-bug-tests-intern 'class-highlighted-as-keywords-lp:798287-base arg teststring))) (defun class-highlighted-as-keywords-lp:798287-base () (let ((font-lock-verbose nil)) (goto-char 7) (font-lock-fontify-buffer) ;; (sit-for 0.1) (assert (eq (get-char-property (point) 'face) 'py-class-name-face) nil "class-highlighted-as-keywords-lp:798287-test failed"))) (defun indent-function-arglist-lp:800088-test (&optional arg) (interactive "p") (let ((teststring "def long_function_name( var_one, var_two, var_three, var_four): print(var_one) ")) (py-bug-tests-intern 'indent-function-arglist-lp:800088-base arg teststring))) (defun indent-function-arglist-lp:800088-base () (goto-char 25) (let ((py-indent-offset 4)) (assert (eq 8 (py-compute-indentation)) nil "indent-function-arglist-lp:800088-test failed"))) (defun python-mode-hangs-lp:801780-test (&optional arg) (interactive "p") (let ((teststring "@jit.unroll_safe def pushrevvalues(self, n, values_w): # n should be len(values_w) make_sure_not_resized(values_w) while True: n -= 1 if n < 0: break self.pushvalue(values_w[n]) ")) (py-bug-tests-intern 'python-mode-hangs-lp:801780-base arg teststring))) (defun python-mode-hangs-lp:801780-base () (assert (eq 18 (py-beginning-of-def-or-class)) nil "python-mode-hangs-lp:801780-test failed")) (defun stops-backslashed-line-lp:802504-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- if bar == 1 or bar == 2 or bar == 3 or bar == 4 or bar == 5 or bar == 6 or bar == 7 \\ or bar == 8 or bar == 9 or bar == 10 or bar == 11 or bar == 12 or bar == 13 \\ or bar == 14 or bar == 15 or bar == 16 or bar == 17 or bar == 18: "))) (py-bug-tests-intern 'stops-backslashed-line-lp:802504-base arg teststring))) (defun stops-backslashed-line-lp:802504-base () (goto-char 49) (assert (eq 282 (py-end-of-statement)) nil "stops-backslashed-line-lp:802504-test failed")) (defun stops-backslashed-line-lp:802504-test2 (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- if x>1 and x<100 and y>1 and y<200: if bar == 1 or bar == 2 or bar == 3 or bar == 4 or bar == 5 or bar == 6 or bar == 7 \\ or bar == 8 or bar == 9 or bar == 10 or bar == 11 or bar == 12 or bar == 13 or \\ "))) (py-bug-tests-intern 'stops-backslashed-line2-lp:802504-base arg teststring))) (defun stops-backslashed-line2-lp:802504-base () (assert (eq 87 (py-beginning-of-statement)) nil "stops-backslashed-line-lp:802504-test failed")) (defun python-mode-slow-lp:803275-test (&optional arg) (interactive "p") (let ((teststring "# commands.py - command processing for mercurial # # Copyright 2005-2007 Matt Mackall # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. from node import hex, bin, nullid, nullrev, short from lock import release from i18n import _, gettext import os, re, difflib, time, tempfile, errno import hg, scmutil, util, revlog, extensions, copies, error, bookmarks import patch, help, url, encoding, templatekw, discovery import archival, changegroup, cmdutil, hbisect import sshserver, hgweb, hgweb.server, commandserver import merge as mergemod import minirst, revset, fileset import dagparser, context, simplemerge import random, setdiscovery, treediscovery, dagutil table = {} command = cmdutil.command(table) # common command options globalopts = [ ('R', 'repository', '', _('repository root directory or name of overlay bundle file'), _('REPO')), ('', 'cwd', '', _('change working directory'), _('DIR')), ('y', 'noninteractive', None, _('do not prompt, assume \\'yes\\' for any required answers')), ('q', 'quiet', None, _('suppress output')), ('v', 'verbose', None, _('enable additional output')), ('', 'config', [], _('set/override config option (use \\'section.name=value\\')'), _('CONFIG')), ('', 'debug', None, _('enable debugging output')), ('', 'debugger', None, _('start debugger')), ('', 'encoding', encoding.encoding, _('set the charset encoding'), _('ENCODE')), ('', 'encodingmode', encoding.encodingmode, _('set the charset encoding mode'), _('MODE')), ('', 'traceback', None, _('always print a traceback on exception')), ('', 'time', None, _('time how long the command takes')), ('', 'profile', None, _('print command execution profile')), ('', 'version', None, _('output version information and exit')), ('h', 'help', None, _('display help and exit')), ] dryrunopts = [('n', 'dry-run', None, _('do not perform actions, just print output'))] remoteopts = [ ('e', 'ssh', '', _('specify ssh command to use'), _('CMD')), ('', 'remotecmd', '', _('specify hg command to run on the remote side'), _('CMD')), ('', 'insecure', None, _('do not verify server certificate (ignoring web.cacerts config)')), ] walkopts = [ ('I', 'include', [], _('include names matching the given patterns'), _('PATTERN')), ('X', 'exclude', [], _('exclude names matching the given patterns'), _('PATTERN')), ] commitopts = [ ('m', 'message', '', _('use text as commit message'), _('TEXT')), ('l', 'logfile', '', _('read commit message from file'), _('FILE')), ] commitopts2 = [ ('d', 'date', '', _('record the specified date as commit date'), _('DATE')), ('u', 'user', '', _('record the specified user as committer'), _('USER')), ] templateopts = [ ('', 'style', '', _('display using template map file'), _('STYLE')), ('', 'template', '', _('display with template'), _('TEMPLATE')), ] logopts = [ ('p', 'patch', None, _('show patch')), ('g', 'git', None, _('use git extended diff format')), ('l', 'limit', '', _('limit number of changes displayed'), _('NUM')), ('M', 'no-merges', None, _('do not show merges')), ('', 'stat', None, _('output diffstat-style summary of changes')), ] + templateopts diffopts = [ ('a', 'text', None, _('treat all files as text')), ('g', 'git', None, _('use git extended diff format')), ('', 'nodates', None, _('omit dates from diff headers')) ] diffopts2 = [ ('p', 'show-function', None, _('show which function each change is in')), ('', 'reverse', None, _('produce a diff that undoes the changes')), ('w', 'ignore-all-space', None, _('ignore white space when comparing lines')), ('b', 'ignore-space-change', None, _('ignore changes in the amount of white space')), ('B', 'ignore-blank-lines', None, _('ignore changes whose lines are all blank')), ('U', 'unified', '', _('number of lines of context to show'), _('NUM')), ('', 'stat', None, _('output diffstat-style summary of changes')), ] similarityopts = [ ('s', 'similarity', '', _('guess renamed files by similarity (0<=s<=100)'), _('SIMILARITY')) ] subrepoopts = [ ('S', 'subrepos', None, _('recurse into subrepositories')) ] # Commands start here, listed alphabetically @command('^add', walkopts + subrepoopts + dryrunopts, _('[OPTION]... [FILE]...')) def add(ui, repo, \*pats, \*\*opts): \"\"\"add the specified files on the next commit Schedule files to be version controlled and added to the repository. The files will be added to the repository at the next commit. To undo an add before that, see :hg:`forget`. If no names are given, add all files to the repository. .. container:: verbose An example showing how new (unknown) files are added automatically by :hg:`add`:: \$ ls foo.c \$ hg status ? foo.c \$ hg add adding foo.c \$ hg status A foo.c Returns 0 if all files are successfully added. \"\"\" m = scmutil.match(repo[None], pats, opts) rejected = cmdutil.add(ui, repo, m, opts.get('dry_run'), opts.get('subrepos'), prefix=\"\") return rejected and 1 or 0 ")) (py-bug-tests-intern 'python-mode-slow-lp:803275-base arg teststring))) (defun python-mode-slow-lp:803275-base () (goto-char 1) (sit-for 0.1) (assert (eq 5430 (py-end-of-def-or-class)) nil "python-mode-slow-lp:803275-test failed")) (defun master-file-not-honored-lp:794850-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- # Local Variables: # py-master-file: \"/usr/tmp/my-master.py\" # End: print(\"master-file is executed\") "))) (py-bug-tests-intern 'master-file-not-honored-lp:794850-base arg teststring))) (defun master-file-not-honored-lp:794850-base () (let ((oldbuf (current-buffer))) (save-excursion (set-buffer (get-buffer-create "test-master.py")) (erase-buffer) (insert "#! /usr/bin/env python # -*- coding: utf-8 -*- print(\"Hello, I'm your master!\") ") (write-file "/var/tmp/my-master.py")) (set-buffer oldbuf) (unwind-protect (py-execute-buffer) (when (file-readable-p "/var/tmp/my-master.py") (delete-file "/var/tmp/my-master.py"))))) (defun py-variable-name-face-lp:798538-test (&optional arg) (interactive "p") (let ((teststring "class Foo(object): def summat(cls, x): ..... summat = classmethod(summat) ")) (py-bug-tests-intern 'py-variable-name-face-lp:798538-base arg teststring))) (defun py-variable-name-face-lp:798538-base () (let ((font-lock-verbose nil)) (font-lock-mode 1) (font-lock-fontify-buffer) (goto-char 64) (sit-for 0.1) (assert (eq (get-char-property (point) 'face) 'py-variable-name-face) nil "py-variable-name-face-lp:798538-test failed "))) (defun colon-causes-error-lp:818665-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- print(\"Hello!\") "))) (py-bug-tests-intern 'colon-causes-error-lp:818665-base arg teststring))) (defun colon-causes-error-lp:818665-base () (insert ":") (forward-char -1) (assert (looking-at ":") nil "colon-causes-error-lp:818665-test failed")) (defun if-indentation-lp:818720-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- class X(): def __init__( self ): self.lookup = {} def y( self, p ): p = p.foo() if p in self.lookup: return self.lookup[ foo ] else: return None "))) (py-bug-tests-intern 'if-indentation-lp:818720-base arg teststring))) (defun if-indentation-lp:818720-base () (goto-char 196) (assert (eq 12 (py-compute-indentation)) nil "if-indentation-lp:818720-test failed")) (defun closing-parenthesis-indent-lp:821820-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- if foo: bar.append( ht( T.a('Sorted Foo', href='#Blub', ), ' -- foo bar baz--', self.Tasdf( afsd ), self.Tasdf( asdf ), ) ) "))) (py-bug-tests-intern 'closing-parenthesis-indent-lp:821820-base arg teststring))) (defun closing-parenthesis-indent-lp:821820-base () (let ((py-closing-list-dedents-bos t)) (forward-line -1) (assert (eq 4 (py-compute-indentation)) nil "closing-parenthesis-indent-lp:821820-test failed"))) (defun py-indent-line-lp:822532-test (&optional arg) (interactive "p") (let ((teststring " if x > 0: for i in range(100): print(i) else: print(\"All done\") elif x < 0: print(\"x is negative\") ")) (py-bug-tests-intern 'py-indent-line-lp:822532-base arg teststring))) (defun py-indent-line-lp:822532-base () (goto-char 54) (assert (eq 4 (py-compute-indentation)) nil "py-indent-line-lp:822532-test failed")) (defun indent-honor-arglist-whitespaces-lp:822540-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- abc( ghi, jkl "))) (py-bug-tests-intern 'indent-honor-arglist-whitespaces-lp:822540-base arg teststring))) (defun indent-honor-arglist-whitespaces-lp:822540-base () (forward-line -1) (assert (eq 5 (py-compute-indentation)) nil "indent-honor-arglist-whitespaces-lp:822540-test failed")) (defun comments-indent-honor-setting-lp:824427-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -\*- coding: utf-8 -\*- if __name__ == '__main__': from foo import \* foo([\"baz\"]) # list of foo's development directories # limitations: # # Some comments on limitations: # asdf "))) (py-bug-tests-intern 'comments-indent-honor-setting-lp:824427-base arg teststring))) (defun comments-indent-honor-setting-lp:824427-base () (goto-char 206) (assert (eq 0 (py-compute-indentation)) nil "comments-indent-honor-setting-lp:824427-test failed")) (defun infinite-loop-after-tqs-lp:826044-test (&optional arg) (interactive "p") (let ((teststring "\"\"\" hey \"\"\" ")) (py-bug-tests-intern 'infinite-loop-after-tqs-lp:826044-base arg teststring))) (defun infinite-loop-after-tqs-lp:826044-base () (assert (eq 0 (py-newline-and-indent)) nil "infinite-loop-after-tqs-lp:826044-test failed")) (defun closing-list-lp:826144-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- if foo: bar.append( ht( T.a('Sorted Foo', href='#Blub', ), ' -- foo bar baz--', self.Tasdf( afsd ), self.Tasdf( asdf ), ) ) "))) (py-bug-tests-intern 'closing-list-lp:826144-base arg teststring))) (defun closing-list-lp:826144-base () (let (py-closing-list-dedents-bos) (goto-char (point-min)) (re-search-forward ") *$" nil t 1) (assert (eq 12 (py-compute-indentation)) nil "closing-list-lp:826144-test #1 failed") (re-search-forward ") *$" nil t 1) (assert (eq 8 (py-compute-indentation)) nil "closing-list-lp:826144-test #2 failed") (setq py-closing-list-dedents-bos t) (goto-char (point-min)) (re-search-forward ") *$" nil t 1) (assert (eq 8 (py-compute-indentation)) nil "closing-list-lp:826144-test #1 failed") (re-search-forward ") *$" nil t 1) (assert (eq 4 (py-compute-indentation)) nil "closing-list-lp:826144-test #2 failed"))) (defun py-electric-comment-add-space-lp:828398-test (&optional arg) (interactive "p") (let ((teststring "")) (py-bug-tests-intern 'py-electric-comment-add-space-lp:828398-base arg teststring))) (defun py-electric-comment-add-space-lp:828398-base () (let ((py-electric-comment-add-space-p nil)) (py-electric-comment 1) (assert (looking-back "#") nil "py-electric-comment-add-space-lp:828398-test failed"))) (defun py-electric-comment-add-space-t-lp:828398-test (&optional arg) (interactive "p") (let ((teststring "")) (py-bug-tests-intern 'py-electric-comment-add-space-t-lp:828398-base arg teststring))) (defun py-electric-comment-add-space-t-lp:828398-base () (let ((py-electric-comment-add-space-p t)) (py-electric-comment 1) (assert (looking-back " ") nil "py-electric-comment-add-space-lp:828398-test failed"))) (defun execute-indented-code-lp:828314-test (&optional arg) (interactive "p") (let ((teststring "if __name__ == \"__main__\": print(\"hello, I'm the execute-indented-code-lp:828314-test\") ")) (py-bug-tests-intern 'execute-indented-code-lp:828314-base 2 teststring))) (defun execute-indented-code-lp:828314-base () (let ((debug-on-error t)) (goto-char 28) (assert (py-execute-line) nil "execute-indented-code-lp:828314-test failed"))) (defun wrong-indentation-of-function-arguments-lp:840891-test (&optional arg) (interactive "p") (let ((teststring "abdc = foo(a=1, b=2, c=3) ")) (py-bug-tests-intern 'wrong-indentation-of-function-arguments-lp:840891-base arg teststring))) (defun wrong-indentation-of-function-arguments-lp:840891-base () (goto-char 38) (assert (eq 11 (py-compute-indentation)) nil "wrong-indentation-of-function-arguments-lp:840891-test failed")) (defun py-hungry-delete-backwards-needs-cc-lp:850595-test (&optional arg) (interactive "p") (let ((teststring "")) (py-bug-tests-intern 'py-hungry-delete-backwards-needs-cc-lp:850595-base arg teststring))) (defun py-hungry-delete-backwards-needs-cc-lp:850595-base () (assert (functionp 'c-hungry-delete-backwards) nil "py-hungry-delete-backwards-needs-cc-lp:850595-test failed")) (defun wrong-guess-for-py-indent-offset-lp:852052-test (&optional arg) (interactive "p") (let ((teststring "# The indent offset shouldn't be guessed from backslash # continuations. I have from long.pkg.name import long, list, of, \\ class_and_function, and, function, names # (note there are five spaces before \"class\", to match with the # start of the pkg name.) # Since the indent of backlash-continued lines has no meaning for # code, it should not be considered. ")) (py-bug-tests-intern 'wrong-guess-for-py-indent-offset-lp:852052-base arg teststring))) (defun wrong-guess-for-py-indent-offset-lp:852052-base () (goto-char 126) (assert (eq 4 (py-guess-indent-offset)) nil "wrong-guess-for-py-indent-offset-lp:852052-test failed")) (defun indent-match-import-pkg-lp:852500-test (&optional arg) (interactive "p") (let (py-smart-indentation (teststring "from long.pkg.name import long, list, of, \\ class_and_function, names # (note there are five spaces before \"class\", to match with the # start of the pkg name.) ")) (py-bug-tests-intern 'indent-match-import-pkg-lp:852500-base arg teststring))) (defun indent-match-import-pkg-lp:852500-base () (goto-char 45) (assert (eq 5 (py-compute-indentation)) nil "indent-match-import-pkg-lp:852500-test failed")) (defun py-shift-line-when-no-region-lp:855565-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- if foo: print"))) (py-bug-tests-intern 'py-shift-line-when-no-region-lp:855565-base arg teststring))) (defun py-shift-line-when-no-region-lp:855565-base () (goto-char 58) (assert (eq 8 (py-shift-right 1)) nil "py-shift-line-when-no-region-lp:855565-test failed")) (defun highlighting-in-multiline-function-call-arguments-lp:856833-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -\*- coding: utf-8 -\*- newObj = SomeClassWithManyManyArgs (param0 = val0, param1 = val1, param2 = val2, param3 = val3) "))) (py-bug-tests-intern 'highlighting-in-multiline-function-call-arguments-lp:856833-base arg teststring))) (defun highlighting-in-multiline-function-call-arguments-lp:856833-base () (font-lock-fontify-buffer) (goto-char 80) ;; (goto-char 106) (assert (eq (get-char-property (point) 'face) nil) nil "highlighting-in-multiline-function-call-arguments-lp:856833 test failed ")) (defun py-shift-preserve-active-region-lp:857837-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -\*- coding: utf-8 -\*- print('hello') print('world') "))) (py-bug-tests-intern 'py-shift-preserve-active-region-lp:857837-base arg teststring))) (defun py-shift-preserve-active-region-lp:857837-base () (goto-char 49) (assert nil "py-shift-preserve-active-region-lp:857837-test failed")) (defun variable-highlighted-on-LHS-of-eq-lp:858304-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- if someVar == 5: doSomething() "))) (py-bug-tests-intern 'variable-highlighted-on-LHS-of-eq-lp:858304-base arg teststring))) (defun variable-highlighted-on-LHS-of-eq-lp:858304-base () (goto-char 55) (assert (eq (get-char-property (point) 'face) nil) nil "variable-highlighted-on-LHS-of-eq-lp:858304-test failed")) (defun indent-guessing-lp:858040-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- some_longer_call(arguments, arguments) "))) (py-bug-tests-intern 'indent-guessing-lp:858040-base arg teststring))) (defun indent-guessing-lp:858040-base () (goto-char 40) (assert (eq 4 py-indent-offset) nil "indent-guessing-lp:858040-test failed")) (defun indentation-of-from-import-continuation-lines-lp:858041-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- from nicos import session from nicos import status, loggers from nicos.utils import DeviceMeta, Param, Override, Value, getVersions, \\ usermethod, tupleof, floatrange, any, none_or "))) (py-bug-tests-intern 'indentation-of-from-import-continuation-lines-lp:858041-base arg teststring))) (defun indentation-of-from-import-continuation-lines-lp:858041-base () (goto-char 184) (assert (eq 5 (py-compute-indentation)) nil "indentation-of-from-import-continuation-lines-lp:858041-test failed")) (defun indentation-after-one-line-suites-lp:858044-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- if foo: return "))) (py-bug-tests-intern 'indentation-after-one-line-suites-lp:858044-base arg teststring))) (defun indentation-after-one-line-suites-lp:858044-base () (goto-char 64) (assert (eq 0 (py-compute-indentation)) nil "indentation-after-one-line-suites-lp:858044-test failed")) (defun py-compute-indentation-wrong-at-eol-lp:858043-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- if maxdepth == 0 or depth < maxdepth: item += build_toc(sectionnode, depth+1) "))) (py-bug-tests-intern 'py-compute-indentation-wrong-at-eol-lp:858043-base arg teststring))) (defun py-compute-indentation-wrong-at-eol-lp:858043-base () (setq py-smart-indentation nil) (setq py-indent-offset 4) (goto-char 132) (assert (eq 4 (py-compute-indentation)) nil "py-compute-indentation-wrong-at-eol-lp:858043-test failed")) (defun comment-indentation-level-lp:869854-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- def foo(): def bar(): x = 1 # asdf "))) (py-bug-tests-intern 'comment-indentation-level-lp:869854-base arg teststring))) (defun comment-indentation-level-lp:869854-base () (goto-char 104) (assert (eq 0 (py-compute-indentation)) nil "comment-indentation-level-lp:869854-test failed")) (defun indentation-wrong-after-multi-line-parameter-list-lp:871698-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- def foo(bar, baz): # indenation as it should be def foo(bar, baz): # this is the next indentation line (none) class Foo: def bar(biz, baz): # indentation here after newline "))) (py-bug-tests-intern 'indentation-wrong-after-multi-line-parameter-list-lp:871698-base arg teststring))) (defun indentation-wrong-after-multi-line-parameter-list-lp:871698-base () (goto-char 68) (assert (eq 4 (py-compute-indentation)) nil "indentation-wrong-after-multi-line-parameter-list-lp:871698-test #1 failed") (goto-char 115) (assert (eq 8 (py-compute-indentation)) nil "indentation-wrong-after-multi-line-parameter-list-lp:871698-test #2 failed") (goto-char 201) (assert (eq 12 (py-compute-indentation)) nil "indentation-wrong-after-multi-line-parameter-list-lp:871698-test #3 failed") (goto-char 223) (assert (eq 8 (py-compute-indentation)) nil "indentation-wrong-after-multi-line-parameter-list-lp:871698-test #4 failed") ) (defun no-indent-after-continue-lp:872676-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- def foo(): for i in range(10): if i == 7: continue if i == 9 "))) (py-bug-tests-intern 'no-indent-after-continue-lp:872676-base arg teststring))) (defun no-indent-after-continue-lp:872676-base () (goto-char 141) (assert (eq 8 (py-compute-indentation)) nil "no-indent-after-continue-lp:872676-test failed")) (defun indent-after-inline-comment-lp:873372-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- foo = True # the next line is indented incorrectly # to here "))) (py-bug-tests-intern 'indent-after-inline-comment-lp:873372.txt-base arg teststring))) (defun indent-after-inline-comment-lp:873372.txt-base () (let ((py-indent-honors-inline-comment t)) (goto-char 111) (assert (eq 11 (py-compute-indentation)) nil "indent-after-inline-comment-lp:873372-test #1 failed")) (let (py-indent-honors-inline-comment) (goto-char 111) (assert (eq 0 (py-compute-indentation)) nil "indent-after-inline-comment-lp:873372-test #2 failed"))) (defun else-clause-indentation-lp:874470-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- def foo(): for i in range(10): if i == 7: continue do_something(i) else "))) (py-bug-tests-intern 'else-clause-indentation-lp:874470-base arg teststring))) (defun else-clause-indentation-lp:874470-base () (goto-char 156) (assert (eq 4 (py-compute-indentation)) nil "else-clause-indentation-lp:874470-test failed")) (defun incorrect-use-of-region-in-py-shift-left-lp:875951-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- def foo(): for i in range(10): for j in range(10): print(i, j) print('next') "))) (py-bug-tests-intern 'incorrect-use-of-region-in-py-shift-left-lp:875951-base arg teststring))) (defun incorrect-use-of-region-in-py-shift-left-lp:875951-base () (push-mark 84) (goto-char 135) (py-shift-left 1 84 135) (assert (eq 8 (current-indentation)) nil "incorrect-use-of-region-in-py-shift-left-lp:875951-test failed")) (defun py-complete-lp:858621-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- pri "))) (py-bug-tests-intern 'py-complete-lp:858621-base 2 teststring))) (defun py-complete-lp:858621-base () (goto-char 52) (ignore-errors (py-shell-complete)) (sit-for 0.1) (assert (eq 54 (point)) nil "py-complete-lp:858621-test failed")) (defun indentation-after-line-with-keyword-lp:883073-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- with_foo = False # indents here "))) (py-bug-tests-intern 'indentation-after-line-with-keyword-lp:883073-base arg teststring))) (defun indentation-after-line-with-keyword-lp:883073-base () (goto-char 66) (assert (eq 0 (py-compute-indentation)) nil "indentation-after-line-with-keyword-lp:883073-test failed")) (defun indent-after-multiple-except-statements-lp:883815-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- def foo(): try: x = 1 except SystemError: f = 1 except KeyError: p = 1 "))) (py-bug-tests-intern 'indent-after-multiple-except-statements-lp:883815-base arg teststring))) (defun indent-after-multiple-except-statements-lp:883815-base () (goto-char 121) (assert (eq 4 (py-compute-indentation)) nil "indent-after-multiple-except-statements-lp:883815-test failed")) (defun wrongly-highlighted-as-keywords-lp:885144-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- date_range = 4 date_range_max = 3 latest_sum = 5 "))) (py-bug-tests-intern 'wrongly-highlighted-as-keywords-lp:885144-base arg teststring))) (defun wrongly-highlighted-as-keywords-lp:885144-base () (font-lock-fontify-buffer) (goto-char 55) (sit-for 0.1) (assert (eq (get-char-property (point) 'face) 'py-variable-name-face) nil "wrongly-highlighted-as-keywords-lp:885144-test failed")) (defun glitch-when-indenting-lists-lp:886473-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- def foo(bar, baz): pass "))) (py-bug-tests-intern 'glitch-when-indenting-lists-lp:886473-base arg teststring))) (defun glitch-when-indenting-lists-lp:886473-base () (goto-char 61) (assert (eq 8 (py-compute-indentation)) nil "glitch-when-indenting-lists-lp:886473-test failed")) (defun keywords-in-identifiers-highlighted-incorrectly-lp:888338-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- def possibly_break(): pass "))) (py-bug-tests-intern 'keywords-in-identifiers-highlighted-incorrectly-lp:888338-base arg teststring))) (defun keywords-in-identifiers-highlighted-incorrectly-lp:888338-base () (font-lock-fontify-buffer) (sit-for 0.1) (goto-char 55) (assert (eq (get-char-property (point) 'face) 'font-lock-function-name-face) nil "keywords-in-identifiers-highlighted-incorrectly-lp:888338-test failed")) (defun indentation-keyword-lp:885143-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- import sys "))) (py-bug-tests-intern 'indentation-keyword-lp:885143-base arg teststring))) (defun indentation-keyword-lp:885143-base () (goto-char 48) (assert (eq 0 (py-compute-indentation)) nil "indentation-keyword-lp:885143-test failed")) (defun py-shell-complete-lp:328836-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- "))) (py-bug-tests-intern 'py-shell-complete-lp:328836-base 2 teststring))) (defun py-shell-complete-lp:328836-base () (python-dedicated) (goto-char (point-max)) (insert "pri") (py-shell-complete) (assert (looking-back "print") nil "py-shell-complete-lp:328836-test failed")) (defun indentation-bug-inside-docstrings-lp:899455-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- def foo(): \"\"\"This is my docstring. There are many others like it, but this one is mine. My docstring is my best friend. It is my life. I must master it as I must master my life. Without me, my docstring is useless. Without my docstring, I am useless. I must write my docstring true. I must write clearer than my enemy, who is trying to confuse me. I must enlighten him before he enlightens me. I will. Before Guido I swear this creed: my docstring and myself are defenders of my codebase, we are the masters of our enemy, we are the saviors of my life. So be it, until there is no enemy, but peace. Amen. foo: str or None If None then baz. \"\"\" "))) (py-bug-tests-intern 'indentation-bug-inside-docstrings-lp:899455-base arg teststring))) (defun indentation-bug-inside-docstrings-lp:899455-base () (goto-char 742) (sit-for 0.2) (assert (eq 8 (py-compute-indentation)) nil "indentation-bug-inside-docstrings-lp:899455-test failed")) (defun another-indentation-bug-inside-docstrings-lp:900684-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- def is_x_day(date): \"\"\"Return True if given date is the X-day. \"\"\" "))) (py-bug-tests-intern 'another-indentation-bug-inside-docstrings-lp:900684-base arg teststring))) (defun another-indentation-bug-inside-docstrings-lp:900684-base () (goto-char 116) (sit-for 0.1) (assert (eq 4 (py-compute-indentation)) nil "another-indentation-bug-inside-docstrings-lp:900684-test failed")) (defun indent-offset-not-guessed-when-loading-lp:902890-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- #! /usr/bin/python # -*- coding: utf-8 -*- def main(): if len(sys.argv)==1: usage() sys.exit() "))) (py-bug-tests-intern 'indent-offset-not-guessed-when-loading-lp:902890-base arg teststring))) (defun indent-offset-not-guessed-when-loading-lp:902890-base () "This doesn't check precisely the feature requested. " (assert (eq 2 (py-guess-indent-offset)) nil "indent-offset-not-guessed-when-loading-lp:902890-test failed")) (defun from-__future__-import-absolute_import-mishighlighted-lp:907084-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- from __future__ import absolute_import "))) (py-bug-tests-intern 'from-__future__-import-absolute_import-mishighlighted-lp:907084-base arg teststring))) (defun from-__future__-import-absolute_import-mishighlighted-lp:907084-base () (font-lock-fontify-buffer) (goto-char 82) (assert (not (eq (get-char-property (point) 'face) 'font-lock-keyword-face)) nil "from-__future__-import-absolute_import-mishighlighted-lp:907084-test failed")) (defun automatic-indentation-is-broken-lp:889643-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- "))) (py-bug-tests-intern 'automatic-indentation-is-broken-lp:889643-base arg teststring))) (defun automatic-indentation-is-broken-lp:889643-base () ;; (if (string-match "components" (find-lisp-object-file-name 'python-mode 'python-mode)) ;; (assert (eq (key-binding (kbd "RET")) 'py-newline-and-indent) nil "automatic-indentation-is-broken-lp:889643-test failed") (assert (eq (key-binding (kbd "RET")) 'py-newline-and-indent) nil "automatic-indentation-is-broken-lp:889643-test failed") ) (defun chars-uU-preceding-triple-quoted-get-string-face-lp:909517-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- u\"hi\" and u\"\"\"d\"\"\" "))) (py-bug-tests-intern 'chars-uU-preceding-triple-quoted-get-string-face-lp:909517-base arg teststring))) (defun chars-uU-preceding-triple-quoted-get-string-face-lp:909517-base () (goto-char 58) (assert (eq nil (get-char-property (point) 'face)) nil "chars-uU-preceding-triple-quoted-get-string-face-lp:909517-test failed")) (defun wrong-type-argument-lp:901541-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- # source: argparse.py # Author: Steven J. Bethard . \"\"\"Command-line parsing library This module is an optparse-inspired command-line parsing library that: - handles both optional and positional arguments - produces highly informative usage messages - supports parsers that dispatch to sub-parsers \"\"\" "))) (py-bug-tests-intern 'wrong-type-argument-lp:901541-base arg teststring))) (defun wrong-type-argument-lp:901541-base () (goto-char 385) (sit-for 0.1) ;; (message "%s" "wrong-type-argument-lp:901541-test") ;; (message "(py-compute-indentation): should 4: %s" (py-compute-indentation)) (assert (eq 4 (py-compute-indentation)) nil "wrong-type-argument-lp:901541-test failed")) (defun py-pychecker-run-missing-lp:910783-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- "))) (py-bug-tests-intern 'py-pychecker-run-missing-lp:910783-base arg teststring))) (defun py-pychecker-run-missing-lp:910783-base () (assert (commandp 'py-pychecker-run) nil "py-pychecker-run-missing-lp:910783-test failed")) (defun py-forward-into-nomenclature-lp:916818-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- def doSomething(blah) print(\"\"\"Es müsste \"müßte\" heißen.\"\"\") "))) (py-bug-tests-intern 'py-forward-into-nomenclature-lp:916818-base arg teststring))) (defun py-forward-into-nomenclature-lp:916818-base () (goto-char 48) (assert (eq 51 (py-forward-into-nomenclature)) nil "py-forward-into-nomenclature-lp:916818-test #1 failed") (assert (eq 54 (py-forward-into-nomenclature)) nil "py-forward-into-nomenclature-lp:916818-test #2 failed") (assert (eq 63 (py-forward-into-nomenclature)) nil "py-forward-into-nomenclature-lp:916818-test #3 failed") (assert (eq 68 (py-forward-into-nomenclature)) nil "py-forward-into-nomenclature-lp:916818-test #4 failed") (goto-char 88) (assert (eq 95 (py-forward-into-nomenclature)) nil "py-forward-into-nomenclature-lp:916818-test #5 failed")) (defun tab-completion-in-Ipython-buffers-lp:916869-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- "))) (py-bug-tests-intern 'tab-completion-in-Ipython-buffers-lp:916869-base arg teststring))) (defun tab-completion-in-Ipython-buffers-lp:916869-base () (ipython-dedicated) (switch-to-buffer (current-buffer)) (goto-char (point-max)) (sit-for 0.1) (insert "pri") (ipython-complete) (sit-for 0.1) (assert (looking-back "print") nil "tab-completion-in-Ipython-buffers-lp:916869-test failed")) (defun py-forward-into-nomenclature-jumps-over-CamelCased-words-lp:919540-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- def SomeFunction(arg): pass "))) (py-bug-tests-intern 'py-forward-into-nomenclature-jumps-over-CamelCased-words-lp:919540-base arg teststring))) (defun py-forward-into-nomenclature-jumps-over-CamelCased-words-lp:919540-base () (goto-char 52) (assert (eq 56 (py-forward-into-nomenclature)) nil "py-forward-into-nomenclature-jumps-over-CamelCased-words-lp:919540-test failed")) (defun py-backward-into-nomenclature-caps-names-lp:919541-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- return SOME_Constant + blah "))) (py-bug-tests-intern 'py-backward-into-nomenclature-caps-names-lp:919541-base arg teststring))) (defun py-backward-into-nomenclature-caps-names-lp:919541-base () (goto-char 64) (assert (eq 60 (py-backward-into-nomenclature)) nil "py-backward-into-nomenclature-caps-names-lp:919541-test failed")) (defun py-ipython-complete-lp:927136-test (&optional arg) (interactive "p") ;; (py-shell nil nil "ipython" 'noswitch) (let ((teststring (concat py-ipython-test-shebang " # -*- coding: utf-8 -*- ex "))) (py-bug-tests-intern 'py-ipython-complete-lp:927136-base arg teststring))) (defun py-ipython-complete-lp:927136-base () (goto-char (point-min)) (search-forward "ex") (ipython-complete) (sit-for 0.1) (assert (buffer-live-p (get-buffer "*IPython Completions*")) nil "py-ipython-complete-lp:927136-test #2 lp:1026705 failed") ) (defun execute-buffer-ipython-fails-lp:928087-test (&optional arg) (interactive "p") (let ((teststring (concat py-ipython-test-shebang " # -*- coding: utf-8 -*- print(4 + 5) print(u'\\xA9') "))) (py-bug-tests-intern 'execute-buffer-ipython-fails-lp:928087-base arg teststring))) (defun execute-buffer-ipython-fails-lp:928087-base () (let (py-split-windows-on-execute-p py-shell-switch-buffers-on-execute-p) (assert (py-execute-buffer) nil "execute-buffer-ipython-fails-lp:928087-test failed"))) (defun fourth-level-blocks-indent-incorrectly-lp:939577-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- for x in y: for z in l: for r in t: pass # <--- indents here. Pressing dedents eight spaces (i.e. you can go to column 0 in two presess) "))) (py-bug-tests-intern 'fourth-level-blocks-indent-incorrectly-lp:939577-base arg teststring))) (defun fourth-level-blocks-indent-incorrectly-lp:939577-base () (goto-char 88) (assert (eq 4 (py-guess-indent-offset)) nil "fourth-level-blocks-indent-incorrectly-lp:939577-test failed") (goto-char 225) (assert (eq 4 (py-guess-indent-offset)) nil "fourth-level-blocks-indent-incorrectly-lp:939577-test failed") ) (defun py-mark-expression-marks-too-much-lp:941140-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -\*- somevar = \"some string\" # some code # when point is on the first quote, calling py-mark-expression marks the next several lines, no matter what they are. # This only seems to happen when point is in the first quote of a string literal which is the last thing on a line. somevar = some_string.some_property() # point at first quote works somevar = \"a\" + \"b\" # works at quote before a, fails at quote before b I am using version 6.0.4 "))) (py-bug-tests-intern 'py-mark-expression-marks-too-much-lp:941140-base arg teststring))) (defun py-mark-expression-marks-too-much-lp:941140-base () (goto-char 60) (assert (string-match "some" (py-expression)) nil "py-mark-expression-marks-too-much-lp:941140-test failed") (goto-char 417) (assert (string-match "a" (py-expression)) nil "py-mark-expression-marks-too-much-lp:941140-test failed")) ;;; Py-shell tests (defun py-shell-invoking-python-lp:835151-test (&optional arg) (interactive "p") (let ((teststring "print(\"py-shell-name: python\")")) (py-bug-tests-intern 'py-shell-invoking-python-lp:835151-base arg teststring))) (defun py-shell-invoking-python-lp:835151-base () (setq py-shell-name "python") (assert (stringp (py-execute-buffer)) nil "py-shell-invoking-python-lp:835151-test failed")) (defun py-shell-invoking-ipython-lp:835151-test (&optional arg) (interactive "p") (let ((teststring "print(\"py-shell-name: ipython\")")) (py-bug-tests-intern 'py-shell-invoking-ipython-lp:835151-base arg teststring))) (defun py-shell-invoking-ipython-lp:835151-base () (setq py-shell-name "ipython") (assert (stringp (py-execute-buffer "ipython")) nil "py-shell-invoking-ipython-lp:835151-test failed")) (defun py-shell-invoking-python3-lp:835151-test (&optional arg) (interactive "p") (let ((teststring "print(\"py-shell-name: python3\")")) (py-bug-tests-intern 'py-shell-invoking-python3-lp:835151-base arg teststring))) (defun py-shell-invoking-python3-lp:835151-base () (setq py-shell-name "python3") (assert (py-execute-buffer) nil "py-shell-invoking-python3-lp:835151-test failed")) (defun py-shell-invoking-python2-lp:835151-test (&optional arg) (interactive "p") (let ((teststring "print(\"py-shell-name: python2\")")) (py-bug-tests-intern 'py-shell-invoking-python2-lp:835151-base arg teststring))) (defun py-shell-invoking-python2-lp:835151-base () (setq py-shell-name "python2") (assert (py-execute-buffer) nil "py-shell-invoking-python2-lp:835151-test failed")) (defun py-shell-invoking-python2.7-lp:835151-test (&optional arg) (interactive "p") (let ((teststring "print(\"py-shell-name: python2.7\")")) (py-bug-tests-intern 'py-shell-invoking-python2.7-lp:835151-base arg teststring))) (defun py-shell-invoking-python2.7-lp:835151-base () (setq py-shell-name "python2.7") (assert (py-execute-buffer) nil "py-shell-invoking-python2.7-lp:835151-test failed")) (defun py-shell-invoking-jython-lp:835151-test (&optional arg) (interactive "p") (let ((teststring "print(\"py-shell-name: jython\")")) (py-bug-tests-intern 'py-shell-invoking-jython-lp:835151-base arg teststring))) (defun py-shell-invoking-jython-lp:835151-base () (let ((py-shell-name "jython") (sit-for 0.1)) (assert (py-execute-buffer) nil "py-shell-invoking-jython-lp:835151-test failed"))) (defun py-shell-invoking-python3.2-lp:835151-test (&optional arg) (interactive "p") (let ((teststring "print(\"py-shell-name: python3.2\")")) (py-bug-tests-intern 'py-shell-invoking-python3.2-lp:835151-base arg teststring))) (defun py-shell-invoking-python3.2-lp:835151-base () (setq py-shell-name "python3.2") (assert (py-execute-buffer) nil "py-shell-invoking-python3.2-lp:835151-test failed")) (defun py-mark-block-clause-misbehave-lp:949310-test (&optional arg) (interactive "p") (let ((teststring " if foo: try: pass ")) (py-bug-tests-intern 'py-mark-block-clause-misbehave-lp:949310-base arg teststring))) (defun py-mark-block-clause-misbehave-lp:949310-base () (goto-char 15) (assert (eq 14 (car (py-mark-block-or-clause))) nil "py-mark-block-clause-misbehave-lp:949310-test failed")) (defun py-mark-clause-misbehave-lp:949310-test (&optional arg) (interactive "p") (let ((teststring " if foo: try: pass ")) (py-bug-tests-intern 'py-mark-clause-misbehave-lp:949310-base arg teststring))) (defun py-mark-clause-misbehave-lp:949310-base () (goto-char 15) (assert (eq 14 (car (py-mark-block-or-clause))) nil "py-mark-clause-misbehave-lp:949310-test failed")) (defun py-mark-block-misbehave-lp:949310-test (&optional arg) (interactive "p") (let ((teststring " if foo: try: pass ")) (py-bug-tests-intern 'py-mark-block-misbehave-lp:949310-base arg teststring))) (defun py-mark-block-misbehave-lp:949310-base () (goto-char 15) (assert (eq 14 (car (py-mark-block-or-clause))) nil "py-mark-block-misbehave-lp:949310-test failed")) (defun py-indent-comments-nil-ignored-lp:958721-test (&optional arg) (interactive "p") (let (py-indent-comments (teststring (concat py-test-shebang " # -*- coding: utf-8 -*- if x > 0: for i in range(100): # print(i) "))) (py-bug-tests-intern 'py-indent-comments-nil-ignored-lp:958721-base arg teststring))) (defun py-indent-comments-nil-ignored-lp:958721-base () (goto-char 83) (assert (eq 0 (py-compute-indentation)) nil "py-indent-comments-nil-ignored-lp:958721-test failed")) (defun broken-font-locking-lp:961231-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- def baz(): foo = None bar = False baz = True foo, bar, baz = baz() return foo, bar, baz # None, False, and True get colored with font-lock-constant-face instead of py-pseudo-keyword-face # On the second to last line, \"foo\" \"bar\" and \"baz\" all get colored with font-lock-variable-name-face whereas # I think they should get default face, just as they would if no comma or equal sign appeared on the line. def baz(mydict): mydict['hello'] = 'baz' # 'mydict' gets colored with font-lock-variable-name-face but it should be default face. def baz(self): self.baz = 'hello' # 'self' gets colored with font-lock-keyword-face instead of py-pseudo-keyword-face def baz(self): return set(range(100)) # 'set' and 'range' get rendered in font-lock-builtin-face when they should get rendered in py-builtins-face print myobj.range() # the latter range should get default face "))) (py-bug-tests-intern 'broken-font-locking-lp:961231-base arg teststring))) (defun broken-font-locking-lp:961231-base () (font-lock-fontify-buffer) (sit-for 0.1) (goto-char 87) (assert (eq (get-char-property (point) 'face) 'py-pseudo-keyword-face) nil "broken-font-locking-lp:961231-test #1 failed") (goto-char 488) (assert (eq (get-char-property (point) 'face) 'nil) nil "broken-font-locking-lp:961231-test #2 failed") (goto-char 637) (assert (eq (get-char-property (point) 'face) 'py-pseudo-keyword-face) nil "broken-font-locking-lp:961231-test #3 failed") (goto-char 775) (assert (eq (get-char-property (point) 'face) 'nil) nil "broken-font-locking-lp:961231-test #4 failed") ;; (goto-char 911) ;; (assert (eq (get-char-property (point) 'face) 'default) nil "broken-font-locking-lp:961231-test #4 failed") ) (defun regression-in-py-execute-region-lp:962227-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- def foo(): def bar(): return True return bar # In the past it was possible to highlight the middle two lines and run py-execute-region. This would have # the effect of defining bar() at global scope, but that's okay since it was explicitly asked for. Now # however you get this error in the Python buffer: # >>> Traceback (most recent call last): # File \"\", line 1, in # File \"/tmp/Python4249aED.py\", line 8 # return True # ^ # IndentationError: expected an indented block # which perhaps makes sense, but isn't helpful. What python-mode used to do was, if the block to be executed # was indented, it would still a \"if True:\" line indented to column zero in front of the region to be # executed. This is essentially a no-op that just makes the indented region valid syntactically. "))) (py-bug-tests-intern 'regression-in-py-execute-region-lp:962227-base arg teststring))) (defun regression-in-py-execute-region-lp:962227-base () (goto-char 59) (push-mark) (goto-char 93) (assert (py-execute-region 59 93) nil "regression-in-py-execute-region-lp:962227-test failed")) (defun auto-indent-behaves-strangely-with-slices-lp:961684.txt-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- # In the final line of the following, I want the line not to be indented at # all (the loop in the preceding lines is complete). But if you type a : # after the 1 to form potential.difference(set(S[1]:)), this activates the # automatic indentation and incorrectly indents the line under the # preceding line in the for loop. potential = set([]) for j in X: potential = potential.union(visible[j]) potential = potential.difference(set(S[1])) # py-electric-colon-active-p is t. "))) (py-bug-tests-intern 'auto-indent-behaves-strangely-with-slices-lp:961684.txt-base arg teststring))) (defun auto-indent-behaves-strangely-with-slices-lp:961684.txt-base () (goto-char 40) (assert (eq 0 (py-compute-indentation)) nil "auto-indent-behaves-strangely-with-slices-lp:961684.txt-test failed")) (defun tuple-unpacking-highlighted-incorrectly-lp:961496-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- foo, bar = toothpick "))) (py-bug-tests-intern 'tuple-unpacking-highlighted-incorrectly-lp:961496-base arg teststring))) (defun tuple-unpacking-highlighted-incorrectly-lp:961496-base () (font-lock-fontify-buffer) (sit-for 0.1) (goto-char 50) (assert (eq (get-char-property (point) 'face) 'py-variable-name-face) nil "tuple-unpacking-highlighted-incorrectly-lp:961496-test failed")) (defun script-buffer-appears-instead-of-python-shell-buffer-lp:957561-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- print(\"I'm the script-buffer-appears-instead-of-python-shell-buffer-lp:957561-test\") "))) (py-bug-tests-intern 'script-buffer-appears-instead-of-python-shell-buffer-lp:957561-base arg teststring))) (defun script-buffer-appears-instead-of-python-shell-buffer-lp:957561-base () (let (py-shell-switch-buffers-on-execute-p (py-split-windows-on-execute-p t)) (delete-other-windows) (ipython) (sit-for 0.1) (assert (and (py-execute-buffer-ipython) (set-buffer "script-buffer-appears-instead-of-python-shell-buffer-lp:957561-test") (not (window-full-height-p))) nil "script-buffer-appears-instead-of-python-shell-buffer-lp:957561-test failed"))) (defun new-problem-with-py-temp-directory-lp:965762-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- "))) (py-bug-tests-intern 'new-problem-with-py-temp-directory-lp:965762-base arg teststring))) (defun new-problem-with-py-temp-directory-lp:965762-base () (assert (stringp py-temp-directory) nil "new-problem-with-py-temp-directory-lp:965762-test failed")) (defun problem-with-py-separator-char-under-windows-lp:975539-test (&optional arg) (interactive "p") (let ((teststring "")) (py-bug-tests-intern 'problem-with-py-separator-char-under-windows-lp:975539-base arg teststring))) (defun problem-with-py-separator-char-under-windows-lp:975539-base () (assert (string= (char-to-string py-separator-char) (py-separator-char)) nil "problem-with-py-separator-char-under-windows-lp:975539-test failed")) (defun another-broken-font-locking-lp:961231-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- # So while in this case, range() refers to the built-in function: print(range(10)) # in this case, it's just a method on some object: print(myobj.range(10)) # The two 'range's have no relationship at all. # That's why I suggest that the former be colored with py-builtins-face but the latter by default face. "))) (py-bug-tests-intern 'another-broken-font-locking-lp:961231-base arg teststring))) (defun another-broken-font-locking-lp:961231-base () (font-lock-fontify-buffer) (goto-char 124) (sit-for 0.1) (assert (eq (get-char-property (point) 'face) 'py-builtins-face) nil "another-broken-font-locking-lp:961231-test failed") (goto-char 197) (sit-for 0.1) (assert (eq (get-char-property (point) 'face) nil) nil "another-broken-font-locking-lp:961231-test failed")) (defun temp-file-stored-in-python-script-directory-lp:958987-test (&optional arg) (interactive "p") (let ((teststring " # -*- coding: utf-8 -*- Richard Stanton (a-stanton) wrote on 2012-03-20: #5 > > 1) The directory is not being applied correctly. > > > > need a recipe for it, a new report would help, as it's related only Actually, I think this is the original problem I was reporting. Any python script will do in my experience, but the problem only occurs if the script file does \*not\* contain a shebang line. For example, the following file works fine: -------- #!/usr/bin/python print \"Hi, Richard\" --------- In this case, the temp file is created in the appropriate temp directory. However, if I use the same file without the shebang line, -------- print \"Hi, Richard\" --------- now the problem occurs. print \"Hi, Richard\" Richard Stanton (a-stanton) wrote 1 hour ago: #10 The problem is still there in certain situations, I'm afraid, with r918 on my Mac. Here are three experiments. In numbers 1 and 2, things work as they're supposed to. In number 3, they don't: 1) Script file = #!/usr/bin/ipython print \"Hi, Richard\" In this case, the temp file is correctly stored in the temp directory as (for example) /var/folders/zf/bgjm4tvs3wv_6q7_6z3b2nx00000gn/T/ipython61090CmR.py. The ipython buffer is called \*IPython\*. 2) Script file = print \"Hi, Richard\" py-shell-name = \"ipython\" In this case, the temp file is again correctly stored in the temp directory as (for example) /var/folders/zf/bgjm4tvs3wv_6q7_6z3b2nx00000gn/T/ipython61090CmR.py. The ipython buffer is again named \*IPython\* 3) Script file = print \"Hi, Richard\" py-shell-name = \"/Library/Frameworks/EPD64.framework/Versions/7.2/bin/ipython\" In this case, the temp file is saved in the \*wrong\* location as /Library/Frameworks/EPD64.framework/Versions/7.2/bin/ipython61090PwX.py. In this case, the ipython buffer is called \*ND 0.12\* ")) (py-bug-tests-intern 'temp-file-stored-in-python-script-directory-lp:958987-base arg teststring))) (defun temp-file-stored-in-python-script-directory-lp:958987-base () (goto-char 40) (assert nil "temp-file-stored-in-python-script-directory-lp:958987-test failed")) (defun temp-buffer-affected-by-py-shell-name-lp:958987-test (&optional arg) (interactive "p") (let* ((py-shell-name (concat (expand-file-name py-shell-name-testpath) "/ipython")) (teststring (concat "#! " py-shell-name " # -*- coding: utf-8 -*- print(\"I'm the temp-buffer-affected-by-py-shell-name-lp:958987-test\") "))) (py-bug-tests-intern 'temp-buffer-affected-by-py-shell-name-lp:958987-base arg teststring))) (defun temp-buffer-affected-by-py-shell-name-lp:958987-base () (message "%s" py-shell-name) (assert (py-execute-buffer) nil "temp-buffer-affected-by-py-shell-name-lp:958987-test failed")) (defun toggle-force-local-shell-lp:988091-test (&optional arg) (interactive "p") (let ((teststring (concat py-epd-shebang " # -\*- coding: utf-8 -\*- pri impo \"\"\" Am 25.04.2012 01:32, schrieb Yaroslav Halchenko: \[ ... ] another convenience might be to have an option 'follow' the desired shell -- i.e. if someone explicitly asks for a buffer to execute it in ipython, that sets py-shell-name to ipython. \"\"\" "))) (if (and (boundp 'py-epd-shebang) (stringp py-epd-shebang)) (py-bug-tests-intern 'toggle-force-local-shell-lp:988091-base arg teststring) (error "Please edit `py-epd-shebang' with your local EPD before running this test.")))) (defun toggle-force-local-shell-lp:988091-base () (let ((old py-shell-name)) (py-force-local-shell-on) (goto-char 92) (save-excursion (py-shell-complete)) (message "%s" completion-at-point-functions) (assert (looking-at "print") nil "toggle-force-local-shell-lp:988091-test #1 failed") (force-py-shell-name-p-off) (goto-char 99) (save-excursion (py-shell-complete)) (message "%s" completion-at-point-functions) (assert (looking-at "import") nil "toggle-force-local-shell-lp:988091-test #1 failed") )) (defun py-describe-symbol-fails-on-modules-lp:919719-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- import os os.chmod ")) (py-bug-tests-intern 'py-describe-symbol-fails-on-modules-lp:919719-base arg teststring))) (defun py-describe-symbol-fails-on-modules-lp:919719-base () (goto-char 61) (py-help-at-point) (sit-for 0.1) (set-buffer "*Python-Help*") (goto-char (point-min)) (assert (looking-at "Help on built-in function chmod in os:") nil "py-describe-symbol-fails-on-modules-lp:919719-test failed")) (defun indent-region-lp:997958-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- with file(\"foo\" + zeit + \".ending\", 'w') as datei: for i in range(anzahl): bar.dosomething() datei.write(str(baz[i]) + \"\\n\") ")) (py-bug-tests-intern 'indent-region-lp:997958-base arg teststring))) (defun indent-region-lp:997958-base () (py-indent-region 48 172) (goto-char 99) (back-to-indentation) (assert (eq 4 (current-column)) nil "indent-region-lp:997958-test #1 failed") (goto-char 127) (back-to-indentation) (assert (eq 8 (current-column)) nil "indent-region-lp:997958-test #2 failed")) (defun pycomplete-same-folder-def-lp:889052-test (&optional arg) (interactive "p") (save-excursion (set-buffer (get-buffer-create "somedef.py")) (switch-to-buffer (current-buffer)) (erase-buffer) (insert "#! /usr/bin/env python # -*- coding: utf-8 -*- def someDef(): print(\"I'm someDef\") ") (write-file (concat (py-normalize-directory py-temp-directory) "somedef.py"))) (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- from somedef import * someDe ")) (py-bug-tests-intern 'pycomplete-same-folder-def-lp:889052-base arg teststring t))) (defun pycomplete-same-folder-def-lp:889052-base () (write-file (concat (py-normalize-directory py-temp-directory) "samefolder.py")) (goto-char 76) (py-complete) (beginning-of-line) (assert (looking-at "someDef") nil "pycomplete-same-folder-def-lp:889052-test failed")) (defun pycomplete-same-folder-class-lp:889052-test (&optional arg) (interactive "p") (save-excursion (set-buffer (get-buffer-create "somedef.py")) (switch-to-buffer (current-buffer)) (erase-buffer) (insert "#! /usr/bin/env python # -*- coding: utf-8 -*- class Blah(): def someDef(): print(\"I'm someDef\") ") ;; (write-file (concat (py-normalize-directory py-temp-directory) "classblah.py"))) ;; as completion is already in $PYTHONPATH (write-file (concat (expand-file-name (py-normalize-directory py-install-directory)) "completion" "/" "classblah.py")) (set-buffer-modified-p 'nil) (kill-buffer (current-buffer))) (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- from classblah import * CLASS_INS = Blah() CLASS_INS.someDe ")) (py-bug-tests-intern 'pycomplete-same-folder-class-lp:889052-base arg teststring))) (defun pycomplete-same-folder-class-lp:889052-base () (let ( (testfile1 (concat (expand-file-name (py-normalize-directory py-install-directory)) "completion" "/" "classblah.py")) (testfile2 (concat (expand-file-name (py-normalize-directory py-install-directory)) "completion" "/" "somedef.py")) py-no-completion-calls-dabbrev-expand-p py-indent-no-completion-p) (write-file testfile2) (goto-char 107) (unwind-protect (py-shell-complete) (beginning-of-line)) (when (file-readable-p testfile1) (delete-file testfile1)) (when (file-readable-p testfile2) (delete-file testfile2))) (assert (looking-at "CLASS_INS.someDef") "pycomplete-same-folder-class-lp:889052-test failed")) (defun shebang-interpreter-not-detected-lp:1001327-test (&optional arg) (interactive "p") (let ((teststring "#!/usr/bin/python ")) (py-bug-tests-intern 'shebang-interpreter-not-detected-lp:1001327-base arg teststring))) (defun shebang-interpreter-not-detected-lp:1001327-base () (assert (string= "/usr/bin/python" (py-choose-shell)) nil "shebang-interpreter-not-detected-lp:1001327-test failed")) (defun no-completion-at-all-lp:1001328-test (&optional arg) (interactive "p") (let ((teststring "#!/usr/bin/python basdklfjasdf = 3 basd ")) (py-bug-tests-intern 'no-completion-at-all-lp:1001328-base arg teststring))) (defun no-completion-at-all-lp:1001328-base () (goto-char 40) (py-shell-complete) (beginning-of-line) (sit-for 0.1) (unless (looking-at "basdklfjasdf") (py-shell-complete)) (sit-for 0.1) (assert (looking-at "basdklfjasdf") nil "no-completion-at-all-lp:1001328-test failed")) (defun not-that-useful-completion-lp:1003580-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- import numpy def test_bu(): numpy. ")) (py-bug-tests-intern 'not-that-useful-completion-lp:1003580-base arg teststring))) (defun not-that-useful-completion-lp:1003580-base () (goto-char 86) (py-shell-complete nil t) (assert (string-match "^numpy." (car py-shell-complete-debug)) nil "not-that-useful-completion-lp:1003580-test failed")) (defun completion-fails-in-python-script-r989-lp:1004613-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env ipython # -*- coding: utf-8 -*- ex ")) (py-bug-tests-intern 'completion-fails-in-python-script-r989-lp:1004613-base arg teststring))) (defun completion-fails-in-python-script-r989-lp:1004613-base () (when (buffer-live-p (get-buffer py-python-completions)) (kill-buffer py-python-completions)) (goto-char 51) (ipython-complete nil nil nil nil nil nil t) (set-buffer "*IPython Completions*") (assert (search-forward "except") nil "completion-fails-in-python-script-r989-lp:1004613-test failed")) (defun spurious-trailing-whitespace-lp-1008679-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def foo(): X ")) (py-bug-tests-intern 'spurious-trailing-whitespace-lp-1008679-base arg teststring))) (defun spurious-trailing-whitespace-lp-1008679-base () (let ((py-trailing-whitespace-smart-delete-p t)) (goto-char 66) (py-newline-and-indent) (forward-line -1) (end-of-line) (assert (eq (point) 58) nil "spurious-trailing-whitespace-lp-1008679-test failed"))) (defun empty-triple-quote-lp:1009318-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- \"\"\"\"\"\" '''''' ")) (py-bug-tests-intern 'empty-triple-quote-lp:1009318-base arg teststring))) (defun empty-triple-quote-lp:1009318-base () (goto-char 54) (assert (not (nth 4 (syntax-ppss))) nil "empty-triple-quote-lp:1009318-test #1 failed") (goto-char 61) (assert (not (nth 4 (syntax-ppss))) nil "empty-triple-quote-lp:1009318-test #2 failed")) (defun completion-at-gentoo-lp-1008842-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- import re re.s ")) (py-bug-tests-intern 'completion-at-gentoo-lp-1008842-base arg teststring))) (defun completion-at-gentoo-lp-1008842-base () (goto-char 62) (py-shell-complete) (sit-for 0.1) (assert (buffer-live-p (get-buffer py-python-completions)) nil "completion-at-gentoo-lp-1008842-test failed")) (defun converts-tabs-to-spaces-in-indent-tabs-mode-t-lp-1019128-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- setup( name = \"fail2ban\", ")) (py-bug-tests-intern 'converts-tabs-to-spaces-in-indent-tabs-mode-t-lp-1019128-base arg teststring))) (defun converts-tabs-to-spaces-in-indent-tabs-mode-t-lp-1019128-base () (let ((indent-tabs-mode t)) (goto-char 74) (py-newline-and-indent) (beginning-of-line)) (assert (looking-at "\t") nil "converts-tabs-to-spaces-in-indent-tabs-mode-t-lp-1019128-test failed")) (defun return-statement-indented-incorrectly-lp-1019601-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def foo(): while True: bar() baz() return 1 ")) (py-bug-tests-intern 'return-statement-indented-incorrectly-lp-1019601-base arg teststring))) (defun return-statement-indented-incorrectly-lp-1019601-base () (goto-char 99) (assert (eq 4 (py-compute-indentation)) nil "return-statement-indented-incorrectly-lp-1019601-test failed")) (defun pycomplete-imports-not-found-error-when-no-symbol-lp:1019791-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- from PyQt4.QtGui import QMainWindow ")) (py-bug-tests-intern 'pycomplete-imports-not-found-error-when-no-symbol-lp:1019791-base arg teststring))) (defun pycomplete-imports-not-found-error-when-no-symbol-lp:1019791-base () (assert (py-find-imports) nil "pycomplete-imports-not-found-error-when-no-symbol-lp:1019791-test failed")) (defun py-narrow-to-defun-lp-1020531-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def usage(): print \"\"\"Fehler: %s Es muß die aufzurufende Ziehungszahl als Argument angegeben werden: 'python roulette.py 1, 'python roulette.py 2', ... 'python roulette.py n'. \"\"\" % ( os.path.basename(sys.argv[0])) def main(): if len(sys.argv) == 1: usage() sys.exit() class asdf(object): zeit = time.strftime('%Y%m%d--%H-%M-%S') def utf8_exists(filename): return os.path.exists(filename.encode('utf-8')) if __name__ == \"__main__\": main() ")) (py-bug-tests-intern 'py-narrow-to-defun-lp-1020531-base arg teststring))) (defun py-narrow-to-defun-lp-1020531-base () (goto-char 334) (py-narrow-to-defun) (assert (eq 521 (point-max)) nil "py-narrow-to-defun-lp-1020531-test failed")) (defun py-find-imports-lp-1023236-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- ############################################################################# # # Import test # ############################################################################# import urllib import os, sys from hashlib import md5 from construct import Container from twisted.internet import reactor, defer from twisted.internet.protocol import ClientFactory from twisted.python import log, failure, filepath from mock import mock1, mock2, \\ mock3, mock4 print \"ignored\" print \"ignored\" def something(): pass ")) (py-bug-tests-intern 'py-find-imports-lp-1023236-base arg teststring))) (defun py-find-imports-lp-1023236-base () (goto-char 334) (assert (equal (py-find-imports) "import urllib;import os, sys;from hashlib import md5;from construct import Container;from twisted.internet import reactor, defer;from twisted.internet.protocol import ClientFactory;from twisted.python import log, failure, filepath;from mock import mock1, mock2, mock3, mock4;") nil "py-find-imports-lp-1023236-test failed")) (defun py-guess-indent-offset-dont-detect-indent-of-2-lp-1027389-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- for something: for other: if hello: while x: statement1 ")) (py-bug-tests-intern 'py-guess-indent-offset-dont-detect-indent-of-2-lp-1027389-base arg teststring))) (defun py-guess-indent-offset-dont-detect-indent-of-2-lp-1027389-base () (goto-char 109) (assert (eq 2 (py-guess-indent-offset)) nil "py-guess-indent-offset-dont-detect-indent-of-2-lp-1027389-test failed")) (defun complaint-about-non-ASCII-character-lp-1042949-test (&optional arg) (interactive "p") (let ((teststring "# -*- coding: utf-8 -*- # 11–14 ")) (py-bug-tests-intern 'complaint-about-non-ASCII-character-lp-1042949-base arg teststring))) (defun complaint-about-non-ASCII-character-lp-1042949-base () (sit-for 0.1) (assert (py-execute-buffer) nil "complaint-about-non-ASCII-character-lp-1042949-test failed")) (defun dont-indent-code-unnecessarily-lp-1048778-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def foo(a): if a == 1: return 1 elif a == 2: if a < 7: return 3 elif a == 3 ")) (py-bug-tests-intern 'dont-indent-code-unnecessarily-lp-1048778-base arg teststring))) (defun dont-indent-code-unnecessarily-lp-1048778-base () (goto-char 163) (py-electric-colon 1) (assert (eq 4 (current-indentation)) nil "dont-indent-code-unnecessarily-lp-1048778-test failed")) (defun IndentationError-expected-an-indented-block-when-execute-lp-1055569-test (&optional arg) (interactive "p") (let ((teststring "if __name__ == '__main__': print('IndentationError-expected-an-indented-block-when-execute-lp-1055569-test') ")) (py-bug-tests-intern 'IndentationError-expected-an-indented-block-when-execute-lp-1055569-base 1 teststring))) (defun IndentationError-expected-an-indented-block-when-execute-lp-1055569-base () (assert (string= "IndentationError-expected-an-indented-block-when-execute-lp-1055569-test" (py-execute-buffer)) ;; (progn (py-execute-buffer) t) nil "IndentationError-expected-an-indented-block-when-execute-lp-1055569-test failed")) (defun stalls-emacs-probably-due-to-syntax-highlighting-lp-1058261-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- class Parallel(Logger): ''' Helper class for readable parallel mapping. Parameters ----------- n_jobs: int The number of jobs to use for the computation. If -1 all CPUs are used. If 1 is given, no parallel computing code is used at all, which is useful for debuging. For n_jobs below -1, (n_cpus + 1 - n_jobs) are used. Thus for n_jobs = -2, all CPUs but one are used. verbose: int, optional The verbosity level: if non zero, progress messages are printed. Above 50, the output is sent to stdout. The frequency of the messages increases with the verbosity level. If it more than 10, all iterations are reported. pre_dispatch: {'all', integer, or expression, as in '3\*n_jobs'} The amount of jobs to be pre-dispatched. Default is 'all', but it may be memory consuming, for instance if each job involves a lot of a data. Notes ----- This object uses the multiprocessing module to compute in parallel the application of a function to many different arguments. The main functionality it brings in addition to using the raw multiprocessing API are (see examples for details): \* More readable code, in particular since it avoids constructing list of arguments. \* Easier debuging: - informative tracebacks even when the error happens on the client side - using 'n_jobs=1' enables to turn off parallel computing for debuging without changing the codepath - early capture of pickling errors \* An optional progress meter. \* Interruption of multiprocesses jobs with 'Ctrl-C' Examples -------- A simple example: >>> from math import sqrt >>> from joblib import Parallel, delayed >>> Parallel(n_jobs=1)(delayed(sqrt)(i\*\*2) for i in range(10)) [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0] Reshaping the output when the function has several return values: >>> from math import modf >>> from joblib import Parallel, delayed >>> r = Parallel(n_jobs=1)(delayed(modf)(i/2.) for i in range(10)) >>> res, i = zip(\*r) >>> res (0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5) >>> i (0.0, 0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0) The progress meter: the higher the value of `verbose`, the more messages:: >>> from time import sleep >>> from joblib import Parallel, delayed >>> r = Parallel(n_jobs=2, verbose=5)(delayed(sleep)(.1) for _ in range(10)) #doctest: +SKIP [Parallel(n_jobs=2)]: Done 1 out of 10 | elapsed: 0.1s remaining: 0.9s [Parallel(n_jobs=2)]: Done 3 out of 10 | elapsed: 0.2s remaining: 0.5s [Parallel(n_jobs=2)]: Done 6 out of 10 | elapsed: 0.3s remaining: 0.2s [Parallel(n_jobs=2)]: Done 9 out of 10 | elapsed: 0.5s remaining: 0.1s [Parallel(n_jobs=2)]: Done 10 out of 10 | elapsed: 0.5s finished Traceback example, note how the line of the error is indicated as well as the values of the parameter passed to the function that triggered the exception, even though the traceback happens in the child process:: >>> from string import atoi >>> from joblib import Parallel, delayed >>> Parallel(n_jobs=2)(delayed(atoi)(n) for n in ('1', '300', 30)) #doctest: +SKIP #... --------------------------------------------------------------------------- Sub-process traceback: --------------------------------------------------------------------------- TypeError Fri Jul 2 20:32:05 2010 PID: 4151 Python 2.6.5: /usr/bin/python ........................................................................... /usr/lib/python2.6/string.pyc in atoi(s=30, base=10) 398 is chosen from the leading characters of s, 0 for octal, 0x or 399 0X for hexadecimal. If base is 16, a preceding 0x or 0X is 400 accepted. 401 402 \"\"\" --> 403 return _int(s, base) 404 405 406 # Convert string to long integer 407 def atol(s, base=10): TypeError: int() can't convert non-string with explicit base ___________________________________________________________________________ Using pre_dispatch in a producer/consumer situation, where the data is generated on the fly. Note how the producer is first called a 3 times before the parallel loop is initiated, and then called to generate new data on the fly. In this case the total number of iterations cannot be reported in the progress messages:: >>> from math import sqrt >>> from joblib import Parallel, delayed >>> def producer(): ... for i in range(6): ... print 'Produced %s' % i ... yield i >>> out = Parallel(n_jobs=2, verbose=100, pre_dispatch='1.5\*n_jobs')( ... delayed(sqrt)(i) for i in producer()) #doctest: +SKIP Produced 0 Produced 1 Produced 2 [Parallel(n_jobs=2)]: Done 1 jobs | elapsed: 0.0s Produced 3 [Parallel(n_jobs=2)]: Done 2 jobs | elapsed: 0.0s Produced 4 [Parallel(n_jobs=2)]: Done 3 jobs | elapsed: 0.0s Produced 5 [Parallel(n_jobs=2)]: Done 4 jobs | elapsed: 0.0s [Parallel(n_jobs=2)]: Done 5 out of 6 | elapsed: 0.0s remaining: 0.0s [Parallel(n_jobs=2)]: Done 6 out of 6 | elapsed: 0.0s finished ''' def __init__(self, n_jobs=1, verbose=0, pre_dispatch='all'): self.verbose = verbose self.n_jobs = n_jobs self.pre_dispatch = pre_dispatch self._pool = None # Not starting the pool in the __init__ is a design decision, to be # able to close it ASAP, and not burden the user with closing it. self._output = None self._jobs = list() def dispatch(self, func, args, kwargs): \"\"\" Queue the function for computing, with or without multiprocessing \"\"\" if self._pool is None: job = ImmediateApply(func, args, kwargs) index = len(self._jobs) if not _verbosity_filter(index, self.verbose): self._print('Done %3i jobs | elapsed: %s', (index + 1, short_format_time(time.time() - self._start_time) )) self._jobs.append(job) self.n_dispatched += 1 else: self._lock.acquire() # If job.get() catches an exception, it closes the queue: try: job = self._pool.apply_async(SafeFunction(func), args, kwargs, callback=CallBack(self.n_dispatched, self)) self._jobs.append(job) self.n_dispatched += 1 except AssertionError: print '[Parallel] Pool seems closed' finally: self._lock.release() def dispatch_next(self): \"\"\" Dispatch more data for parallel processing \"\"\" self._dispatch_amount += 1 while self._dispatch_amount: try: # XXX: possible race condition shuffling the order of # dispatchs in the next two lines. func, args, kwargs = self._iterable.next() self.dispatch(func, args, kwargs) self._dispatch_amount -= 1 except ValueError: \"\"\" Race condition in accessing a generator, we skip, the dispatch will be done later. \"\"\" except StopIteration: self._iterable = None return def _print(self, msg, msg_args): \"\"\" Display the message on stout or stderr depending on verbosity \"\"\" # XXX: Not using the logger framework: need to # learn to use logger better. if not self.verbose: return if self.verbose < 50: writer = sys.stderr.write else: writer = sys.stdout.write msg = msg % msg_args writer('[%s]: %s\\n' % (self, msg)) def print_progress(self, index): \"\"\"Display the process of the parallel execution only a fraction of time, controled by self.verbose. \"\"\" if not self.verbose: return elapsed_time = time.time() - self._start_time # This is heuristic code to print only 'verbose' times a messages # The challenge is that we may not know the queue length if self._iterable: if _verbosity_filter(index, self.verbose): return self._print('Done %3i jobs | elapsed: %s', (index + 1, short_format_time(elapsed_time), )) else: # We are finished dispatching queue_length = self.n_dispatched # We always display the first loop if not index == 0: # Display depending on the number of remaining items # A message as soon as we finish dispatching, cursor is 0 cursor = (queue_length - index + 1 - self._pre_dispatch_amount) frequency = (queue_length // self.verbose) + 1 is_last_item = (index + 1 == queue_length) if (is_last_item or cursor % frequency): return remaining_time = (elapsed_time / (index + 1) \* (self.n_dispatched - index - 1.)) self._print('Done %3i out of %3i | elapsed: %s remaining: %s', (index + 1, queue_length, short_format_time(elapsed_time), short_format_time(remaining_time), )) def retrieve(self): self._output = list() while self._jobs: # We need to be careful: the job queue can be filling up as # we empty it if hasattr(self, '_lock'): self._lock.acquire() job = self._jobs.pop(0) if hasattr(self, '_lock'): self._lock.release() try: self._output.append(job.get()) except tuple(self.exceptions), exception: if isinstance(exception, (KeyboardInterrupt, WorkerInterrupt)): # We have captured a user interruption, clean up # everything if hasattr(self, '_pool'): self._pool.close() self._pool.terminate() raise exception elif isinstance(exception, TransportableException): # Capture exception to add information on the local stack # in addition to the distant stack this_report = format_outer_frames(context=10, stack_start=1) report = \"\"\"Multiprocessing exception: %s --------------------------------------------------------------------------- Sub-process traceback: --------------------------------------------------------------------------- %s\"\"\" % ( this_report, exception.message, ) # Convert this to a JoblibException exception_type = _mk_exception(exception.etype)[0] raise exception_type(report) raise exception def __call__(self, iterable): if self._jobs: raise ValueError('This Parallel instance is already running') n_jobs = self.n_jobs if n_jobs < 0 and multiprocessing is not None: n_jobs = max(multiprocessing.cpu_count() + 1 + n_jobs, 1) # The list of exceptions that we will capture self.exceptions = [TransportableException] if n_jobs is None or multiprocessing is None or n_jobs == 1: n_jobs = 1 self._pool = None else: if multiprocessing.current_process()._daemonic: # Daemonic processes cannot have children n_jobs = 1 self._pool = None warnings.warn( 'Parallel loops cannot be nested, setting n_jobs=1', stacklevel=2) else: self._pool = multiprocessing.Pool(n_jobs) self._lock = threading.Lock() # We are using multiprocessing, we also want to capture # KeyboardInterrupts self.exceptions.extend([KeyboardInterrupt, WorkerInterrupt]) if self.pre_dispatch == 'all' or n_jobs == 1: self._iterable = None self._pre_dispatch_amount = 0 else: self._iterable = iterable self._dispatch_amount = 0 pre_dispatch = self.pre_dispatch if hasattr(pre_dispatch, 'endswith'): pre_dispatch = eval(pre_dispatch) self._pre_dispatch_amount = pre_dispatch = int(pre_dispatch) iterable = itertools.islice(iterable, pre_dispatch) self._start_time = time.time() self.n_dispatched = 0 try: for function, args, kwargs in iterable: self.dispatch(function, args, kwargs) self.retrieve() # Make sure that we get a last message telling us we are done elapsed_time = time.time() - self._start_time self._print('Done %3i out of %3i | elapsed: %s finished', (len(self._output), len(self._output), short_format_time(elapsed_time) )) finally: if n_jobs > 1: self._pool.close() self._pool.join() self._jobs = list() output = self._output self._output = None return output def __repr__(self): return '%s(n_jobs=%s)' % (self.__class__.__name__, self.n_jobs) ")) (py-bug-tests-intern 'stalls-emacs-probably-due-to-syntax-highlighting-lp-1058261-base arg teststring))) (defun stalls-emacs-probably-due-to-syntax-highlighting-lp-1058261-base () (switch-to-buffer (current-buffer)) (goto-char 6184) (while (not (bobp)) (forward-line -1) (end-of-line) ;; (when (interactive-p) (sit-for 0.1)) (beginning-of-line)) (assert (bobp) nil "stalls-emacs-probably-due-to-syntax-highlighting-lp-1058261-test failed")) (defun pyindex-mishandles-class-definitions-lp-1018164-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- import sys import io import subprocess import re import copy import pickle import textwrap import datetime import util import cldef import datatypes from themes.thutil import lisp, fontNames, Color, emacsPosition ############################################################################### version = 3 ############################################################################### # used to raise a type error if a call is made with incorrect arguments def _emptyParametersCheck(): pass ############################################################################### class Font(object, metaclass=cldef.metaClass): __cldef = cldef.metaClass.wrapclass() __cldef.slots(\"__fontStr\") __cldef.fields(\"weight slant width height pointSize size face\") __cldef.field(\"mapKey\", initfunc=lambda f:(f.size,f.weight,f.slant)) __cldef.field(\"sortKey\", initfunc=lambda f:(f.width,f.height)) ########################################################################### __parseFontStrRE = __cldef.constant(re.compile( r'-outline-Courier New-(?Pbold|normal)'\\ r'-(?Pi|r)-normal-normal' \\ r'-(?P\\d+)-(?P\\d+)-\\d+-\\d+-c-(?P\\d+)-iso10646-1')) ########################################################################### def __init__(self, fontStr): self.__fontStr = fontStr match = self.__parseFontStrRE.match(fontStr) self.weight = match.group('weight') self.slant = 'italic' if match.group('slant') == 'i' else 'regular' self.width = int(match.group('width'))//10 self.height = int(match.group('height')) self.pointSize = (int(match.group('size')) + 5)//10 self.size = \"%sx%s\" % (self.__width, self.__height) self.face = \"Courier New\" ########################################################################### def __str__(self): return self.__fontStr ########################################################################### def qt(self): if 'QtGui' not in globals(): global QtGui from PyQt4 import QtGui font = QtGui.QFont(self.face, self.pointSize) font.setItalic(self.slant == 'italic') font.setBold(self.weight == 'bold') return font ############################################################################### class FontAttrs(object, metaclass=cldef.metaClass): __cldef = cldef.metaClass.wrapclass() mapKey = property(lambda self: (self.size, self.weight, self.slant)) ########################################################################### class FontAttrs(__cldef.FieldClass): access, fields = 'rw', \"fontSize fontWeight fontSlant\" def sethook(obj, fieldName, value): value = str(value) if value in obj.fontOptions(fieldName): return value raise ValueError(\"%s invalid value for %s\"%(value, fieldName)) ########################################################################### attrNames = __cldef.constant(frozenset(FontAttrs.fields.split())) ########################################################################### class FontAttrAbbrevs(__cldef.FieldClass): access, fields = 'rw', tuple(\"size weight slant\".split()) def fget(obj): pass def gethook(obj,name,\*p): return getattr(obj, 'font'+name.capitalize()) def fset(obj,val): pass def sethook(obj,name,val,\*p): setattr(obj, 'font'+name.capitalize(), val) ########################################################################### def __init__(self, size='8x13', weight='bold', slant='regular'): self.__initAttrs(\*\*locals()) ########################################################################### def font(): # font options contain the valid values for each font attr _fontOptions = {'weight':('normal','bold'), 'slant':('regular','italic')} # Get the list of font names from thutil and create the font lookup # dict. It is assumed that the weight and slant are not specified, # so will fill in the \"typical\" options here. _fontMap = dict() for fontStr in fontNames(): for weight in ('normal', 'bold'): for slant in ('r', 'i'): font = Font(fontStr.replace(\"\*-\*\", weight+'-'+slant)) _fontMap[font.mapKey] = font # getFont: use the fontAttrSize, fontWeight and fontSize attrs # to lookup the font in _fontMap def getFont(self): return _fontMap[self.mapKey] # scan all the values of _fontMap an garther all fontSize options _fontSizes = set(f.size for f in _fontMap.values()) def fontSizeSortKey(size): return tuple(int(i) for i in size.split('x')) _fontOptions['size'] = tuple(sorted(_fontSizes, key=fontSizeSortKey)) #provide a function to query the fontoptions def fontOptions(attrName): attrName = attrName.lower() if attrName.startswith('font'): attrName = attrName[len('font'):] return _fontOptions[attrName] return property(fget=getFont), staticmethod(fontOptions) font, fontOptions = font() ############################################################################### class ColorAttrs(object, metaclass=cldef.metaClass): __cldef = cldef.metaClass.wrapclass() attrNames = \"foregroundColor backgroundColor cursorColor\".split() attrNames = __cldef.constant(tuple(attrNames)) __cldef.fields(attrNames.val, 'rw', sethook=Color) ########################################################################### def __init__(self, backgroundColor=\"grey13\", foregroundColor='navajowhite', cursorColor=None): self.backgroundColor = backgroundColor self.foregroundColor = foregroundColor self.cursorColor = self.getColor_i(cursorColor,\"light green\", \"black\") ########################################################################### def getColor_i(self, val, forDark, forLight): if val is None: val = forDark if self.backgroundColor.isDark() else forLight return Color(val) ############################################################################### class Face(object, metaclass=cldef.metaClass): ########################################################################### __cldef = cldef.metaClass.wrapclass(privAttrAccess=True) unspecified = __cldef.constant(None) __cldef.fields('name theme') __cldef.fields('inherit', access='rw', sethook=lambda obj,val: obj.setInheritHook_i(val)) ########################################################################### class FontAttrs(__cldef.FieldClass): access, fields = 'rw', (\"bold\",\"italic\",\"underline\",\"raised\") sethook = lambda val: val if val is None else bool(val) gethook = lambda obj,attr,val: obj.getAttrHook_i(attr, val) ########################################################################### class ColorAttrs(__cldef.FieldClass): access, fields = 'rw', (\"foreground\", \"background\") sethook = lambda val: val if val is None else Color(val) gethook = lambda obj,attr,val: obj.getAttrHook_i(attr, val) ########################################################################### fontAttrs, colorAttrs, faceAttrs = __cldef.constants( frozenset(FontAttrs.fields), frozenset(ColorAttrs.fields), frozenset(FontAttrs.fields + ColorAttrs.fields + ('inherit',))) ########################################################################### def __init__(self, name, theme, \*\*opts): self.name, self.theme = name, theme for attr in self.faceAttrs: self.__setPrivAttr(attr,None) for attr,val in opts.items(): setattr(self, attr, val) ########################################################################### def __str__(self): return self.setFaceSexpr() ########################################################################### def copy(self): copy = self.__class__(self.name, self.theme) for attr in self.faceAttrs: copy.__setPrivAttr(attr, self.__getPrivAttr(attr)) return copy ########################################################################### def __eq__(self, peer): if not isinstance(peer, Face): return NotImplemented getSelf, getPeer = self.__getPrivAttr, peer.__getPrivAttr return (self.name == peer.name and self.faceAttrs == peer.faceAttrs and all(getSelf(a) == getPeer(a) for a in self.faceAttrs)) ########################################################################### def __neq__(self, peer): return not(self == peer) ########################################################################### def reset(self, peer): for attr in self.faceAttrs: self.__setPrivAttr(attr, peer.__getPrivAttr(attr)) ########################################################################### def isSet(self, attr): return self.__getPrivAttr(attr) is not None ########################################################################### def getPeer(self, peerName): if peerName in (None, 'default'): return self.theme.defaultFace return self.theme.facesAttrs[peerName] ########################################################################### def inheritOrder(self): return (self.name, ) + self.getPeer(self.inherit).inheritOrder() ########################################################################### def derivesFrom(self, peer): return self.theme == peer.theme and peer.name in self.inheritOrder() ########################################################################### def getSource(self, attr): return self if self.isSet(attr) else \\ self.getPeer(self.inherit).getSource(attr) ########################################################################### def getAttrHook_i(self, attr, val): return val if val is not None \\ else getattr(self.getPeer(self.inherit), attr) ########################################################################### def setInheritHook_i(self, val): if val in (None, 'default'): return None if isinstance(val, str): theme = self.theme if not(hasattr(theme, 'faceAttrs')) or val in theme.faceAttrs: return val raise ValueError(\"Invalid inherit value=%s\" % val) ########################################################################### def getLispValue(self, attr, mapBool=('nil','t')): val = self.__getPrivAttr(attr) if val is None: return \"'unspecified\" if isinstance(val, bool): return mapBool[int(val)] if isinstance(val, str): return \"'%s\" % val if isinstance(val, Color): return '\"%s\"' % (val,) raise ValueError(\"getLispValue(%s): Invalid attr val=%s\" % (attr,val)) ########################################################################### def setFaceSexpr(self, parms=\"\"): isSet, lispVal = self.isSet, self.getLispValue # add inhert attr if isSet('inherit'): parms += ' :inherit %s' % lispVal('inherit') # add foreground, background color attrs if attr is set for attr in filter(isSet, self.colorAttrs): parms += ' :%s %s' % (attr, lispVal(attr)) # add bold attr if isSet('bold'): parms += ' :weight %s' % lispVal('bold', (\"'normal\", \"'bold\")) # add italic attr if isSet('italic'): parms += ' :slant %s' % lispVal('italic', (\"'normal\", \"'italic\")) # add underline attr if isSet('underline'): parms += ' :underline %s' % lispVal('underline') # add raised attr if isSet('raised'): val = lispVal('raised') if val == 't': val = '(:line-width 2 :color \"%s\" :style released-button)' % \\ self.foreground.blend(self.background) parms += ' :box %s' % val # make func call to set face in emacs return \"(themes-set-face '%s %s)\" % (self.name, parms) ############################################################################### class DefaultFace(Face, metaclass=cldef.metaClass): __cldef = cldef.metaClass.wrapclass() inherit, underline, raised = __cldef.constants(None, False, False) ########################################################################### def __init__(self, theme): self.__super.__init__(\"default\", theme) ########################################################################### bold = property(lambda self: self.theme.font.weight == 'bold') italic = property(lambda self: self.theme.font.slant == 'italic') foreground = property(lambda self: self.theme.foregroundColor) background = property(lambda self: self.theme.backgroundColor) ########################################################################### def setFaceSexpr(self): return '(themes-set-defaults \"%s\" \"%s\" \"%s\")' % \\ (self.foreground, self.background, self.theme.font) ########################################################################### def isSet(self, attr): return True ########################################################################### def inheritOrder(self): return (self.name,) ############################################################################### class FacesAttrs(object, metaclass=cldef.metaClass): __cldef = cldef.metaClass.wrapclass() __cldef.slots(\"__faceMap __faces\") __cldef.field(\"theme\") ########################################################################### def __init__(self, theme, facesAttrs=None): self.theme, self.__faceMap, self.__faces = theme, {}, [] if facesAttrs is None: facesAttrs = self.loadFacesFromEmacs_i() for faceAttrs in facesAttrs: face = Face(theme=theme, \*\*faceAttrs) if self.__faceMap.setdefault(face.name, face) is not face: raise KeyError(\"Face name %r is not unique\" % face.name) self.__faces.append(face) for face in self.__faces: if face.inherit is not None: assert face.inherit in self.__faceMap ########################################################################### def copy(self): copy = self.__class__.__new__(self.__class__) copy.theme = self.theme copy.__faces = [f.copy() for f in self.__faces] copy.__faceMap = dict((f.name,f) for f in copy.__faces) return copy ########################################################################### def reset(self, peer): self.__faces = [f.copy() for f in peer.__faces] self.__faceMap = dict((f.name,f) for f in self.__faces) ########################################################################### def __len__(self): return len(self.__faceMap) ########################################################################### def __iter__(self): return iter(self.__faces) ########################################################################### def __eq__(self, peer): if not isinstance(peer, FacesAttrs): return NotImplemented return self.__faceMap == peer.__faceMap ########################################################################### def __neq__(self, peer): return not(self == peer) ########################################################################### def get(self, name, default=None): return self.__faceMap.get(name,default) ########################################################################### def __getitem__(self, name): return self.__faceMap[name] ########################################################################### def __contains__(self, name): return name in self.__faceMap ########################################################################### def loadFacesFromEmacs_i(self): facesSexpr = textwrap.dedent(\"\"\"\\ (progn (add-to-list 'load-path \"%(elDir)s\") (add-to-list 'load-path \"%(elDir)s/python\") (add-to-list 'load-path \"%(elDir)s/imported\") (require 'themes) (write-region (themes-python-faces-attrs %(thColors)s) nil \"%(outFile)s\") (kill-emacs))\"\"\") facesSexpr = ' '.join(facesSexpr.split()) thColors = self.theme.foregroundColor, self.theme.backgroundColor outFile = (util.dirPath('\$TEMP')/'themeFaces.py').uniquify() facesSexpr %= {'elDir': util.Path('~/emacs').emacsName, 'thColors': '\"%s\" \"%s\"' % thColors, 'outFile': outFile.emacsName} try: subprocess.check_call(['emacs.exe', '--no-init-file', '--iconic', '--eval', facesSexpr], shell=True) return eval(outFile.text().replace('\\r\\n', '\\n')) finally: if outFile.isfile(): outFile.remove() ############################################################################### class ThemeChoice(object, metaclass=cldef.metaClass): __cldef = cldef.metaClass.wrapclass() __cldef.slots(\"__args\") ########################################################################## def __namedTests(): _darkThreshold = 3 \* 255 \* 0.6 def isThemeBackgroundDark(theme): return sum(theme.colorAttrs.backgroundColor) < _darkThreshold def isThemeBold(theme): return theme.fontAttrs.weight == 'bold' return dict(isThemeBackgroundDark = isThemeBackgroundDark, isThemeFontBold = isThemeBold) __namedTests = __cldef.constant(__namedTests()) ########################################################################### def __init__(self, theme, themeTest, onTrueValue, onFalseValue): self.__args= (theme, themeTest, onTrueValue, onFalseValue) ########################################################################### def __call__(self): theme, themeTest, onTrueValue, onFalseValue = self.__args if isinstance(themeTest, str): themeTest = self.__namedTests[themeTest] if themeTest(theme): return onTrueValue return onFalseValue ############################################################################### class ThemeAccessor(object, metaclass=cldef.metaClass): __cldef = cldef.metaClass.wrapclass() __cldef.slots(\"__args\") ########################################################################### def __init__(self, theme, path): self.__args = (theme, path.split(\".\")) ########################################################################### def __call__(self): obj, path = self.__args for attr in path: obj = getattr(obj, attr) return obj ############################################################################### class EmacsFrameTheme(object, metaclass=cldef.metaClass): __cldef = cldef.metaClass.wrapclass() __cldef.fields(\"name colorAttrs fontAttrs defaultFace facesAttrs \" \"canDelete\") foregroundColor = property(lambda self: self.colorAttrs.foregroundColor) backgroundColor = property(lambda self: self.colorAttrs.backgroundColor) font = property(lambda self: self.fontAttrs.font) ########################################################################### def __str__(self): return util.nomen(self, \"%s:%s\" % (self.name, hex(id(self)))) ########################################################################### def __init__(self, name, \*\*themeOpts): self.name = name self.colorAttrs = ColorAttrs() self.fontAttrs = FontAttrs() self.defaultFace = DefaultFace(self) facesAttrs = themeOpts.pop('facesAttrs', None) self.facesAttrs = FacesAttrs(self, facesAttrs=facesAttrs) self.canDelete = themeOpts.pop('canDelete', True) self.update(themeOpts) ########################################################################### def update(self, \*args, \*\*opts): if len(args) > 1: raise TypeError(\"Can be at most one positional argument\") opts = dict((args[0] if args else ()), \*\*opts) for attrs in (self.colorAttrs, self.fontAttrs): for attrName in attrs.attrNames: val = opts.pop(attrName, None) if val is not None: setattr(attrs, attrName, val) _emptyParametersCheck(\*\*opts) ########################################################################### @classmethod def loadTheme(cls, themeFile, canDelete=True): themeFile = util.Path(themeFile, lambda f: f.isfile() and f.ext=='.el') themeSexpr = textwrap.dedent(\"\"\"\\ (progn (add-to-list 'load-path \"%(elDir)s\") (add-to-list 'load-path \"%(elDir)s/python\") (add-to-list 'load-path \"%(elDir)s/imported\") (require 'themes) (load \"%(themeFile)s\") (write-region (themes-python-theme-attrs) nil \"%(outFile)s\") (kill-emacs))\"\"\") themeSexpr = ' '.join(themeSexpr.split()) outFile = (util.dirPath('\$TEMP')/'themeAttrs.py').uniquify() themeSexpr %= {'elDir': util.Path('~/emacs').emacsName, 'themeFile': themeFile.stripext().emacsName, 'outFile': outFile.emacsName} try: subprocess.check_call(['emacs.exe', '--no-init-file', '--iconic', '--eval', themeSexpr], shell=True) themeOpts, facesAttrs = eval(outFile.text().replace('\\r\\n','\\n')) # convert the font string spec returned by emacs to fontAttrs # argumets expected by __init__ font = Font(themeOpts.pop('font')) themeOpts.update(fontSize=font.size, fontWeight=font.weight, fontSlant=font.slant, canDelete=canDelete) themeName = themeFile.namebase return cls(themeName, facesAttrs=facesAttrs, \*\*themeOpts) finally: if outFile.isfile(): outFile.remove() ########################################################################### def copy(self, newThemeName, \*\*newThemeOpts): newTheme = copy.deepcopy(self) newTheme.__name = newThemeName newTheme.update(newThemeOpts) return newTheme ########################################################################### def __eq__(self, peer): if not isinstance(peer, EmacsFrameTheme): return NotImplemented return (self.name == peer.name and self.foregroundColor == peer.foregroundColor and self.backgroundColor == peer.backgroundColor and self.font == peer.font and self.facesAttrs == peer.facesAttrs) ########################################################################### def __neq__(self, peer): return not(self == peer) ########################################################################### @property def sexpr(self): cursor = Face('cursor', self, background=self.colorAttrs.cursorColor) faces = [self.defaultFace, cursor] + list(self.facesAttrs) return \"(progn\\n %s)\" % \"\\n \".join(f.setFaceSexpr() for f in faces) ########################################################################### __applyFormat = \"%(sexpr)s\\n(themes-save-cache-file (quote %(sexpr)s))\" ########################################################################### def applyTheme(self): lisp(self.__applyFormat % dict(sexpr=self.sexpr)) ########################################################################### def accessor(self, \*p, \*\*kw): return ThemeAccessor(self, \*p, \*\*kw) ########################################################################### def choice(self, \*p, \*\*kw): return ThemeChoice(self, \*p, \*\*kw) ############################################################################### def cacheFilePath(path): return util.Path(path, lambda f: not(f.isdir())) ############################################################################### class EmacsFrameThemes(object, metaclass=cldef.metaClass): __cldef = cldef.metaClass.wrapclass() __cldef.slots(\"__themes\") __cldef.field('cacheFile', 'ri', sethook=cacheFilePath) __cldef.field(\"saveEnabled\", 'rw', initval=True, sethook=bool) __cldef.field(\"current\", 'rw', fset=lambda obj,theme: obj.setCurrentTheme(theme)) ########################################################################### def __new__(cls, themeMgr=None): if themeMgr is None: # pickle internals called __new__ SURPRISE! return object.__new__(cls) if themeMgr.cacheFile.isfile(): # load themes from cache file return cls.loadCache_i(themeMgr.cacheFile) themes = object.__new__(cls) elispFiles = themeMgr.archive.files('\*.el') if elispFiles: # load themes from a collection (archive) of elisp files created # this module and emacs can use to initialize themes themes.loadArchive_i(elispFiles, themeMgr.cacheFile) else: # create themes using a few 'canned' themes themes.bootstrap_i(themeMgr.cacheFile) return themes ########################################################################### @classmethod def loadCache_i(cls, cacheFile): try: with cacheFile.open('rb') as cacheFP: themes = pickle.load(cacheFP) except: # If file has windows newlines '\\r\\n', read it as text which # converting newlines, encode to bytes and retry loading themes = pickle.loads(cacheFile.text().encode()) assert isinstance(themes, cls) themes.__cacheFile = cacheFilePath(cacheFile) return themes ########################################################################### def loadArchive_i(self, elispFiles, cacheFile): self.__themes = [] self.cacheFile, self.saveEnabled = cacheFile, False elispFiles = dict((f.namebase, f) for f in elispFiles) # load archive files in (standard themes) order. if no arcive file # is named after a standard theme, create it using provided args for thName,thOpts in ((d['name'],d) for d in self.standardThemes()): elispFile = elispFiles.pop(thName, None) if elispFile is not None: self.addTheme(EmacsFrameTheme.loadTheme( elispFile, thOpts['canDelete'])) else: self.addTheme(EmacsFrameTheme(\*\*thOpts)) # load any remaining archive files for elispFile in sorted(elispFiles.values()): self.addTheme(EmacsFrameTheme.loadTheme(elispFile)) self.current = self.__themes[0] self.saveEnabled = True self.save() ########################################################################### @staticmethod def standardThemes(): return [dict(name='dark_frames', canDelete=False), dict(name='red_frames', canDelete=False, backgroundColor=\"RGB:55/0/0\"), dict(name=\"green_frames\", canDelete=False, backgroundColor=\"RGB:16/25/25\"), dict(name=\"blue_frames\", canDelete=False, backgroundColor=\"RGB:0B/0B/2D\"), dict(name=\"light_frames\", canDelete=False, foregroundColor='black', backgroundColor='white')] ########################################################################### def bootstrap_i(self, cacheFile): self.__themes = [] self.cacheFile, self.saveEnabled = cacheFile, False # create dark theme as current theme self.current = EmacsFrameTheme(\"dark_frames\", canDelete=False) # create red theme self.addTheme(EmacsFrameTheme(\"red_frames\", canDelete=False, backgroundColor=\"RGB:55/0/0\")) # create green theme self.addTheme(EmacsFrameTheme(\"green_frames\", canDelete=False, backgroundColor=\"RGB:16/25/25\")) # create blue theme self.addTheme(EmacsFrameTheme(\"blue_frames\", canDelete=False, backgroundColor=\"RGB:0B/0B/2D\")) # create light theme from default self.addTheme(EmacsFrameTheme(\"light_frames\", canDelete=False, foregroundColor='black', backgroundColor='white')) self.saveEnabled = True self.save() ########################################################################### def reset(self, prototype, copy=True): assert type(self) is type(prototype) if copy: prototype = copy.deepcopy(prototype) for attr in self.__slots__: setattr(self, attr, getattr(prototype, attr)) self.save() ########################################################################### def save(self): if self.saveEnabled: with self.cacheFile.open('wb') as cacheFile: pickle.dump(self, cacheFile) ########################################################################### def addTheme(self, theme): if theme.name in self: raise KeyError(\"theme.name(%s) is not unique\" % theme.name) self.__themes.append(theme) self.save() ########################################################################### def getTheme(self, name, exact=True, default=None): if exact: for theme in self.__themes: if theme.name == name: return theme else: name = name.strip().lower() for theme in self.__themes: if name in theme.name.lower(): return theme return default ########################################################################### def setCurrentTheme(self, theme): if isinstance(theme,str): theme = self.getTheme(theme) if isinstance(theme, EmacsFrameTheme): self.__current = theme if theme not in self: self.addTheme(theme) else: raise ValueError(\"%s invalid theme\" % theme) ########################################################################### def removeTheme(self, theme, force=False): # arg can be either a theme instance or a str naming the theme if isinstance(theme,str): theme = self.getTheme(theme) if not force: if len(self.__themes) == 1: raise ValueError(\"Can't remove last theme\") if not theme.canDelete: raise ValueError(\"Theme %s can't be removed\" % theme.name) # remove the theme from both the themes list self.__themes.remove(theme) # adjust current attr if theme deleted was current one if theme == self.__current: try: self.__current = self.__themes[0] except IndexError: del self.__current self.save() ########################################################################### def swapThemes(self, theme1, theme2): if isinstance(theme1, str): theme1 = self.getTheme(theme1) if isinstance(theme2, str): theme2 = self.getTheme(theme2) index1 = self.__themes.index(theme1) index2 = self.__themes.index(theme2) self.__themes[index2] = theme1 self.__themes[index1] = theme2 ########################################################################### def __iter__(self): return iter(self.__themes) ########################################################################### def __len__(self): return len(self.__themes) ########################################################################### def __contains__(self, item): if isinstance(item, str): return item in (theme.name for theme in self.__themes) return item in self.__themes ############################################################################### class EmacsFrameThemeManager(datatypes.Singleton, metaclass=cldef.metaClass): __cldef = cldef.metaClass.wrapclass() __cldef.fields('themesDir cacheFile archive') __cldef.field('themes', 'r', initfunc=lambda obj: EmacsFrameThemes(obj)) currentTheme = property(lambda self: self.themes.current) ########################################################################### def newSingleton_i(self, themesDir=None): self.__super.newSingleton_i() if themesDir is None: themesDir = '\$APPDATA/_emacsthemes_v%d' % version self.themesDir = util.dirPath(themesDir) archive = self.themesDir/'archive' if not archive.exists(): archive.mkdir() self.archive = util.dirPath(archive) self.cacheFile = self.themesDir/'cache.pkl' ########################################################################### def applyNamedTheme(self, themeName, exact=True): themeName = themeName.replace(\"-\",\"_\") self.__themes.current = self.__themes.getTheme(themeName, exact) self.currentTheme.applyTheme() ########################################################################### def setFrameTheme(self, themeName, \*\*themeOpts): self.__themes.current = themeName self.currentTheme.update(themeOpts) self.currentTheme.applyTheme() ########################################################################### def gui(self): global EmacsFrameThemesApp try: guiRun = EmacsFrameThemesApp.run except NameError: from themes.thgui import EmacsFrameThemesApp guiRun = EmacsFrameThemesApp.run guiRun(self, tuple(i+50 for i in emacsPosition())) ########################################################################### def archiveThemes(self): textFormat = textwrap.dedent(\"\"\"\\ ;;; %s :: %s -\*-Emacs-Lisp-\*- ;;; -- Used by themes.el for persistance of current frame theme ;;; settings across emacs invocations %s \"\"\") for theme in self.themes: archiveFile = self.archive/(theme.name + '.el') timeStr = datetime.datetime.now().strftime(\"%a %b %d %H:%M:%S %Y\") archiveFile.write_text( textFormat % (archiveFile.name, timeStr, theme.sexpr)) ")) (py-bug-tests-intern 'pyindex-mishandles-class-definitions-lp-1018164-base arg teststring))) (defun pyindex-mishandles-class-definitions-lp-1018164-base () (goto-char 25548) (assert (eq 26242 (py-end-of-def-or-class)) nil "pyindex-mishandles-class-definitions-lp-1018164-test failed")) (defun exception-in-except-clause-highlighted-as-keyword-lp-909205-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- try: blah except ormexc.NoResultFound: pass ")) (py-bug-tests-intern 'exception-in-except-clause-highlighted-as-keyword-lp-909205-base arg teststring))) (defun exception-in-except-clause-highlighted-as-keyword-lp-909205-base () (font-lock-fontify-buffer) (goto-char 65) ;; (sit-for 0.1) (assert (eq (get-char-property (point) 'face) 'font-lock-keyword-face) nil "exception-in-except-clause-highlighted-as-keyword-lp-909205-test #1 failed") (goto-char 77) (assert (eq (get-char-property (point) 'face) 'py-exception-name-face) nil "exception-in-except-clause-highlighted-as-keyword-lp-909205-test #2 failed") ) (defun inconvenient-window-splitting-behavior-python-lp-1018996-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- import re import sys import os re. os. ")) (py-bug-tests-intern 'inconvenient-window-splitting-behavior-python-lp-1018996-base arg teststring))) (defun inconvenient-window-splitting-behavior-python-lp-1018996-base () (goto-char 82) (py-shell-complete nil t) (assert (string-match "^re." (car py-shell-complete-debug)) nil "inconvenient-window-splitting-behavior-python-lp-1018996-test #1 failed") (goto-char 86) (py-shell-complete nil t) (assert (string-match "^os." (car py-shell-complete-debug)) nil "inconvenient-window-splitting-behavior-python-lp-1018996-test #2 failed")) (defun inconvenient-window-splitting-behavior-ipython-lp-1018996-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env ipython # -*- coding: utf-8 -*- import re import sys import os re. os. ")) (py-bug-tests-intern 'inconvenient-window-splitting-behavior-ipython-lp-1018996-base arg teststring))) (defun inconvenient-window-splitting-behavior-ipython-lp-1018996-base () (goto-char 83) (py-shell-complete nil t) (assert (string-match "^re." (car py-shell-complete-debug)) nil "inconvenient-window-splitting-behavior-ipython-lp-1018996-test #1 failed") (goto-char 87) (py-shell-complete nil t) (assert (string-match "^os." (car py-shell-complete-debug)) nil "inconvenient-window-splitting-behavior-ipython-lp-1018996-test #2 failed")) (defun impossible-to-execute-a-buffer-with-from-future-imports-lp-1063884-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- from __future__ import with_statement print(\"I'm the \\\"impossible-to-execute-a-buffer-with-from-future-imports-lp-1063884-test\\\"\") ")) (py-bug-tests-intern 'impossible-to-execute-a-buffer-with-from-future-imports-lp-1063884-base arg teststring))) (defun impossible-to-execute-a-buffer-with-from-future-imports-lp-1063884-base () (sit-for 0.1) (assert (py-execute-buffer) nil "impossible-to-execute-a-buffer-with-from-future-imports-lp-1063884-test failed")) (defun several-new-bugs-with-paragraph-filling-lp-1066489-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- class IBanManager(Interface): \"\"\"The global manager of email address bans.\"\"\" def ban(email): \"\"\"Ban an email address from subscribing to a mailing list. The `IBanManager` is created by adapting an `IMailingList` or ``None``. For global bans, use ``None``. When an email address is banned, it will not be allowed to subscribe to a the named mailing list. This does not affect any email address already subscribed to the mailing list. It is also possible to add a 'ban pattern' whereby all email addresses matching a Python regular expression can be banned. This is accomplished by using a `^` as the first character in `email`. When an email address is already banned for the given mailing list (or globally), then this method does nothing. However, it is possible to extend a ban for a specific mailing list into a global ban; both bans would be in place and they can be removed individually. :param email: The text email address being banned or, if the string starts with a caret (^), the email address pattern to ban. :type email: str :param mailing_list: The fqdn name of the mailing list to which the ban applies. If None, then the ban is global. :type mailing_list: string \"\"\" ")) (py-bug-tests-intern 'several-new-bugs-with-paragraph-filling-lp-1066489-base arg teststring))) (defun several-new-bugs-with-paragraph-filling-lp-1066489-base () (let (py-paragraph-fill-docstring-p) (goto-char 932) (py-fill-paragraph) (assert (re-search-forward "^ +:type email") nil "several-new-bugs-with-paragraph-filling-lp-1066489-test failed"))) (defun incorrect-indentation-of-one-line-functions-lp-1067633-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def foo(): pass ")) (py-bug-tests-intern 'incorrect-indentation-of-one-line-functions-lp-1067633-base arg teststring))) (defun incorrect-indentation-of-one-line-functions-lp-1067633-base () (goto-char 67) (assert (eq 4 (py-compute-indentation)) nil "incorrect-indentation-of-one-line-functions-lp-1067633-test failed")) (defun does-not-dedent-regions-lp-1072869-test (&optional arg) (interactive "p") (let ((teststring " print(\"HELLO\")")) (py-bug-tests-intern 'does-not-dedent-regions-lp-1072869-base arg teststring))) (defun does-not-dedent-regions-lp-1072869-base () (assert (py-execute-buffer-ipython) nil "does-not-dedent-regions-lp-1072869-test #1 failed") (assert (py-execute-buffer-python) nil "does-not-dedent-regions-lp-1072869-test #2 failed") ) (defun inconvenient-py-switch-buffers-on-execute-lp-1073-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- print \"HELLO!\" ")) (py-bug-tests-intern 'inconvenient-py-switch-buffers-on-execute-lp-1073-base arg teststring))) ;; doesn't word, patches welcome (defun inconvenient-py-switch-buffers-on-execute-lp-1073-base () (let ((py-switch-buffers-on-execute-p t) erg) (py-execute-buffer-python) (message "current: %s" (buffer-name (current-buffer))) (setq erg (string-match "Python" (buffer-name (current-buffer)))) ;; (assert erg nil "inconvenient-py-switch-buffers-on-execute-lp-1073-test failed") (switch-to-buffer (current-buffer)) )) (defun fails-to-indent-abs-wrong-type-argument-lp-1075673-test (&optional arg) (interactive "p") (let ((teststring "#!/usr/bin/env python # emacs: -\*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -\*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## \"\"\"Python distutils setup for PyMVPA\"\"\" from numpy.distutils.core import setup, Extension import os import sys from glob import glob if sys.version_info[:2] < (2, 5): ")) (py-bug-tests-intern 'fails-to-indent-abs-wrong-type-argument-lp-1075673-base arg teststring))) (defun fails-to-indent-abs-wrong-type-argument-lp-1075673-base () (assert (eq 4 (py-compute-indentation)) nil "fails-to-indent-abs-wrong-type-argument-lp-1075673-test failed")) (defun incorrect-indentation-of-comments-in-a-multiline-list-lp-1077063-test (&optional arg) (interactive "p") (let ((teststring "#!/usr/bin/python #emacs: -\*- mode: python; py-indent-offset: 4; tab-width: 4; indent-tabs-mode: nil -\*- #ex: set sts=4 ts=4 sw=4 noet: class X: XX = [ \"asdfasdF\", \"asdfasdf\", # lakjsdflkjasdf \"lkajsdlkfj\" ] # There is no way to indent #comment line with TAB, nor subsequent list entry to the level of previous # entries ")) (py-bug-tests-intern 'incorrect-indentation-of-comments-in-a-multiline-list-lp-1077063-base arg teststring))) (defun incorrect-indentation-of-comments-in-a-multiline-list-lp-1077063-base () (goto-char 202) (assert (eq 8 (py-compute-indentation)) nil "incorrect-indentation-of-comments-in-a-multiline-list-lp-1077063-test failed")) (defun fill-paragraph-in-a-comment-does-not-stop-at-empty-comment-lines-lp-1077139-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # in older version of python-mode (5.1.0) fill-paragraph (Alt-q) e.g. on first line of # line1: alskdjfl aksdjlfkas dklfj aslkdjf aklsdj flkasjd fklasjd lfkasj dlkfj asdklfj aslkdfj # # line2 # would fill only portion of line1: # line1: alskdjfl aksdjlfkas dklfj aslkdjf aklsdj flkasjd fklasjd # lfkasj dlkfj asdklfj aslkdfj # # line2 # while current version disregards such stop paragraph separation... unless it is at the beginning of the # buffer!! ;), so adding an empty line before the first comment line of this test example, results in: # line1: alskdjfl aksdjlfkas dklfj aslkdjf aklsdj flkasjd fklasjd # lfkasj dlkfj asdklfj aslkdfj line2 ")) (py-bug-tests-intern 'fill-paragraph-in-a-comment-does-not-stop-at-empty-comment-lines-lp-1077139-base arg teststring))) (defun fill-paragraph-in-a-comment-does-not-stop-at-empty-comment-lines-lp-1077139-base () (let ((empty-comment-line-separates-paragraph-p t)) (goto-char 152) (fill-paragraph) (goto-char 233) (beginning-of-line) (assert (looking-at paragraph-separate) nil "fill-paragraph-in-a-comment-does-not-stop-at-empty-comment-lines-lp-1077139-test failed"))) (defun spuriously-indents-whole-line-while-making-some-portion-inline-comment-lp-1080973-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # originally it actually added indentation level in my case so code became # @sweepargs(clf=[kNN(5)]) #clfswh['multiclass']) # def test_auc(self, clf): # pass # but on example to reproduce class A(object): def prev(): pass @decorator(1) lkajsd def buga(): pass # attempt to insert # before lkajsd actually dedented it and made it class A(object): def prev(): pass @decorator(1) #lkajsd def buga(): pass # imho making inline comment should not alter whole line indentation ")) (py-bug-tests-intern 'spuriously-indents-whole-line-while-making-some-portion-inline-comment-lp-1080973-base arg teststring))) (defun spuriously-indents-whole-line-while-making-some-portion-inline-comment-lp-1080973-base () (goto-char 312) (assert (eq 4 (py-compute-indentation)) nil "spuriously-indents-whole-line-while-making-some-portion-inline-comment-lp-1080973-test #1 failed") (goto-char 349) (assert (eq 4 (py-compute-indentation)) nil "spuriously-indents-whole-line-while-making-some-portion-inline-comment-lp-1080973-test #2 failed") ) (defun imenu-add-menubar-index-fails-lp-1084503-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- ")) (py-bug-tests-intern 'imenu-add-menubar-index-fails-lp-1084503-base arg teststring))) (defun imenu-add-menubar-index-fails-lp-1084503-base () (assert (imenu-add-menubar-index) nil "imenu-add-menubar-index-fails-lp-1084503-test failed")) (defun fill-paragraph-in-comments-results-in-mess-lp-1084769-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def update(): # We need to get a reliable checksum for the dictionary in # newpkg_list. Dictionary order is unpredictable, so to get a # reproducible checksum, we get the items of the dict, sort on the # keys, then get the json representation of this sorted list, encode # this to bytes assuming utf-8, and hash # the resulting bytes. ")) (py-bug-tests-intern 'fill-paragraph-in-comments-results-in-mess-lp-1084769-base arg teststring))) (defun fill-paragraph-in-comments-results-in-mess-lp-1084769-base () (goto-char 266) (fill-paragraph) (beginning-of-line) (assert (looking-at " ") nil "fill-paragraph-in-comments-results-in-mess-lp-1084769-test failed")) (defun py-execute-buffer-python3-looks-broken-lp-1085386-test (&optional arg) (interactive "p") (let ((teststring "i = 0 i+=1 print(i) ")) (py-bug-tests-intern 'py-execute-buffer-python3-looks-broken-lp-1085386-base arg teststring))) (defun py-execute-buffer-python3-looks-broken-lp-1085386-base () (let ((py-use-current-dir-when-execute-p t)) (assert (py-execute-buffer-python3) nil "py-execute-buffer-python3-looks-broken-lp-1085386-test failed"))) (defun wrong-indent-after-asignment-lp-1087404-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- a = 1 # After pressing enter column 1 as expected b = [1] # Now after pressing enter indents to column 4 ")) (py-bug-tests-intern 'wrong-indent-after-asignment-lp-1087404-base arg teststring))) (defun wrong-indent-after-asignment-lp-1087404-base () (goto-char 106) (assert (eq 0 (py-compute-indentation)) nil "wrong-indent-after-asignment-lp-1087404-test failed")) (defun wrong-indentation-after-return-or-pass-keyword-lp-1087499-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- class Foo(self): def bar(self): return self.baz class Baz(self): def bar(self): pass ")) (py-bug-tests-intern 'wrong-indentation-after-return-or-pass-keyword-lp-1087499-base arg teststring))) (defun wrong-indentation-after-return-or-pass-keyword-lp-1087499-base () (goto-char 108) (assert (eq 4 (py-compute-indentation)) nil "wrong-indentation-after-return-or-pass-keyword-lp-1087499-test failed") (goto-char 158) (assert (py-compute-indentation) nil "wrong-indentation-after-return-or-pass-keyword-lp-1087499-test failed")) (defun temporary-files-remain-when-python-raises-exception-lp-1083973-n1-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- import os import urllib os.chdir(\"NOT-EXISTING\") f = urllib.urlopen(\"NOT-EXISTING.html\") for lines in f: print(lines) ")) (py-bug-tests-intern 'temporary-files-remain-when-python-raises-exception-lp-1083973-n1-base arg teststring))) (defun temporary-files-remain-when-python-raises-exception-lp-1083973-n1-base () (let ((python-mode-v5-behavior-p t)) (py-execute-buffer) (assert (eobp) nil "temporary-files-remain-when-python-raises-exception-lp-1083973-n1-test failed"))) (defun temporary-files-remain-when-python-raises-exception-lp-1083973-n2-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- import os import urllib f = urllib.urlopen(\"NOT-EXISTING.html\") for lines in f: print(lines) ")) (py-bug-tests-intern 'temporary-files-remain-when-python-raises-exception-lp-1083973-n2-base arg teststring))) (defun temporary-files-remain-when-python-raises-exception-lp-1083973-n2-base () (let ((python-mode-v5-behavior-p t)) (py-execute-buffer) (assert (eq 72 (point)) nil "temporary-files-remain-when-python-raises-exception-lp-1083973-n2-test failed"))) (defun temporary-files-remain-when-python-raises-exception-lp-1083973-n3-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- import os import urllib f = urllib.urlopen(\"NOT-EXISTING.html\") for lines in f: print(lines) ")) (py-bug-tests-intern 'temporary-files-remain-when-python-raises-exception-lp-1083973-n3-base arg teststring))) (defun temporary-files-remain-when-python-raises-exception-lp-1083973-n3-base () (py-execute-buffer) (assert (eq 163 (point)) nil "temporary-files-remain-when-python-raises-exception-lp-1083973-n3-test failed")) (defun temporary-files-remain-when-python-raises-exception-lp-1083973-n4-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- import os import urllib f = urllib.urlopen(\"NOT-EXISTING.html\") for lines in f: print(lines) ")) (py-bug-tests-intern 'temporary-files-remain-when-python-raises-exception-lp-1083973-n4-base arg teststring))) (defun temporary-files-remain-when-python-raises-exception-lp-1083973-n4-base () (py-execute-buffer) (switch-to-buffer (current-buffer)) (sit-for 0.1) (message "Bin hier %s" (buffer-name (current-buffer))) (assert (eq 163 (point)) nil "temporary-files-remain-when-python-raises-exception-lp-1083973-n4-test failed")) (defun comments-start-a-new-line-lp-1092847-n1-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # I am using python-mode.el in Emacs to edit some Python code and it has the most annoying feature where it # auto-indents a comment and then starts a new line. For example, if I have this: def x(): y = 1 And then add in one # at the root indentation level: def x(): y = 1 # # It automatically indents, inserts the #, and inserts a carriage return after the #. It's driving me crazy. # I want my comments to stay exactly where I put them! Any suggestions? # I've looked through the elisp code for the mode and can't find anything yet nor can I find anything # elsewhere online. All I can find is that comments won't be used for future indentation (py-honor-comment- # indentation) but nothing related to the comment itself. Nor the strange carriage return. ")) (py-bug-tests-intern 'comments-start-a-new-line-lp-1092847-n1-base arg teststring))) (defun comments-start-a-new-line-lp-1092847-n1-base () (let ((py-electric-comment-p t)) (goto-char 258) (py-electric-comment 1) (back-to-indentation) (assert (eq 4 (current-column)) nil "comments-start-a-new-line-lp-1092847-n1-test failed"))) (defun comments-start-a-new-line-lp-1092847-n2-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # I am using python-mode.el in Emacs to edit some Python code and it has the most annoying feature where it # auto-indents a comment and then starts a new line. For example, if I have this: def x(): y = 1 And then add in one # at the root indentation level: def x(): y = 1 # # It automatically indents, inserts the #, and inserts a carriage return after the #. It's driving me crazy. # I want my comments to stay exactly where I put them! Any suggestions? # I've looked through the elisp code for the mode and can't find anything yet nor can I find anything # elsewhere online. All I can find is that comments won't be used for future indentation (py-honor-comment- # indentation) but nothing related to the comment itself. Nor the strange carriage return. ")) (py-bug-tests-intern 'comments-start-a-new-line-lp-1092847-n2-base arg teststring))) (defun comments-start-a-new-line-lp-1092847-n2-base () (let ((py-electric-comment-p nil)) (goto-char 258) (py-electric-comment 1) (back-to-indentation) (assert (eq 0 (current-column)) nil "comments-start-a-new-line-lp-1092847-n2-test failed"))) (defun filename-completion-fails-in-ipython-lp-1027265-n1-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- a = open('/ho') ")) (py-bug-tests-intern 'filename-completion-fails-in-ipython-lp-1027265-n1-base arg teststring))) (defun filename-completion-fails-in-ipython-lp-1027265-n1-base () (goto-char 61) (completion-at-point) (assert (eq 63 (point)) nil "filename-completion-fails-in-ipython-lp-1027265-n1-test failed")) (defun filename-completion-fails-in-ipython-lp-1027265-n2-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env ipython # -*- coding: utf-8 -*- a = open('/ho') ")) (py-bug-tests-intern 'filename-completion-fails-in-ipython-lp-1027265-n2-base arg teststring))) (defun filename-completion-fails-in-ipython-lp-1027265-n2-base () (goto-char 62) (completion-at-point) (assert (eq 65 (point)) nil "filename-completion-fails-in-ipython-lp-1027265-n2-test failed")) (defun enter-key-does-not-indent-properly-after-return-statement-lp-1098793-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def foo(): while something(): bar() baz() return 1 # Once the cursor is placed after \"return 1\" and I hit enter, on the next line, the cursor is placed under # the \"r\" in return statement, instead of moving indentation to the outer block. # # \"ENTER\" key is bound to (py-newline-and-indent) # # Some version information: # # emacs-version # \"GNU Emacs 24.2.1 (i686-pc-cygwin) of 2012-08-27 on fiona\" # py-version # \"6.1.0\" ")) (py-bug-tests-intern 'enter-key-does-not-indent-properly-after-return-statement-lp-1098793-base arg teststring))) (defun enter-key-does-not-indent-properly-after-return-statement-lp-1098793-base () (goto-char 119) (assert (eq 0 (py-compute-indentation)) nil "enter-key-does-not-indent-properly-after-return-statement-lp-1098793-test failed")) (defun py-up-test-python-el-111-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -\*- coding: utf-8 -\*- # up-list: Scan error: \"Unbalanced parentheses\" # Hi, when I press C-M-u in python buffer I get: # # up-list: Scan error: \"Unbalanced parentheses\" # My expected behavior is something like this: # # Scenario: Going higher level by C-M-u # When I insert: # def f(): # if True: # [i for i in range(3)] # And I am looking at \"3)]\" # And I press C-M-u # Then I should looking at \"(3)]\" # And I press C-M-u # Then I should looking at \"[i for i\" # And I press C-M-u # Then I should looking at \"if True\" # And I press C-M-u # Then I should looking at \"def f\" # # related: #106 def f(): if True: print(\"[i for i in range(3)]: %s \" % ([i for i in range(3)])) ")) (py-bug-tests-intern 'py-up-test-python-el-111-base arg teststring))) (defun py-up-test-python-el-111-base () (goto-char 757) (assert (eq 756 (py-up)) nil "py-up-test-python-el-111-test #1 failed") (assert (eq 739 (py-up)) nil "py-up-test-python-el-111-test #2 failed") (assert (eq 738 (py-up)) nil "py-up-test-python-el-111-test #3 failed") (assert (eq 706 (py-up)) nil "py-up-test-python-el-111-test #4 failed") (assert (eq 701 (py-up)) nil "py-up-test-python-el-111-test #5 failed") (assert (eq 684 (py-up)) nil "py-up-test-python-el-111-test #6 failed") (assert (eq 671 (py-up)) nil "py-up-test-python-el-111-test #7 failed") (goto-char 726) (assert (eq 707 (py-up)) nil "py-up-test-python-el-111-test #8 failed") (assert (eq 706 (py-up)) nil "py-up-test-python-el-111-test #9 failed") ) (defun py-down-python-el-112-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # Scenario: Going lover level by C-M-d # When I insert: class C(object): def m(self): if True: return [i for i in range(3)] else: return [] # And I am looking at \"class C\" # And I press C-M-d # Then I should looking at \"def m\" # And I press C-M-d # Then I should looking at \"if True\" # And I press C-M-d # Then I should looking at \"i for i\" # And I press C-M-d # Then I should looking at \"3\" # Current version of C-M-d jumps to inside of (object) # because it is just a plain down-list. I think it's # better to have python-specific one for symmetry. ")) (py-bug-tests-intern 'py-down-python-el-112-base arg teststring))) (defun py-down-python-el-112-base () (goto-char 109) (assert (eq 130 (py-down)) nil "py-down-test-python-el-112-test #1 failed") (assert (eq 151 (py-down)) nil "py-down-test-python-el-112-test #2 failed") (assert (eq 172 (py-down)) nil "py-down-test-python-el-112-test #3 failed") (assert (eq 179 (py-down)) nil "py-down-test-python-el-112-test #4 failed") (assert (eq 196 (py-down)) nil "py-down-test-python-el-112-test #5 failed") ) (defun py-underscore-word-syntax-p-customization-has-no-effect-lp-1100947-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- _ ")) (py-bug-tests-intern 'py-underscore-word-syntax-p-customization-has-no-effect-lp-1100947-base arg teststring))) (defun py-underscore-word-syntax-p-customization-has-no-effect-lp-1100947-base () (goto-char 48) (py-underscore-word-syntax-p-on) (assert (eq 119 (char-syntax (char-after))) nil "py-underscore-word-syntax-p-customization-has-no-effect-lp-1100947-test #1 failed") (py-underscore-word-syntax-p-off) (assert (eq 95 (char-syntax (char-after))) nil "py-underscore-word-syntax-p-customization-has-no-effect-lp-1100947-test #2 failed") (py-underscore-word-syntax-p-on) (assert (eq 119 (char-syntax (char-after))) nil "py-underscore-word-syntax-p-customization-has-no-effect-lp-1100947-test #3 failed") ) (defun py-newline-and-indent-leaves-eol-whitespace-lp-1100892-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -\*- coding: utf-8 -\*- # py-newline-and-indent leaves extra whitespace at eol if used inside an existing construct. It should # instead clean up all trailing whitespace. I believe this is a regression. def foo(): x = some_long_call(supercalifragilistic=6, expialidocious=7) # Now, put point on the 'e' of expialidocious and hit RET # You will see that there's an extra space left after the \"6, \". All trailing whitespace should instead be # removed. ")) (py-bug-tests-intern 'py-newline-and-indent-leaves-eol-whitespace-lp-1100892-base arg teststring))) (defun py-newline-and-indent-leaves-eol-whitespace-lp-1100892-base () (let ((py-newline-delete-trailing-whitespace-p t)) (goto-char 286) (py-newline-and-indent) (sit-for 0.1) (skip-chars-backward " \t\r\n\f") (assert (eq (char-after) 10) nil "py-newline-and-indent-leaves-eol-whitespace-lp-1100892-test failed"))) (defun module-docstring-when-following-comment-lp-1102011-test (&optional arg) (interactive "p") (let ((teststring "# -*- coding: utf-8 -*- # ***************************************************************************** # # Copyright (c) 2009-2012 by the contributors (see AUTHORS) # # This program is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free Software # Foundation; either version 2 of the License, or (at your option) any later # version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more # details. # # You should have received a copy of the GNU General Public License along with # this program; if not, write to the Free Software Foundation, Inc., # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Module authors: # Georg Brandl # # ***************************************************************************** \"\"\"Some docstring.\"\"\" __version__ = \"\$Revision\$\" ")) (py-bug-tests-intern 'module-docstring-when-following-comment-lp-1102011-base arg teststring))) (defun module-docstring-when-following-comment-lp-1102011-base () (let ((py-use-font-lock-doc-face-p t)) (goto-char 1024) (python-mode) (font-lock-fontify-buffer) (sit-for 1) (assert (eq (face-at-point) 'font-lock-doc-face) nil "module-docstring-when-following-comment-lp-1102011-test failed"))) (defun ipython-complete-lp-1102226-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env ipython # -*- coding: utf-8 -*- import re re. ")) (py-bug-tests-intern 'ipython-complete-lp-1102226-base arg teststring))) (defun ipython-complete-lp-1102226-base () (and (featurep 'company)(company-mode -1)) (goto-char 62) (ipython-complete) ;; (set-buffer "*IPython Completions*") ;; (switch-to-buffer (current-buffer)) (assert (bufferp (get-buffer "*IPython Completions*")) nil "ipython-complete-lp-1102226-test failed")) (defun more-docstring-filling-woes-lp-1102296-pep-257-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # (I selected \"PEP-257-NN\" as the docstring fill style.) # Given the following code: class Test(object): \"\"\" Builds target formats from the reST sources. \"\"\" def method1(self): \"\"\"Return the template bridge configured.\"\"\" pass def method2(self): \"\"\"Load necessary templates and perform initialization. The default implementation does nothing. \"\"\" pass # There are three misbehaviors here: # \* should have removed the whitespace at the beginning and end of the class docstring # \* in method1, the \"pass\" should remain on its own line # \* in method2, the closing triple-quote should get its own line, and the \"pass\" too ")) (py-bug-tests-intern 'more-docstring-filling-woes-lp-1102296-pep-257-base arg teststring))) (defun more-docstring-filling-woes-lp-1102296-pep-257-base () (let ((py-docstring-style 'pep-257)) (goto-char 178) (assert (fill-paragraph) nil "more-docstring-filling-woes-lp-1102296-pep-257-test #1 failed") (message "%s" "more-docstring-filling-woes-lp-1102296-pep-257-test #1 done") (goto-char 259) (fill-paragraph) (forward-line 1) (assert (looking-at " pass") nil "more-docstring-filling-woes-lp-1102296-pep-257-test #2 failed") (message "%s" "more-docstring-filling-woes-lp-1102296-pep-257-test #2 done") (goto-char 357) (fill-paragraph) (goto-char 436) (sit-for 0.1) (assert (empty-line-p) nil "more-docstring-filling-woes-lp-1102296-pep-257-test #3a failed") (message "%s" "more-docstring-filling-woes-lp-1102296-pep-257-test #3a done") (forward-line 2) (assert (looking-at " pass") nil "more-docstring-filling-woes-lp-1102296-pep-257-test #3c failed") (message "%s" "more-docstring-filling-woes-lp-1102296-pep-257-test #3c done"))) (defun more-docstring-filling-woes-lp-1102296-onetwo-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # (I selected \"PEP-257-NN\" as the docstring fill style.) # Given the following code: class Test(object): \"\"\" Builds target formats from the reST sources. \"\"\" def method1(self): \"\"\"Return the template bridge configured.\"\"\" pass def method2(self): \"\"\"Load necessary templates and perform initialization. The default implementation does nothing. \"\"\" pass # There are three misbehaviors here: # \* should have removed the whitespace at the beginning and end of the class docstring # \* in method1, the \"pass\" should remain on its own line # \* in method2, the closing triple-quote should get its own line, and the \"pass\" too ")) (py-bug-tests-intern 'more-docstring-filling-woes-lp-1102296-onetwo-base arg teststring))) (defun more-docstring-filling-woes-lp-1102296-onetwo-base () (let ((py-docstring-style 'onetwo)) (goto-char 178) (assert (fill-paragraph) nil "more-docstring-filling-woes-lp-1102296-onetwo-test #1 failed") (message "%s" "more-docstring-filling-woes-lp-1102296-onetwo-test #1 done") (goto-char 259) (fill-paragraph) (forward-line 1) (assert (looking-at " pass") nil "more-docstring-filling-woes-lp-1102296-onetwo-test #2 failed") (message "%s" "more-docstring-filling-woes-lp-1102296-onetwo-test #2 done") (goto-char 357) (fill-paragraph) (beginning-of-line) (sit-for 1) ;; (message "%d" (skip-chars-forward " ")) (assert (eq (skip-chars-forward " ") 8) nil "more-docstring-filling-woes-lp-1102296-onetwo-test #3a failed") (message "%s" "more-docstring-filling-woes-lp-1102296-onetwo-test #3a done") (save-excursion (goto-char 357) (forward-line 2) (assert (empty-line-p) nil "more-docstring-filling-woes-lp-1102296-onetwo-test #3b failed") (message "%s" "more-docstring-filling-woes-lp-1102296-onetwo-test #3b done")) (forward-line 1) (assert (looking-at " pass") nil "more-docstring-filling-woes-lp-1102296-onetwo-test #3c failed") (message "%s" "more-docstring-filling-woes-lp-1102296-onetwo-test #3c done"))) (defun more-docstring-filling-woes-lp-1102296-django-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # (I selected \"PEP-257-NN\" as the docstring fill style.) # Given the following code: class Test(object): \"\"\" Builds target formats from the reST sources. \"\"\" def method1(self): \"\"\"Return the template bridge configured.\"\"\" pass def method2(self): \"\"\"Load necessary templates and perform initialization. The default implementation does nothing. \"\"\" pass # There are three misbehaviors here: # \* should have removed the whitespace at the beginning and end of the class docstring # \* in method1, the \"pass\" should remain on its own line # \* in method2, the closing triple-quote should get its own line, and the \"pass\" too ")) (py-bug-tests-intern 'more-docstring-filling-woes-lp-1102296-django-base arg teststring))) (defun more-docstring-filling-woes-lp-1102296-django-base () (let ((py-docstring-style 'django)) (goto-char 178) (assert (fill-paragraph) nil "more-docstring-filling-woes-lp-1102296-django-test #1 failed") (message "%s" "more-docstring-filling-woes-lp-1102296-django-test #1 done") (goto-char 259) (fill-paragraph) (forward-line 1) (assert (looking-at " pass") nil "more-docstring-filling-woes-lp-1102296-django-test #2 failed") (message "%s" "more-docstring-filling-woes-lp-1102296-django-test #2 done") (goto-char 380) (fill-paragraph) (beginning-of-line) (sit-for 0.1) (assert (looking-at " \"\"\"") nil "more-docstring-filling-woes-lp-1102296-django-test #3a failed") (message "%s" "more-docstring-filling-woes-lp-1102296-django-test #3a done") (save-excursion (goto-char 357) (forward-line 1) (assert (empty-line-p) nil "more-docstring-filling-woes-lp-1102296-django-test #3b failed") (message "%s" "more-docstring-filling-woes-lp-1102296-django-test #3b done")) (forward-line 1) (assert (looking-at " pass") nil "more-docstring-filling-woes-lp-1102296-django-test #3c failed") (message "%s" "more-docstring-filling-woes-lp-1102296-django-test #3c done"))) (defun more-docstring-filling-woes-lp-1102296-symmetric-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # (I selected \"PEP-257-NN\" as the docstring fill style.) # Given the following code: class Test(object): \"\"\" Builds target formats from the reST sources. \"\"\" def method1(self): \"\"\"Return the template bridge configured.\"\"\" pass def method2(self): \"\"\"Load necessary templates and perform initialization. The default implementation does nothing. \"\"\" pass # There are three misbehaviors here: # \* should have removed the whitespace at the beginning and end of the class docstring # \* in method1, the \"pass\" should remain on its own line # \* in method2, the closing triple-quote should get its own line, and the \"pass\" too ")) (py-bug-tests-intern 'more-docstring-filling-woes-lp-1102296-symmetric-base arg teststring))) (defun more-docstring-filling-woes-lp-1102296-symmetric-base () (let ((py-docstring-style 'symmetric)) (goto-char 178) (assert (fill-paragraph) nil "more-docstring-filling-woes-lp-1102296-symmetric-test #1 failed") (message "%s" "more-docstring-filling-woes-lp-1102296-symmetric-test #1 done") (goto-char 259) (fill-paragraph) (forward-line 1) (assert (looking-at " pass") nil "more-docstring-filling-woes-lp-1102296-symmetric-test #2 failed") (message "%s" "more-docstring-filling-woes-lp-1102296-symmetric-test #2 done") (goto-char 380) (fill-paragraph) (beginning-of-line) (sit-for 0.1) (assert (looking-at " \"\"\"") nil "more-docstring-filling-woes-lp-1102296-symmetric-test #3a failed") (message "%s" "more-docstring-filling-woes-lp-1102296-symmetric-test #3a done") (forward-line 1) (assert (looking-at " pass") nil "more-docstring-filling-woes-lp-1102296-symmetric-test #3c failed") (message "%s" "more-docstring-filling-woes-lp-1102296-symmetric-test #3c done"))) (defun line-after-colon-with-inline-comment-lp-1109946-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def f(): if a: b if c: # inline comment # |<---- cursor will not indent properly with > ")) (py-bug-tests-intern 'line-after-colon-with-inline-comment-lp-1109946-base arg teststring))) (defun line-after-colon-with-inline-comment-lp-1109946-base () (let ((py-indent-honors-inline-comment t)) (goto-char 104) (assert (eq 10 (py-compute-indentation)) nil "line-after-colon-with-inline-comment-lp-1109946-test failed"))) (defun cascading-indent-lp-1101962-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def foo(): pgdt = [] pdwd = [] cItemLik = [ ht(\"Item\", T.hr(), T.span(\"Like\", style= \"background-color: rgb( 229, 200, 136 )\")), lambda item: ht( item['!'], T.br(), like( item )) ] ")) (py-bug-tests-intern 'cascading-indent-lp-1101962-base arg teststring))) (defun cascading-indent-lp-1101962-base () (goto-char 87) (assert (eq 4 (py-compute-indentation)) nil "cascading-indent-lp-1101962-test failed")) (defun python-mode-very-slow-lp-1107037-test (&optional arg) (interactive "p") (let ((teststring "# Since the last few commits, python-mode is unbearably slow on nontrivial files. Even # just moving around in the file makes Emacs use 100% CPU for a few seconds. # # If this is due to the fix for lp:1102011, I would rather live with the highlight bug :) # Georg Brandl (gbrandl) wrote 11 hours ago: #2 # # Try the file below. I have narrowed the problem to the fix for lp:1102011 -- the regex # \*must\* have pathological behavior (which wouldn't surprise me, such backtracking # problems are very hard to fix). In general, for that many lines between module start # and docstring, I think it is quite fine for python-mode not to color the docstring as # such. I think the number of permitted comment lines should be restricted to 2, in order # to accomodate a shebang line and a coding declaration. # -\*- coding: utf-8 -\*- # \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* # # Copyright (c) 2009-2012 by the contributors (see AUTHORS) # # This program is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free Software # Foundation; either version 2 of the License, or (at your option) any later # version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more # details. # # You should have received a copy of the GNU General Public License along with # this program; if not, write to the Free Software Foundation, Inc., # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Module authors: # Georg Brandl # # \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* \"\"\"Some docstring.\"\"\" __version__ = \"$Revision: 1.76 $\" ")) (py-bug-tests-intern 'python-mode-very-slow-lp-1107037-base arg teststring))) (defun python-mode-very-slow-lp-1107037-base () (let ((py-use-font-lock-doc-face-p t)) (goto-char 1825) (python-mode) (font-lock-fontify-buffer) (sit-for 1) (assert (eq (face-at-point) 'font-lock-doc-face) nil "python-mode-very-slow-lp-1107037-test failed"))) (defun add-custom-switch-for-ffap-hooks-lp-1117119-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- /usr/lib/pyt ")) (py-bug-tests-intern 'add-custom-switch-for-ffap-hooks-lp-1117119-base arg teststring))) (defun add-custom-switch-for-ffap-hooks-lp-1117119-base () (let ((py-ffap-p t) (python-ffap t)) (goto-char 60) (assert (member 'py-set-ffap-form python-mode-hook) nil "add-custom-switch-for-ffap-hooks-lp-1117119-test #1 failed") )) (defun more-docstring-filling-woes-lp-1102296-nil-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # (I selected \"PEP-257-NN\" as the docstring fill style.) # Given the following code: class Test(object): \"\"\" Builds target formats from the reST sources. \"\"\" def method1(self): \"\"\"Return the template bridge configured.\"\"\" pass def method2(self): \"\"\"Load necessary templates and perform initialization. The default implementation does nothing. \"\"\" pass # There are three misbehaviors here: # \* should have removed the whitespace at the beginning and end of the class docstring # \* in method1, the \"pass\" should remain on its own line # \* in method2, the closing triple-quote should get its own line, and the \"pass\" too ")) (py-bug-tests-intern 'more-docstring-filling-woes-lp-1102296-nil-base arg teststring))) (defun more-docstring-filling-woes-lp-1102296-nil-base () (let ((py-docstring-style nil)) (goto-char 178) (assert (fill-paragraph) nil "more-docstring-filling-woes-lp-1102296-nil-test #1 failed") (message "%s" "more-docstring-filling-woes-lp-1102296-nil-test #1 done") (goto-char 259) (fill-paragraph) (forward-line 1) (sit-for 0.2) (assert (looking-at " pass") nil "more-docstring-filling-woes-lp-1102296-nil-test #2 failed") (message "%s" "more-docstring-filling-woes-lp-1102296-nil-test #2 done") (goto-char 380) (fill-paragraph) (back-to-indentation) (sit-for 0.1) (assert (eq (char-after) 34) nil "more-docstring-filling-woes-lp-1102296-nil-test #3a failed") (message "%s" "more-docstring-filling-woes-lp-1102296-nil-test #3a done") (search-forward "pass" nil t 1) (beginning-of-line) (assert (looking-at " pass") nil "more-docstring-filling-woes-lp-1102296-nil-test #3c failed") (message "%s" "more-docstring-filling-woes-lp-1102296-nil-test #3c done"))) (defun more-docstring-filling-woes-lp-1102296-pep-257-nn-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # (I selected \"PEP-257-NN\" as the docstring fill style.) # Given the following code: class Test(object): \"\"\" Builds target formats from the reST sources. \"\"\" def method1(self): \"\"\"Return the template bridge configured.\"\"\" pass def method2(self): \"\"\"Load necessary templates and perform initialization. The default implementation does nothing. \"\"\" pass # There are three misbehaviors here: # \* should have removed the whitespace at the beginning and end of the class docstring # \* in method1, the \"pass\" should remain on its own line # \* in method2, the closing triple-quote should get its own line, and the \"pass\" too ")) (py-bug-tests-intern 'more-docstring-filling-woes-lp-1102296-pep-257-nn-base arg teststring))) (defun more-docstring-filling-woes-lp-1102296-pep-257-nn-base () (let ((py-docstring-style 'pep-257-nn)) (goto-char 178) (assert (fill-paragraph) nil "more-docstring-filling-woes-lp-1102296-pep-257-nn-test #1 failed") (message "%s" "more-docstring-filling-woes-lp-1102296-pep-257-nn-test #1 done") (goto-char 259) (fill-paragraph) (forward-line 1) (assert (looking-at " pass") nil "more-docstring-filling-woes-lp-1102296-pep-257-nn-test #2 failed") (message "%s" "more-docstring-filling-woes-lp-1102296-pep-257-nn-test #2 done") (goto-char 357) (fill-paragraph) (beginning-of-line) (sit-for 0.1) (assert (eq (current-indentation) 8) nil "more-docstring-filling-woes-lp-1102296-pep-257-nn-test #3a failed") (message "%s" "more-docstring-filling-woes-lp-1102296-pep-257-nn-test #3a done") (search-forward "pass") (beginning-of-line) (sit-for 0.1) (assert (looking-at " pass") nil "more-docstring-filling-woes-lp-1102296-pep-257-nn-test #3b failed") (message "%s" "more-docstring-filling-woes-lp-1102296-pep-257-nn-test #3b done"))) (defun infinite-loop-on-lp-1156426-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- while mvi.t2 <= T: # calculate a spline for the kinematic inputs #fname = 'data/monte_1000hz.mat' ")) (py-bug-tests-intern 'infinite-loop-on-lp-1156426-base arg teststring))) (defun infinite-loop-on-lp-1156426-base () (let ((py-indent-comments t)) (goto-char 68) (assert (eq 4 (py-compute-indentation)) nil "infinite-loop-on-lp-1156426-test #1 failed")) (goto-char (point-max)) (assert (eq 0 (py-compute-indentation)) nil "infinite-loop-on-lp-1156426-test #2 failed")) (defun fill-paragraph-in-docstring-lp-1161232-test (&optional arg) (interactive "p") (let ((teststring "def foo (): \"\"\"Returns a rewritten path. Assuming that ``cr`` is a :class:`ContextRewriter` instance, that the rewriter maps the path ``views/`` to asdf asdf asdf asdf asdf asdf asdf asdf asdfasdf asdfasdf asdf asdf \"\"\" pass ")) (py-bug-tests-intern 'fill-paragraph-in-docstring-lp-1161232-base arg teststring))) (defun fill-paragraph-in-docstring-lp-1161232-base () (goto-char 94) (fill-paragraph t) (sit-for 0.1) (assert (eq (point) 51) nil "fill-paragraph-in-docstring-lp-1161232-test #1 failed") (goto-char 249) (sit-for 1) (message "%s" (buffer-substring-no-properties (line-beginning-position) (line-end-position) )) (assert (looking-at " pass") nil "fill-paragraph-in-docstring-lp-1161232-test #2 failed") ) (defun wfmc-lp-1160022-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # which-func-misses-class-lp-1160022 class kugel(object): zeit = time.strftime('%Y%m%d--%H-%M-%S') # zeit = time.strftime('%Y-%m-%d--%H-%M-%S') spiel = [] def pylauf(self): \"\"\"Eine Doku fuer pylauf\"\"\" pass a = \"asdf\" ")) (py-bug-tests-intern 'wfmc-lp-1160022-base arg teststring))) (defun wfmc-lp-1160022-base () (imenu-add-menubar-index) (goto-char 251) (which-func-mode) (company-mode -1) (yas/minor-mode -1) (hs-minor-mode -1) (undo-tree-mode -1) (abbrev-mode -1) ;; (car (nth 2 (car '((#1="class kugel" (#1# . 85) ("kugel.pylauf" . 224)))))) (assert (string= "kugel.pylauf" (car (nth 2 (eval '(car imenu--index-alist))))) nil "wfmc-lp-1160022-test failed")) (defun tab-results-in-never-ending-process-lp-1163423-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -\*- coding: utf-8 -\*- class asdf(object): zeit = time.strftime('%Y%m%d--%H-%M-%S') def utf8_exists(filename): return os.path.exists(filename.encode('utf-8')) ")) (py-bug-tests-intern 'tab-results-in-never-ending-process-lp-1163423-base arg teststring))) (defun tab-results-in-never-ending-process-lp-1163423-base () (let ((py-tab-indents-region-p t) (py-tab-indent t)) (goto-char 216) (push-mark) (goto-char 122) (call-interactively 'py-indent-line) (sit-for 0.1) ;; (message "point: %s" (point)) (assert (bolp) nil "tab-results-in-never-ending-process-lp-1163423-test failed"))) (defun loops-on-if-else-lp-328777-test (&optional arg) (interactive "p") (let ((teststring "x = (if 1: 2 else: 3) ")) (py-bug-tests-intern 'loops-on-if-else-lp-328777-base arg teststring))) (defun loops-on-if-else-lp-328777-base () (goto-char 14) (assert (eq 5 (py-compute-indentation)) nil "loops-on-if-else-lp-328777-test failed")) (defun nested-dictionaries-indent-again-lp:1174174-test (&optional arg) "With ARG greater 1 keep test buffer open. If no `load-branch-function' is specified, make sure the appropriate branch is loaded. Otherwise default python-mode will be checked. " (interactive "p") (let ((teststring " d = {'a':{'b':3, 'c':4 } } d = {'a':{ 'b':3, 'c':4 } } ")) 1174174 (py-bug-tests-intern 'nested-dictionaries-indent-again-lp:1174174 arg teststring))) (defun nested-dictionaries-indent-again-lp:1174174 () (let ((py-indent-honors-multiline-listing t)) (goto-char 19) (assert (eq 10 (py-compute-indentation)) nil "nested-dictionaries-indent-again-lp:1174174-test #1 failed") (goto-char 35) (assert (eq 10 (py-compute-indentation)) nil "nested-dictionaries-indent-again-lp:1174174-test #2 failed") (goto-char 47) (assert (eq 5 (py-compute-indentation)) nil "nested-dictionaries-indent-again-lp:1174174-test #3 failed") ;; (goto-char 57) ;; (assert (eq 4 (py-compute-indentation)) nil "nested-dictionaries-indent-again-lp:1174174-test #4 failed") ;; (goto-char 63) ;; (assert (eq 0 (py-compute-indentation)) nil "nested-dictionaries-indent-again-lp:1174174-test #5 failed") )) (defun TAB-leaves-point-in-the-wrong-lp-1178453-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # r1225 import tarfile src = tarfile.open('src.tgz', 'r:gz') dst = tarfile.open('dst.tgz', 'w:gz') for name in src.getnames(): print('name:', name) info = src.getmember(name) fp = src.extractfile(name) dst.addfile(info, fp) src.close() dst.close() # Put point at the end of the `dst.addfile` line and hit return. Point is # properly left on the next line right under the first 'd'. Now hit TAB. Point is # correctly left at the beginning of the line. Hit TAB one more time. # # Now, while 4 spaces have been added to the beginning of the line, point is left # at the beginning of the line instead of at the end of the just inserted # whitespace. Point should be at column 4. ")) (py-bug-tests-intern 'TAB-leaves-point-in-the-wrong-lp-1178453-base arg teststring))) (defun TAB-leaves-point-in-the-wrong-lp-1178453-base () (goto-char 292) (py-indent-line) (assert (eq 4 (current-column)) nil "TAB-leaves-point-in-the-wrong-lp-1178453-test failed")) (defun Bogus-whitespace-left-in-docstring-after-wrapping-lp-1178455-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # r1225 def foo(): \"\"\"Line one of a comment. A paragraph of comments. These should get wrapped correctly. These should get wrapped correctly. These should get wrapped correctly. They do, but whooboy! Last line of comment. \"\"\" # Put point somewhere in the middle paragraph and hit M-q (fill-paragraph). # # The paragraph gets properly wrapped, but the blank line before it and after it # get additional 4 bogus spaces at the beginning of their lines. ")) (py-bug-tests-intern 'Bogus-whitespace-left-in-docstring-after-wrapping-lp-1178455-base arg teststring))) (defun Bogus-whitespace-left-in-docstring-after-wrapping-lp-1178455-base () (goto-char 97) (message "paragraph-start: %s" paragraph-start) (message "Fehler? %s" (buffer-substring-no-properties (line-beginning-position) (line-end-position))) (fill-paragraph t) (sit-for 0.1) (message "Fehler? %s" (buffer-substring-no-properties (line-beginning-position) (line-end-position))) (forward-line 1) (sit-for 1) (assert (and (bolp) (eolp)) nil "Bogus-whitespace-left-in-docstring-after-wrapping-lp-1178455-test #1 failed") (goto-char 140) (fill-paragraph) (end-of-line) (assert (eq 70 (current-column)) nil "Bogus-whitespace-left-in-docstring-after-wrapping-lp-1178455-test #2 failed") (forward-line 3) (assert (and (bolp) (eolp)) nil "Bogus-whitespace-left-in-docstring-after-wrapping-lp-1178455-test #3 failed") (goto-char 273) (fill-paragraph) (end-of-line) (assert (eq 25 (current-column)) nil "Bogus-whitespace-left-in-docstring-after-wrapping-lp-1178455-test #4 failed")) (defun trouble-with-py-fill-paragraph-lp-1180653-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -\*- coding: utf-8 -\*- # I'm trying to refill the following docstring: class BlockCache(object): def remove(self, inode, start_no, end_no=None): \"\"\"Remove blocks for `inode` If `end_no` is not specified, remove just the `start_no` block. Otherwise removes all blocks from `start_no` to, but not including, `end_no`. Note: if `get` and `remove` are called concurrently, then it is possible that a block that has been requested with `get` and passed to `remove` for deletion will not be deleted. \"\"\" log.debug('remove(inode=%d, start=%d, end=%s): start', inode, start_no, end_no) if end_no is None: end_no = start_no + 1 # When I place the cursor on e.g. the first line (\"If `end_no`...) # and execute M-x py-fill-paragraph, the buffer is scrolled such that # this becomes the first visible line, and the indentation is # removed. No filling occurs at all. # # Am I doing something wrong? py-docstring-style is set to # pep-256-nn. ")) (py-bug-tests-intern 'trouble-with-py-fill-paragraph-lp-1180653-base arg teststring))) (defun trouble-with-py-fill-paragraph-lp-1180653-base () (goto-char 214) (assert nil "trouble-with-py-fill-paragraph-lp-1180653-test failed")) (defun py-shell-in-a-shell-buffer-doesnt-work-lp:1182696-test (&optional arg) (interactive "p") (let ((teststring "")) (py-bug-tests-intern 'py-shell-in-a-shell-buffer-doesnt-work-lp:1182696-base arg teststring))) (defun py-shell-in-a-shell-buffer-doesnt-work-lp:1182696-base () (let (py-split-windows-on-execute-p) (shell) (delete-other-windows) ;; (set-buffer (py-shell)) (py-shell) ;; (assert (string= "*shell*" (buffer-name)) nil "py-shell-in-a-shell-buffer-doesnt-work-lp:1182696-test #1 failed") (assert (string= "*shell*" (buffer-name)) nil "py-shell-in-a-shell-buffer-doesnt-work-lp:1182696-test #1 failed") (let ((py-switch-buffers-on-execute-p t)) (py-shell)) (sit-for 0.1) (assert (string= "*Python*" (buffer-name)) nil "py-shell-in-a-shell-buffer-doesnt-work-lp:1182696-test #2 failed"))) (defun from-within-py-shell-call-another-instance-lp-1169687-test (&optional arg) (interactive "p") (let ((teststring "")) (py-bug-tests-intern 'from-within-py-shell-call-another-instance-lp-1169687-base arg teststring))) (defun from-within-py-shell-call-another-instance-lp-1169687-base () (let ((py-split-windows-on-execute-p t) (py-switch-buffers-on-execute-p t)) (py-shell) (sit-for 0.1) (py-shell nil nil nil t nil nil nil t) (assert (string-match "\\*Python\\*\<[0-9]+\>" (buffer-name)) nil "from-within-py-shell-call-another-instance-lp-1169687-test failed"))) (defun multibuffer-mayhem-lp-1162q272-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def do_something(): wrong_indent ")) (py-bug-tests-intern 'multibuffer-mayhem-lp-1162272-base arg teststring))) (defun multibuffer-mayhem-lp-1162272-base () (assert (py-execute-buffer) nil "multibuffer-mayhem-lp-1162272-test failed")) (defun incorrect-indentation-with-tertiary-lp-1189604-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # Put point right after the 'c' on the last line and hit return. You # will be indented to column 8 when you should be indented to column # 13. def foo(c): a = 1 other = ('yes' if a == c ")) (py-bug-tests-intern 'incorrect-indentation-with-tertiary-lp-1189604-base arg teststring))) (defun incorrect-indentation-with-tertiary-lp-1189604-base () (assert (eq 13 (py-compute-indentation)) nil "incorrect-indentation-with-tertiary-lp-1189604-test failed")) (defun indentation-doesnt-honor-comment-on-preceding-lp-1190288-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # Put point at the end of the comment line and hit return. The next # line indents to column 8 when it should indent to column 4. def foo(): with bar() as baz: baz.frobnicate() # This is a comment ")) (py-bug-tests-intern 'indentation-doesnt-honor-comment-on-preceding-lp-1190288-base arg teststring))) (defun indentation-doesnt-honor-comment-on-preceding-lp-1190288-base () (assert (eq 4 (py-compute-indentation)) nil "indentation-doesnt-honor-comment-on-preceding-lp-1190288-test failed")) (defun fill-paragraph-corrupts-the-lp-1162912-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # Put point on the whitespace at the beginning of the line that # starts with 'The' inside the docstring and hit M-q. You end up with # the following: # # -----snip snip----- # def foo(): # \"\"\"This is a function. # The function does some stuff that is very interesting. It's hard to # describe, but you will certainly love it when you try it. It's # one # of the best functions ever written, not just by me, but by all # of # mankind. Well, that may be overstating it, but it is a wondeful # function. \"\"\" def foo(): \"\"\"This is a function. The function does some stuff that is very interesting. It's hard to describe, but you will certainly love it when you try it. It's one of the best functions ever written, not just by me, but by all of mankind. Well, that may be overstating it, but it is a wondeful function. \"\"\" ")) (py-bug-tests-intern 'fill-paragraph-corrupts-the-lp-1162912-base arg teststring))) (defun fill-paragraph-corrupts-the-lp-1162912-base () (goto-char 616) (fill-paragraph) (forward-line 1) (assert (eq 4 (current-indentation)) nil "fill-paragraph-corrupts-the-lp-1162912-test failed")) (defun return-key-is-broken-lp-1191158-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # A recent change broke the return key. # # Put point at the end of the last line and hit return. You correctly end # up on a new line at column 8. But hit return again and point doesn't # move! It should insert a blank line and leave you at column 8 on a new # line. def foo(): with open('foo') as fp: do_something()")) (py-bug-tests-intern 'return-key-is-broken-lp-1191158-base arg teststring))) (defun return-key-is-broken-lp-1191158-base () (goto-char 378) (py-newline-and-indent) (py-newline-and-indent) (message "%s" (point) ) ;; (sit-for 0.1) (assert (and (eq 14 (count-lines (point-min) (point))) (eq 8 (current-column))) nil "return-key-is-broken-lp-1191158-test failed")) (defun indent-refused-lp-1191133-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def(foo): ")) (py-bug-tests-intern 'indent-refused-lp-1191133-base arg teststring))) (defun indent-refused-lp-1191133-base () (message "%s" (current-buffer)) ;; (switch-to-buffer (current-buffer)) (assert (eq 4 (py-compute-indentation)) nil "indent-refused-lp-1191133-test failed")) (defun Parens-span-multiple-lines-lp-1191225-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- # On Jun 14, 2013, at 05:04 PM, Felipe Reyes wrote: def foo(): if (foo && baz): bar() # >> This example raises a pep8 warning[0], # >> I've been dealing with it and manually # >> adding another indentation level to not leave 'baz' aligned with 'baz # ()' # >> def foo(): if (foo && baz): bar() ")) (py-bug-tests-intern 'Parens-span-multiple-lines-lp-1191225-base arg teststring))) (defun Parens-span-multiple-lines-lp-1191225-base () (let (py-indent-paren-spanned-multilines-p) (goto-char 126) (assert (eq 8 (py-compute-indentation)) nil "Parens-span-multiple-lines-lp-1191225-test #1 failed") (goto-char 354) (setq py-indent-paren-spanned-multilines-p t) (assert (eq 12 (py-compute-indentation)) nil "Parens-span-multiple-lines-lp-1191225-test #2 failed"))) (defun Bogus-dedent-when-typing-colon-in-dictionary-literal-lp-1197171-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def foo(): bar('thing', {'another' # Put point at the end of the last line and hit colon, as you would to # separate the key from the value. The last line will incorrectly dedent # to column 4. Indentation should not change. ")) (py-bug-tests-intern 'Bogus-dedent-when-typing-colon-in-dictionary-literal-lp-1197171-base arg teststring))) (defun Bogus-dedent-when-typing-colon-in-dictionary-literal-lp-1197171-base () (goto-char 94) (assert (eq 8 (py-compute-indentation)) nil "Bogus-dedent-when-typing-colon-in-dictionary-literal-lp-1197171-test failed")) (defun Non-indenting-colon-lp-1207405-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -\*- coding: utf-8 -\*- def foo(bar): for i in range(10) print(i) tied = bar[ # Put point on the last line, after the open bracket. Hit colon (as if you # were going to type bar[:]). The line gets incorrectly indented to under # the `print`. # # There may be other situations where colons should not re-indent the # line. ")) (py-bug-tests-intern 'Non-indenting-colon-lp-1207405-base arg teststring))) (defun Non-indenting-colon-lp-1207405-base () (goto-char 81) (py-electric-colon t) (message "(current-indentation): %s" (current-indentation)) (assert (eq 4 (current-indentation)) nil "Non-indenting-colon-lp-1207405-test #1 failed") (goto-char 118) (ignore-errors (py-electric-colon 1)) (assert (eq 4 (current-indentation)) nil "Non-indenting-colon-lp-1207405-test #2 failed")) ;; (defun missing-py-variable-name-face-lp-1215791-test (&optional arg) ;; (interactive "p") ;; (let ((teststring "a = b = c = 5 ;; a, b, c = (1, 2, 3) ;; # http://lists.gnu.org/archive/html/bug-gnu-emacs/2013-08/msg00740. ;; # html ;; # ;; # The symptom is that in the code: ;; ;; # no s'ha trobat cap oferta, l'alumne queda sense assignar ;; # (alumne.assignacio == None) ;; self._logger.info( ;; u\"no assigna '%s'\", ;; alumne.id ;; ) ;; alumne.assignacio = None ;; ;; # 'alumne.assignacio' isn't properly colorized after visiting the ;; # file. ;; # ;; # In order to reproduce this behaviour: ;; # ;; # emacs -Q /tmp/bugtest.py ;; # ;; # type: ;; ;; # a = ;; variable = \"value\" ;; a = b = c = 5 ;; a, b, c = (1, 2, 3) ;; ")) ;; (py-bug-tests-intern 'missing-py-variable-name-face-lp-1215791-base arg teststring))) (defun missing-py-variable-name-face-lp-1215791-test (&optional arg) (interactive "p") (let ((teststring "# a == variable = \"value\" a = b = c = 5 a, b, c = (1, 2, 3) # http://lists.gnu.org/archive/html/bug-gnu-emacs/2013-08/msg00740. # html # # The symptom is that in the code: # no s'ha trobat cap oferta, l'alumne queda sense assignar # (alumne.assignacio == None) self._logger.info( u\"no assigna '%s'\", alumne.id ) alumne.assignacio = None # 'alumne.assignacio' isn't properly colorized after visiting the # file. # # In order to reproduce this behaviour: ")) (py-bug-tests-intern 'missing-py-variable-name-face-lp-1215791-base arg teststring))) (defun missing-py-variable-name-face-lp-1215791-base () ;; (goto-char 6) (goto-char 27) (sit-for 0.1) (assert (eq (get-char-property (point) 'face) 'py-variable-name-face) nil "missing-py-variable-name-face-lp-1215791-test #1 failed") (goto-char 44) (assert (eq (get-char-property (point) 'face) 'py-variable-name-face) nil "missing-py-variable-name-face-lp-1215791-test #2 failed") (goto-char 360) (assert (eq (get-char-property (point) 'face) 'py-variable-name-face) nil "missing-py-variable-name-face-lp-1215791-test #3 failed") ) (defun C-c-C-c-lp:1221310-and-store-result-test (&optional arg) (interactive "p") (let ((teststring "print(\"C-c-C-c-lp:1221310-and-store-result-test\") ")) (py-bug-tests-intern 'C-c-C-c-lp:1221310-and-store-result-base arg teststring))) (defun C-c-C-c-lp:1221310-and-store-result-base () (write-file (concat py-temp-directory "/lp-1221310.py")) (assert (let ((py-store-result-p t)) (sit-for 0.1) (string= "C-c-C-c-lp:1221310-and-store-result-test" (py-execute-base))) nil "C-c-C-c-lp:1221310-and-store-result-test failed")) (defun py-empty-line-closes-p-lp-1235324-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python if True: if True: print(\"This line is part of the inner statement\") print(\"This line is NOT part of the inner statement\") \") ")) (py-bug-tests-intern 'py-empty-line-closes-p-lp-1235324-base arg teststring))) (defun py-empty-line-closes-p-lp-1235324-base () (goto-char (point-min)) (let (py-empty-line-closes-p) (search-forward "print" nil t 2) (assert (eq 8 (py-compute-indentation)) nil "py-empty-line-closes-p-lp-1235324-test #1 failed")) (let ((py-empty-line-closes-p t)) (assert (eq 4 (py-compute-indentation)) nil "py-empty-line-closes-p-lp-1235324-test #2 failed"))) (defun py-docstring-style-pep-257-nn-closing-quotes-lp-1241147-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- class Class(object): \"\"\"A long long long long long long long long long long long long long long long long long long line.\"\"\" ")) (py-bug-tests-intern 'py-docstring-style-pep-257-nn-closing-quotes-lp-1241147-base arg teststring))) (defun py-docstring-style-pep-257-nn-closing-quotes-lp-1241147-base () (let ((py-docstring-style 'pep-257-nn)) (forward-line -1) (fill-paragraph) (sit-for 0.1) (assert (search-forward " \"\"\"") nil "py-docstring-style-pep-257-nn-closing-quotes-lp-1241147-test failed"))) (defun indentation-after-parentized-assignment-lp-1243012-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python def main(): (a, b) = (1, 2) ")) (py-bug-tests-intern 'indentation-after-parentized-assignment-lp-1243012-base arg teststring))) (defun indentation-after-parentized-assignment-lp-1243012-base () (goto-char 40) (assert nil "indentation-after-parentized-assignment-lp-1243012-test failed")) (defun py-execute-buffer-ipython-lp-1252643-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python print(1234) ")) (py-bug-tests-intern 'py-execute-buffer-ipython-lp-1252643-base arg teststring))) (defun py-execute-buffer-ipython-lp-1252643-base () (let ((py-switch-buffers-on-execute-p t)) (py-execute-buffer-ipython) (sit-for 1) (assert (string= "*Ipython*" (buffer-name (current-buffer))) nil "py-execute-buffer-ipython-lp-1252643-test failed"))) (defun Execute-region_statement-runs-full-file-lp-1269855-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def s (n): sum=0 for i in range(1,n+1): sum += i #print i return sum print s(10) print s(100) print s(500) ")) (py-bug-tests-intern 'Execute-region_statement-runs-full-file-lp-1269855-base arg teststring))) (defun Execute-region_statement-runs-full-file-lp-1269855-base () (py-execute-buffer) (goto-char 149) (py-execute-statement) (assert nil "Execute-region_statement-runs-full-file-lp-1269855-test failed")) (defun abbrevs-changed-t-when-starting-lp-1270631-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- ")) (py-bug-tests-intern 'abbrevs-changed-t-when-starting-lp-1270631-base arg teststring))) (defun abbrevs-changed-t-when-starting-lp-1270631-base () (assert (eq nil abbrevs-changed) nil "abbrevs-changed-t-when-starting-lp-1270631-test failed")) (provide 'py-bug-numbered-tests) ;;; py-bug-numbered-tests.el ends here python-mode.el-6.1.3/test/python-mode-ert-tests.el0000644000000000000000000004377312271450574022042 0ustar rootroot00000000000000;;; python-mode-ert-tests.el --- Tests, some adapted from python.el ;; Copyright (C) 2013 Free Software Foundation, Inc. ;; Copyright (C) 2014 Andreas Roehler, ;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs. If not, see . ;;; Commentary: ;;; Code: ;; (require 'ert) (defmacro py-tests-with-temp-buffer (contents &rest body) "Create a `python-mode' enabled temp buffer with CONTENTS. BODY is code to be executed within the temp buffer. Point is always located at the beginning of buffer." (declare (indent 1) (debug t)) `(with-temp-buffer (let (hs-minor-mode) (python-mode) (insert ,contents) (message "ERT %s" (point)) (goto-char (point-min)) ,@body))) (defun py-tests-go-to (string) "Move point at beginning of STRING in the current test. " (and (eq (point) (point-max))(goto-char (point-min))) (search-forward string nil t 1)) (ert-deftest electric-kill-backward-test1 () (let ((py-electric-kill-backward-p t)) (with-temp-buffer (insert "mystring[0:1]") (py-electric-backspace 1) (should (eq ?\] (char-after)))))) (ert-deftest electric-kill-backward-test2 () (let ((py-electric-kill-backward-p t)) (with-temp-buffer (insert "mystring(\"asdf\")") (py-electric-backspace 1) (should (eq ?\) (char-after))) ))) (ert-deftest electric-kill-backward-test3 () (let ((py-electric-kill-backward-p t)) (with-temp-buffer (insert "mystring{0 . 1}") (py-electric-backspace 1) (should (eq ?\} (char-after))) ))) (ert-deftest py-indent-dedenters-1 () "Check all dedenters." (py-tests-with-temp-buffer " def foo(a, b, c): if a: print (a) elif b: print (b) else: try: print (c.pop()) except (IndexError, AttributeError): print (c) finally: print ('nor a, nor b are true') " (py-tests-go-to "if a:") (should (= (py-compute-indentation) 4)) (py-tests-go-to "print (a)") (should (= (py-compute-indentation) 8)) (py-tests-go-to "elif b:") (should (= (py-compute-indentation) 4)) (py-tests-go-to "print (b)") (should (= (py-compute-indentation) 8)) (py-tests-go-to "else:") (should (= (py-compute-indentation) 4)) (py-tests-go-to "try:") (should (= (py-compute-indentation) 8)) (py-tests-go-to "print (c.pop())") (should (= (py-compute-indentation) 12)) (py-tests-go-to "except (IndexError, AttributeError):") (should (= (py-compute-indentation) 8)) (py-tests-go-to "print (c)") (should (= (py-compute-indentation) 12)) (py-tests-go-to "finally:") (should (= (py-compute-indentation) 8)) (py-tests-go-to "print ('nor a, nor b are true')") (should (= (py-compute-indentation) 12)))) (ert-deftest py-indent-after-backslash-lp-852052-1 () "The most common case." (py-tests-with-temp-buffer " from foo.bar.baz import something, something_1 \\ something_2 something_3, \\ something_4, something_5 " (py-tests-go-to "from foo.bar.baz import something, something_1") (should (= (py-compute-indentation) 0)) (py-tests-go-to "something_2 something_3,") (should (= (py-compute-indentation) 5)) (py-tests-go-to "something_4, something_5") (should (= (py-compute-indentation) 5)))) (ert-deftest py-indent-closing () "" (py-tests-with-temp-buffer " my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', ) " (goto-char 40) (should (eq 4 (py-compute-indentation))) (goto-char 129) (should (eq 4 (py-compute-indentation))))) (ert-deftest py-moves () (py-tests-with-temp-buffer "class OrderedDict1(dict): \"\"\" This implementation of a dictionary keeps track of the order in which keys were inserted. \"\"\" def __init__(self, d={}): self._keys = d.keys() dict.__init__(self, d) def f(): \"\"\" class for in 'for in while with blah' \"\"\" if a: ar_atpt_python_list_roh = ([ 'python-expression', # def ar_thingatpt_write_lists (&optional datei): 'python-partial-expression', 'python-statement', ]) elif b: pass else b: pass ''' asdf' asdf asdf asdf asdf asdfasdf asdfasdf a asdf asdf asdf asdfasdfa asdf asdf asdf asdf asdf' asdf asdf asdf asdf asdfasdf asdfasdf a asdf asdf asdf asdfasdfa asdf asdf asdf asdf ''' " (switch-to-buffer (current-buffer)) ;; (sit-for 1) (message "comment-start: %s" comment-start) (goto-char 592) ;; (sit-for 1) (should (eq 561 (py-up-clause-bol))) (message "%s" "py-up-clause-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 317 (py-up-block-or-clause-bol)) ) (message "%s" "py-up-block-or-clause-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 234 (py-up-def-bol))) (message "%s" "py-up-def-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 1 (py-up-class-bol))) (message "%s" "py-up-class-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 234 (py-up-def-or-class-bol))) (message "%s" "py-up-def-or-class-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 317 (py-up-block-bol))) (message "%s" "py-up-block-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 317 (py-up-minor-block-bol))) (message "%s" "py-up-minor-block-bol-test of `py-moves-test' done") (goto-char 592) ;; (sit-for 1) (should (eq 325 (py-up-block))) (message "%s" "py-up-block-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 325 (py-up-minor-block))) (message "%s" "py-up-minor-block-test of `py-moves-test' done") (goto-char 592) ;; (sit-for 1) (should (eq 569 (py-up-clause))) (message "%s" "py-up-clause-test of `py-moves-test' done") (goto-char 592) ;; (sit-for 1) (should (eq 569 (py-up-block-or-clause))) (message "%s" "py-up-block-or-clause-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 238 (py-up-def))) (message "%s" "py-up-def-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 1 (py-up-class))) (message "%s" "py-up-class-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 238 (py-up-def-or-class))) (message "%s" "py-up-def-or-class-test of `py-moves-test' done") (goto-char 264) ;; (sit-for 1) (should (eq 317 (py-down-block-bol))) (message "%s" "py-down-block-bol-test of `py-moves-test' done") (goto-char 561) ;; (sit-for 1) (should (eq 594 (py-down-clause-bol))) (message "%s" "py-down-clause-bol-test of `py-moves-test' done") (goto-char 264) ;; (sit-for 1) (should (eq 317 (py-down-block-or-clause-bol))) (message "%s" "py-down-block-or-clause-bol-test of `py-moves-test' done") (goto-char (point-min)) (should (eq 142 (py-down-def-bol))) (message "%s" "py-down-def-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (not (py-down-class-bol))) (message "%s" "py-down-class-bol-test of `py-moves-test' done") (goto-char (point-min)) (should (eq 142 (py-down-def-or-class-bol))) (message "%s" "py-down-def-or-class-bol-test of `py-moves-test' done") (goto-char 264) ;; (sit-for 1) (should (eq 325 (py-down-block))) (message "%s" "py-down-block-test of `py-moves-test' done") (goto-char 264) ;; (sit-for 1) (should (eq 317 (py-down-block-bol))) (message "%s" "py-down-block-bol-test of `py-moves-test' done") (goto-char 264) ;; (sit-for 1) (should (eq 325 (py-down-minor-block))) (message "%s" "py-down-minor-block-test of `py-moves-test' done") (goto-char 264) ;; (sit-for 1) (should (eq 317 (py-down-minor-block-bol))) (message "%s" "py-down-minor-block-bol-test of `py-moves-test' done") (goto-char 569) ;; (sit-for 1) (should (eq 602 (py-down-clause))) (message "%s" "py-down-clause-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 569 (py-down-block-or-clause))) (message "%s" "py-down-block-or-clause-test of `py-moves-test' done") (goto-char (point-min)) (should (eq 146 (py-down-def))) (message "%s" "py-down-def-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (not (py-down-class))) (message "%s" "py-down-class-test of `py-moves-test' done") (goto-char (point-min)) (should (eq 146 (py-down-def-or-class))) (message "%s" "py-down-def-or-class-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 332 (py-beginning-of-statement-bol))) (message "%s" "py-beginning-of-statement-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 317 (py-beginning-of-block-bol))) (message "%s" "py-beginning-of-block-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 317 (py-beginning-of-clause-bol))) (message "%s" "py-beginning-of-clause-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 317 (py-beginning-of-block-or-clause-bol))) (message "%s" "py-beginning-of-block-or-clause-bol-test of `py-moves-test' done") (should (eq 1 (py-beginning-of-class-bol))) (message "%s" "py-beginning-of-class-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 234 (py-beginning-of-def-or-class-bol))) (message "%s" "py-beginning-of-def-or-class-bol-test of `py-moves-test' done") (message "%s" "py-end-of-block-bol-test of `py-moves-test' done") (goto-char 576) ;; (sit-for 1) (should (eq 594 (py-end-of-clause-bol))) (message "%s" "py-end-of-clause-bol-test of `py-moves-test' done") (goto-char 576) ;; (sit-for 1) (should (eq 594 (py-end-of-block-or-clause-bol))) (message "%s" "py-end-of-block-or-clause-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 627 (py-end-of-def-bol))) (message "%s" "py-end-of-def-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 627 (py-end-of-class-bol))) (message "%s" "py-end-of-class-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 627 (py-end-of-def-or-class-bol))) (message "%s" "py-end-of-def-or-class-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 561 (py-end-of-statement-bol))) (message "%s" "py-end-of-statement-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 1) (should (eq 234 (py-beginning-of-def-bol))) (message "%s" "py-beginning-of-def-bol-test of `py-moves-test' done") )) (ert-deftest py-indent-tabs-mode-test () (py-tests-with-temp-buffer "class OrderedDict1(dict):" (end-of-line) (let ((indent-tabs-mode t)) (py-newline-and-indent) (should (looking-back "^\t"))))) (ert-deftest py-no-indent-tabs-mode-test () (py-tests-with-temp-buffer "class OrderedDict1(dict):" (end-of-line) (let ((indent-tabs-mode)) (py-newline-and-indent) (should (looking-back "^ "))))) (ert-deftest py-pyflakespep-command-test () (py-tests-with-temp-buffer "" (file-readable-p py-pyflakespep8-command))) (ert-deftest Bogus-dedent-when-typing-colon-in-dictionary-literal-lp-1197171 () (py-tests-with-temp-buffer "#! /usr/bin/env python # -*- coding: utf-8 -*- # Put point at the end of the last line and hit colon, as you would to # separate the key from the value. The last line will incorrectly dedent # to column 4. Indentation should not change. def foo(): bar('thing', {'another'" (goto-char (point-max)) (should (eq 8 (py-compute-indentation))))) ;; (ert-deftest exception-buffer-and-line () ;; (py-tests-with-temp-buffer ;; "print(4+5d)" ;; ;; error should report its just a buffer, not a file ;; (should (string-match "SyntaxError: invalid syntax" (py-execute-statement))))) (ert-deftest pep-arglist-indent () (py-tests-with-temp-buffer "# Aligned with opening delimiter foo = long_function_name(var_one, var_two, var_three, var_four) # More indentation included to distinguish this from the rest. def long_function_name( var_one, var_two, var_three, var_four): print(var_one) " (search-forward "var_three") (should (eq 25 (py-compute-indentation))) (search-forward "var_three") (should (eq 8 (py-compute-indentation))) )) (ert-deftest close-at-start-column () (py-tests-with-temp-buffer "# boolean `py-closing-list-dedents-bos', # Current behavior matches default nil my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', ) # When non-nil, it will be lined up under the first character of the line that starts the multi-line construct, as in: my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', ) # Examples see PEP8 asdf = { 'a':{ 'b':3, 'c':4 } } data = { 'key': { 'objlist': [ { 'pk': 1, 'name': 'first', }, { 'pk': 2, 'name': 'second', } ] } } " (let (py-closing-list-dedents-bos) (switch-to-buffer (current-buffer)) (search-forward "]") (should (eq 4 (py-compute-indentation))) (search-forward ")") (should (eq 4 (py-compute-indentation))) (setq py-closing-list-dedents-bos t) (search-forward "]") (should (eq 0 (py-compute-indentation))) (search-forward ")") (should (eq 0 (py-compute-indentation))) ;; dicts (search-forward "}") (should (eq 4 (py-compute-indentation))) (search-forward "}") (should (eq 0 (py-compute-indentation))) (search-forward "}") (should (eq 12 (py-compute-indentation))) (search-forward "]") (should (eq 8 (py-compute-indentation))) (search-forward "}") (should (eq 4 (py-compute-indentation))) (search-forward "}") (should (eq 0 (py-compute-indentation))) ))) (ert-deftest top-level () (py-tests-with-temp-buffer "klauf = kugel() with file(\"roulette-\" + zeit + \".csv\", 'w') as datei: for i in range(anzahl): klauf.pylauf() datei.write(str(spiel[i]) + \"\\n\") " (message "%s" (point)) (switch-to-buffer (current-buffer)) (should (eq 16 (py-end-of-top-level))) (should (eq 168 (py-end-of-top-level))) (should (eq 18 (py-beginning-of-top-level))) (should (eq 1 (py-beginning-of-top-level))) (should (eq 1 (py-beginning-of-top-level-p))))) (ert-deftest position-tests () (interactive) (py-tests-with-temp-buffer "class kugel(object): zeit = time.strftime('%Y%m%d--%H-%M-%S') def pylauf(self): \"\"\"Eine Doku fuer pylauf\"\"\" ausgabe = [\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \", \" \"] if treffer in gruen: # print \"0, Gruen\" elif treffer in schwarz: # print \"%i, Schwarz\" % (treffer) ausgabe[1] = treffer else: # print \"%i, manque\" % (treffer) ausgabe[7] = treffer " (switch-to-buffer (current-buffer)) (search-forward "else:") (forward-char -1) (should (eq 1 (py-beginning-of-top-level-position))) (should (eq 445 (py-end-of-top-level-position))) (should (eq 362 (py-beginning-of-statement-position))) (should (eq 367 (py-end-of-statement-position))) (should (eq 367 (py-end-of-line-position))) (should (eq 354 (py-beginning-of-line-position))) (should (eq 1 (py-beginning-of-paragraph-position))) (should (eq 446 (py-end-of-paragraph-position))) (should (eq 190 (py-beginning-of-block-position))) (should (eq 445 (py-end-of-block-position))) (should (eq 190 (py-beginning-of-minor-block-position))) (should (eq 445 (py-end-of-minor-block-position))) (should (eq 362 (py-beginning-of-clause-position))) (should (eq 445 (py-end-of-clause-position))) (should (eq 362 (py-beginning-of-block-or-clause-position))) (should (eq 445 (py-end-of-block-or-clause-position))) (should (eq 71 (py-beginning-of-def-position))) (should (eq 445 (py-end-of-def-position))) (should (eq 1 (py-beginning-of-class-position))) (should (eq 445 (py-end-of-class-position))) (should (eq 71 (py-beginning-of-def-or-class-position))) (should (eq 445 (py-end-of-def-or-class-position))) (search-forward "#") (should (eq 380 (py-beginning-of-comment-position))) (should (eq 412 (py-end-of-comment-position))))) (ert-deftest py-copy-statement-test () (interactive) (py-tests-with-temp-buffer "from foo.bar.baz import something " (should (and (not (py-copy-statement))(string-match "from foo.bar.baz import something" (car kill-ring)))))) (ert-deftest execute-runs-full-file-lp-1269855 () (interactive) (py-tests-with-temp-buffer ;; (switch-to-buffer (buffer-name (current-buffer))) "a = 0 a += 8 a += 1 print(a) eval(a) " (py-execute-buffer) (goto-char 14) (py-execute-statement) (goto-char 22) (py-execute-statement) (goto-char 31) (py-execute-statement))) (ert-deftest py-abbrevs-changed-lp-1270631 () (interactive) (with-temp-buffer (insert "foo") (emacs-lisp-mode) (define-abbrev lisp-mode-abbrev-table "foo" "foo") (should abbrevs-changed) (python-mode) (should abbrevs-changed))) (provide 'python-mode-ert-tests) python-mode.el-6.1.3/test/python-mode-test.el0000644000000000000000000030742612271450574021065 0ustar rootroot00000000000000;;; python-mode-test.el --- tests for Emacs python-mode.el ;; Copyright (C) 2011 Andreas Roehler ;; Author: Andreas Roehler ;; Keywords: lisp, languages ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; A couple of test cases for python-mode.el ;;; Code: (require 'py-bug-numbered-tests) (defvar py-variables (list 'py-version 'python-mode-modeline-display 'py-indent-offset 'pdb-path 'py-verbose-p 'py-load-pymacs-p 'py-smart-operator-mode-p 'py-sexp-function 'py-autopair-mode 'py-no-completion-calls-dabbrev-expand-p 'py-indent-no-completion-p 'py-fontify-shell-buffer-p 'py-modeline-display-full-path-p 'py-modeline-acronym-display-home-p 'py-install-directory 'py-guess-py-install-directory-p 'py-extensions 'py-hide-show-minor-mode-p 'empty-comment-line-separates-paragraph-p 'py-org-cycle-p 'ipython-complete-use-separate-shell-p 'py-outline-minor-mode-p 'py-outline-mode-keywords 'py-start-run-py-shell 'py-start-run-ipython-shell 'py-close-provides-newline 'py-dedent-keep-relative-column 'py-indent-honors-inline-comment 'py-closing-list-dedents-bos 'py-electric-colon-active-p 'py-electric-colon-greedy-p 'py-electric-colon-newline-and-indent-p 'py-electric-comment-p 'py-electric-comment-add-space-p 'py-mark-decorators 'py-tab-indent 'py-complete-function 'py-encoding-string 'py-shebang-startstring 'py-python-command-args 'py-jython-command-args 'py-cleanup-temporary 'py-lhs-inbound-indent 'py-continuation-offset 'py-indent-tabs-mode 'py-smart-indentation 'py-block-comment-prefix 'py-indent-comments 'py-separator-char 'py-custom-temp-directory 'py-jump-on-exception 'py-ask-about-save 'py-pdbtrack-do-tracking-p 'py-pdbtrack-filename-mapping 'py-pdbtrack-minor-mode-string 'py-import-check-point-max 'py-jython-packages 'py-current-defun-show 'py-current-defun-delay 'py-honor-IPYTHONDIR-p 'py-ipython-history 'py-honor-PYTHONHISTORY-p 'py-master-file 'py-pychecker-command 'py-pychecker-command-args 'py-pep8-command 'py-pep8-command-args 'py-pyflakespep8-command 'py-pep8-command 'py-pep8-command-args 'py-pyflakespep8-command-args 'py-pyflakes-command 'py-pyflakes-command-args 'py-pep8-command-args 'py-pylint-command 'py-pylint-command-args 'py-shell-input-prompt-1-regexp 'py-shell-input-prompt-2-regexp 'py-shell-prompt-read-only 'py-switch-buffers-on-execute-p 'py-split-windows-on-execute-p 'py-max-split-windows 'py-split-windows-on-execute-function 'py-hide-show-keywords 'py-hide-show-hide-docstrings 'python-mode-hook 'py-imenu-create-index-p 'py-imenu-create-index-function 'py-shell-name 'py-shell-toggle-1 'py-shell-toggle-2 'py-match-paren-mode 'py-kill-empty-line 'py-remove-cwd-from-path 'py-imenu-show-method-args-p 'py-history-filter-regexp 'py-use-local-default 'py-shell-local-path 'py-underscore-word-syntax-p 'py-edit-only-p 'py-force-py-shell-name-p 'python-mode-v5-behavior-p 'py-trailing-whitespace-smart-delete-p 'py-warn-tmp-files-left-p 'py-ipython-execute-delay 'strip-chars-before 'strip-chars-after 'py-fill-docstring-style 'py-number-face 'py-XXX-tag-face 'py-pseudo-keyword-face 'py-variable-name-face 'py-decorators-face 'py-builtins-face 'py-class-name-face 'py-exception-name-face 'python-mode-message-string 'py-local-command 'py-local-versioned-command 'py-shell-complete-debug 'py-encoding-string-re 'symbol-definition-start-re 'symbol-definition-start-re 'py-shebang-regexp 'py-separator-char 'py-temp-directory 'py-exec-command 'py-exec-string-command 'py-which-bufname 'py-pychecker-history 'py-pep8-history 'py-pyflakespep8-history 'py-pyflakes-history 'py-pylint-history 'ipython-de-input-prompt-regexp 'ipython-de-input-prompt-regexp 'ipython-de-output-prompt-regexp 'py-force-local-shell-p 'python-mode-v5-behavior 'python--prompt-regexp 'py-bol-forms-last-indent 'python-mode-syntax-table 'outline-heading-end-regexp 'eldoc-documentation-function 'py-completion-last-window-configuration 'ipython-version 'py-shell-template 'py-imports 'py-execute-directory 'py-use-current-dir-when-execute-p 'py-exception-buffer 'py-output-buffer 'py-string-delim-re 'py-labelled-re 'py-expression-skip-regexp 'py-expression-skip-chars 'py-expression-looking-re 'py-not-expression-regexp 'py-not-expression-chars 'py-not-expression-chars 'py-partial-expression-skip-chars 'py-partial-expression-forward-regexp 'py-partial-expression-skip-backward-chars 'py-not-partial-expression-skip-chars 'py-partial-expression-looking-regexp 'py-not-partial-expression-regexp 'py-operator-regexp 'py-assignment-regexp 'py-delimiter-regexp 'py-delimiter-chars 'py-line-number-offset 'match-paren-no-use-syntax-pps 'py-traceback-line-re 'py-traceback-line-re 'python-preoutput-result 'python-preoutput-leftover 'python-preoutput-skip-next-prompt 'py-mode-syntax-table 'py-file-queue 'python-mode-abbrev-table 'inferior-python-mode-abbrev-table 'py-pdbtrack-input-prompt 'py-pydbtrack-input-prompt 'py-pdbtrack-is-tracking-p 'py-shell-map 'py-font-lock-keywords 'py-dotted-expression-syntax-table 'jython-mode-hook 'py-shell-hook 'ipython-completion-command-string 'ipython0.10-completion-command-string 'ipython0.11-completion-command-string 'py-last-exeption-buffer 'python-preoutput-result 'py-imenu-class-regexp 'py-imenu-method-regexp 'py-imenu-method-no-arg-parens 'py-imenu-method-arg-parens 'py-imenu-generic-expression 'py-imenu-generic-regexp 'py-imenu-generic-parens 'py-mode-output-map 'py-menu 'py-already-guessed-indent-offset 'python-mode-map 'skeleton-further-elements 'virtualenv-workon-home 'virtualenv-name 'python-mode-syntax-table 'python-dotty-syntax-table 'py-shell-template 'py-blank-or-comment-re 'py-block-closing-keywords-re 'py-finally-re 'py-except-re 'py-else-re 'py-no-outdent-re 'py-assignment-re 'py-block-re 'py-minor-block-re 'py-try-block-re 'py-class-re 'py-def-or-class-re 'py-def-re 'py-block-or-clause-re 'py-extended-block-or-clause-re 'py-clause-re 'py-elif-re 'py-if-re 'py-try-re 'py-mode-syntax-table 'py-pdbtrack-stack-entry-regexp 'py-pdbtrack-input-prompt 'py-pydbtrack-input-prompt 'py-pdbtrack-marker-regexp-file-group 'py-pdbtrack-marker-regexp-line-group 'py-pdbtrack-marker-regexp-funcname-group 'py-pdbtrack-track-range 'python-compilation-regexp-alist 'py-font-lock-syntactic-keywords 'virtualenv-name ) "Used for bug-tracking by `py-list-settings'") (defvar unused-variables (list 'py-indent-honors-multiline-listing 'ipython-complete-function 'py-rhs-inbound-indent 'py-align-multiline-strings-p 'py-beep-if-tab-change 'py-backspace-function 'py-delete-function 'py-send-receive-delay 'py-python-history 'py-source-modes 'py-shell-prompt-alist 'py-shell-continuation-prompt-alist 'py-match-paren-key 'py-set-complete-keymap-p 'python-eldoc-setup-code 'python-eldoc-string-code 'python-use-skeletons 'python-local-version 'py-local-complete-function 'py-shell-alist 'python-pdbtrack-tracked-buffer 'view-return-to-alist 'py-prev-dir/file 'python-preoutput-continuation 'python-version-checked 'py-help-mode-syntax-table 'python-file-queue 'python-pdbtrack-is-tracking-p 'py-indent-line-indent 'inferior-python-mode-map 'py-variables 'inferior-python-mode-syntax-table 'py-return-re 'py-try-clause-re 'py-space-backslash-table 'python-pdbtrack-stack-entry-regexp 'python-pdbtrack-input-prompt 'python-pdbtrack-track-range 'python-dotty-syntax-table 'py-help-address 'py-shell-map 'python-mode-map 'imenu-generic-expression )) (defun py-list-settings () "List py-variables with it's current value. For debugging " (interactive) (set-buffer (get-buffer-create "Python-mode-el-settings")) (erase-buffer) (load (concat (py-normalize-directory py-install-directory) "devel/python-mode-vars.el") nil t) (dolist (elt py-variables) (insert (concat (prin1-to-string elt) " ==> ")) (if (stringp (ignore-errors (symbol-value elt))) (insert (concat (symbol-value elt) "\n\n")) (insert (concat (prin1-to-string (ignore-errors (symbol-value elt))) "\n\n")))) (switch-to-buffer (current-buffer))) (setq python-mode-tests (list 'docstring-style-switches-test 'py-nested-block-or-clause-test 'py-down-statement-test 'py-fill-string-django-test 'py-fill-string-onetwo-test 'py-fill-string-pep-257-test 'py-fill-string-pep-257-nn-test ;; fails for unknown reasons, interactive call works ;; 'py-fill-string-symmetric-test 'py-highlight-indentation-test 'py-smart-indentation-test 'autopair-mode-test 'py-smart-operator-test 'py-guess-indent-offset-test 'py-bol-moves-test ;; broken ;; 'augmented-assigment-test 'key-binding-tests 'py-end-of-statement-test 'py-compute-indentation-test 'py-end-of-def-inline-comment-test 'before-inline-comment-test 'toggle-force-py-shell-name-p-test 'py-execute-statement-python-test 'py-execute-statement-python-switch-test 'py-execute-statement-python-noswitch-test 'py-execute-statement-python-dedicated-test 'py-execute-statement-python-dedicated-switch-test 'py-execute-statement-ipython-test 'py-execute-statement-ipython-switch-test 'py-execute-statement-ipython-noswitch-test 'py-execute-statement-ipython-dedicated-test 'py-execute-statement-ipython-dedicated-switch-test 'py-execute-statement-python3-test 'py-execute-statement-python3-switch-test 'py-execute-statement-python3-noswitch-test 'py-execute-statement-python3-dedicated-test 'py-execute-statement-python3-dedicated-switch-test 'py-execute-statement-python2-test 'py-execute-statement-python2-switch-test 'py-execute-statement-python2-noswitch-test 'py-execute-statement-python2-dedicated-test 'py-execute-statement-python2-dedicated-switch-test 'py-execute-statement-python2.7-test 'py-execute-statement-python2.7-switch-test 'py-execute-statement-python2.7-noswitch-test 'py-execute-statement-python2.7-dedicated-test 'py-execute-statement-python2.7-dedicated-switch-test 'py-execute-statement-jython-test 'py-execute-statement-jython-switch-test 'py-execute-statement-jython-noswitch-test 'py-execute-statement-jython-dedicated-test 'py-execute-statement-jython-dedicated-switch-test 'py-separator-char-test 'py-execute-block-python-switch-test 'py-execute-block-python-noswitch-test 'py-execute-block-python-dedicated-test 'py-execute-block-python-dedicated-switch-test 'py-execute-block-ipython-test 'py-execute-block-ipython-switch-test 'py-execute-block-ipython-noswitch-test 'py-execute-block-ipython-dedicated-test 'py-execute-block-ipython-dedicated-switch-test 'py-execute-block-python3-test 'py-execute-block-python3-switch-test 'py-execute-block-python3-noswitch-test 'py-execute-block-python3-dedicated-test 'py-execute-block-python3-dedicated-switch-test 'py-execute-block-python2-test 'py-execute-block-python2-switch-test 'py-execute-block-python2-noswitch-test 'py-execute-block-python2-dedicated-test 'py-execute-block-python2-dedicated-switch-test 'py-execute-block-python2.7-test 'py-execute-block-python2.7-switch-test 'py-execute-block-python2.7-noswitch-test 'py-execute-block-python2.7-dedicated-test 'py-execute-block-python2.7-dedicated-switch-test 'py-execute-block-jython-test 'py-execute-block-jython-switch-test 'py-execute-block-jython-noswitch-test 'py-execute-block-jython-dedicated-test 'py-execute-block-jython-dedicated-switch-test 'py-execute-block-or-clause-python-test 'py-execute-block-or-clause-python-switch-test 'py-execute-block-or-clause-python-noswitch-test 'py-execute-block-or-clause-python-dedicated-test 'py-execute-block-or-clause-python-dedicated-switch-test 'py-execute-block-or-clause-ipython-test 'py-execute-block-or-clause-ipython-switch-test 'py-execute-block-or-clause-ipython-noswitch-test 'py-execute-block-or-clause-ipython-dedicated-test 'py-execute-block-or-clause-ipython-dedicated-switch-test 'py-execute-block-or-clause-python3-test 'py-execute-block-or-clause-python3-switch-test 'py-execute-block-or-clause-python3-noswitch-test 'py-execute-block-or-clause-python3-dedicated-test 'py-execute-block-or-clause-python3-dedicated-switch-test 'py-execute-block-or-clause-python2-test 'py-execute-block-or-clause-python2-switch-test 'py-execute-block-or-clause-python2-noswitch-test 'py-execute-block-or-clause-python2-dedicated-test 'py-execute-block-or-clause-python2-dedicated-switch-test 'py-execute-block-or-clause-python2.7-test 'py-execute-block-or-clause-python2.7-switch-test 'py-execute-block-or-clause-python2.7-noswitch-test 'py-execute-block-or-clause-python2.7-dedicated-test 'py-execute-block-or-clause-python2.7-dedicated-switch-test 'py-execute-block-or-clause-jython-test 'py-execute-block-or-clause-jython-switch-test 'py-execute-block-or-clause-jython-noswitch-test 'py-execute-block-or-clause-jython-dedicated-test 'py-execute-block-or-clause-jython-dedicated-switch-test 'py-execute-def-python-test 'py-execute-def-python-switch-test 'py-execute-def-python-noswitch-test 'py-execute-def-python-dedicated-test 'py-execute-def-python-dedicated-switch-test 'py-execute-def-ipython-test 'py-execute-def-ipython-switch-test 'py-execute-def-ipython-noswitch-test 'py-execute-def-ipython-dedicated-test 'py-execute-def-ipython-dedicated-switch-test 'py-execute-def-python3-test 'py-execute-def-python3-switch-test 'py-execute-def-python3-noswitch-test 'py-execute-def-python3-dedicated-test 'py-execute-def-python3-dedicated-switch-test 'py-execute-def-python2-test 'py-execute-def-python2-switch-test 'py-execute-def-python2-noswitch-test 'py-execute-def-python2-dedicated-test 'py-execute-def-python2-dedicated-switch-test 'py-execute-def-python2.7-test 'py-execute-def-python2.7-switch-test 'py-execute-def-python2.7-noswitch-test 'py-execute-def-python2.7-dedicated-test 'py-execute-def-python2.7-dedicated-switch-test 'py-execute-def-jython-test 'py-execute-def-jython-switch-test 'py-execute-def-jython-noswitch-test 'py-execute-def-jython-dedicated-test 'py-execute-def-jython-dedicated-switch-test 'py-execute-class-python-test 'py-execute-class-python-switch-test 'py-execute-class-python-noswitch-test 'py-execute-class-python-dedicated-test 'py-execute-class-python-dedicated-switch-test 'py-execute-class-ipython-test 'py-execute-class-ipython-switch-test 'py-execute-class-ipython-noswitch-test 'py-execute-class-ipython-dedicated-test 'py-execute-class-ipython-dedicated-switch-test 'py-execute-class-python3-test 'py-execute-class-python3-switch-test 'py-execute-class-python3-noswitch-test 'py-execute-class-python3-dedicated-test 'py-execute-class-python3-dedicated-switch-test 'py-execute-class-python2-test 'py-execute-class-python2-switch-test 'py-execute-class-python2-noswitch-test 'py-execute-class-python2-dedicated-test 'py-execute-class-python2-dedicated-switch-test 'py-execute-class-python2.7-test 'py-execute-class-python2.7-switch-test 'py-execute-class-python2.7-noswitch-test 'py-execute-class-python2.7-dedicated-test 'py-execute-class-python2.7-dedicated-switch-test 'py-execute-class-jython-test 'py-execute-class-jython-switch-test 'py-execute-class-jython-noswitch-test 'py-execute-class-jython-dedicated-test 'py-execute-class-jython-dedicated-switch-test 'py-execute-region-python-test 'py-execute-region-python-switch-test 'py-execute-region-python-noswitch-test 'py-execute-region-python-dedicated-test 'py-execute-region-python-dedicated-switch-test 'py-execute-region-ipython-test 'py-execute-region-ipython-switch-test 'py-execute-region-ipython-noswitch-test 'py-execute-region-ipython-dedicated-test 'py-execute-region-ipython-dedicated-switch-test 'py-execute-region-python3-test 'py-execute-region-python3-switch-test 'py-execute-region-python3-noswitch-test 'py-execute-region-python3-dedicated-test 'py-execute-region-python3-dedicated-switch-test 'py-execute-region-python2-test 'py-execute-region-python2-switch-test 'py-execute-region-python2-noswitch-test 'py-execute-region-python2-dedicated-test 'py-execute-region-python2-dedicated-switch-test 'py-execute-region-python2.7-test 'py-execute-region-python2.7-switch-test 'py-execute-region-python2.7-noswitch-test 'py-execute-region-python2.7-dedicated-test 'py-execute-region-python2.7-dedicated-switch-test 'py-execute-region-jython-test 'py-execute-region-jython-switch-test 'py-execute-region-jython-noswitch-test 'py-execute-region-jython-dedicated-test 'py-execute-region-jython-dedicated-switch-test 'py-execute-buffer-python-test 'py-execute-buffer-python-switch-test 'py-execute-buffer-python-noswitch-test 'py-execute-buffer-python-dedicated-test 'py-execute-buffer-python-dedicated-switch-test 'py-execute-buffer-ipython-test 'py-execute-buffer-ipython-switch-test 'py-execute-buffer-ipython-noswitch-test 'py-execute-buffer-ipython-dedicated-test 'py-execute-buffer-ipython-dedicated-switch-test 'py-execute-buffer-python3-test 'py-execute-buffer-python3-switch-test 'py-execute-buffer-python3-noswitch-test 'py-execute-buffer-python3-dedicated-test 'py-execute-buffer-python3-dedicated-switch-test 'py-execute-buffer-python2-test 'py-execute-buffer-python2-switch-test 'py-execute-buffer-python2-noswitch-test 'py-execute-buffer-python2-dedicated-test 'py-execute-buffer-python2-dedicated-switch-test 'py-execute-buffer-python2.7-test 'py-execute-buffer-python2.7-switch-test 'py-execute-buffer-python2.7-noswitch-test 'py-execute-buffer-python2.7-dedicated-test 'py-execute-buffer-python2.7-dedicated-switch-test 'py-execute-buffer-jython-test 'py-execute-buffer-jython-switch-test 'py-execute-buffer-jython-noswitch-test 'py-execute-buffer-jython-dedicated-test 'py-execute-buffer-jython-dedicated-switch-test 'py-execute-expression-python-test 'py-execute-expression-python-switch-test 'py-execute-expression-python-noswitch-test 'py-execute-expression-python-dedicated-test 'py-execute-expression-python-dedicated-switch-test 'py-execute-expression-ipython-test 'py-execute-expression-ipython-switch-test 'py-execute-expression-ipython-noswitch-test 'py-execute-expression-ipython-dedicated-test 'py-execute-expression-ipython-dedicated-switch-test 'py-execute-expression-python3-test 'py-execute-expression-python3-switch-test 'py-execute-expression-python3-noswitch-test 'py-execute-expression-python3-dedicated-test 'py-execute-expression-python3-dedicated-switch-test 'py-execute-expression-python2-test 'py-execute-expression-python2-switch-test 'py-execute-expression-python2-noswitch-test 'py-execute-expression-python2-dedicated-test 'py-execute-expression-python2-dedicated-switch-test 'py-execute-expression-python2.7-test 'py-execute-expression-python2.7-switch-test 'py-execute-expression-python2.7-noswitch-test 'py-execute-expression-python2.7-dedicated-test 'py-execute-expression-python2.7-dedicated-switch-test 'py-execute-expression-jython-test 'py-execute-expression-jython-switch-test 'py-execute-expression-jython-noswitch-test 'py-execute-expression-jython-dedicated-test 'py-execute-expression-jython-dedicated-switch-test 'py-execute-partial-expression-python-test 'py-execute-partial-expression-python-switch-test 'py-execute-partial-expression-python-noswitch-test 'py-execute-partial-expression-python-dedicated-test 'py-execute-partial-expression-python-dedicated-switch-test 'py-execute-partial-expression-ipython-test 'py-execute-partial-expression-ipython-switch-test 'py-execute-partial-expression-ipython-noswitch-test 'py-execute-partial-expression-ipython-dedicated-test 'py-execute-partial-expression-ipython-dedicated-switch-test 'py-execute-partial-expression-python3-test 'py-execute-partial-expression-python3-switch-test 'py-execute-partial-expression-python3-noswitch-test 'py-execute-partial-expression-python3-dedicated-test 'py-execute-partial-expression-python3-dedicated-switch-test 'py-execute-partial-expression-python2-test 'py-execute-partial-expression-python2-switch-test 'py-execute-partial-expression-python2-noswitch-test 'py-execute-partial-expression-python2-dedicated-test 'py-execute-partial-expression-python2-dedicated-switch-test 'py-execute-partial-expression-python2.7-test 'py-execute-partial-expression-python2.7-switch-test 'py-execute-partial-expression-python2.7-noswitch-test 'py-execute-partial-expression-python2.7-dedicated-test 'py-execute-partial-expression-python2.7-dedicated-switch-test 'py-execute-partial-expression-jython-test 'py-execute-partial-expression-jython-switch-test 'py-execute-partial-expression-jython-noswitch-test 'py-execute-partial-expression-jython-dedicated-test 'py-execute-partial-expression-jython-dedicated-switch-test 'py-execute-line-python-test 'py-execute-line-python-switch-test 'py-execute-line-python-noswitch-test 'py-execute-line-python-dedicated-test 'py-execute-line-python-dedicated-switch-test 'py-execute-line-ipython-test 'py-execute-line-ipython-switch-test 'py-execute-line-ipython-noswitch-test 'py-execute-line-ipython-dedicated-test 'py-execute-line-ipython-dedicated-switch-test 'py-execute-line-python3-test 'py-execute-line-python3-switch-test 'py-execute-line-python3-noswitch-test 'py-execute-line-python3-dedicated-test 'py-execute-line-python3-dedicated-switch-test 'py-execute-line-python2-test 'py-execute-line-python2-switch-test 'py-execute-line-python2-noswitch-test 'py-execute-line-python2-dedicated-test 'py-execute-line-python2-dedicated-switch-test 'py-execute-line-python2.7-test 'py-execute-line-python2.7-switch-test 'py-execute-line-python2.7-noswitch-test 'py-execute-line-python2.7-dedicated-test 'py-execute-line-python2.7-dedicated-switch-test 'py-execute-line-jython-test 'py-execute-line-jython-switch-test 'py-execute-line-jython-noswitch-test 'py-execute-line-jython-dedicated-test 'py-execute-line-jython-dedicated-switch-test 'py-beginning-of-block-test 'py-end-of-block-test 'py-beginning-of-block-or-clause-test 'py-end-of-block-or-clause-test 'py-beginning-of-def-test 'py-end-of-def-test 'py-beginning-of-def-or-class-test 'py-end-of-def-or-class-test 'py-electric-backspace-test 'py-electric-delete-test 'dict-error-test ;; 'py-expand-abbrev-pst-pdb.set_trace-test 'near-bob-beginning-of-statement-test 'bob-beginning-of-statement-test 'honor-comments-indent-test 'assignment-indent-test 'if-elif-test 'if-elif-bob-test 'try-else-clause-test 'try-except-test 'assignment-after-block-test 'py-beginning-of-clause-test 'py-end-of-clause-test 'py-beginning-of-expression-test 'py-end-of-expression-test 'py-expression-index-test 'py-indent-after-assigment-test 'leave-dict-test 'eofs-attribut-test 'py-insert-super-python2-test 'py-insert-super-python3-test 'args-list-first-line-indent-test 'py-partial-expression-test 'py-execute-block-test 'multiline-list-indent-test 'close-block-test 'py-shift-block-test 'nesting-if-test 'py-end-of-print-statement-test 'nested-try-test 'nested-if-test 'nested-try-finally-test 'py-shell-complete-test 'python-dedicated-test 'tqs-list-error-test 'py-mark-def-commandp-test 'split-windows-on-execute-p-test 'switch-windows-on-execute-p-test 'py-install-directory-path-test 'UnicodeEncodeError-python3-test 'py-execute-block-python-test )) (defun py-run-tests (&optional arg) (interactive "p") (dolist (ele python-mode-tests) (funcall ele arg))) (defvar python-mode-teststring "class OrderedDict1(dict): \"\"\" This implementation of a dictionary keeps track of the order in which keys were inserted. \"\"\" def __init__(self, d={}): self._keys = d.keys() dict.__init__(self, d) def f(): \"\"\" class for in 'for in while with blah' \"\"\" if a: ar_atpt_python_list_roh = ([ 'python-expression', # def ar_thingatpt_write_lists (&optional datei): 'python-partial-expression', 'python-statement', ]) elif b: pass else b: pass ]) ''' asdf' asdf asdf asdf asdf asdfasdf asdfasdf a asdf asdf asdf asdfasdfa asdf asdf asdf asdf asdf' asdf asdf asdf asdf asdfasdf asdfasdf a asdf asdf asdf asdfasdfa asdf asdf asdf asdf ''' " "String used for tests by python-mode-test.el") (setq python-mode-teststring "class OrderedDict1(dict): \"\"\" This implementation of a dictionary keeps track of the order in which keys were inserted. \"\"\" def __init__(self, d={}): self._keys = d.keys() dict.__init__(self, d) def f(): \"\"\" class for in 'for in while with blah' \"\"\" if a: ar_atpt_python_list_roh = ([ 'python-expression', # def ar_thingatpt_write_lists (&optional datei): 'python-partial-expression', 'python-statement', ]) elif b: pass else b: pass ''' asdf' asdf asdf asdf asdf asdfasdf asdfasdf a asdf asdf asdf asdfasdfa asdf asdf asdf asdf asdf' asdf asdf asdf asdf asdfasdf asdfasdf a asdf asdf asdf asdfasdfa asdf asdf asdf asdf ''' ") (defun py-beginning-of-block-test (&optional arg load-branch-function) (interactive "p") (let ((teststring python-mode-teststring)) (py-bug-tests-intern 'py-beginning-of-block-test-base arg teststring))) (defun py-beginning-of-block-test-base () (goto-char 627) (py-beginning-of-block) (assert (eq (point) 325) nil "py-beginning-of-block-test failed")) (defun py-end-of-block-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class OrderedDict1(dict): \"\"\" This implementation of a dictionary keeps track of the order in which keys were inserted. \"\"\" def __init__(self, d={}): self._keys = d.keys() dict.__init__(self, d) def f(): \"\"\" class for in 'for in while with blah' \"\"\" if foo: ar_atpt_python_list_roh = ([ 'python-expression', # def ar_thingatpt_write_lists (&optional datei): 'python-partial-expression', 'python-statement', ]) elif bar: pass else: pass ")) (py-bug-tests-intern 'py-end-of-block-base arg teststring))) (defun py-end-of-block-base () (goto-char 326) (assert (eq 562 (py-end-of-clause)) nil "py-end-of-block-test #1 failed") (assert (eq 598 (py-end-of-clause)) nil "py-end-of-block-test #2 failed") (assert (eq 629 (py-end-of-block)) nil "py-end-of-block-test #3 failed")) (defun py-beginning-of-block-or-clause-test (&optional arg load-branch-function) (interactive "p") (let ((teststring python-mode-teststring)) (py-bug-tests-intern 'py-beginning-of-block-or-clause-base arg teststring))) (defun py-beginning-of-block-or-clause-base () (goto-char 627) (py-beginning-of-block-or-clause) (assert (looking-at "else") nil "py-beginning-of-block-or-clause-test failed") (py-beginning-of-block-or-clause) (assert (looking-at "elif") nil "py-beginning-of-block-or-clause-test failed") (py-beginning-of-block-or-clause) (assert (looking-at "if") nil "py-beginning-of-block-or-clause-test failed") ) (defun py-end-of-block-or-clause-test (&optional arg load-branch-function) (interactive "p") (let ((teststring python-mode-teststring)) (py-bug-tests-intern 'py-end-of-block-or-clause-base arg teststring))) (defun py-end-of-block-or-clause-base () (goto-char 602) (py-end-of-block-or-clause) (assert (eq (point) 626) nil "py-end-of-block-or-clause-test failed")) (defun py-beginning-of-def-test (&optional arg load-branch-function) (interactive "p") (let ((teststring python-mode-teststring)) (py-bug-tests-intern 'py-beginning-of-def-base arg teststring))) (defun py-beginning-of-def-base () (goto-char 627) (py-beginning-of-def) (assert (eq (point) 238) nil "py-beginning-of-def-test failed") ) (defun py-end-of-def-test (&optional arg load-branch-function) (interactive "p") (let ((teststring python-mode-teststring)) (py-bug-tests-intern 'py-end-of-def-base arg teststring))) (defun py-end-of-def-base () (goto-char 627) (py-beginning-of-def) (py-end-of-def) (assert (eq (point) 626) nil "py-end-of-def-test failed") ) (defun py-beginning-of-def-or-class-test (&optional arg load-branch-function) (interactive "p") (let ((teststring python-mode-teststring)) (py-bug-tests-intern 'py-beginning-of-def-or-class-base arg teststring))) (defun py-beginning-of-def-or-class-base () (goto-char 627) (py-beginning-of-def-or-class 4) (assert (eq (point) 238) nil "py-beginning-of-def-or-class-test failed")) (defun py-end-of-def-or-class-test (&optional arg load-branch-function) (interactive "p") (let ((teststring python-mode-teststring)) (py-bug-tests-intern 'py-end-of-def-or-class-base arg teststring))) (defun py-end-of-def-or-class-base () (goto-char 627) (assert (eq 238 (py-beginning-of-def-or-class)) nil "py-end-of-def-or-class-test #1 failed") (assert (eq 146 (py-beginning-of-def-or-class)) nil "py-end-of-def-or-class-test #2 failed") (goto-char 201) (assert (eq 232 (py-end-of-def-or-class)) nil "py-end-of-def-or-class-test #3 failed") (assert (eq 626 (py-end-of-def-or-class '(4))) nil "py-end-of-def-or-class-test #4 failed")) (defun py-electric-backspace-test (&optional arg load-branch-function) (interactive "p") (let ((teststring python-mode-teststring)) (py-bug-tests-intern 'py-electric-backspace-base arg teststring))) (defun py-electric-backspace-base () (goto-char 232) (py-newline-and-indent) (sit-for 0.1) (assert (eq 241 (point)) nil "py-electric-backspace-test #1 failed") (py-electric-backspace) (assert (eq 4 (current-column)) nil "py-electric-backspace-test #2 failed") (py-electric-backspace) (assert (eq 0 (current-column)) nil "py-electric-backspace-test #3 failed") (py-electric-backspace) (assert (eq 232 (point)) nil "py-electric-backspace-test #4 failed")) (defun py-electric-delete-test (&optional arg load-branch-function) (interactive "p") (let ((teststring python-mode-teststring)) (py-bug-tests-intern 'py-electric-delete-base arg teststring))) (defun py-electric-delete-base () (goto-char 202) (py-electric-delete) (assert (eq 4 (length (progn (looking-at "[ \t]+")(match-string-no-properties 0)))) nil "py-electric-delete-test #1 failed") (py-electric-delete) (assert (not (looking-at "[ \t]+")) nil "py-electric-delete-test #2 failed") (py-electric-delete) (assert (looking-at "ict") nil "py-electric-delete-test #2 failed") ) (defun UnicodeEncodeError-python3-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat "#! /usr/bin/env python3 # -\*- coding: utf-8 -\*-\n print(\'\\xA9\') "))) (py-bug-tests-intern 'UnicodeEncodeError-python3-base 2 teststring))) (defun UnicodeEncodeError-python3-base () (delete-other-windows) (let ((py-split-windows-on-execute-p t) (py-shell-switch-buffers-on-execute-p t) erg pos) (py-execute-region 50 63) (setq erg (goto-char (point-max))) (sit-for 1.0) (assert (and (setq pos (search-backward "©"))(< (- erg pos) 9)) nil "UnicodeEncodeError-python3-test failed"))) (defun dict-error-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- class foo(bar): \"\"\"baz\"\"\" _some_extensions = { '38': 'asd', # whatever '43': 'ddd', '45': 'ddd', } "))) (py-bug-tests-intern 'dict-error-base arg teststring))) (defun dict-error-base () (goto-char 78) (assert (eq 166 (py-end-of-statement)) nil "dict-error-test failed")) (defun py-expand-abbrev-pst-pdb.set_trace-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- print('\xA9') pst "))) (py-bug-tests-intern 'py-expand-abbrev-pst-pdb.set_trace-base arg teststring))) (defun py-expand-abbrev-pst-pdb.set_trace-base () (forward-char -1) (expand-abbrev) (sit-for 1) ;; (assert (string= (expand-abbrev) "pst") nil "py-expand-abbrev-pst-pdb.set_trace-test failed")) ;; (assert (expand-abbrev) nil "py-expand-abbrev-pst-pdb.set_trace-test failed")) (progn (looking-back "pdb.set_trace()") ;; (message "Looking back: %s" (match-string-no-properties 0)) ) (assert (looking-back "pdb.set_trace()") ;; (message "%s" (match-string-no-properties 1)) nil "py-expand-abbrev-pst-pdb.set_trace-test failed")) (defun near-bob-beginning-of-statement-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- print u'\xA9' "))) (py-bug-tests-intern 'near-bob-beginning-of-statement-base arg teststring))) (defun near-bob-beginning-of-statement-base () (goto-char 50) (assert (eq 0 (py-compute-indentation)) nil "near-bob-beginning-of-statement-test failed")) (defun bob-beginning-of-statement-test (&optional arg load-branch-function) (interactive "p") (let ((teststring " #Foo.py ")) (py-bug-tests-intern 'bob-beginning-of-statement-base arg teststring))) (defun bob-beginning-of-statement-base () (py-beginning-of-statement) (assert (eq 1 (point)) "bob-beginning-of-statement-test failed")) (defun honor-comments-indent-test (&optional arg load-branch-function) (interactive "p") (let ((teststring " #Something.py # The purpose of this program is uncertain. ")) (py-bug-tests-intern 'honor-comments-indent-base arg teststring))) (defun honor-comments-indent-base () (goto-char 19) (assert (eq 4 (py-compute-indentation)) nil "honor-comments-indent-test failed")) (defun first-line-offset-test (&optional arg load-branch-function) (interactive "p") (let ((teststring " #Something.py # The purpose of this program is uncertain. ")) (py-bug-tests-intern 'first-line-offset-base arg teststring))) (defun first-line-offset-base () (goto-char 18) (assert (eq 4 (py-compute-indentation)) nil "first-line-offset-test failed")) (defun assignment-indent-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo(): sammlung = [] ")) (py-bug-tests-intern 'assignment-indent-base arg teststring))) (defun assignment-indent-base () (goto-char 12) (assert (eq 4 (py-compute-indentation)) nil "assignment-indent-test failed")) (defun if-elif-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if bar in baz: print \"0, baz\" abc[1] = \"x\" elif barr in bazz: print \"\" ")) (py-bug-tests-intern 'if-elif-base arg teststring))) (defun if-elif-base () (goto-char 76) (assert (eq 4 (py-compute-indentation)) nil "if-elif.py-test failed")) (defun if-elif-bob-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if bar in baz: print \"0, baz\" ")) (py-bug-tests-intern 'if-elif-bob-base arg teststring))) (defun if-elif-bob-base () (goto-char (point-min)) (assert (eq 0 (py-compute-indentation)) nil "if-elif-bob.py-test failed")) (defun try-else-clause-test (&optional arg load-branch-function) (interactive "p") (let ((teststring " # an example from http://www.thomas-guettler.de # © 2002-2008 Thomas Güttler. Der Text darf nach belieben kopiert und modifiziert werden, solange dieser Hinweis zum Copyright und ein Links zu dem Original unter www.thomas-guettler.de erhalten bleibt. Es wäre nett, wenn Sie mir Verbesserungsvorschläge mitteilen: guettli@thomas-guettler.de def _commit_on_success(*args, **kw): begin() try: res = func(*args, **kw) except Exception, e: rollback() raise # Re-raise (aufgefangene Exception erneut werfen) else: commit() return res ")) (py-bug-tests-intern 'try-else-clause-base arg teststring))) (defun try-else-clause-base () (goto-char 541) (assert (eq 4 (py-compute-indentation)) nil "try-else-clause-test failed")) (defun try-except-test (&optional arg load-branch-function) (interactive "p") (let ((teststring " # an example from http://www.thomas-guettler.de # © 2002-2008 Thomas Güttler. Der Text darf nach belieben kopiert und modifiziert werden, solange dieser Hinweis zum Copyright und ein Links zu dem Original unter www.thomas-guettler.de erhalten bleibt. Es wäre nett, wenn Sie mir Verbesserungsvorschläge mitteilen: guettli@thomas-guettler.de def _commit_on_success(*args, **kw): begin() try: res = func(*args, **kw) except Exception, e: rollback() raise # Re-raise (aufgefangene Exception erneut werfen) else: commit() return res ")) (py-bug-tests-intern 'try-except-base arg teststring))) (defun try-except-base () (goto-char 434) (assert (eq 4 (py-compute-indentation)) nil "try-except-test failed")) (defun assignment-after-block-test (&optional arg load-branch-function) (interactive "p") (let ((teststring " if x > 0: for i in range(100): print i else: print \"All done\" a = \"asdf\" b = \"asdf\" ")) (py-bug-tests-intern 'assignment-after-block-base arg teststring))) (defun assignment-after-block-base () (forward-line -1) (assert (eq 0 (py-compute-indentation)) nil "assignment-after-block-test failed")) (defun py-beginning-of-clause-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "# Examples from http://diveintopython.org/ def main(argv): grammar = \"kant.xml\" try: opts, args = getopt.getopt(argv, \"hg:d\", [\"help\", \"grammar=\"]) except getopt.GetoptError: usage() sys.exit(2) for opt, arg in opts: if opt in (\"-h\", \"--help\"): usage() sys.exit() elif opt == '-d': global _debug _debug = 1 elif opt in (\"-g\", \"--grammar\"): grammar = arg ")) (py-bug-tests-intern 'py-beginning-of-clause-base arg teststring))) (defun py-beginning-of-clause-base () (goto-char 364) (assert (eq 346 (py-beginning-of-clause)) "py-beginning-of-clause-test failed")) (defun py-end-of-clause-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "# Examples from http://diveintopython.org/ def main(argv): grammar = \"kant.xml\" try: opts, args = getopt.getopt(argv, \"hg:d\", [\"help\", \"grammar=\"]) except getopt.GetoptError: usage() sys.exit(2) for opt, arg in opts: if opt in (\"-h\", \"--help\"): usage() sys.exit() elif opt == '-d': global _debug _debug = 1 elif opt in (\"-g\", \"--grammar\"): grammar = arg ")) (py-bug-tests-intern 'py-end-of-clause-base arg teststring))) (defun py-end-of-clause-base () (goto-char 364) (assert (eq 412 (py-end-of-clause)) "py-end-of-clause-test failed")) (defun py-beginning-of-expression-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "# Examples from http://diveintopython.org/ def main(argv): grammar = \"kant.xml\" try: opts, args = getopt.getopt(argv, \"hg:d\", [\"help\", \"grammar=\"]) except getopt.GetoptError: usage() sys.exit(2) ")) (py-bug-tests-intern 'py-beginning-of-expression-base arg teststring))) (defun py-beginning-of-expression-base () (goto-char 227) (assert (eq 221 (py-beginning-of-expression)) nil "py-beginning-of-expression-test #1 failed") (assert (eq 205 (py-beginning-of-expression)) nil "py-beginning-of-expression-test #2 failed") (assert (eq 177 (py-beginning-of-expression)) nil "py-beginning-of-expression-test #3 failed")) (defun py-end-of-expression-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "# Examples from http://diveintopython.org/ def main(argv): grammar = \"kant.xml\" try: opts, args = getopt.getopt(argv, \"hg:d\", [\"help\", \"grammar=\"]) except getopt.GetoptError: usage() sys.exit(2) ")) (py-bug-tests-intern 'py-end-of-expression-base arg teststring))) (defun py-end-of-expression-base () (goto-char 49) (assert (eq 60 (py-end-of-expression)) nil "py-end-of-expression-test failed") (goto-char 69) (assert (eq 72 (py-end-of-expression)) nil "py-end-of-expression-test failed") (assert (eq 85 (py-end-of-expression)) nil "py-end-of-expression-test failed") (assert (eq 94 (py-end-of-expression)) nil "py-end-of-expression-test failed") (assert (eq 113 (py-end-of-expression)) nil "py-end-of-expression-test failed") (goto-char 225) (assert (eq 232 (py-end-of-expression)) nil "py-end-of-expression-test failed")) (defun py-expression-index-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -\*- coding: utf-8 -\*- b = a[0].split(':')[1] "))) (py-bug-tests-intern 'py-expression-index-base arg teststring))) (defun py-expression-index-base () (goto-char 58) (assert (eq 71 (py-end-of-expression)) nil "py-expression-index-test failed") ) (defun py-insert-super-python2-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -\*- coding: utf-8 -\*- # As example given in Python v3.1 documentation » The Python Standard Library » # # class C(B): # def method(self, arg): # super().method(arg) # This does the same thing as: # # super(C, self).method(arg)\" class OrderedDict1(dict): \"\"\" This implementation of a dictionary keeps track of the order in which keys were inserted. \"\"\" def __init__(self, d={}): self._keys = d.keys() dict.__init__(self, d) "))) (py-bug-tests-intern 'py-insert-super-python2-base arg teststring))) (defun py-insert-super-python2-base () (ignore-errors (py-insert-super)) (sit-for 0.1) (assert (looking-back "super(OrderedDict1, self).__init__(d={})") nil "py-insert-super-python2-test failed")) (defun py-insert-super-python3-test (&optional arg load-branch-function) (interactive "p") (let* ((py-test-shebang "#! /usr/bin/env python3") (teststring (concat py-test-shebang " # -\*- coding: utf-8 -\*- # As example given in Python v3.1 documentation » The Python Standard Library » # # class C(B): # def method(self, arg): # super().method(arg) # This does the same thing as: # # super(C, self).method(arg)\" class OrderedDict1(dict): \"\"\" This implementation of a dictionary keeps track of the order in which keys were inserted. \"\"\" def __init__(self, d={}): self._keys = d.keys() dict.__init__(self, d) "))) (py-bug-tests-intern 'py-insert-super-python3-base arg teststring))) (defun py-insert-super-python3-base () (save-excursion (py-insert-super)) (sit-for 0.2) (assert (looking-at "super().__init__(d={})") nil "py-insert-super-python3-test failed")) (defun py-indent-after-assigment-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- ##################################### def foo( self, bar=False ): # version 12345 title = self.barz.attrs['file'].split('.')[ -1 ] if asdf: "))) (py-bug-tests-intern 'indent-after-assigment-base arg teststring))) (defun indent-after-assigment-base () (goto-char 185) (assert (eq 4 (py-compute-indentation)) nil "py-indent-after-assigment-test failed")) (defun leave-dict-test (&optional arg load-branch-function) (interactive "p") (let ((teststring " foo = { b\"yyyyt\": \"bxxk\", \"bxxk\": { \"yyer\": [\"wxrddef\", \"yytem\", \"hym\",], \"wfter\": [], \"xbject\": BxxkTwg, }, \"yytem\": { \"yyer\": [], \"wfter\": [\"yytem\"], \"xbject\": ItemTwg, }, \"hym\": { \"yyer\": [], \"wfter\": [\"hym\"], \"xbject\": ItemTwg, }, \"yyfx\": { \"yyer\": [], \"wfter\": [\"yytem\", \"hym\"], \"xbject\": IfxTwg, }, \"wxrddef\": { \"yyer\": [], \"wfter\": [\"yyfx\", \"yytem\", \"hym\"], \"xbject\": WxrddefTwg, }, } ")) (py-bug-tests-intern 'leave-dict-base arg teststring))) (defun leave-dict-base () (goto-char (point-min)) (py-end-of-statement) (assert (eq 431 (point)) nil "leave-dict-test failed")) (defun eofs-attribut-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo( baz ): # version return baz.replace(\"\+\",\"§\").replace(\"_\", \" \").replace(\"fi\",\"fr\").replace( \"fl\", \"fg\").replace(\"--\", \"ü\") ")) (py-bug-tests-intern 'eofs-attribut-base arg teststring))) (defun eofs-attribut-base () (forward-line -2) (assert (eq 142 (py-end-of-statement)) nil "eofs-attribut-test failed")) (defun args-list-first-line-indent-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- if foo: bar.append( ht( T.a('Sorted Foo', href='#Blub', ), ' -- foo bar baz--', self.Tasdf( afsd ), self.Tasdf( asdf ), ) ) "))) (py-bug-tests-intern 'args-list-first-line-indent-base arg teststring))) (defun args-list-first-line-indent-base () (goto-char 72) (assert (eq 4 (py-compute-indentation)) nil "args-list-first-line-indent-test failed")) (defun py-partial-expression-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- if foo: bar.append( ht( T.a('Sorted Foo', href='#Blub', ), ' -- foo bar baz--', self.Tasdf( afsd ), self.Tasdf( asdf ), ) ) "))) (py-bug-tests-intern 'py-partial-expression-base arg teststring))) (defun py-partial-expression-base () (goto-char 104) (assert (eq 102 (py-beginning-of-partial-expression)) nil "py-partial-expression-test #1 failed") (assert (eq 108 (py-end-of-partial-expression)) nil "py-partial-expression-test #2 failed") (goto-char 178) (assert (eq 177 (py-beginning-of-partial-expression)) nil "py-partial-expression-test #3 failed") (assert (eq 195 (py-end-of-partial-expression)) nil "py-partial-expression-test #3 failed") ) (defun py-execute-block-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print \"asdf\"")) (py-bug-tests-intern 'py-execute-block-base 2 teststring))) (defun py-execute-block-base () (beginning-of-line) (let ((py-shell-switch-buffers-on-execute-p nil) (py-cleanup-temporary nil)) (assert (py-execute-block) nil "py-execute-block-test failed"))) (defun multiline-list-indent-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print [1, 2, 3, 4]")) (py-bug-tests-intern 'multiline-list-indent-base arg teststring))) (defun multiline-list-indent-base () (assert (eq 7 (py-compute-indentation)) nil "multiline-list-indent-test failed")) (defun no-switch-no-split-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- print u'\\xA9' "))) (py-bug-tests-intern 'no-switch-no-split-base arg teststring))) (defun no-switch-no-split-base () (let ((oldbuf (current-buffer)) py-split-windows-on-execute py-shell-switch-buffers-on-execute-p) (goto-char 49) (push-mark) (end-of-line) (py-execute-region (line-beginning-position) (point)) (assert (window-full-height-p) "no-switch-no-split-test failed") (assert (eq (current-buffer) oldbuf)))) (defun close-block-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- def main(): if len(sys.argv)==1: usage() sys.exit() if __name__==\"__main__\": main() "))) (py-bug-tests-intern 'close-block-base arg teststring))) (defun close-block-base () (goto-char 102) (assert (eq 4 (py-close-block)) nil "close-block-test failed")) (defun py-shift-block-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- class OrderedDict1(dict): \"\"\" This implementation of a dictionary keeps track of the order in which keys were inserted. \"\"\" def __init__(self, d={}): self._keys = d.keys() dict.__init__(self, d) "))) (py-bug-tests-intern 'py-shift-block-base arg teststring))) (defun py-shift-block-base () (let (py-smart-indentation) (goto-char 237) (assert (eq 12 (py-shift-block-right)) nil "py-shift-block-test #1 failed") (assert (eq 8 (py-shift-block-left)) nil "py-shift-block-test #1 failed"))) (defun nesting-if-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- if foo: if bar: pass else: pass else: pass "))) (py-bug-tests-intern 'nesting-if-test-base arg teststring))) (defun nesting-if-test-base () (goto-char 105) (assert (eq 0 (py-compute-indentation)) nil "nesting-if-test failed")) (defun py-end-of-print-statement-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- def usage(): print \"\"\"Error: %s somme errors \"\"\" % ( os.path.basename(sys.argv[0])) def usage(): print '''Error: %s somme errors ''' % ( os.path.basename(sys.argv[0])) "))) (py-bug-tests-intern 'py-end-of-print-statement-base arg teststring))) (defun py-end-of-print-statement-base () (goto-char 66) (sit-for 0.1) (assert (eq 146 (py-end-of-statement)) nil "py-end-of-print-statement-test #1 failed") (assert (eq 160 (py-end-of-statement)) nil "py-end-of-print-statement-test #2 failed") (assert (eq 245 (py-end-of-statement)) nil "py-end-of-print-statement-test #3 failed") ) (defun nested-try-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- def main(argv): grammar = \"foo.xml\" try: opts, args = getopt.getopt(argv, \"hg:d\", [\"help\", \"grammar=\"]) except getopt.GetoptError: usage() try: bla except getopt.GetoptError: asdf() finally: return \"blub\" finally: print \"asdf\" "))) (py-bug-tests-intern 'nested-try-base arg teststring))) (defun nested-try-base () (goto-char 306) (assert (eq 8 (py-compute-indentation)) nil "nested-try-test failed")) (defun nested-if-test-1 (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- if abr: if x > 0: if foo: print \"foo\" elif bar: print \"abasdf\" elif baz: for i in range(100): print i else: print \\\"All done\\\" elif x < 0: print \\\"x is negative\\\" else: print \"asbd\" "))) (py-bug-tests-intern 'nested-if-base-1 arg teststring))) (defun nested-if-base-1 () (goto-char 299) (assert (eq 8 (py-compute-indentation)) nil "nested-if-test-1 failed")) (defun nested-try-finally-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- # Example from: # To: python-ideas@python.org # From: Nikolaus Rath # Date: Tue, 18 Oct 2011 22:14:56 -0400 # Message-ID: <87pqhtafrz.fsf@vostro.rath.org> def my_fun(): allocate_res1() try: # do stuff allocate_res2() try: # do stuff allocate_res3() try: do stuff finally: cleanup_res3() finally: cleanup_res2() finally: cleanup_res1() return "))) (py-bug-tests-intern 'nested-try-finally-base arg teststring))) (defun nested-try-finally-base () (goto-char 431) (assert (eq 12 (py-compute-indentation)) nil "nested-try-finally-test failed")) (defun tqs-list-error-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- class foo(bar, baz): \"\"\" foo is an ABC for matrix containers; i.e., \\\"\\\"\\\"containers of a finite number of orig \"\"\" pass "))) (py-bug-tests-intern 'tqs-list-error-base 2 teststring))) (defun tqs-list-error-base () (goto-char 90) (assert (eq 175 (py-end-of-statement)) nil "tqs-list-error-test failed")) (defun py-smart-indent-eight-test (&optional arg load-branch-function) (interactive "p") (let ((py-smart-indentation t) (teststring (concat py-test-shebang " # -*- coding: utf-8 -*- for x in y: for z in l: for r in t: pass # <--- indents here. Pressing dedents eight spaces (i.e. you can go to column 0 in two presess) "))) (py-bug-tests-intern 'py-smart-indent-eight-base arg teststring))) (defun py-smart-indent-eight-base () (goto-char 104) (assert (eq 4 (py-guess-indent-offset)) nil "py-smart-indent-eight-test #1 failed") (assert (eq 12 (py-compute-indentation)) nil "py-smart-indent-eight-test #2 failed") ) (defun py-install-directory-path-test (&optional arg) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- "))) (py-bug-tests-intern 'py-install-directory-path-base arg teststring))) (defun py-install-directory-path-base () "See if `py-install-directory' is set when required. " (assert (py-install-directory-check) nil "`py-install-directory' not valid. See INSTALL. ")) ;;; (defun switch-windows-on-execute-p-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- print(\"I'm the switch-windows-on-execute-p-test\") "))) (py-bug-tests-intern 'switch-windows-on-execute-p-base arg teststring))) (defun switch-windows-on-execute-p-base () (let ((py-shell-switch-buffers-on-execute-p t) (erg (buffer-name))) (assert (py-execute-buffer) nil "switch-windows-on-execute-p-test failed"))) (defun split-windows-on-execute-p-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- print(\"I'm the `split-windows-on-execute-p-test'\") "))) (py-bug-tests-intern 'split-windows-on-execute-p-base arg teststring))) (defun split-windows-on-execute-p-base () (delete-other-windows) (let ((py-split-windows-on-execute-p t) (py-split-windows-on-execute-function 'split-window-vertically) (py-shell-switch-buffers-on-execute-p t) (erg (current-window-configuration))) (py-execute-buffer) (assert (not (window-full-height-p)) nil "split-windows-on-execute-p-test failed"))) ;; this test is not valable, as python-mode-map often changes (defun py-menu-pyshell-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- print(\"I'm the `py-menu-pyshell-test'\") "))) (py-bug-tests-intern 'py-menu-pyshell-base arg teststring))) (defun py-menu-pyshell-base () (assert (string= "PyShell" (prin1-to-string (car (nth 1 (cdr (nth 17 python-mode-map)))) ;; (car (nth 2 (nth 1 (cdr python-mode-map)))) )) nil "py-menu-pyshell-test failed")) (defun python-dedicated-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "")) (py-bug-tests-intern 'python-dedicated-base arg teststring))) (defun python-dedicated-base () (set-buffer (python-dedicated)) (sit-for 0.1) (assert (string-match "^\*Python-[:alnum:]+*" (buffer-name)) nil "python-dedicated-test failed")) (defun py-separator-char-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "")) (py-bug-tests-intern 'py-separator-char-base arg teststring))) (defun py-separator-char-base () (assert (stringp (py-separator-char)) nil "py-separator-char-test failed")) (defun py-shell-complete-test (&optional arg load-branch-function) (interactive "p") (let ((teststring (concat py-test-shebang " # -*- coding: utf-8 -*- impo"))) (py-bug-tests-intern 'py-shell-complete-base 2 teststring))) (defun py-shell-complete-base () (py-shell-complete) (sit-for 0.1) (assert (looking-back "import") nil "py-shell-complete-test failed")) (defun toggle-force-py-shell-name-p-test (&optional arg) (interactive "p") (let ((teststring "")) (py-bug-tests-intern 'toggle-force-py-shell-name-p-base arg teststring))) (defun toggle-force-py-shell-name-p-base () (let ((old py-force-py-shell-name-p)) (assert (not (eq old (toggle-force-py-shell-name-p))) nil "toggle-force-py-shell-name-p-test failed") (setq py-force-py-shell-name-p old))) (defun before-inline-comment-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- self._blah_blup = 0xe000 # aka: foo bar baz self.nult = {} self.nult['_foobar'] = [] ")) (py-bug-tests-intern 'before-inline-comment-base arg teststring))) (defun before-inline-comment-base () (goto-char 72) (py-end-of-statement) (sit-for 0.1) (assert (eq 106 (point)) nil "before-inline-comment-test failed")) (defun py-end-of-def-inline-comment-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- ##################################### ##################################### def fooBaz( bar ): # version 2003/9/7 if \"Foo:\" == bar \\ or \"[Foo:]\" == bar \\ or \"Foo:]\" == bar \\ or \"Baz:\" == bar: return False return True ")) (py-bug-tests-intern 'py-end-of-def-inline-comment-base arg teststring))) (defun py-end-of-def-inline-comment-base () (let ((py-smart-indentation t)) (goto-char 49) (py-end-of-def-or-class) (assert (eq 311 (point)) nil "py-end-of-def-inline-comment-test failed"))) (defun py-compute-indentation-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -\*- coding: utf-8 -\*- with file(\"foo\" + zeit + \".ending\", 'w') as datei: for i in range(anzahl): bar.dosomething() datei.write(str(baz[i]) + \"\\n\") def foo() ")) (py-bug-tests-intern 'py-compute-indentation-base arg teststring))) (defun py-compute-indentation-base () (goto-char 99) (assert (eq 4 (py-compute-indentation)) nil "py-compute-indentation-test #1 failed") (goto-char 127) (assert (eq 8 (py-compute-indentation)) nil "py-compute-indentation-test #2 failed")) (defun py-end-of-statement-test-1 (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/python # -*- coding: utf-8 -*- print dir() c = Cat() c.hello() #causes error, but emacs tracking fails import sys, os; os.remove('do/something/nasty') # lp:1025000 ")) (py-bug-tests-intern 'py-end-of-statement-1-base arg teststring))) (defun py-end-of-statement-1-base () (goto-char (point-min)) (assert (eq 55 (py-end-of-statement)) nil "py-end-of-statement-test-1 #1 failed") (assert (eq 65 (py-end-of-statement)) nil "py-end-of-statement-test-1 #2 failed") (assert (eq 75 (py-end-of-statement)) nil "py-end-of-statement-test-1 #2 failed") (assert (eq 131 (py-end-of-statement)) nil "py-end-of-statement-test-1 #3 failed") (py-end-of-statement) (assert (eq 163 (point)) nil "py-end-of-statement-test-1 #4 failed")) (defun py-end-of-statement-test-2 (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/python # -*- coding: utf-8 -*- pdb.set_trace() # r'\\fB\$\{\\f([BI])([^}]+)\\f\1([^\\]+)\\fB}(.+)$') result = w_behandlung(aus, i, line, klammer1=w.group(1), klammer2=w.group(2), klammer3=w.group(3), klammer4=w.group(4)) aus.write(result + \"\\n\") ")) (py-bug-tests-intern 'py-end-of-statement-2-base arg teststring))) (defun py-end-of-statement-2-base () (goto-char 59) (py-end-of-statement) (assert (eq 225 (point)) nil "py-end-of-statement-test-2 #1 failed")) (defun key-binding-tests (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- ")) (py-bug-tests-intern 'key-binding-base arg teststring))) (defun key-binding-base () (assert (eq (key-binding [(:)]) 'py-electric-colon) nil "py-electric-colon key-binding test failed") (assert (eq (key-binding [(\#)]) 'py-electric-comment) nil "py-electric-comment key-binding test failed") (assert (eq (key-binding [(delete)]) 'py-electric-delete) nil "py-electric-delete key-binding test failed") (assert (eq (key-binding [(backspace)]) 'py-electric-backspace) nil "py-electric-backspace key-binding test failed") (assert (eq (key-binding [(control backspace)]) 'py-hungry-delete-backwards) nil "py-hungry-delete-backwards key-binding test failed") (assert (eq (key-binding [(control c) (delete)]) 'py-hungry-delete-forward) nil "py-hungry-delete-forward key-binding test failed") (assert (eq (key-binding [(control meta a)]) 'py-beginning-of-def-or-class) nil "py-beginning-of-def-or-class key-binding test failed") (assert (eq (key-binding [(control meta e)]) 'py-end-of-def-or-class) nil "py-end-of-def-or-class key-binding test failed") (assert (eq (key-binding [(control c)(control l)]) 'py-shift-left) nil "py-shift-left key-binding test failed") (assert (eq (key-binding [(control c)(control r)]) 'py-shift-right) nil "py-shift-right key-binding test failed") (assert (eq (key-binding [(control c)(<)]) 'py-shift-left) nil "py-shift-left key-binding test failed") (assert (eq (key-binding [(control c)(>)]) 'py-shift-right) nil "py-shift-right key-binding test failed") (assert (eq (key-binding [(control c)(tab)]) 'py-indent-region) nil "py-indent-region key-binding test failed") (assert (eq (key-binding [(control c)(:)]) 'py-guess-indent-offset) nil "py-guess-indent-offset key-binding test failed") (assert (eq (key-binding [(control c)(control c)]) 'py-execute-buffer) nil "py-execute-buffer key-binding test failed") (assert (eq (key-binding [(control c)(control m)]) 'py-execute-import-or-reload) nil "py-execute-import-or-reload key-binding test failed") (assert (eq (key-binding [(control c)(control s)]) 'py-execute-string) nil "py-execute-string key-binding test failed") (assert (eq (key-binding [(control c)(|)]) 'py-execute-region) nil "py-execute-region key-binding test failed") (assert (eq (key-binding [(control meta x)]) 'py-execute-def-or-class) nil "py-execute-def-or-class key-binding test failed") (assert (eq (key-binding [(control c)(!)]) 'py-shell) nil "py-shell key-binding test failed") (assert (eq (key-binding [(control c)(control t)]) 'py-toggle-shell) nil "py-toggle-shell key-binding test failed") (assert (eq (key-binding [(control meta h)]) 'py-mark-def-or-class) nil "py-mark-def-or-class key-binding test failed") (assert (eq (key-binding [(control c)(control k)]) 'py-mark-block-or-clause) nil "py-mark-block-or-clause key-binding test failed") (assert (eq (key-binding [(control c)(\.)]) 'py-expression) nil "py-expression key-binding test failed") (assert (eq (key-binding [(control c)(control d)]) 'py-pdbtrack-toggle-stack-tracking) nil "py-pdbtrack-toggle-stack-tracking key-binding test failed") (assert (eq (key-binding [(control c)(control f)]) 'py-sort-imports) nil "py-sort-imports key-binding test failed") (assert (eq (key-binding [(control c)(\#)]) 'py-comment-region) nil "py-comment-region key-binding test failed") (assert (eq (key-binding [(control c)(\?)]) 'py-describe-mode) nil "py-describe-mode key-binding test failed") (assert (eq (key-binding [(control c)(control e)]) 'py-help-at-point) nil "py-describe-symbol key-binding test failed") (assert (eq (key-binding [(control c)(-)]) 'py-up-exception) nil "py-up-exception key-binding test failed") (assert (eq (key-binding [(control c)(=)]) 'py-down-exception) nil "py-down-exception key-binding test failed") (assert (eq (key-binding [(control x) (n) (d)]) 'py-narrow-to-defun) nil "py-narrow-to-defun key-binding test failed") (assert (eq (key-binding [(control c)(control b)]) 'py-submit-bug-report) nil "py-submit-bug-report key-binding test failed") (assert (eq (key-binding [(control c)(control v)]) 'py-version) nil "py-version key-binding test failed") (assert (eq (key-binding [(control c)(control w)]) 'py-pychecker-run) nil "py-pychecker-run key-binding test failed") (assert (eq (key-binding (kbd "TAB")) 'py-indent-line) nil "py-indent-line key-binding test failed") (assert (eq (key-binding [(control c)(control p)]) 'py-beginning-of-statement) nil "py-beginning-of-statement key-binding test failed") (assert (eq (key-binding [(control c)(control n)]) 'py-end-of-statement) nil "py-end-of-statement key-binding test failed") (assert (eq (key-binding [(control j)]) 'py-newline-and-indent) nil "py-newline-and-indent key-binding test failed") (assert (eq (key-binding (kbd "RET")) 'py-newline-and-indent) nil "py-newline-and-indent key-binding test failed")) (defun py-smart-operator-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- foo ")) (py-bug-tests-intern 'py-smart-operator-base arg teststring))) (defun py-smart-operator-base () (python-mode) (let ((py-smart-operator-mode-p t)) (py-smart-operator-mode-p-on) (goto-char 52) (save-excursion (smart-operator-<)) (assert (looking-at " < ") nil "smart-operator-test \"smart-operator-<\" failed") (delete-region (point) (line-end-position)) (save-excursion (smart-operator->)) (assert (looking-at " > ") nil "smart-operator-test \"smart-operator->\" failed") (delete-region (point) (line-end-position)) (save-excursion (smart-operator-%)) (assert (looking-at " % ") nil "smart-operator-test \"smart-operator-%\" failed") (delete-region (point) (line-end-position)) (save-excursion (smart-operator-+)) (assert (looking-at " \\+ ") nil "smart-operator-test \"smart-operator-+\" failed") (delete-region (point) (line-end-position)) (save-excursion (smart-operator--)) (assert (looking-at " - ") nil "smart-operator-test \"smart-operator--\" failed") (delete-region (point) (line-end-position)) (save-excursion (smart-operator-*)) (assert (looking-at " * ") nil "smart-operator-test \"smart-operator-*\" failed") (delete-region (point) (line-end-position)) (save-excursion (smart-operator-&)) (assert (looking-at " & ") nil "smart-operator-test \"smart-operator-&\" failed") ;; (delete-region (point) (line-end-position)) ;; (save-excursion (smart-operator-!)) ;; (assert (looking-at "! ") nil "smart-operator-test \"smart-operator-!\" failed") (delete-region (point) (line-end-position)) (save-excursion (smart-operator-?)) (assert (looking-at "? ") nil "smart-operator-test \"smart-operator-?\" failed") (delete-region (point) (line-end-position)) (save-excursion (smart-operator-\,)) (assert (looking-at ", ") nil "smart-operator-test \"smart-operator-\,\" failed") (delete-region (point) (line-end-position)) (save-excursion (smart-operator-.)) (assert (looking-at ".") nil "smart-operator-test \"smart-operator-.\" failed") (when py-verbose-p (message "%s" "smart-operator-test passed")))) ;; broken (defun augmented-assigment-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- foo")) (py-bug-tests-intern 'augmented-assigment-base arg teststring))) (defun augmented-assigment-base () (let ((py-smart-operator-mode-p t)) (smart-operator-mode-on) (goto-char 52) (save-excursion (smart-operator-<) (insert "=")) (assert (looking-at " <= ") nil "augmented-assigment-test \"smart-operator-<\" failed") (delete-region (point) (line-end-position)) (save-excursion (smart-operator->)) (assert (looking-at " >= ") nil "augmented-assigment-test \"smart-operator->\" failed") (delete-region (point) (line-end-position)) (save-excursion (smart-operator-%)) (assert (looking-at " %= ") nil "augmented-assigment-test \"smart-operator-%\" failed") (delete-region (point) (line-end-position)) (save-excursion (smart-operator-+)) (assert (looking-at " \\+= ") nil "augmented-assigment-test \"smart-operator-+\" failed") (delete-region (point) (line-end-position)) (save-excursion (smart-operator--)) (assert (looking-at " -= ") nil "augmented-assigment-test \"smart-operator--\" failed") (delete-region (point) (line-end-position)) (save-excursion (smart-operator-*)) (assert (looking-at " \\*= ") nil "augmented-assigment-test \"smart-operator-*\" failed") (delete-region (point) (line-end-position)) (save-excursion (smart-operator-&)) (assert (looking-at " &= ") nil "augmented-assigment-test \"smart-operator-&\" failed") (delete-region (point) (line-end-position)) (save-excursion (smart-operator-!)) (assert (looking-at " != ") nil "augmented-assigment-test \"smart-operator-!\" failed") (delete-region (point) (line-end-position)) (save-excursion (smart-operator-?)) (assert (looking-at " \\?= ") nil "augmented-assigment-test \"smart-operator-?\" failed") ;; (delete-region (point) (line-end-position)) ;; (save-excursion (smart-operator-\,)) ;; (assert (looking-at " ,= ") nil "augmented-assigment-test \"smart-operator-\,\" failed") ;; (delete-region (point) (line-end-position)) ;; (save-excursion (smart-operator-.)) ;; (assert (looking-at " .= ") nil "augmented-assigment-test \"smart-operator-.\" failed") ;; (assert nil "smart-operator-test failed") (when py-verbose-p (message "%s" "augmented-assigment-test passed")))) (defun py-smart-operator-repeat-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- foo ")) (py-bug-tests-intern 'py-smart-operator-repeat-base arg teststring))) (defun py-smart-operator-repeat-base () (let ((py-smart-operator-mode-p t)) (py-smart-operator-mode-on) (goto-char 52) (setq last-command nil) (save-excursion (call-interactively 'smart-operator-> t) (setq last-command 'smart-operator->) (setq this-command 'smart-operator->) ;; (message "%s" this-command-keys-vector) (call-interactively 'smart-operator->)) (assert (looking-at " >> ") nil "smart-operator-test \"smart-operator->\" failed") (delete-region (point) (line-end-position)) (setq last-command nil) (save-excursion (call-interactively 'smart-operator-<) (setq last-command 'smart-operator-<) (setq this-command 'smart-operator-<) (call-interactively 'smart-operator-<)) (assert (looking-at " << ") nil "smart-operator-test \"smart-operator-<\" failed") (delete-region (point) (line-end-position)) (setq last-command nil) (save-excursion (smart-operator-%)(setq this-command 'smart-operator-%)(setq last-command 'smart-operator-%)(smart-operator-%)) (assert (looking-at " %% ") nil "smart-operator-test \"smart-operator-%\" failed") (delete-region (point) (line-end-position)) (setq last-command nil) (save-excursion (smart-operator-+)(setq this-command 'smart-operator-+)(setq last-command 'smart-operator-+)(smart-operator-+)) (assert (looking-at " \\+\\+ ") nil "smart-operator-test \"smart-operator-+\" failed") (delete-region (point) (line-end-position)) (setq last-command nil) (save-excursion (smart-operator--)(setq this-command 'smart-operator--)(setq last-command 'smart-operator--)(smart-operator--)) (assert (looking-at " -- ") nil "smart-operator-test \"smart-operator--\" failed") (delete-region (point) (line-end-position)) (setq last-command nil) (save-excursion (smart-operator-*)(setq this-command 'smart-operator-*)(setq last-command 'smart-operator-*)(smart-operator-*)) (assert (looking-at " ** ") nil "smart-operator-test \"smart-operator-*\" failed") (delete-region (point) (line-end-position)) (setq last-command nil) (save-excursion (smart-operator-&)(setq this-command 'smart-operator-&)(setq last-command 'smart-operator-&)(smart-operator-&)) (assert (looking-at " && ") nil "smart-operator-test \"smart-operator-&\" failed") (delete-region (point) (line-end-position)) (setq last-command nil) (save-excursion (smart-operator-!)(setq this-command 'smart-operator-!)(setq last-command 'smart-operator-!)(smart-operator-!)) (assert (looking-at "!! ") nil "smart-operator-test \"smart-operator-!\" failed") (delete-region (point) (line-end-position)) (setq last-command nil) (save-excursion (smart-operator-?)(setq this-command 'smart-operator-?)(setq last-command 'smart-operator-?)(smart-operator-?)) (assert (looking-at "\\?\\? ") nil "smart-operator-test \"smart-operator-?\" failed") (delete-region (point) (line-end-position)) (setq last-command nil) (save-excursion (smart-operator-\,)(setq this-command 'smart-operator-\,)(setq last-command 'smart-operator-\,)(smart-operator-\,)) (assert (looking-at ",, ") nil "smart-operator-test \"smart-operator-\,\" failed") (delete-region (point) (line-end-position)) (setq last-command nil) (save-excursion (smart-operator-.)(setq this-command 'smart-operator-.)(setq last-command 'smart-operator-.)(smart-operator-.)) (assert (looking-at "..") nil "smart-operator-test \"smart-operator-.\" failed") (when py-verbose-p (message "%s" "py-smart-operator-test passed")))) (defun py-switch-imenu-index-function-test (&optional arg) (interactive "p") (let ((teststring python-mode-teststring)) (py-bug-tests-intern 'py-switch-imenu-index-function-base arg teststring))) (defun py-switch-imenu-index-function-base () (assert (listp imenu--index-alist) nil "py-switch-imenu-index-function-test failed") (assert (py-switch-imenu-index-function) nil "py-switch-imenu-index-function-test failed") (assert (listp imenu--index-alist) nil "py-switch-imenu-index-function-test failed")) (defun py-bol-moves-test (&optional arg load-branch-function) (interactive "p") (let ((teststring python-mode-teststring)) (py-bug-tests-intern 'py-bol-moves-base arg teststring))) (defun py-bol-moves-base () (message "comment-start: %s" comment-start) (goto-char 592) ;; (sit-for 0.1) (assert (eq 561 (py-up-clause-bol)) nil "py-up-clause-bol-test of `py-moves-test' failed") (message "%s" "py-up-clause-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 317 (py-up-block-or-clause-bol)) nil "py-up-block-or-clause-bol-test of `py-moves-test' failed") (message "%s" "py-up-block-or-clause-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 234 (py-up-def-bol)) nil "py-up-def-bol-test of `py-moves-test' failed") (message "%s" "py-up-def-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 1 (py-up-class-bol)) nil "py-up-class-bol-test of `py-moves-test' failed") (message "%s" "py-up-class-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 234 (py-up-def-or-class-bol)) nil "py-up-def-or-class-bol-test of `py-moves-test' failed") (message "%s" "py-up-def-or-class-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 317 (py-up-block-bol)) nil "py-up-block-bol-test of `py-moves-test' failed") (message "%s" "py-up-block-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 317 (py-up-minor-block-bol)) nil "py-up-minor-block-bol-test of `py-moves-test' failed") (message "%s" "py-up-minor-block-bol-test of `py-moves-test' done") (goto-char 592) ;; (sit-for 0.1) (assert (eq 325 (py-up-block)) nil "py-up-block-test of `py-moves-test' failed") (message "%s" "py-up-block-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 325 (py-up-minor-block)) nil "py-up-minor-block-test of `py-moves-test' failed") (message "%s" "py-up-minor-block-test of `py-moves-test' done") (goto-char 592) ;; (sit-for 0.1) (assert (eq 569 (py-up-clause)) nil "py-up-clause-test of `py-moves-test' failed") (message "%s" "py-up-clause-test of `py-moves-test' done") (goto-char 592) ;; (sit-for 0.1) (assert (eq 569 (py-up-block-or-clause)) nil "py-up-block-or-clause-test of `py-moves-test' failed") (message "%s" "py-up-block-or-clause-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 238 (py-up-def)) nil "py-up-def-test of `py-moves-test' failed") (message "%s" "py-up-def-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 1 (py-up-class)) nil "py-up-class-test of `py-moves-test' failed") (message "%s" "py-up-class-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 238 (py-up-def-or-class)) nil "py-up-def-or-class-test of `py-moves-test' failed") (message "%s" "py-up-def-or-class-test of `py-moves-test' done") (goto-char 264) ;; (sit-for 0.1) (assert (eq 317 (py-down-block-bol)) nil "py-down-block-bol-test of `py-moves-test' failed") (message "%s" "py-down-block-bol-test of `py-moves-test' done") (goto-char 561) ;; (sit-for 0.1) (assert (eq 594 (py-down-clause-bol)) nil "py-down-clause-bol-test of `py-moves-test' failed") (message "%s" "py-down-clause-bol-test of `py-moves-test' done") (goto-char 264) ;; (sit-for 0.1) (assert (eq 317 (py-down-block-or-clause-bol)) nil "py-down-block-or-clause-bol-test of `py-moves-test' failed") (message "%s" "py-down-block-or-clause-bol-test of `py-moves-test' done") (goto-char (point-min)) (assert (eq 142 (py-down-def-bol)) nil "py-down-def-bol-test of `py-moves-test' failed") (message "%s" "py-down-def-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (not (py-down-class-bol)) nil "py-down-class-bol-test of `py-moves-test' failed") (message "%s" "py-down-class-bol-test of `py-moves-test' done") (goto-char (point-min)) (assert (eq 142 (py-down-def-or-class-bol)) nil "py-down-def-or-class-bol-test of `py-moves-test' failed") (message "%s" "py-down-def-or-class-bol-test of `py-moves-test' done") (goto-char 264) ;; (sit-for 0.1) (assert (eq 325 (py-down-block)) nil "py-down-block-test of `py-moves-test' failed") (message "%s" "py-down-block-test of `py-moves-test' done") (goto-char 264) ;; (sit-for 0.1) (assert (eq 317 (py-down-block-bol)) nil "py-down-block-bol-test of `py-moves-test' failed") (message "%s" "py-down-block-bol-test of `py-moves-test' done") (goto-char 264) ;; (sit-for 0.1) (assert (eq 325 (py-down-minor-block)) nil "py-down-minor-block-test of `py-moves-test' failed") (message "%s" "py-down-minor-block-test of `py-moves-test' done") (goto-char 264) ;; (sit-for 0.1) (assert (eq 317 (py-down-minor-block-bol)) nil "py-down-minor-block-bol-test of `py-moves-test' failed") (message "%s" "py-down-minor-block-bol-test of `py-moves-test' done") (goto-char 569) ;; (sit-for 0.1) (assert (eq 602 (py-down-clause)) nil "py-down-clause-test of `py-moves-test' failed") (message "%s" "py-down-clause-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 569 (py-down-block-or-clause)) nil "py-down-block-or-clause-test of `py-moves-test' failed") (message "%s" "py-down-block-or-clause-test of `py-moves-test' done") (goto-char (point-min)) (assert (eq 146 (py-down-def)) nil "py-down-def-test of `py-moves-test' failed") (message "%s" "py-down-def-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (not (py-down-class)) nil "py-down-class-test of `py-moves-test' failed") (message "%s" "py-down-class-test of `py-moves-test' done") (goto-char (point-min)) (assert (eq 146 (py-down-def-or-class)) nil "py-down-def-or-class-test of `py-moves-test' failed") (message "%s" "py-down-def-or-class-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 332 (py-beginning-of-statement-bol)) nil "py-beginning-of-statement-bol-test of `py-moves-test' failed") (message "%s" "py-beginning-of-statement-bol-test of `py-moves-test' done") (goto-char 410) (sit-for 0.1) (assert (eq 317 (py-beginning-of-block-bol)) nil "py-beginning-of-block-bol-test of `py-moves-test' failed") (message "%s" "py-beginning-of-block-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 317 (py-beginning-of-clause-bol)) nil "py-beginning-of-clause-bol-test of `py-moves-test' failed") (message "%s" "py-beginning-of-clause-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 317 (py-beginning-of-block-or-clause-bol)) nil "py-beginning-of-block-or-clause-bol-test of `py-moves-test' failed") (message "%s" "py-beginning-of-block-or-clause-bol-test of `py-moves-test' done") (assert (eq 1 (py-beginning-of-class-bol)) nil "py-beginning-of-class-bol-test of `py-moves-test' failed") (message "%s" "py-beginning-of-class-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 234 (py-beginning-of-def-or-class-bol)) nil "py-beginning-of-def-or-class-bol-test of `py-moves-test' failed") (message "%s" "py-beginning-of-def-or-class-bol-test of `py-moves-test' done") (message "%s" "py-end-of-block-bol-test of `py-moves-test' done") (goto-char 576) ;; (sit-for 0.1) (assert (eq 594 (py-end-of-clause-bol)) nil "py-end-of-clause-bol-test of `py-moves-test' failed") (message "%s" "py-end-of-clause-bol-test of `py-moves-test' done") (goto-char 576) ;; (sit-for 0.1) (assert (eq 594 (py-end-of-block-or-clause-bol)) nil "py-end-of-block-or-clause-bol-test of `py-moves-test' failed") (message "%s" "py-end-of-block-or-clause-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 627 (py-end-of-def-bol)) nil "py-end-of-def-bol-test of `py-moves-test' failed") (message "%s" "py-end-of-def-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 627 (py-end-of-class-bol)) nil "py-end-of-class-bol-test of `py-moves-test' failed") (message "%s" "py-end-of-class-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 627 (py-end-of-def-or-class-bol)) nil "py-end-of-def-or-class-bol-test of `py-moves-test' failed") (message "%s" "py-end-of-def-or-class-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 561 (py-end-of-statement-bol)) nil "py-end-of-statement-bol-test of `py-moves-test' failed") (message "%s" "py-end-of-statement-bol-test of `py-moves-test' done") (goto-char 410) ;; (sit-for 0.1) (assert (eq 234 (py-beginning-of-def-bol)) nil "py-beginning-of-def-bol-test of `py-moves-test' failed") (message "%s" "py-beginning-of-def-bol-test of `py-moves-test' done") ) (defun py-guess-indent-offset-test (&optional arg) (interactive "p") (let (py-smart-indentation (teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- ##################################### ##################################### def fooBaz( bar ): # version 2003/9/7 if \"Foo:\" == bar \\ or \"[Foo:]\" == bar \\ or \"Foo:]\" == bar \\ or \"Baz:\" == bar: return False return True ")) (py-bug-tests-intern 'py-guess-indent-offset-base arg teststring))) (defun py-guess-indent-offset-base () (goto-char 49) (assert (eq 4 (py-guess-indent-offset)) nil "py-guess-indent-offset-test #1 failed") (message "%s" "py-guess-indent-offset-test #1 done") (goto-char 168) (assert (eq 2 (py-guess-indent-offset)) nil "py-guess-indent-offset-test #2 failed") (message "%s" "py-guess-indent-offset-test #2 done") (goto-char 251) (assert (eq 4 (py-guess-indent-offset)) nil "py-guess-indent-offset-test #3 failed") (message "%s" "py-guess-indent-offset-test #3 done") (goto-char 280) (assert (eq 4 (py-guess-indent-offset)) nil "py-guess-indent-offset-test #4 failed") (message "%s" "py-guess-indent-offset-test #4 done") (goto-char 298) ;; indent might be eithe 4 or 2 (assert (eq 2 (py-guess-indent-offset)) nil "py-guess-indent-offset-test #5 failed") (message "%s" "py-guess-indent-offset-test #5 done")) (defun autopair-mode-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- ")) (py-bug-tests-intern 'autopair-on-base arg teststring))) (defun autopair-on-base () (assert (py-autopair-mode-on) nil "autopair-mode-test #1 failed") (message "%s" "autopair-mode-test #1 done") (assert (not (py-toggle-autopair-mode)) nil "autopair-mode-test #2 failed")) (message "%s" "autopair-mode-test #2 done") (defun py-smart-indentation-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- ")) (py-bug-tests-intern 'py-smart-indentation-base arg teststring))) (defun py-smart-indentation-base () (assert (py-smart-indentation-on) nil "smart-indentation-test #1 failed") (message "%s" "smart-indentation-test #1 done") (assert (not (py-smart-indentation-off)) nil "smart-indentation-test #2 failed") (message "%s" "smart-indentation-test #2 done") (assert (py-toggle-smart-indentation) nil "smart-indentation-test #3 failed")) (message "%s" "smart-indentation-test #3 done") (defun py-highlight-indentation-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- ")) (py-bug-tests-intern 'py-highlight-indentation-base arg teststring))) (defun py-highlight-indentation-base () (py-highlight-indentation-on) (assert highlight-indent-active nil "highlight-indentation-test #1 failed") (message "%s" "highlight-indentation-test #1 done") (py-highlight-indentation-off) (assert (not highlight-indent-active) nil "highlight-indentation-test #2 failed") (message "%s" "highlight-indentation-test #2 done") (py-toggle-highlight-indentation) (assert highlight-indent-active nil "highlight-indentation-test #3 failed")) (message "%s" "highlight-indentation-test #3 done") (defun py-fill-string-django-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def foo() ''' asdf' asdf asdf asdf asdf asdfasdf asdfasdf a asdf asdf asdf asdfasdfa asdf asdf asdf asdf''' ")) (py-bug-tests-intern 'py-fill-string-django-base arg teststring))) (defun py-fill-string-django-base () (sit-for 0.1) (goto-char 99) (py-fill-string-django) (beginning-of-line) (sit-for 0.1) (assert (nth 8 (syntax-ppss)) t nil "py-fill-string-django-test #1 failed") (message "%s" "py-fill-string-django-test #1 done") (goto-char (nth 8 (syntax-ppss))) (sit-for 1) (assert (looking-at (concat py-string-delim-re "$")) t nil "py-fill-string-django-test #2 failed") (message "%s" "$") ) (defun py-fill-string-onetwo-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def foo() ''' asdf' asdf asdf asdf asdf asdfasdf asdfasdf a asdf asdf asdf asdfasdfa asdf asdf asdf asdf''' ")) (py-bug-tests-intern 'py-fill-string-onetwo-base arg teststring))) (defun py-fill-string-onetwo-base () (sit-for 0.1) (goto-char 99) (py-fill-string-onetwo) (forward-line 2) (assert (empty-line-p) nil "py-fill-string-onetwo-test #1 failed") (message "%s" "py-fill-string-onetwo-test #1 done") (goto-char (nth 8 (syntax-ppss))) (assert (looking-at (concat py-string-delim-re "$")) nil "py-fill-string-onetwo-test #2 failed")) (message "%s" "$") (defun py-fill-string-pep-257-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def foo() ''' asdf' asdf asdf asdf asdf asdfasdf asdfasdf a asdf asdf asdf asdfasdfa asdf asdf asdf asdf''' ")) (py-bug-tests-intern 'py-fill-string-pep-257-base arg teststring))) (defun py-fill-string-pep-257-base () (sit-for 0.1) (goto-char 99) (py-fill-string-pep-257) (forward-line 1) (assert (nth 3 (syntax-ppss)) nil "py-fill-string-pep-257-test #1 failed") (message "%s" "py-fill-string-pep-257-test #1 done") (assert (empty-line-p) nil "py-fill-string-pep-257-test #2 failed")) (message "%s" "py-fill-string-pep-257-test #2 done") (defun py-fill-string-pep-257-nn-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def foo() ''' asdf' asdf asdf asdf asdf asdfasdf asdfasdf a asdf asdf asdf asdfasdfa asdf asdf asdf asdf''' ")) (py-bug-tests-intern 'py-fill-string-pep-257-nn-base arg teststring))) (defun py-fill-string-pep-257-nn-base () (sit-for 0.1) (goto-char 99) (py-fill-string-pep-257-nn) (assert (nth 3 (syntax-ppss)) nil "py-fill-string-pep-257-nn-test #1 failed") (message "%s" "py-fill-string-pep-257-nn-test #1 done") (re-search-forward "py-string-delim-re" nil t 1) (assert (not (empty-line-p)) nil "py-fill-string-pep-257-non-nil-test #2 failed")) (message "%s" "py-fill-string-pep-257-non-nil-test #2 done") (defun py-fill-string-symmetric-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def foo(): ''' asdf' asdf asdf asdf asdf asdfasdf asdfasdf a asdf asdf asdf asdfasdfa asdf asdf asdf asdf asdf' asdf asdf asdf asdf asdfasdf asdfasdf a asdf asdf asdf asdfasdfa asdf asdf asdf asdf asdf' asdf asdf asdf asdf asdfasdf asdfasdf a asdf asdf asdf asdfasdfa asdf asdf asdf asdf asdf' asdf asdf asdf asdf asdfasdf asdfasdf a asdf asdf asdf asdfasdfa asdf asdf asdf asdf ''' pass ")) (py-bug-tests-intern 'py-fill-string-symmetric-base arg teststring))) (defun py-fill-string-symmetric-base () (goto-char 84) (py-fill-string-symmetric) (sit-for 0.1) (forward-line -4) (assert (empty-line-p) nil "py-fill-string-symmetric-test failed") (message "%s" "py-fill-string-symmetric-test done") (re-search-forward py-string-delim-re nil t 3) (goto-char (match-beginning 0)) (assert (looking-at (concat py-string-delim-re "$")) nil "py-fill-string-symmetric-test failed") (message "%s" "$") ) (defun py-electric-yank-test (&optional arg) (interactive "p") (let ((teststring python-mode-teststring)) (py-bug-tests-intern 'py-electric-yank-base arg teststring))) (defun py-electric-yank-base () (let ((py-electric-yank-active-p t) (kill-new "asdf")) (goto-char 610) (py-electric-delete) (assert (eq 8 (current-indentation)) nil "py-electric-yank-test #1 failed, `py-electric-delete' ") (message "%s" "py-electric-yank-test #1 failed, `py-electric-delete' ") (end-of-line) (py-electric-yank) (assert (eq 12 (current-indentation)) nil "py-electric-yank-test #2 failed"))) (message "%s" "py-electric-yank-test #2 done") (defun py-down-statement-test (&optional arg) (interactive "p") (let ((teststring python-mode-teststring)) (py-bug-tests-intern 'py-down-statement-base arg teststring))) (defun py-down-statement-base () (goto-char (point-min)) (assert (eq 31 (py-down-statement)) nil "py-down-statement-test failed")) (message "%s" "py-down-statement-test done") (defun py-nested-block-or-clause-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- if foo: if bar: if True: pass elif False: pass else: pass elif baz: pass elif foo2: if bar2: pass elif baz2: pass else: pass else: pass ")) (py-bug-tests-intern 'py-nested-block-or-clause-base arg teststring))) (defun py-nested-block-or-clause-base () (goto-char 48) (assert (eq 299 (py-end-of-block)) nil "py-nested-block-or-clause-test #1 failed") (message "%s" "py-nested-block-or-clause-test #1 done") (goto-char 60) (assert (eq 196 (py-end-of-block)) nil "py-nested-block-or-clause-test #2 failed") (message "%s" "py-nested-block-or-clause-test #2 done") (goto-char 76) (assert (eq 169 (py-end-of-block)) nil "py-nested-block-or-clause-test #3 failed") (message "%s" "py-nested-block-or-clause-test #3 done") (goto-char 48) (assert (eq 196 (py-end-of-clause)) nil "py-nested-block-or-clause-test #4 failed") (message "%s" "py-nested-block-or-clause-test #4 done") (goto-char 60) (assert (eq 169 (py-end-of-clause)) nil "py-nested-block-or-clause-test #5 failed") (message "%s" "py-nested-block-or-clause-test #5 done") (goto-char 85) (assert (eq 101 (py-end-of-clause)) nil "py-nested-block-or-clause-test #6 failed") (message "%s" "py-nested-block-or-clause-test #6 done") (goto-char 291) (assert (eq 285 (py-beginning-of-clause)) nil "py-nested-block-or-clause-test #7 failed") (message "%s" "py-nested-block-or-clause-test #7 done") (sit-for 0.1) (assert (eq 197 (py-beginning-of-clause)) nil "py-nested-block-or-clause-test #8 failed") (message "%s" "py-nested-block-or-clause-test #8 done") (assert (eq 48 (py-beginning-of-block-or-clause)) nil "py-nested-block-or-clause-test #9 failed") (message "%s" "py-nested-block-or-clause-test #9 done") (goto-char 284) (assert (eq 266 (py-beginning-of-block-or-clause)) nil "py-nested-block-or-clause-test #10 failed") (message "%s" "py-nested-block-or-clause-test #10 done") (assert (eq 238 (py-beginning-of-block-or-clause)) nil "py-nested-block-or-clause-test #11 failed") (message "%s" "py-nested-block-or-clause-test #11 done") (assert (eq 212 (py-beginning-of-block-or-clause)) nil "py-nested-block-or-clause-test #12 failed") (message "%s" "py-nested-block-or-clause-test #12 done") (assert (eq 197 (py-beginning-of-block-or-clause)) nil "py-nested-block-or-clause-test #13 failed") (message "%s" "py-nested-block-or-clause-test #13 done") (goto-char 196) (assert (eq 174 (py-beginning-of-block-or-clause)) nil "py-nested-block-or-clause-test #14 failed") (message "%s" "py-nested-block-or-clause-test #14 done") (goto-char 169) (assert (eq 147 (py-beginning-of-block-or-clause)) nil "py-nested-block-or-clause-test #15 failed") (message "%s" "py-nested-block-or-clause-test #15 done") (assert (eq 110 (py-beginning-of-block-or-clause)) nil "py-nested-block-or-clause-test #16 failed") (message "%s" "py-nested-block-or-clause-test #16 done") (assert (eq 76 (py-beginning-of-block-or-clause)) nil "py-nested-block-or-clause-test #17 failed") (message "%s" "py-nested-block-or-clause-test #17 done") (assert (eq 60 (py-beginning-of-block-or-clause)) nil "py-nested-block-or-clause-test #18 failed") (message "%s" "py-nested-block-or-clause-test #18 done") ) (setq py-travel-current-indent-test-start 12) (defun py-travel-current-indent-test (&optional indent orig) (interactive) (let ((orig (point)) (indent (or indent py-travel-current-indent-test-start (string-to-number (read-from-minibuffer "Indent to travel:"))))) (py-travel-current-indent indent orig))) (defun docstring-style-switches-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- ")) (py-bug-tests-intern 'docstring-style-switches-base arg teststring))) (defun docstring-style-switches-base () (py-django-docstring-style-on) (assert (eq 'django py-docstring-style) nil "django not py-docstring-style") (py-onetwo-docstring-style-on) (assert (eq 'onetwo py-docstring-style) nil "onetwo not py-docstring-style") (py-pep-257-docstring-style-on) (assert (eq 'pep-257 py-docstring-style) nil "pep-257 not py-docstring-style") (py-pep-257-nn-docstring-style-on) (assert (eq 'pep-257-nn py-docstring-style) nil "pep-257-nn not py-docstring-style") (py-symmetric-docstring-style-on) (assert (eq 'symmetric py-docstring-style) nil "symmetric not py-docstring-style") ) (defun forward-sexp-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- def usage(): print(\"\"\"Fehler: %s Es muß die aufzurufende Ziehungszahl als Argument angegeben werden: 'python roulette.py 1, 'python roulette.py 2', ... 'python roulette.py n'. \"\"\" % ( os.path.basename(sys.argv[0]))) ")) (py-bug-tests-intern 'forward-sexp-base arg teststring))) (defun forward-sexp-base () ;; (message "forward-sexp-function: %s" forward-sexp-function) (goto-char 71) (sit-for 0.1) (forward-sexp 1) (sit-for 0.1) (assert (eq 231 (point)) nil "forward-sexp-test failed")) (defun nested-if-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- if foo: bar = \"p\" elif bar: if baz == True: print(\" \") else: bar = baz ")) (py-bug-tests-intern 'nested-if-base arg teststring))) (defun nested-if-base () (py-beginning-of-block) (assert (eq 48 (point)) nil "nested-if-test #1 failed") (goto-char 118) (py-beginning-of-block) (assert (eq 84 (point)) nil "nested-if-test #2 failed") (py-beginning-of-block) (assert (eq 48 (point)) nil "nested-if-test #3 failed")) (defun py-execute-region-error-test (&optional arg) (interactive "p") (let ((teststring "with file(\"roulette-\" + zeit + \".csv\", 'w') as datei: for i in range(anzahl): klauf.pylauf() datei.write(str(spiel[i]) + \"\\n\") print(F) ")) (py-bug-tests-intern 'py-execute-region-base arg teststring))) (defun py-execute-region-base () (goto-char 152) (push-mark) (end-of-line) (py-execute-region (line-beginning-position) (line-end-position)) (set-buffer "*Python*") (goto-char (point-max)) (switch-to-buffer (current-buffer)) (assert (and (re-search-backward py-shell-prompt-regexp nil t 2) (search-forward "line 5")) nil "py-execute-region-test failed")) (defun py-execute-statement-error-test (&optional arg) (interactive "p") (let ((teststring "with file(\"roulette-\" + zeit + \".csv\", 'w') as datei: for i in range(anzahl): klauf.pylauf() datei.write(str(spiel[i]) + \"\\n\") print(F) ")) (py-bug-tests-intern 'py-execute-statement-base arg teststring))) (defun py-execute-statement-base () (goto-char 152) (push-mark) (end-of-line) (py-execute-statement) (set-buffer "*Python*") (goto-char (point-max)) (switch-to-buffer (current-buffer)) (assert (and (re-search-backward py-shell-prompt-regexp nil t 2) (search-forward "line 5")) nil "py-execute-statement-test failed")) (provide 'python-mode-test) python-mode.el-6.1.3/test/pars-part-output.el0000644000000000000000000000660012016643135021074 0ustar rootroot00000000000000;;; pars-part-output.el --- `parse-partial-sexp' and `syntax-ppss' ;; Author: Andreas Roehler , unless indicated otherwise ;; Keywords: tools, lisp ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;; Commentary: ;; Prints commented output ;; (global-set-key (kbd "") 'parse-partial-sexp-iac) ;; (global-set-key (kbd "") 'syntax-ppss-iac) (defun parse-partial-sexp-commentstop (&optional arg) "Interactive form of parse-partial-sexp output listed with documentation" (interactive "P") (save-excursion (ppse-documented-base 'parse-partial-sexp (point) arg t))) (defun parse-partial-sexp-iac (&optional arg) "Interactive form of parse-partial-sexp output listed with documentation" (interactive "P") (save-excursion (ppse-documented-base 'parse-partial-sexp (point) arg nil))) (defun syntax-ppss-iac (&optional arg) "Syntax-ppss made interactive output listed with documentation" (interactive "P") (ppse-documented-base 'syntax-ppss (point) arg nil)) (defun ppse-documented-base (funktion end arg commentstop) "Parse partial symbolic expression list results below its documentation " (let* ((start (point-min)) (scan (condition-case nil (scan-lists (point) 1 0) (error nil))) (rekord (if (or (eq this-command 'parse-partial-sexp-iac) (eq this-command 'parse-partial-sexp-commentstop)) (funcall funktion start end nil nil nil commentstop) (funcall funktion end))) (doku (documentation 'parse-partial-sexp)) (doku-abr (list (substring doku (1+ (string-match ":" doku))))) (count 0)) (if arg (what-cursor-position) (message "%s LEND: %s" rekord scan)) (with-output-to-temp-buffer (concat (format "%s" funktion) "-output") (set-buffer standard-output) (insert (car doku-abr)) (goto-char (point-min)) (re-search-forward "^ [0-9]+\." nil t 1) (replace-match (concat (prin1-to-string count) "-")) (replace-match "-") (setq count (1+ count)) (forward-line 1) (split-line) (dolist (elt rekord) (insert (format "\t ====> %s <====" elt)) (re-search-forward "^ [0-9]+\." nil t 1) (replace-match (concat (prin1-to-string count) "-")) (end-of-line) (newline) (setq count (1+ count))))) (goto-char (point-min)) (toggle-read-only -1) (unless (featurep 'xemacs) (set-window-text-height (selected-window) 4)) (while (not (eobp)) (if (looking-at "^[ \t]*$") (delete-region (point) (progn (forward-line) (point))) (forward-line)))) (defun scan-lists-iac () " " (interactive) (message "%s" (scan-lists (defun-beginning-position) (point) 0))) (provide 'pars-part-output) ;;; pars-part-output.el ends here python-mode.el-6.1.3/test/python-mode-tests.sh0000755000000000000000000037215512271450574021266 0ustar rootroot00000000000000 #!/bin/bash # Author: Andreas Roehler # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Commentary: # This script tests Emacs python-mode. # Caveats: # # needs being started in `test' directory # optional shell argument PATH/TO/EMACS-SOURCE-DIRECTORY might be given # # If testing with emacs-24 please be aware of bug 11984 [0], for the # time being the patch will need to be added manually. # # IPython 0.12 due to a bug in argparse requires a patch [1] to work. # # 0. http://debbugs.gnu.org/cgi/bugreport.cgi?bug=11984 # 1. http://bugs.python.org/issue13720 # Code: # if [ -n "$BASH" -o -n "$ZSH_VERSION" ] ; then # hash -r 2>/dev/null # fi # needs being in `test' directory # PCOT=`pwd` PCOT=$PWD # PDIR=".." PDIR=$(cd ..; pwd) # the directory that this file is in. # TESTDIR="$(dirname "$0")" # PDIR="$TESTDIR/.." # write PATH-TO-EMACS source code default directory here EMACS_DEFAULT_DIR="/usr/share/emacs/24.2" EMACS_DIR= if [ $1 ]; then echo "\$1: $1" EMACS_DIR=$1 else EMACS_DIR=$EMACS_DEFAULT_DIR fi # else # cat < ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Table of Contents ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 1. Customization: use-editable variables to customize ;; doctest-mode. ;; ;; 2. Fonts: defines new font-lock faces. ;; ;; 3. Constants: various consts (mainly regexps) used by the rest ;; of the code. ;; ;; 4. Syntax Highlighting: defines variables and functions used by ;; font-lock-mode to perform syntax highlighting. ;; ;; 5. Source code editing & indentation: commands used to ;; automatically indent, dedent, & handle prompts. ;; ;; 6. Code Execution: commands used to start doctest processes, ;; and handle their output. ;; ;; 7. Markers: functions used to insert markers at the start of ;; doctest examples. These are used to keep track of the ;; correspondence between examples in the source buffer and ;; results in the output buffer. ;; ;; 8. Navigation: commands used to navigate between failed examples. ;; ;; 9. Replace Output: command used to replace a doctest example's ;; expected output with its actual output. ;; ;; 10. Helper functions: various helper functions used by the rest ;; of the code. ;; ;; 11. Emacs compatibility functions: defines compatible versions of ;; functions that are defined for some versions of emacs but not ;; others. ;; ;; 12. Doctest Results Mode: defines doctest-results-mode, which is ;; used for the output generated by doctest. ;; ;; 13. Doctest Mode: defines doctest-mode itself. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Customizable Constants ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defgroup doctest nil "Support for the Python doctest framework" :group 'languages :prefix "doctest-") (defcustom doctest-default-margin 4 "The default pre-prompt margin for doctest examples." :type 'integer :group 'doctest) (defcustom doctest-avoid-trailing-whitespace t "If true, then delete trailing whitespace when inserting a newline." :type 'boolean :group 'doctest) (defcustom doctest-temp-directory (let ((ok '(lambda (x) (and x (setq x (expand-file-name x)) ; always true (file-directory-p x) (file-writable-p x) x)))) (or (funcall ok (getenv "TMPDIR")) (funcall ok "/usr/tmp") (funcall ok "/tmp") (funcall ok "/var/tmp") (funcall ok ".") (error (concat "Couldn't find a usable temp directory -- " "set `doctest-temp-directory'")))) "Directory used for temporary files created when running doctest. By default, the first directory from this list that exists and that you can write into: the value (if any) of the environment variable TMPDIR, /usr/tmp, /tmp, /var/tmp, or the current directory." :type 'string :group 'doctest) (defcustom doctest-hide-example-source nil "If true, then don't display the example source code for each failure in the results buffer." :type 'boolean :group 'doctest) (defcustom doctest-python-command "python" "Shell command used to start the python interpreter" :type 'string :group 'doctest) (defcustom doctest-results-buffer-name "*doctest-output (%N)*" "The name of the buffer used to store the output of the doctest command. This name can contain the following special sequences: %n -- replaced by the doctest buffer's name. %N -- replaced by the doctest buffer's name, with '.doctest' stripped off. %f -- replaced by the doctest buffer's filename." :type 'string :group 'doctest) (defcustom doctest-optionflags '() "Option flags for doctest" :group 'doctest :type '(repeat (choice (const :tag "Select an option..." "") (const :tag "Normalize whitespace" "NORMALIZE_WHITESPACE") (const :tag "Ellipsis" "ELLIPSIS") (const :tag "Don't accept True for 1" "DONT_ACCEPT_TRUE_FOR_1") (const :tag "Don't accept " "DONT_ACCEPT_BLANKLINE") (const :tag "Ignore Exception detail" "IGNORE_EXCEPTION_DETAIL") (const :tag "Report only first failure" "REPORT_ONLY_FIRST_FAILURE") ))) (defcustom doctest-async t "If true, then doctest will be run asynchronously." :type 'boolean :group 'doctest) (defcustom doctest-trim-exceptions t "If true, then any exceptions inserted by doctest-replace-output will have the stack trace lines trimmed." :type 'boolean :group 'doctest) (defcustom doctest-highlight-strings t "If true, then highlight strings. If you find that doctest-mode is responding slowly when you type, turning this off might help." :type 'boolean :group 'doctest) (defcustom doctest-follow-output t "If true, then when doctest is run asynchronously, the output buffer will scroll to display its output as it is generated. If false, then the output buffer not scroll." :type 'boolean :group 'doctest) (defvar doctest-mode-hook nil "Hook called by `doctest-mode'.") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Fonts ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defface doctest-prompt-face '((((class color) (background dark)) (:foreground "#68f")) (t (:foreground "#226"))) "Face for Python prompts in doctest examples." :group 'doctest) (defface doctest-output-face '((((class color) (background dark)) (:foreground "#afd")) (t (:foreground "#262"))) "Face for the output of doctest examples." :group 'doctest) (defface doctest-output-marker-face '((((class color) (background dark)) (:foreground "#0f0")) (t (:foreground "#080"))) "Face for markers in the output of doctest examples." :group 'doctest) (defface doctest-output-traceback-face '((((class color) (background dark)) (:foreground "#f88")) (t (:foreground "#622"))) "Face for traceback headers in the output of doctest examples." :group 'doctest) (defface doctest-results-divider-face '((((class color) (background dark)) (:foreground "#08f")) (t (:foreground "#00f"))) "Face for dividers in the doctest results window." :group 'doctest) (defface doctest-results-loc-face '((((class color) (background dark)) (:foreground "#0f8")) (t (:foreground "#084"))) "Face for location headers in the doctest results window." :group 'doctest) (defface doctest-results-header-face '((((class color) (background dark)) (:foreground "#8ff")) (t (:foreground "#088"))) "Face for sub-headers in the doctest results window." :group 'doctest) (defface doctest-results-selection-face '((((class color) (background dark)) (:foreground "#ff0" :background "#008")) (t (:background "#088" :foreground "#fff"))) "Face for selected failure's location header in the results window." :group 'doctest) (defface doctest-selection-face '((((class color) (background dark)) (:foreground "#ff0" :background "#00f" :bold t)) (t (:foreground "#f00"))) "Face for selected example's prompt" :group 'doctest) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Constants ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defconst doctest-prompt-re "^\\(?:\\([ \t]*\\)\\(>>> ?\\|[.][.][.] ?\\)\\([ \t]*\\)\\)" "Regular expression for doctest prompts. It defines three groups: the pre-prompt margin; the prompt; and the post-prompt indentation.") (defconst doctest-open-block-re "[^\n]+:[ \t]*\\(#.*\\)?$" "Regular expression for a line that opens a block") (defconst doctest-close-block-re "\\(return\\|raise\\|break\\|continue\\|pass\\)\\b" "Regular expression for a line that closes a block") (defconst doctest-example-source-re "^Failed example:\n\\(\n\\| [^\n]*\n\\)+" "Regular expression for example source in doctest's output.") (defconst doctest-results-divider-re "^\\([*]\\{60,\\}\\)$" "Regular expression for example dividers in doctest's output.") (defconst doctest-py24-results-loc-re "^File \"[^\"]+\", line \\([0-9]+\\), in [^\n]+" "Regular expression for example location markers in doctest's output.") (defconst doctest-py21-results-loc-re "^from line #\\([0-9]+\\) of [^\n]*" "Regular expression for example location markers in doctest's output, when the output was generated by an old version of doctest.") (defconst doctest-results-header-re "^\\([^ \n\t].+:\\|Expected nothing\\|Got nothing\\)$" "Regular expression for example headers in doctest's output.") (defconst doctest-traceback-header-re "^[ \t]*Traceback (\\(most recent call last\\|innermost last\\)):" "Regular expression for Python traceback headers.") (defconst doctest-py21-results-re "^from line #" "Regular expression used to test which version of doctest was used.") ;; nb: There's a bug in Python's traceback.print_exception function ;; which causes SyntaxError exceptions to be displayed incorrectly; ;; which prevents this regexp from matching. But there shouldn't be ;; too many people testing for SyntaxErrors, so I won't worry about ;; it. (defconst doctest-traceback-re (let ((nonprompt ;; This matches any non-blank line that doesn't start with ;; a prompt (... or >>>). (concat "\\(?:[.][.][^.\n]\\|[>][>][^>\n]\\|" "[.][^.\n]\\|[>][^>\n]\\|[^.>\n \t]\\)[^\n]*"))) (concat "^\\(\\([ \t]*\\)Traceback " "(\\(?:most recent call last\\|innermost last\\)):\n\\)" "\\(?:\\2[ \t]+[^ \t\n][^\n]*\n\\)*" "\\(\\(?:\\2" nonprompt "\n\\)" "\\(?:\\2[ \t]*" nonprompt "\n\\)*\\)")) "Regular expression that matches a complete exception traceback. It contains three groups: group 1 is the header line; group 2 is the indentation; and group 3 is the exception message.") (defconst doctest-blankline-re "^[ \t]*" "Regular expression that matches blank line markers in doctest output.") (defconst doctest-outdent-re (concat "\\(" (mapconcat 'identity '("else:" "except\\(\\s +.*\\)?:" "finally:" "elif\\s +.*:") "\\|") "\\)") "Regular expression for a line that should be outdented. Any line that matches `doctest-outdent-re', but does not follow a line matching `doctest-no-outdent-re', will be outdented.") ;; It's not clear to me *why* the behavior given by this definition of ;; doctest-no-outdent-re is desirable; but it's basically just copied ;; from python-mode. (defconst doctest-no-outdent-re (concat "\\(" (mapconcat 'identity (list "try:" "except\\(\\s +.*\\)?:" "while\\s +.*:" "for\\s +.*:" "if\\s +.*:" "elif\\s +.*:" "\\(return\\|raise\\|break\\|continue\\|pass\\)[ \t\n]" ) "\\|") "\\)") "Regular expression matching lines not to outdent after. Any line that matches `doctest-outdent-re', but does not follow a line matching `doctest-no-outdent-re', will be outdented.") (defconst doctest-script "\ from doctest import * import sys if '%m': import imp try: m = imp.load_source('__imported__', '%m') globs = m.__dict__ except Exception, e: print ('doctest-mode encountered an error while importing ' 'the current buffer:\\n\\n %s' % e) sys.exit(1) else: globs = {} doc = open('%t').read() if sys.version_info[:2] >= (2,4): test = DocTestParser().get_doctest(doc, globs, '%n', '%f', 0) r = DocTestRunner(optionflags=%l) r.run(test) else: Tester(globs=globs).runstring(doc, '%f')" ;; Docstring: "Python script used to run doctest. The following special sequences are defined: %n -- replaced by the doctest buffer's name. %f -- replaced by the doctest buffer's filename. %l -- replaced by the doctest flags string. %t -- replaced by the name of the tempfile containing the doctests." ) (defconst doctest-keyword-re (let* ((kw1 (mapconcat 'identity '("and" "assert" "break" "class" "continue" "def" "del" "elif" "else" "except" "exec" "for" "from" "global" "if" "import" "in" "is" "lambda" "not" "or" "pass" "print" "raise" "return" "while" "yield" ) "\\|")) (kw2 (mapconcat 'identity '("else:" "except:" "finally:" "try:") "\\|")) (kw3 (mapconcat 'identity '("ArithmeticError" "AssertionError" "AttributeError" "DeprecationWarning" "EOFError" "Ellipsis" "EnvironmentError" "Exception" "False" "FloatingPointError" "FutureWarning" "IOError" "ImportError" "IndentationError" "IndexError" "KeyError" "KeyboardInterrupt" "LookupError" "MemoryError" "NameError" "None" "NotImplemented" "NotImplementedError" "OSError" "OverflowError" "OverflowWarning" "PendingDeprecationWarning" "ReferenceError" "RuntimeError" "RuntimeWarning" "StandardError" "StopIteration" "SyntaxError" "SyntaxWarning" "SystemError" "SystemExit" "TabError" "True" "TypeError" "UnboundLocalError" "UnicodeDecodeError" "UnicodeEncodeError" "UnicodeError" "UnicodeTranslateError" "UserWarning" "ValueError" "Warning" "ZeroDivisionError" "__debug__" "__import__" "__name__" "abs" "apply" "basestring" "bool" "buffer" "callable" "chr" "classmethod" "cmp" "coerce" "compile" "complex" "copyright" "delattr" "dict" "dir" "divmod" "enumerate" "eval" "execfile" "exit" "file" "filter" "float" "getattr" "globals" "hasattr" "hash" "hex" "id" "input" "int" "intern" "isinstance" "issubclass" "iter" "len" "license" "list" "locals" "long" "map" "max" "min" "object" "oct" "open" "ord" "pow" "property" "range" "raw_input" "reduce" "reload" "repr" "round" "setattr" "slice" "staticmethod" "str" "sum" "super" "tuple" "type" "unichr" "unicode" "vars" "xrange" "zip") "\\|")) (pseudokw (mapconcat 'identity '("self" "None" "True" "False" "Ellipsis") "\\|")) (string (concat "'\\(?:\\\\[^\n]\\|[^\n']*\\)'" "\\|" "\"\\(?:\\\\[^\n]\\|[^\n\"]*\\)\"")) (brk "\\(?:[ \t(]\\|$\\)")) (concat ;; Comments (group 1) "\\(#.*\\)" ;; Function & Class Definitions (groups 2-3) "\\|\\b\\(class\\|def\\)" "[ \t]+\\([a-zA-Z_][a-zA-Z0-9_]*\\)" ;; Builtins preceeded by '.'(group 4) "\\|[.][\t ]*\\(" kw3 "\\)" ;; Keywords & builtins (group 5) "\\|\\b\\(" kw1 "\\|" kw2 "\\|" kw3 "\\|" pseudokw "\\)" brk ;; Decorators (group 6) "\\|\\(@[a-zA-Z_][a-zA-Z0-9_]*\\)" )) "A regular expression used for syntax highlighting of Python source code.") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Syntax Highlighting (font-lock mode) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Define the font-lock keyword table. (defconst doctest-font-lock-keywords `( ;; The following pattern colorizes source lines. In particular, ;; it first matches prompts, and then looks for any of the ;; following matches *on the same line* as the prompt. It uses ;; the form: ;; ;; (MATCHER MATCH-HIGHLIGHT ;; (ANCHOR-MATCHER nil nil MATCH-HIGHLIGHT)) ;; ;; See the variable documentation for font-lock-keywords for a ;; description of what each of those means. ("^[ \t]*\\(>>>\\|\\.\\.\\.\\)" (1 'doctest-prompt-face) (doctest-source-matcher nil nil (1 'font-lock-comment-face t t) ; comments (2 'font-lock-keyword-face t t) ; def/class (3 'font-lock-type-face t t) ; func/class name ;; group 4 (builtins preceeded by '.') gets no colorization. (5 'font-lock-keyword-face t t) ; keywords & builtins (6 'font-lock-preprocessor-face t t) ; decorators (7 'font-lock-string-face t t) ; strings )) ;; The following pattern colorizes output lines. In particular, ;; it uses doctest-output-line-matcher to check if this is an ;; output line, and if so, it colorizes it, and any special ;; markers it contains. (doctest-output-line-matcher (0 'doctest-output-face t) ("\\.\\.\\." (beginning-of-line) (end-of-line) (0 'doctest-output-marker-face t)) (,doctest-blankline-re (beginning-of-line) (end-of-line) (0 'doctest-output-marker-face t)) (doctest-traceback-line-matcher (beginning-of-line) (end-of-line) (0 'doctest-output-traceback-face t)) (,doctest-traceback-header-re (beginning-of-line) (end-of-line) (0 'doctest-output-traceback-face t)) ) ;; A PS1 prompt followed by a non-space is an error. ("^[ \t]*\\(>>>[^ \t\n][^\n]*\\)" (1 'font-lock-warning-face t)) ) "Expressions to highlight in doctest-mode.") (defconst doctest-results-font-lock-keywords `((,doctest-results-divider-re (0 'doctest-results-divider-face)) (,doctest-py24-results-loc-re (0 'doctest-results-loc-face)) (,doctest-results-header-re (0 'doctest-results-header-face)) (doctest-results-selection-matcher (0 'doctest-results-selection-face t))) "Expressions to highlight in doctest-results-mode.") (defun doctest-output-line-matcher (limit) "A `font-lock-keyword' MATCHER that returns t if the current line is the expected output for a doctest example, and if so, sets `match-data' so that group 0 spans the current line." ;; The real work is done by doctest-find-output-line. (when (doctest-find-output-line limit) ;; If we found one, then mark the entire line. (beginning-of-line) (re-search-forward "[^\n]*" limit))) (defun doctest-traceback-line-matcher (limit) "A `font-lock-keyword' MATCHER that returns t if the current line is the beginning of a traceback, and if so, sets `match-data' so that group 0 spans the entire traceback. n.b.: limit is ignored." (beginning-of-line) (when (looking-at doctest-traceback-re) (goto-char (match-end 0)) t)) (defun doctest-source-matcher (limit) "A `font-lock-keyword' MATCHER that returns t if the current line contains a Python source expression that should be highlighted after the point. If so, it sets `match-data' to cover the string literal. The groups in `match-data' should be interpreted as follows: Group 1: comments Group 2: def/class Group 3: function/class name Group 4: builtins preceeded by '.' Group 5: keywords & builtins Group 6: decorators Group 7: strings " (let ((matchdata nil)) ;; First, look for string literals. (when doctest-highlight-strings (save-excursion (when (doctest-string-literal-matcher limit) (setq matchdata (list (match-beginning 0) (match-end 0) nil nil nil nil nil nil nil nil nil nil nil nil (match-beginning 0) (match-end 0)))))) ;; Then, look for other keywords. If they occur before the ;; string literal, then they take precedence. (save-excursion (when (and (re-search-forward doctest-keyword-re limit t) (or (null matchdata) (< (match-beginning 0) (car matchdata)))) (setq matchdata (match-data)))) (when matchdata (set-match-data matchdata) (goto-char (match-end 0)) t))) (defun doctest-string-literal-matcher (limit &optional debug) "A `font-lock-keyword' MATCHER that returns t if the current line contains a string literal starting at or after the point. If so, it expands `match-data' to cover the string literal. This matcher uses `doctest-statement-info' to collect information about strings that continue over multiple lines. It therefore might be a little slow for very large statements." (let* ((stmt-info (doctest-statement-info)) (quotes (reverse (nth 5 stmt-info))) (result nil)) (if debug (doctest-debug "quotes %s" quotes)) (while (and quotes (null result)) (let* ((quote (pop quotes)) (start (car quote)) (end (min limit (or (cdr quote) limit)))) (if debug (doctest-debug "quote %s-%s pt=%s lim=%s" start end (point) limit)) (when (or (and (<= (point) start) (< start limit)) (and (< start (point)) (< (point) end))) (setq start (max start (point))) (set-match-data (list start end)) (if debug (doctest-debug "marking string %s" (match-data))) (goto-char end) (setq result t)))) result)) (defun doctest-results-selection-matcher (limit) "Matches from `doctest-selected-failure' to the end of the line. This is used to highlight the currently selected failure." (when (and doctest-selected-failure (<= (point) doctest-selected-failure) (< doctest-selected-failure limit)) (goto-char doctest-selected-failure) (re-search-forward "[^\n]+" limit))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Source code editing & indentation ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun doctest-indent-source-line (&optional dedent-only) "Re-indent the current line, as doctest source code. I.e., add a prompt to the current line if it doesn't have one, and re-indent the source code (to the right of the prompt). If `dedent-only' is true, then don't increase the indentation level any." (interactive "*") (let ((indent-end nil)) (save-excursion (beginning-of-line) (let ((new-indent (doctest-current-source-line-indentation dedent-only)) (new-margin (doctest-current-source-line-margin)) (line-had-prompt (looking-at doctest-prompt-re))) ;; Delete the old prompt (if any). (when line-had-prompt (goto-char (match-beginning 2)) (delete-char (- (match-end 2) (match-beginning 2)))) ;; Delete the old indentation. (delete-backward-char (skip-chars-forward " \t")) ;; If it's a continuation line, or a new PS1 prompt, ;; then copy the margin. (when (or new-indent (not line-had-prompt)) (beginning-of-line) (delete-backward-char (skip-chars-forward " \t")) (insert-char ?\ new-margin)) ;; Add the new prompt. (insert-string (if new-indent "... " ">>> ")) ;; Add the new indentation (if new-indent (insert-char ?\ new-indent)) (setq indent-end (point)))) ;; If we're left of the indentation end, then move up to the ;; indentation end. (if (< (point) indent-end) (goto-char indent-end)))) (defun doctest-current-source-line-indentation (&optional dedent-only) "Return the post-prompt indent to use for this line. This is an integer for a continuation lines, and nil for non-continuation lines." (save-excursion ;; Examine the previous doctest line (if present). (let* ((prev-stmt-info (doctest-prev-statement-info)) (prev-stmt-indent (nth 0 prev-stmt-info)) (continuation-indent (nth 1 prev-stmt-info)) (prev-stmt-opens-block (nth 2 prev-stmt-info)) (prev-stmt-closes-block (nth 3 prev-stmt-info)) (prev-stmt-blocks-outdent (nth 4 prev-stmt-info)) ) ;; Examine this doctest line. (let* ((curr-line-indent 0) (curr-line-outdented nil)) (beginning-of-line) (when (looking-at doctest-prompt-re) (setq curr-line-indent (- (match-end 3) (match-beginning 3))) (goto-char (match-end 3))) (setq curr-line-outdented (and (looking-at doctest-outdent-re) (not prev-stmt-blocks-outdent))) ;; Compute the overall indent. (let ((indent (or continuation-indent (+ prev-stmt-indent (if curr-line-outdented -4 0) (if prev-stmt-opens-block 4 0) (if prev-stmt-closes-block -4 0))))) ;; If dedent-only is true, then make sure we don't indent. (when dedent-only (setq indent (min indent curr-line-indent))) ;; If indent=0 and we're not outdented, then set indent to ;; nil (to signify the start of a new source example). (when (and (= indent 0) (not (or curr-line-outdented continuation-indent))) (setq indent nil)) ;; Return the indentation. indent))))) (defun doctest-prev-statement-info (&optional debug) (save-excursion (forward-line -1) (doctest-statement-info debug))) (defun doctest-statement-info (&optional debug) "Collect info about the previous statement, and return it as a list: (INDENT, CONTINUATION, OPENS-BLOCK, CLOSES-BLOCK, BLOCKS-OUTDENT, QUOTES) INDENT -- The indentation of the previous statement (after the prompt) CONTINUATION -- If the previous statement is incomplete (e.g., has an open paren or quote), then this is the appropriate indentation level; otherwise, it's nil. OPENS-BLOCK -- True if the previous statement opens a Python control block. CLOSES-BLOCK -- True if the previous statement closes a Python control block. BLOCKS-OUTDENT -- True if the previous statement should 'block the next statement from being considered an outdent. QUOTES -- A list of (START . END) pairs for all quotation strings. " (save-excursion (end-of-line) (let ((end (point))) (while (and (doctest-on-source-line-p "...") (= (forward-line -1) 0))) (cond ;; If there's no previous >>> line, then give up. ((not (doctest-on-source-line-p ">>>")) '(0 nil nil nil nil)) ;; If there is a previous statement, walk through the source ;; code, checking for operators that may be of interest. (t (beginning-of-line) (let* ((quote-mark nil) (nesting 0) (indent-stack '()) (stmt-indent 0) (stmt-opens-block nil) (stmt-closes-block nil) (stmt-blocks-outdent nil) (quotes '()) (elt-re (concat "\\\\[^\n]\\|" "(\\|)\\|\\[\\|\\]\\|{\\|}\\|" "\"\"\"\\|\'\'\'\\|\"\\|\'\\|" "#[^\n]*\\|" doctest-prompt-re))) (while (re-search-forward elt-re end t) (let* ((elt (match-string 0)) (elt-first-char (substring elt 0 1))) (if debug (doctest-debug "Debug: %s" elt)) (cond ;; Close quote -- set quote-mark back to nil. The ;; second case is for cases like: ' ''' (quote-mark (cond ((equal quote-mark elt) (setq quote-mark nil) (setcdr (car quotes) (point))) ((equal quote-mark elt-first-char) (setq quote-mark nil) (setcdr (car quotes) (point)) (backward-char 2)))) ;; Prompt -- check if we're starting a new stmt. If so, ;; then collect various info about it. ((string-match doctest-prompt-re elt) (when (and (null quote-mark) (= nesting 0)) (let ((indent (- (match-end 3) (match-end 2)))) (unless (looking-at "[ \t]*\n") (setq stmt-indent indent) (setq stmt-opens-block (looking-at doctest-open-block-re)) (setq stmt-closes-block (looking-at doctest-close-block-re)) (setq stmt-blocks-outdent (looking-at doctest-no-outdent-re)))))) ;; Open paren -- increment nesting, and update indent-stack. ((string-match "(\\|\\[\\|{" elt-first-char) (let ((elt-pos (point)) (at-eol (looking-at "[ \t]*\n")) (indent 0)) (save-excursion (re-search-backward doctest-prompt-re) (if at-eol (setq indent (+ 4 (- (match-end 3) (match-end 2)))) (setq indent (- elt-pos (match-end 2)))) (push indent indent-stack))) (setq nesting (+ nesting 1))) ;; Close paren -- decrement nesting, and pop indent-stack. ((string-match ")\\|\\]\\|}" elt-first-char) (setq indent-stack (cdr indent-stack)) (setq nesting (max 0 (- nesting 1)))) ;; Open quote -- set quote-mark. ((string-match "\"\\|\'" elt-first-char) (push (cons (- (point) (length elt)) nil) quotes) (setq quote-mark elt))))) (let* ((continuation-indent (cond (quote-mark 0) ((> nesting 0) (if (null indent-stack) 0 (car indent-stack))) (t nil))) (result (list stmt-indent continuation-indent stmt-opens-block stmt-closes-block stmt-blocks-outdent quotes))) (if debug (doctest-debug "Debug: %s" result)) result))))))) (defun doctest-current-source-line-margin () "Return the pre-prompt margin to use for this source line. This is copied from the most recent source line, or set to `doctest-default-margin' if there are no preceeding source lines." (save-excursion (save-restriction (when (doctest-in-mmm-docstring-overlay) (doctest-narrow-to-mmm-overlay)) (beginning-of-line) (forward-line -1) (while (and (not (doctest-on-source-line-p)) (re-search-backward doctest-prompt-re nil t)))) (cond ((looking-at doctest-prompt-re) (- (match-end 1) (match-beginning 1))) ((doctest-in-mmm-docstring-overlay) (doctest-default-margin-in-mmm-docstring-overlay)) (t doctest-default-margin)))) (defun doctest-electric-backspace () "Delete the preceeding character, level of indentation, or prompt. If point is at the leftmost column, delete the preceding newline. Otherwise, if point is at the first non-whitespace character following an indented source line's prompt, then reduce the indentation to the next multiple of 4; and update the source line's prompt, when necessary. Otherwise, if point is at the first non-whitespace character following an unindented source line's prompt, then remove the prompt (converting the line to an output line or text line). Otherwise, if point is at the first non-whitespace character of a line, the delete the line's indentation. Otherwise, delete the preceeding character. " (interactive "*") (cond ;; Beginning of line: delete preceeding newline. ((bolp) (backward-delete-char 1)) ;; First non-ws char following prompt: dedent or remove prompt. ((and (looking-at "[^ \t\n]\\|$") (doctest-looking-back doctest-prompt-re)) (let* ((prompt-beg (match-beginning 2)) (indent-beg (match-beginning 3)) (indent-end (match-end 3)) (old-indent (- indent-end indent-beg)) (new-indent (* (/ (- old-indent 1) 4) 4))) (cond ;; Indented source line: dedent it. ((> old-indent 0) (goto-char indent-beg) (delete-region indent-beg indent-end) (insert-char ?\ new-indent) ;; Change prompt to PS1, when appropriate. (when (and (= new-indent 0) (not (looking-at doctest-outdent-re))) (delete-backward-char 4) (insert-string ">>> "))) ;; Non-indented source line: remove prompt. (t (goto-char indent-end) (delete-region prompt-beg indent-end))))) ;; First non-ws char of a line: delete all indentation. ((and (looking-at "[^ \n\t]\\|$") (doctest-looking-back "^[ \t]+")) (delete-region (match-beginning 0) (match-end 0))) ;; Otherwise: delete a character. (t (backward-delete-char 1)))) (defun doctest-newline-and-indent () "Insert a newline, and indent the new line appropriately. If the current line is a source line containing a bare prompt, then clear the current line, and insert a newline. Otherwise, if the current line is a source line, then insert a newline, and add an appropriately indented prompt to the new line. Otherwise, if the current line is an output line, then insert a newline and indent the new line to match the example's margin. Otherwise, insert a newline. If `doctest-avoid-trailing-whitespace' is true, then clear any whitespace to the left of the point before inserting a newline. " (interactive "*") ;; If we're avoiding trailing spaces, then delete WS before point. (if doctest-avoid-trailing-whitespace (delete-char (- (skip-chars-backward " \t")))) (cond ;; If we're on an empty prompt, delete it. ((doctest-on-empty-source-line-p) (delete-region (match-beginning 0) (match-end 0)) (insert-char ?\n 1)) ;; If we're on a doctest line, add a new prompt. ((doctest-on-source-line-p) (insert-char ?\n 1) (doctest-indent-source-line)) ;; If we're in doctest output, indent to the margin. ((doctest-on-output-line-p) (insert-char ?\n 1) (insert-char ?\ (doctest-current-source-line-margin))) ;; Otherwise, just add a newline. (t (insert-char ?\n 1)))) (defun doctest-electric-colon () "Insert a colon, and dedent the line when appropriate." (interactive "*") (insert-char ?: 1) (when (doctest-on-source-line-p) (doctest-indent-source-line t))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Code Execution ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun doctest-execute () "Run doctest on the current buffer, or on the current docstring if the point is inside an `mmm-mode' `doctest-docstring' region. Display the results in the *doctest-output* buffer." (interactive) (doctest-execute-region (point-min) (point-max) nil t)) (defun doctest-execute-with-diff () "Run doctest on the current buffer, or on the current docstring if the point is inside an `mmm-mode' `doctest-docstring' region. Display the results in the *doctest-output* buffer, using diff format." (interactive) (doctest-execute-region (point-min) (point-max) t t)) (defun doctest-execute-buffer-with-diff () "Run doctest on the current buffer, and display the results in the *doctest-output* buffer, using the diff format." (interactive) (doctest-execute-region (point-min) (point-max) t nil)) (defun doctest-execute-buffer () "Run doctest on the current buffer, and display the results in the *doctest-output* buffer." (interactive) (doctest-execute-region (point-min) (point-max) nil nil)) (defun doctest-execute-region (start end &optional diff check-for-mmm-docstring-overlay) "Run doctest on the current buffer, and display the results in the *doctest-output* buffer." (interactive "r") ;; If it's already running, give the user a chance to restart it. (when (doctest-process-live-p doctest-async-process) (when (y-or-n-p "Doctest is already running. Restart it? ") (doctest-cancel-async-process) (message "Killing doctest..."))) (cond ((and doctest-async (doctest-process-live-p doctest-async-process)) (message "Can't run two doctest processes at once!")) (t (let* ((results-buf-name (doctest-results-buffer-name)) (in-docstring (and check-for-mmm-docstring-overlay (doctest-in-mmm-docstring-overlay))) (temp (doctest-temp-name)) (dir doctest-temp-directory) (input-file (expand-file-name (concat temp ".py") dir)) (globs-file (when in-docstring (expand-file-name (concat temp "-globs.py") dir))) (cur-buf (current-buffer)) (in-buf (get-buffer-create "*doctest-input*")) (script (doctest-script input-file globs-file diff))) ;; If we're in a docstring, narrow start & end. (when in-docstring (let ((bounds (doctest-mmm-overlay-bounds))) (setq start (max start (car bounds)) end (min end (cdr bounds))))) ;; Write the doctests to a file. (save-excursion (goto-char (min start end)) (let ((lineno (doctest-line-number))) (set-buffer in-buf) ;; Add blank lines, to keep line numbers the same: (dotimes (n (- lineno 1)) (insert-string "\n")) ;; Add the selected region (insert-buffer-substring cur-buf start end) ;; Write it to a file (write-file input-file))) ;; If requested, write the buffer to a file for use as globs. (when globs-file (let ((cur-buf-start (point-min)) (cur-buf-end (point-max))) (save-excursion (set-buffer in-buf) (delete-region (point-min) (point-max)) (insert-buffer-substring cur-buf cur-buf-start cur-buf-end) (write-file globs-file)))) ;; Dispose of in-buf (we're done with it now. (kill-buffer in-buf) ;; Prepare the results buffer. Clear it, if it contains ;; anything, and set its mode. (setq doctest-results-buffer (get-buffer-create results-buf-name)) (save-excursion (set-buffer doctest-results-buffer) (toggle-read-only 0) (delete-region (point-min) (point-max)) (doctest-results-mode) (setq doctest-source-buffer cur-buf) ) ;; Add markers to examples, and record what line number each one ;; starts at. That way, if the input buffer is edited, we can ;; still find corresponding examples in the output. (doctest-mark-examples) ;; Run doctest (cond (doctest-async ;; Asynchronous mode: (let ((process (start-process "*doctest*" doctest-results-buffer doctest-python-command "-c" script))) ;; Store some information about the process. (setq doctest-async-process-buffer cur-buf) (setq doctest-async-process process) (push input-file doctest-async-process-tempfiles) (when globs-file (push globs-file doctest-async-process-tempfiles)) ;; Set up a sentinel to respond when it's done running. (set-process-sentinel process 'doctest-async-process-sentinel) ;; Show the output window. (let ((w (display-buffer doctest-results-buffer))) (when doctest-follow-output ;; Insert a newline, which will move the buffer's ;; point past the process's mark -- this causes the ;; window to scroll as new output is generated. (save-current-buffer (set-buffer doctest-results-buffer) (insert-string "\n") (set-window-point w (point))))) ;; Let the user know the process is running. (doctest-update-mode-line ":running") (message "Running doctest..."))) (t ;; Synchronous mode: (call-process doctest-python-command nil doctest-results-buffer t "-c" script) (doctest-handle-output) (delete-file input-file) (when globs-file (delete-file globs-file)))))))) (defun doctest-handle-output () "This function, which is called after the 'doctest' process spawned by doctest-execute-buffer has finished, checks the doctest results buffer. If that buffer is empty, it reports no errors and hides it; if that buffer is not empty, it reports that errors occured, displays the buffer, and runs doctest-postprocess-results." ;; If any tests failed, display them. (cond ((not (buffer-live-p doctest-results-buffer)) (doctest-warn "Results buffer not found!")) ((> (buffer-size doctest-results-buffer) 1) (display-buffer doctest-results-buffer) (doctest-postprocess-results) (let ((num (length doctest-example-markers))) (message "%d doctest example%s failed!" num (if (= num 1) "" "s")))) (t (display-buffer doctest-results-buffer) (delete-windows-on doctest-results-buffer) (message "All doctest examples passed!")))) (defun doctest-async-process-sentinel (process state) "A process sentinel, called when the asynchronous doctest process completes, which calls doctest-handle-output." ;; Check to make sure we got the process we're expecting. On ;; some operating systems, this will end up getting called twice ;; when we use doctest-cancel-async-process; this check keeps us ;; from trying to clean up after the same process twice (since we ;; set doctest-async-process to nil when we're done). (when (and (equal process doctest-async-process) (buffer-live-p doctest-async-process-buffer)) (save-current-buffer (set-buffer doctest-async-process-buffer) (cond ((not (buffer-live-p doctest-results-buffer)) (doctest-warn "Results buffer not found!")) ((equal state "finished\n") (doctest-handle-output) (let ((window (get-buffer-window doctest-async-process-buffer t))) (when window (set-window-point window (point))))) ((equal state "killed\n") (message "Doctest killed.")) (t (message "Doctest failed -- %s" state) (display-buffer doctest-results-buffer))) (doctest-update-mode-line "") (while doctest-async-process-tempfiles (delete-file (pop doctest-async-process-tempfiles))) (setq doctest-async-process nil)))) (defun doctest-cancel-async-process () "If a doctest process is running, then kill it." (interactive "") (when (doctest-process-live-p doctest-async-process) ;; Update the modeline (doctest-update-mode-line ":killing") ;; Kill the process. (kill-process doctest-async-process) ;; Run the sentinel. (Depending on what OS we're on, the sentinel ;; may end up getting called once or twice.) (doctest-async-process-sentinel doctest-async-process "killed\n") )) (defun doctest-postprocess-results () "Post-process the doctest results buffer: check what version of doctest was used, and set doctest-results-py-version accordingly; turn on read-only mode; filter the example markers; hide the example source (if `doctest-hide-example-source' is non-nil); and select the first failure." (save-excursion (set-buffer doctest-results-buffer) ;; Check if we're using an old doctest version. (goto-char (point-min)) (if (re-search-forward doctest-py21-results-re nil t) (setq doctest-results-py-version 'py21) (setq doctest-results-py-version 'py24)) ;; Turn on read-only mode. (toggle-read-only t)) (doctest-filter-example-markers) (if doctest-hide-example-source (doctest-hide-example-source)) (doctest-next-failure 1)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Markers ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun doctest-mark-examples () "Add a marker at the beginning of every (likely) example in the input buffer; and create a list, `doctest-example-markers', which maps from markers to the line numbers they originally occured on. This will allow us to find the corresponding example in the doctest output, even if the input buffer is edited." (dolist (marker-info doctest-example-markers) (set-marker (car marker-info) nil)) (setq doctest-example-markers '()) (save-excursion (goto-char (point-min)) (while (re-search-forward "^ *>>> " nil t) (backward-char 4) (push (cons (point-marker) (doctest-line-number)) doctest-example-markers) (forward-char 4)))) (defun doctest-filter-example-markers () "Remove any entries from `doctest-example-markers' that do not correspond to a failed example." (let ((filtered nil) (markers doctest-example-markers)) (save-excursion (set-buffer doctest-results-buffer) (goto-char (point-max)) (while (re-search-backward (doctest-results-loc-re) nil t) (let ((lineno (string-to-int (match-string 1)))) (when (equal doctest-results-py-version 'py21) (setq lineno (+ lineno 1))) (while (and markers (< lineno (cdar markers))) (set-marker (caar markers) nil) (setq markers (cdr markers))) (if (and markers (= lineno (cdar markers))) (push (pop markers) filtered) (doctest-warn "Example expected on line %d but not found %s" lineno markers))))) (dolist (marker-info markers) (set-marker (car marker-info) nil)) (setq doctest-example-markers filtered))) (defun doctest-prev-example-marker () "Helper for doctest-replace-output: move to the preceeding example marker, and return the corresponding 'original' lineno. If none is found, return nil." (let ((lineno nil) (pos nil)) (save-excursion (end-of-line) (when (re-search-backward "^\\( *\\)>>> " nil t) (goto-char (match-end 1)) (dolist (marker-info doctest-example-markers) (when (= (marker-position (car marker-info)) (point)) (setq lineno (cdr marker-info)) (setq pos (point)))))) (unless (null lineno) (goto-char pos) lineno))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Navigation ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun doctest-next-failure (count) "Move to the top of the next failing example, and highlight the example's failure description in *doctest-output*." (interactive "p") (cond ((and doctest-async (doctest-process-live-p doctest-async-process)) (message "Wait for doctest to finish running!")) ((not (doctest-results-buffer-valid-p)) (message "Run doctest first! (C-c C-c)")) ((equal count 0) t) (t (let ((marker nil) (example-markers doctest-example-markers) (results-window (display-buffer doctest-results-buffer))) (save-excursion (set-buffer doctest-results-buffer) ;; Pick up where we left off. ;; (nb: doctest-selected-failure is buffer-local) (goto-char (or doctest-selected-failure (point-min))) ;; Skip past anything on *this* line. (if (>= count 0) (end-of-line) (beginning-of-line)) ;; Look for the next failure (when (if (>= count 0) (re-search-forward (doctest-results-loc-re) nil t count) (re-search-backward (doctest-results-loc-re) nil t (- count))) ;; We found a failure: (let ((old-selected-failure doctest-selected-failure)) (beginning-of-line) ;; Extract the line number for the doctest file. (let ((orig-lineno (string-to-int (match-string 1)))) (when (equal doctest-results-py-version 'py21) (setq orig-lineno (+ orig-lineno 1))) (dolist (marker-info example-markers) (when (= orig-lineno (cdr marker-info)) (setq marker (car marker-info))))) ;; Update the window cursor. (beginning-of-line) (set-window-point results-window (point)) ;; Store our position for next time. (setq doctest-selected-failure (point)) ;; Update selection. (doctest-fontify-line old-selected-failure) (doctest-fontify-line doctest-selected-failure)))) (cond ;; We found a failure -- move point to the selected failure. (marker (goto-char (marker-position marker)) (beginning-of-line)) ;; We didn't find a failure, but there is one -- wrap. ((> (length doctest-example-markers) 0) (if (>= count 0) (doctest-first-failure) (doctest-last-failure))) ;; We didn't find a failure -- alert the user. (t (message "No failures found!"))))))) (defun doctest-prev-failure (count) "Move to the top of the previous failing example, and highlight the example's failure description in *doctest-output*." (interactive "p") (doctest-next-failure (- count))) (defun doctest-first-failure () "Move to the top of the first failing example, and highlight the example's failure description in *doctest-output*." (interactive) (if (buffer-live-p doctest-results-buffer) (save-excursion (set-buffer doctest-results-buffer) (let ((old-selected-failure doctest-selected-failure)) (setq doctest-selected-failure (point-min)) (doctest-fontify-line old-selected-failure)))) (doctest-next-failure 1)) (defun doctest-last-failure () "Move to the top of the last failing example, and highlight the example's failure description in *doctest-output*." (interactive) (if (buffer-live-p doctest-results-buffer) (save-excursion (set-buffer doctest-results-buffer) (let ((old-selected-failure doctest-selected-failure)) (setq doctest-selected-failure (point-max)) (doctest-fontify-line old-selected-failure)))) (doctest-next-failure -1)) (defun doctest-select-failure () "Move to the top of the currently selected example, and select that example in the source buffer. Intended for use in the results buffer." (interactive) (re-search-backward doctest-results-divider-re) (let ((old-selected-failure doctest-selected-failure)) (setq doctest-selected-failure (point)) (doctest-fontify-line doctest-selected-failure) (doctest-fontify-line old-selected-failure)) (pop-to-buffer doctest-source-buffer) (doctest-next-failure 1)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Replace Output ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun doctest-replace-output () "Move to the top of the closest example, and replace its output with the 'got' output from the *doctest-output* buffer. An error is displayed if the chosen example is not listed in *doctest-output*, or if the 'expected' output for the example does not exactly match the output listed in the source buffer. The user is asked to confirm the replacement." (interactive) ;; Move to the beginning of the example. (cond ((and doctest-async (doctest-process-live-p doctest-async-process)) (message "Wait for doctest to finish running!")) ((not (doctest-results-buffer-valid-p)) (message "Run doctest first! (C-c C-c)")) ((save-excursion (set-buffer doctest-results-buffer) (equal doctest-results-py-version 'py21)) (error "doctest-replace-output requires python 2.4+")) (t (save-excursion (save-restriction (when (doctest-in-mmm-docstring-overlay) (doctest-narrow-to-mmm-overlay)) (let* ((orig-buffer (current-buffer)) ;; Find an example, and look up its original lineno. (lineno (doctest-prev-example-marker)) ;; Find the example's indentation. (prompt-indent (doctest-line-indentation))) ;; Switch to the output buffer, and look for the example. ;; If we don't find one, complain. (cond ((null lineno) (message "Doctest example not found")) (t (set-buffer doctest-results-buffer) (goto-char (point-min)) (let ((output-re (format "^File .*, line %s," lineno))) (when (not (re-search-forward output-re nil t)) (message "This doctest example did not fail") (setq lineno nil))))) ;; If we didn't find an example, give up. (when (not (null lineno)) ;; Get the output's 'expected' & 'got' texts. (let ((doctest-got nil) (doctest-expected nil) (header nil)) (while (setq header (doctest-results-next-header)) (cond ((equal header "Failed example:") t) ((equal header "Expected nothing") (setq doctest-expected "")) ((equal header "Expected:") (unless (re-search-forward "^\\(\\( \\).*\n\\)*" nil t) (error "Error parsing doctest output")) (setq doctest-expected (doctest-replace-regexp-in-string "^ " prompt-indent (match-string 0)))) ((equal header "Got nothing") (setq doctest-got "")) ((or (equal header "Got:") (equal header "Exception raised:")) (unless (re-search-forward "^\\(\\( \\).*\n\\)*" nil t) (error "Error parsing doctest output")) (setq doctest-got (doctest-replace-regexp-in-string "^ " prompt-indent (match-string 0)))) ((string-match "^Differences" header) (error (concat "doctest-replace-output can not be used " "with diff style output"))) (t (error "Unexpected header %s" header)))) ;; Go back to the source buffer. (set-buffer orig-buffer) ;; Skip ahead to the output. (beginning-of-line) (unless (re-search-forward "^ *>>>.*") (error "Error parsing doctest output")) (re-search-forward "\\(\n *\\.\\.\\..*\\)*\n?") (when (looking-at "\\'") (insert-char ?\n)) ;; Check that the output matches. (let ((start (point)) end) (cond ((re-search-forward "^ *\\(>>>.*\\|$\\)" nil t) (setq end (match-beginning 0))) (t (goto-char (point-max)) (insert-string "\n") (setq end (point-max)))) (when (and doctest-expected (not (equal (buffer-substring start end) doctest-expected))) (warn "{%s} {%s}" (buffer-substring start end) doctest-expected) (error (concat "This example's output has been modified " "since doctest was last run"))) (setq doctest-expected (buffer-substring start end)) (goto-char end)) ;; Trim exceptions (when (and doctest-trim-exceptions (string-match doctest-traceback-re doctest-got)) (let ((s1 0) (e1 (match-end 1)) (s2 (match-beginning 2)) (e2 (match-end 2)) (s3 (match-beginning 3)) (e3 (length doctest-got))) (setq doctest-got (concat (substring doctest-got s1 e1) (substring doctest-got s2 e2) " . . .\n" (substring doctest-got s3 e3))))) ;; Confirm it with the user. (let ((confirm-buffer (get-buffer-create "*doctest-confirm*"))) (set-buffer confirm-buffer) ;; Erase anything left over in the buffer. (delete-region (point-min) (point-max)) ;; Write a confirmation message (if (equal doctest-expected "") (insert-string "Replace nothing\n") (insert-string (concat "Replace:\n" doctest-expected))) (if (equal doctest-got "") (insert-string "With nothing\n") (insert-string (concat "With:\n" doctest-got))) (let ((confirm-window (display-buffer confirm-buffer))) ;; Shrink the confirm window. (shrink-window-if-larger-than-buffer confirm-window) ;; Return to the original buffer. (set-buffer orig-buffer) ;; Match the old expected region. (when doctest-expected (search-backward doctest-expected)) (when (equal doctest-expected "") (backward-char 1)) ;; Get confirmation & do the replacement (widen) (cond ((y-or-n-p "Ok to replace? ") (when (equal doctest-expected "") (forward-char 1)) (replace-match doctest-got t t) (message "Replaced.")) (t (message "Replace cancelled."))) ;; Clean up our confirm window (kill-buffer confirm-buffer) (delete-window confirm-window))))))))))) (defun doctest-results-next-header () "Move to the next header in the doctest results buffer, and return the string contents of that header. If no header is found, return nil." (if (re-search-forward (concat doctest-results-header-re "\\|" doctest-results-divider-re) nil t) (let ((result (match-string 0))) (if (string-match doctest-results-header-re result) result nil)) nil)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; mmm-mode support ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; MMM Mode is a minor mode for Emacs which allows Multiple Major ;; Modes to coexist in a single buffer. ;;;###autoload (defun doctest-register-mmm-classes (&optional add-mode-ext-classes fix-mmm-fontify-region-bug) "Register doctest's mmm classes, allowing doctest to be used as a submode region in other major modes, such as python-mode and rst-mode. Two classes are registered: `doctest-docstring' Used to edit docstrings containing doctest examples in python- mode. Docstring submode regions start and end with triple-quoted strings (\"\"\"). In order to avoid confusing start-string markers and end-string markers, all triple-quote strings in the buffer are treated as submode regions (even if they're not actually docstrings). Use (C-c % C-d) to insert a new doctest- docstring region. When `doctest-execute' (C-c C-c) is called inside a doctest-docstring region, it executes just the current docstring. The globals for this execution are constructed by importing the current buffer's contents in Python. `doctest-example' Used to edit doctest examples in text-editing modes, such as `rst-mode' or `text-mode'. Docstring submode regions start with optionally indented prompts (>>>) and end with blank lines. Use (C-c % C-e) to insert a new doctest-example region. When `doctest-execute' (C-c C-c) is called inside a doctest-example region, it executes all examples in the buffer. If ADD-MODE-EXT-CLASSES is true, then register the new classes in `mmm-mode-ext-classes-alist', which will cause them to be used by default in the following modes: doctest-docstring: python-mode doctest-example: rst-mode If FIX-MMM-FONTIFY-REGION-BUG is true, then register a hook that will fix a bug in `mmm-fontify-region' that affects some (but not all) versions of emacs. (See `doctest-fixed-mmm-fontify-region' for more info.)" (interactive) (require 'mmm-auto) (mmm-add-classes '( ;; === doctest-docstring === (doctest-docstring :submode doctest-mode ;; The front is any triple-quote. Include it in the submode region, ;; to prevent clashes between the two syntax tables over quotes. :front "\\(\"\"\"\\|'''\\)" :include-front t ;; The back matches the front. Include just the first character ;; of the quote. If we didn't include at least one quote, then ;; the outer modes quote-counting would be thrown off. But if ;; we include all three, we run into a bug in mmm-mode. See ;; for more info about the bug. :save-matches t :back "~1" :back-offset 1 :end-not-begin t ;; Define a skeleton for entering new docstrings. :insert ((?d docstring nil @ "\"\"" @ "\"" \n _ \n "\"" @ "\"\"" @))) ;; === doctest-example === (doctest-example :submode doctest-mode ;; The front is an optionally indented prompt. :front "^[ \t]*>>>" :include-front t ;; The back is a blank line. :back "^[ \t]*$" ;; Define a skeleton for entering new docstrings. :insert ((?e doctest-example nil @ @ " >>> " _ "\n\n" @ @))))) ;; Register some local variables that need to be saved. (add-to-list 'mmm-save-local-variables '(doctest-results-buffer buffer)) (add-to-list 'mmm-save-local-variables '(doctest-example-markers buffer)) ;; Register association with modes, if requested. (when add-mode-ext-classes (mmm-add-mode-ext-class 'python-mode nil 'doctest-docstring) (mmm-add-mode-ext-class 'rst-mode nil 'doctest-example)) ;; Fix the buggy mmm-fontify-region, if requested. (when fix-mmm-fontify-region-bug (add-hook 'mmm-mode-hook 'doctest-fix-mmm-fontify-region-bug))) (defvar doctest-old-mmm-fontify-region 'nil "Used to hold the original definition of `mmm-fontify-region' when it is rebound by `doctest-fix-mmm-fontify-region-bug'.") (defun doctest-fix-mmm-fontify-region-bug () "A function for `mmm-mode-hook' which fixes a potential bug in `mmm-fontify-region' by using `doctest-fixed-mmm-fontify-region' instead. (See `doctest-fixed-mmm-fontify-region' for more info.)" (setq font-lock-fontify-region-function 'doctest-fixed-mmm-fontify-region)) (defun doctest-fixed-mmm-fontify-region (start stop &optional loudly) "A replacement for `mmm-fontify-region', which fixes a bug caused by versions of emacs where post-command-hooks are run *before* fontification. `mmm-mode' assumes that its post-command-hook will be run after fontification; and if it's not, then mmm-mode can end up with the wrong local variables, keymap, etc. after fontification. We fix that here by redefining `mmm-fontify-region' to remember what submode overlay it started in; and to return to that overlay after fontification is complete. The original definition of `mmm-fontify-region' is stored in `doctest-old-mmm-fontify-region'." (let ((overlay mmm-current-overlay)) (mmm-fontify-region start stop loudly) (if (and overlay (or (< (point) (overlay-start overlay)) (> (point) (overlay-end overlay)))) (goto-char (overlay-start overlay))) (mmm-update-submode-region))) (defun doctest-in-mmm-docstring-overlay () (and (featurep 'mmm-auto) (mmm-overlay-at (point)) (save-excursion (goto-char (overlay-start (mmm-overlay-at (point)))) (looking-at "\"\"\"\\|\'\'\'")))) (defun doctest-narrow-to-mmm-overlay () "If we're in an mmm-mode overlay, then narrow to that overlay. This is useful, e.g., to keep from interpreting the close-quote of a docstring as part of the example's output." (let ((bounds (doctest-mmm-overlay-bounds))) (when bounds (narrow-to-region (car bounds) (cdr bounds))))) (defun doctest-default-margin-in-mmm-docstring-overlay () (save-excursion (let ((pos (car (doctest-mmm-overlay-bounds)))) (goto-char pos) (when (doctest-looking-back "\"\"\"\\|\'\'\'") (setq pos (- pos 3))) (beginning-of-line) (- pos (point))))) (defun doctest-mmm-overlay-bounds () (when (featurep 'mmm-auto) (let ((overlay (mmm-overlay-at (point)))) (when overlay (let ((start (overlay-start overlay)) (end (overlay-end overlay))) (when (doctest-in-mmm-docstring-overlay) (save-excursion (goto-char start) (re-search-forward "[\"\']*") (setq start (point)) (goto-char end) (while (doctest-looking-back "[\"\']") (backward-char 1)) (setq end (point)))) (cons start end)))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Helper functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun doctest-on-source-line-p (&optional prompt) "Return true if the current line is a source line. The optional argument prompt can be used to specify which type of source line (... or >>>)." (save-excursion (beginning-of-line) ;; Check if we're looking at a prompt (of the right type). (when (and (looking-at doctest-prompt-re) (or (null prompt) (equal prompt (substring (match-string 2) 0 3)))) ;; Scan backwards to make sure there's a >>> somewhere. Otherwise, ;; this might be a '...' in the text or in an example's output. (while (looking-at "^[ \t]*[.][.][.]") (forward-line -1)) (looking-at "^[ \t]*>>>")))) (defun doctest-on-empty-source-line-p () "Return true if the current line contains a bare prompt." (save-excursion (beginning-of-line) (and (doctest-on-source-line-p) (looking-at (concat doctest-prompt-re "$"))))) (defun doctest-on-output-line-p () "Return true if the current line is an output line." (save-excursion (beginning-of-line) ;; The line must not be blank or a source line. (when (not (or (doctest-on-source-line-p) (looking-at "[ \t]*$"))) ;; The line must follow a source line, with no intervening blank ;; lines. (while (not (or (doctest-on-source-line-p) (looking-at "[ \t]*$") (= (point) (point-min)))) (forward-line -1)) (doctest-on-source-line-p)))) (defun doctest-find-output-line (&optional limit) "Move forward to the next doctest output line (staying within the given bounds). Return the character position of the doctest output line if one was found, and false otherwise." (let ((found-it nil) ; point where we found an output line (limit (or limit (point-max)))) ; default value for limit (save-excursion ;; Keep moving forward, one line at a time, until we find a ;; doctest output line. (while (and (not found-it) (< (point) limit) (not (eobp))) (if (and (not (eolp)) (doctest-on-output-line-p)) (setq found-it (point)) (forward-line)))) ;; If we found a doctest output line, then go to it. (if found-it (goto-char found-it)))) (defun doctest-line-indentation () "Helper for doctest-replace-output: return the whitespace indentation at the beginning of this line." (save-excursion (end-of-line) (re-search-backward "^\\( *\\)" nil t) (match-string 1))) (defun doctest-optionflags (&optional diff) "Return a string describing the optionflags that should be used by doctest. If DIFF is non-nil, then add the REPORT_UDIFF flag." (let ((flags "0")) (dolist (flag doctest-optionflags) (setq flags (concat flags "|" flag))) (if diff (concat flags "|" "REPORT_UDIFF") flags))) (defun doctest-results-loc-re () "Return the regexp that should be used to look for doctest example location markers in doctest's output (based on which version of doctest was used" (cond ((equal doctest-results-py-version 'py21) doctest-py21-results-loc-re) ((equal doctest-results-py-version 'py24) doctest-py24-results-loc-re) (t (error "bad value for doctest-results-py-version")))) (defun doctest-results-buffer-name () "Return the buffer name that should be used for the doctest results buffer. This is computed from the variable `doctest-results-buffer-name'." (doctest-replace-regexp-in-string "%[nfN]" (lambda (sym) (cond ((equal sym "%n") (buffer-name)) ((equal sym "%N") (doctest-replace-regexp-in-string "[.]doctest$" "" (buffer-name) t)) ((equal sym "%f") (buffer-file-name)))) doctest-results-buffer-name t)) (defun doctest-script (input-file globs-file diff) "..." (doctest-replace-regexp-in-string "%[tnflm]" (lambda (sym) (cond ((equal sym "%n") (buffer-name)) ((equal sym "%f") (buffer-file-name)) ((equal sym "%l") (doctest-optionflags diff)) ((equal sym "%t") input-file) ((equal sym "%m") (or globs-file "")))) doctest-script t)) (defun doctest-hide-example-source () "Delete the source code listings from the results buffer (since it's easy enough to see them in the original buffer)" (save-excursion (set-buffer doctest-results-buffer) (toggle-read-only 0) (goto-char (point-min)) (while (re-search-forward doctest-example-source-re nil t) (replace-match "" nil nil)) (toggle-read-only t))) (defun doctest-results-buffer-valid-p () "Return true if this buffer has a live results buffer; and that results buffer reports this buffer as its source buffer. (Two buffers in doctest-mode might point to the same results buffer; but only one of them will be equal to that results buffer's source buffer." (let ((cur-buf (current-buffer))) (and (buffer-live-p doctest-results-buffer) (save-excursion (set-buffer doctest-results-buffer) (equal cur-buf doctest-source-buffer))))) (defun doctest-update-mode-line (value) "Update the doctest mode line with the given string value. This is used to display information about asynchronous processes that are run by doctest-mode." (setq doctest-mode-line-process value) (force-mode-line-update t)) (defun doctest-version () "Echo the current version of `doctest-mode' in the minibuffer." (interactive) (message "Using `doctest-mode' version %s" doctest-version)) (defun doctest-warn (msg &rest args) "Display a doctest warning message." (if (fboundp 'display-warning) (display-warning 'doctest (apply 'format msg args)) (apply 'message msg args))) (defun doctest-debug (msg &rest args) "Display a doctest debug message." (if (fboundp 'display-warning) (display-warning 'doctest (apply 'format msg args) 'debug) (apply 'message msg args))) (defvar doctest-serial-number 0) ;used if broken-temp-names. (defun doctest-temp-name () "Return a new temporary filename, for use in calling doctest." (if (memq 'broken-temp-names features) (let ((sn doctest-serial-number) (pid (and (fboundp 'emacs-pid) (emacs-pid)))) (setq doctest-serial-number (1+ doctest-serial-number)) (if pid (format "doctest-%d-%d" sn pid) (format "doctest-%d" sn))) (make-temp-name "doctest-"))) (defun doctest-fontify-line (charpos) "Run font-lock-fontify-region on the line containing the given position." (if (and charpos (functionp 'font-lock-fontify-region)) (save-excursion (goto-char charpos) (let ((beg (progn (beginning-of-line) (point))) (end (progn (end-of-line) (point)))) (font-lock-fontify-region beg end))))) (defun doctest-do-auto-fill () "If the current line is a soucre line or an output line, do nothing. Otherwise, call (do-auto-fill)." (cond ;; Don't wrap source lines. ((doctest-on-source-line-p) nil) ;; Don't wrap output lines ((doctest-on-output-line-p) nil) ;; Wrap all other lines (t (do-auto-fill)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Emacs Compatibility Functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Define compatible versions of functions that are defined ;; for some versions of emacs but not others. ;; Backwards compatibility: looking-back (cond ((fboundp 'looking-back) ;; Emacs 22.x (defalias 'doctest-looking-back 'looking-back)) (t (defun doctest-looking-back (regexp) "Return true if text before point matches REGEXP." (save-excursion (let ((orig-pos (point))) ;; Search backwards for the regexp. (if (re-search-backward regexp nil t) ;; Check if it ends at the original point. (= orig-pos (match-end 0)))))))) ;; Backwards compatibility: replace-regexp-in-string (cond ((fboundp 'replace-regexp-in-string) (defalias 'doctest-replace-regexp-in-string 'replace-regexp-in-string)) (t ;; XEmacs 21.x or Emacs 20.x (defun doctest-replace-regexp-in-string (regexp rep string &optional fixedcase literal) "Replace all matches for REGEXP with REP in STRING." (let ((start 0)) (while (and (< start (length string)) (string-match regexp string start)) (setq start (+ (match-end 0) 1)) (let ((newtext (if (functionp rep) (save-match-data (funcall rep (match-string 0 string))) rep))) (setq string (replace-match newtext fixedcase literal string))))) string))) ;; Backwards compatibility: line-number (cond ((fboundp 'line-number) ;; XEmacs (defalias 'doctest-line-number 'line-number)) ((fboundp 'line-number-at-pos) ;; Emacs 22.x (defalias 'doctest-line-number 'line-number-at-pos)) (t ;; Emacs 21.x (defun doctest-line-number (&optional pos) "Return the line number of POS (default=point)." (1+ (count-lines 1 (save-excursion (progn (beginning-of-line) (or pos (point))))))))) ;; Backwards compatibility: process-live-p (cond ((fboundp 'process-live-p) ;; XEmacs (defalias 'doctest-process-live-p 'process-live-p)) (t ;; Emacs (defun doctest-process-live-p (process) (and (processp process) (equal (process-status process) 'run))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Doctest Results Mode (output of doctest-execute-buffer) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Register the font-lock keywords (xemacs) (put 'doctest-results-mode 'font-lock-defaults '(doctest-results-font-lock-keywords)) ;; Register the font-lock keywords (older versions of gnu emacs) (when (boundp 'font-lock-defaults-alist) (add-to-list 'font-lock-defaults-alist '(doctest-results-mode doctest-results-font-lock-keywords nil nil nil nil))) (defvar doctest-selected-failure nil "The location of the currently selected failure. This variable is uffer-local to doctest-results-mode buffers.") (defvar doctest-source-buffer nil "The buffer that spawned this one. This variable is uffer-local to doctest-results-mode buffers.") (defvar doctest-results-py-version nil "A symbol indicating which version of Python was used to generate the results in a doctest-results-mode buffer. Can be either the symbol `py21' or the symbol `py24'. This variable is uffer-local to doctest-results-mode buffers.") ;; Keymap for doctest-results-mode. (defconst doctest-results-mode-map (let ((map (make-keymap))) (define-key map [return] 'doctest-select-failure) map) "Keymap for doctest-results-mode.") ;; Syntax table for doctest-results-mode. (defvar doctest-results-mode-syntax-table nil "Syntax table used in `doctest-results-mode' buffers.") (when (not doctest-results-mode-syntax-table) (setq doctest-results-mode-syntax-table (make-syntax-table)) (dolist (entry '(("(" . "()") ("[" . "(]") ("{" . "(}") (")" . ")(") ("]" . ")[") ("}" . "){") ("$%&*+-/<=>|'\"`" . ".") ("_" . "w"))) (dolist (char (string-to-list (car entry))) (modify-syntax-entry char (cdr entry) doctest-results-mode-syntax-table)))) ;; Define the mode (defun doctest-results-mode () "A major mode used to display the results of running doctest. See `doctest-mode'. \\{doctest-results-mode-map}" (interactive) ;; Declare local variables. (kill-all-local-variables) (make-local-variable 'font-lock-defaults) (make-local-variable 'doctest-selected-failure) (make-local-variable 'doctest-source-buffer) (make-local-variable 'doctest-results-py-version) ;; Define local variables. (setq major-mode 'doctest-results-mode mode-name "Doctest-Results" mode-line-process 'doctest-mode-line-process font-lock-defaults '(doctest-results-font-lock-keywords nil nil nil nil)) ;; Define keymap. (use-local-map doctest-results-mode-map) ;; Define the syntax table. (set-syntax-table doctest-results-mode-syntax-table) ;; Enable font-lock mode. (if (featurep 'font-lock) (font-lock-mode 1))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Doctest Mode ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Register the font-lock keywords (xemacs) (put 'doctest-mode 'font-lock-defaults '(doctest-font-lock-keywords nil nil nil nil)) ;; Register the font-lock keywords (older versions of gnu emacs) (when (boundp 'font-lock-defaults-alist) (add-to-list 'font-lock-defaults-alist '(doctest-mode doctest-font-lock-keywords nil nil nil nil))) (defvar doctest-results-buffer nil "The output buffer for doctest-mode. This variable is buffer-local to doctest-mode buffers.") (defvar doctest-example-markers nil "A list mapping markers to the line numbers at which they appeared in the buffer at the time doctest was last run. This is used to find 'original' line numbers, which can be used to search the doctest output buffer. It's encoded as a list of (MARKER . POS) tuples, in reverse POS order. This variable is buffer-local to doctest-mode buffers.") ;; These are global, since we only one run process at a time: (defvar doctest-async-process nil "The process object created by the asynchronous doctest process") (defvar doctest-async-process-tempfiles nil "A list of tempfile names created by the asynchronous doctest process") (defvar doctest-async-process-buffer nil "The source buffer for the asynchronous doctest process") (defvar doctest-mode-line-process "" "A string displayed on the modeline, to indicate when doctest is running asynchronously.") ;; Keymap for doctest-mode. n.b.: we intentionally define [tab] ;; rather than overriding indent-line-function, since we don't want ;; doctest-indent-source-line to be called by do-auto-fill. (defconst doctest-mode-map (let ((map (make-keymap))) (define-key map [backspace] 'doctest-electric-backspace) (define-key map [return] 'doctest-newline-and-indent) (define-key map [tab] 'doctest-indent-source-line) (define-key map ":" 'doctest-electric-colon) (define-key map "\C-c\C-v" 'doctest-version) (define-key map "\C-c\C-c" 'doctest-execute) (define-key map "\C-c\C-d" 'doctest-execute-with-diff) (define-key map "\C-c\C-n" 'doctest-next-failure) (define-key map "\C-c\C-p" 'doctest-prev-failure) (define-key map "\C-c\C-a" 'doctest-first-failure) (define-key map "\C-c\C-e" 'doctest-last-failure) (define-key map "\C-c\C-z" 'doctest-last-failure) (define-key map "\C-c\C-r" 'doctest-replace-output) (define-key map "\C-c|" 'doctest-execute-region) map) "Keymap for doctest-mode.") ;; Syntax table for doctest-mode. (defvar doctest-mode-syntax-table nil "Syntax table used in `doctest-mode' buffers.") (when (not doctest-mode-syntax-table) (setq doctest-mode-syntax-table (make-syntax-table)) (dolist (entry '(("(" . "()") ("[" . "(]") ("{" . "(}") (")" . ")(") ("]" . ")[") ("}" . "){") ("$%&*+-/<=>|'\"`" . ".") ("_" . "w"))) (dolist (char (string-to-list (car entry))) (modify-syntax-entry char (cdr entry) doctest-mode-syntax-table)))) ;; Use doctest mode for files ending in .doctest ;;;###autoload (add-to-list 'auto-mode-alist '("\\.doctest$" . doctest-mode)) ;;;###autoload (defun doctest-mode () "A major mode for editing text files that contain Python doctest examples. Doctest is a testing framework for Python that emulates an interactive session, and checks the result of each command. For more information, see the Python library reference: `doctest-mode' defines three kinds of line, each of which is treated differently: - 'Source lines' are lines consisting of a Python prompt ('>>>' or '...'), followed by source code. Source lines are colored (similarly to `python-mode') and auto-indented. - 'Output lines' are non-blank lines immediately following source lines. They are colored using several doctest- specific output faces. - 'Text lines' are any other lines. They are not processed in any special way. \\{doctest-mode-map}" (interactive) ;; Declare local variables. (kill-all-local-variables) (make-local-variable 'font-lock-defaults) (make-local-variable 'doctest-results-buffer) (make-local-variable 'doctest-example-markers) ;; Define local variables. (setq major-mode 'doctest-mode mode-name "Doctest" mode-line-process 'doctest-mode-line-process font-lock-defaults '(doctest-font-lock-keywords nil nil nil nil)) ;; Define keymap. (use-local-map doctest-mode-map) ;; Define the syntax table. (set-syntax-table doctest-mode-syntax-table) ;; Enable auto-fill mode. (auto-fill-mode 1) (setq auto-fill-function 'doctest-do-auto-fill) ;; Enable font-lock mode. (if (featurep 'font-lock) (font-lock-mode 1)) ;; Run the mode hook. (run-hooks 'doctest-mode-hook)) (provide 'doctest-mode) ;;; doctest-mode.el ends here python-mode.el-6.1.3/test/python-executes-test.el0000644000000000000000000001164112271450574021755 0ustar rootroot00000000000000;;; python-executes-test.el --- executes test ;; Author: Andreas Roehler ;; Keywords: languages, convenience ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Code: (defun py-execute-statement-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-statement-test\")")) (py-bug-tests-intern 'py-execute-statement-base arg teststring))) (defun py-execute-statement-base () (assert (py-execute-statement) nil "py-execute-statement-test failed")) (defun py-execute-block-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-test\")")) (py-bug-tests-intern 'py-execute-block-base arg teststring))) (defun py-execute-block-base () (assert (py-execute-block) nil "py-execute-block-test failed")) (defun py-execute-block-or-clause-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "if True: print(\"I'm the py-execute-block-or-clause-test\")")) (py-bug-tests-intern 'py-execute-block-or-clause-base arg teststring))) (defun py-execute-block-or-clause-base () (assert (py-execute-block-or-clause) nil "py-execute-block-or-clause-test failed")) (defun py-execute-def-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "def foo (): print(\"I'm the py-execute-def-test\")")) (py-bug-tests-intern 'py-execute-def-base arg teststring))) (defun py-execute-def-base () (assert (py-execute-def) nil "py-execute-def-test failed")) (defun py-execute-class-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "class foo (): print(\"I'm the py-execute-class-test\")")) (py-bug-tests-intern 'py-execute-class-base arg teststring))) (defun py-execute-class-base () (assert (py-execute-class) nil "py-execute-class-test failed")) (defun py-execute-region-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-region-test\")")) (py-bug-tests-intern 'py-execute-region-base arg teststring))) (defun py-execute-region-base () (assert (eq nil (py-execute-region (line-beginning-position) (line-end-position))) nil "py-execute-region-test failed")) (defun py-execute-buffer-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-buffer-test\")")) (py-bug-tests-intern 'py-execute-buffer-test-base arg teststring))) (defun py-execute-buffer-test-base () (assert (py-execute-buffer) nil "py-execute-buffer-test failed")) (defun py-execute-expression-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-expression-test\")")) (py-bug-tests-intern 'py-execute-expression-base arg teststring))) (defun py-execute-expression-base () (assert (py-execute-expression) nil "py-execute-expression-test failed")) (defun py-execute-line-test (&optional arg load-branch-function) (interactive "p") (let ((teststring "print(\"I'm the py-execute-line-test\")")) (py-bug-tests-intern 'py-execute-line-base arg teststring))) (defun py-execute-line-base () (assert (py-execute-line) nil "py-execute-line-test failed")) (defun beginning-of-block-fails-from-wrong-indent-test (&optional arg) (interactive "p") (let ((teststring "#! /usr/bin/env python # -*- coding: utf-8 -*- with file(\"roulette-\" + zeit + \".csv\", 'w') as datei: for i in range(anzahl): klauf.pylauf() datei.write(str(spiel[i]) + \"\\n\") ")) (py-bug-tests-intern 'beginning-of-block-fails-from-wrong-indent-base arg teststring))) (defun beginning-of-block-fails-from-wrong-indent-base () (goto-char 102) (assert (eq 48 (py-beginning-of-block)) nil "beginning-of-block-fails-from-wrong-indent-test failed")) (defun py-execute-file-test (&optional arg) (interactive "p") (let ((teststring "print(3)")) (py-bug-tests-intern 'py-execute-file-intern arg teststring))) (defun py-execute-file-intern () (let ((py-store-result-p t) (file (concat py-temp-directory "/py-execute-file-test.py"))) (write-file file) ;; (sit-for 0.1) (unwind-protect (setq erg (py-execute-file file)) (assert (string= "3" erg) nil "py-execute-file-test failed") (delete-file file)))) (provide 'python-executes-test) ;;; python-executes-test.el ends here python-mode.el-6.1.3/completion/0000755000000000000000000000000012271450615016475 5ustar rootroot00000000000000python-mode.el-6.1.3/completion/pycomplete.el0000644000000000000000000004305612271450574021214 0ustar rootroot00000000000000;;; Complete symbols at point using Pymacs. ;; Copyright (C) 2007 Skip Montanaro ;; Original Author: Skip Montanaro ;; Maintainer: Urs Fleisch ;; Created: Oct 2004 ;; Keywords: python pymacs emacs ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; Along with pycomplete.py this file allows programmers to complete Python ;; symbols within the current buffer. See pycomplete.py for the Python side ;; of things and a short description of what to expect. ;; BAW 2012-09-28: pymacs may not be installed on Debian. (condition-case nil (require 'pymacs) (file-error nil)) (eval-when-compile (require 'cl)) (pymacs-load "pycomplete") (defcustom py-complete-set-keymap-p nil "If keys shall be defined when calling `py-complete-initialize'. Default is nil. See also `py-complete-set-keymap'" :type 'boolean :group 'python-mode) (defvar py-complete-variable-index nil "An alist with mappings of local variable names to types.") (defvar py-complete-variable-index-position 0 "The line-beginning-position when py-complete-variable-index was last updated. This can be used to skip updating the index when still on the same line.") (defun py-complete-type-for-value (val) "Return name of type for variable assignment value. If the type cannot be deduced, nil is returned." (let ((firstchar (string-to-char val)) (case-fold-search nil)) (cond ((or (equal 0 firstchar) (string= val "None")) nil) ((equal ?\[ firstchar) "list") ((equal ?{ firstchar) "dict") ((or (equal ?' firstchar) (equal ?\" firstchar)) "str") ((string-match "^[rR]['\"]" val) "str") ((string-match "^[uU][rR]?['\"]" val) "unicode") ((or (string= val "True") (string= val "False")) "bool") ((string-match "^[+\\-]?[0-9]+$" val) "int") ((string-match "^[+\\-]?[0-9]+[lL]$" val) "long") ((string-match "^[+\\-]?[0-9]+\\(?:\\.[0-9]+\\)?" val) "float") ((string-match "^\\(\\(?:[[:word:]\\.]+\\.\\)?_?[A-Z][A-Za-z0-9]+\\)($" val) (match-string-no-properties 1 val)) ((string= "(" (substring-no-properties val -1)) (concat "_PYCFRT(" (substring-no-properties val 0 -1) ")"))))) (defun py-complete-variables-in-def (&optional limit) "Return an alist with mappings of local variable names to types. Local variable assignments and parameters of the current function are parsed. If limit is given, it limits the size of the returned alist." (let ((pos (point)) (i 0) (beg 0) candidates (variable-assignment-re (concat "^[ \t]+\\(\\w+\\)[ \t]*\\(?:=\\|+=\\|*=\\|%=\\|&=\\|^=\\|<<=\\|-=\\|/=\\|**=\\||=\\|>>=\\|//=\\)[ \t]*\\([({[]\\|[rRuU]*['\"]\\|[+\\-]?[[:word:].]+(?\\)"))) (save-excursion ;; First get the current def and its parameters (py-beginning-of-def) (when (looking-at (concat py-def-re " *\\([^( ]+\\) *\\(([^:]+\\) *:")) (setq beg (match-end 0)) (let ((params (replace-regexp-in-string "[ )]+$" "" (replace-regexp-in-string "^[ (]+" "" (match-string-no-properties 3))))) (dolist (param (split-string params "[ \t\r\n]*,[ \t\r\n]*")) ;; Transform param into an assignment string (setq param (concat " " param (unless (memq ?= (string-to-list param)) "=None"))) (if (string-match variable-assignment-re param) (push `(,(match-string-no-properties 1 param) . ,(py-complete-type-for-value (match-string-no-properties 2 param))) candidates))))) ;; Search backward (goto-char pos) (while (and (or (not (integerp limit)) (< i limit)) (re-search-backward variable-assignment-re nil t) (> (point) beg)) (let* ((candidate (match-string-no-properties 1)) (entry (assoc candidate candidates))) (cond ((null entry) (push `(,(match-string-no-properties 1) . ,(py-complete-type-for-value (match-string-no-properties 2))) candidates) (incf i)) ((not (cdr entry)) (setcdr entry (py-complete-type-for-value (match-string-no-properties 2))))))) (nreverse candidates)))) (defun py-complete-update-variable-index (&optional limit) "Update py-complete-variable-index from the local variables of the current function. An update is only performed if point was on a different line for the last update. If limit is given, it limits the size of the index." (unless (local-variable-p 'py-complete-variable-index) (make-local-variable 'py-complete-variable-index)) (unless (local-variable-p 'py-complete-variable-index-position) (make-local-variable 'py-complete-variable-index-position)) (let ((linebeg (line-beginning-position))) (unless (eq linebeg py-complete-variable-index-position) (setq py-complete-variable-index (py-complete-variables-in-def limit)) (setq py-complete-variable-index-position linebeg)))) (defun py-complete-variable-completions-for-symbol (sym) "Get completions for local variables in current def. If sym is an empty string, all local variables are returned, else those starting with sym." (when (and (stringp sym) (string-match "^\\w*$" sym)) (py-complete-update-variable-index) (let ((symlen (length sym))) (if (zerop symlen) (mapcar 'car py-complete-variable-index) (remove-if-not #'(lambda (s) (and (>= (length s) symlen) (string= sym (substring s 0 symlen)))) (mapcar 'car py-complete-variable-index)))))) (defun py-complete-which-class () "Return current class name based on point. If no class name is found, return nil." (interactive) (let (classname) (save-excursion (save-restriction (py-beginning-of-class) (when (looking-at (concat py-class-re " *\\([^( ]+\\)")) (setq classname (match-string-no-properties 2)) (if (interactive-p) (message "%s" classname))))) classname)) (defun py-complete-type-before-dotexpr (&optional pos) "Get type for expression before dot expression. The character after pos (point if omitted) must be a dot. Returns list, str or dict if such an expression is before the dot, else nil." (let ((dotchar (char-after pos))) (if (and dotchar (char-equal ?. dotchar)) (save-excursion (if pos (goto-char pos)) (cond ((looking-back "\\(\\[\\|,[^[]*\\)\\]") "list") ((looking-back "['\"]") "str") ((looking-back "}") "dict")))))) (defun py-complete-substitute-type-for-var (word) "Substitute the type for the variable starting the dot-expression word. Returns the word with replaced variable if known, else the unchanged word." (let* (type (firstsym (car (split-string word "\\."))) (firstlen (length firstsym))) (if (string= firstsym "self") (setq type (py-complete-which-class)) (py-complete-update-variable-index) (setq type (cdr (assoc firstsym py-complete-variable-index)))) (if (stringp type) (concat type (substring word firstlen)) word))) (defun py-complete-python-dotexpr-begin nil (re-search-backward "[^a-zA-Z_0-9\\.]") (forward-char)) (defun py-complete-python-dotexpr-end nil (re-search-forward "[a-zA-Z_0-9\\.]*")) (put 'python-dotexpr 'beginning-op 'py-complete-python-dotexpr-begin) (put 'python-dotexpr 'end-op 'py-complete-python-dotexpr-end) (defun py-complete-enhanced-dotexpr-at-point () "Enhanced (thing-at-point 'python-dotexpr). The returned word starts with a type if an expression is found before the dot or if the dot-expression starts with a variable for which the type is known." (require 'thingatpt) (let ((bounds (bounds-of-thing-at-point 'python-dotexpr))) (if bounds (let* ((beg (car bounds)) (end (cdr bounds)) (word (buffer-substring-no-properties beg end)) (prefix (py-complete-type-before-dotexpr beg))) (if prefix (concat prefix word) (py-complete-substitute-type-for-var word)))))) (defun py-complete-enhanced-symbol-before-point () "Return the dotted python symbol before point. The returned word starts with a type if an expression is found before the dot or if the dot-expression starts with a variable for which the type is known." (let* (prefix (word (buffer-substring-no-properties (save-excursion (skip-chars-backward "a-zA-Z0-9_.") (setq prefix (py-complete-type-before-dotexpr)) (point)) (point)))) (if prefix (concat prefix word) (py-complete-substitute-type-for-var word)))) ;; Not used anymore (defun py-find-global-imports () "Find Python import statements in buffer." (save-excursion (let (first-class-or-def imports) (goto-char (point-min)) (setq first-class-or-def (re-search-forward "^ *\\(def\\|class\\) " nil t)) (goto-char (point-min)) (setq imports nil) (while (re-search-forward "^\\(import \\|from \\([A-Za-z_\\.][A-Za-z_0-9\\.]*\\) import \\).*" first-class-or-def t) (setq imports (cons (buffer-substring-no-properties (match-beginning 0) (match-end 0)) imports))) (nreverse imports)))) (defun py-complete () "Complete symbol before point using Pymacs. " (interactive) (setq py-completion-last-window-configuration (current-window-configuration)) (let ((symbol (py-complete-enhanced-symbol-before-point))) (if (string= "" symbol) (tab-to-tab-stop) (let ((completions (py-complete-completions-for-symbol symbol))) (if completions (let* (completion (lastsym (car (last (split-string symbol "\\.")))) (lastlen (length lastsym))) (cond ((null (cdr completions)) (setq completion (car completions))) (t (setq completion (try-completion lastsym completions)) (message "Making completion list...") (with-output-to-temp-buffer "*PythonCompletions*" (display-completion-list completions)) (message "Making completion list...%s" "done"))) (when (and (stringp completion) (> (length completion) lastlen)) (insert (substring completion lastlen)))) (message "Can't find completion for \"%s\"" symbol) (ding)))))) (defun py-complete-completions-for-symbol (sym &optional imports) "Get possible completions for symbol using statements given in imports." (let ((pymacs-forget-mutability t)) (append (py-complete-variable-completions-for-symbol sym) (pycomplete-pycompletions sym (buffer-file-name) imports)))) (defun py-complete-docstring-for-symbol (sym &optional imports) "Get docstring for symbol using statements given in imports." (let ((pymacs-forget-mutability t)) (pycomplete-pydocstring sym (buffer-file-name) imports))) (defun py-complete-completions () "Get possible completions for current statement." (py-complete-completions-for-symbol (py-complete-enhanced-symbol-before-point))) (defun py-complete-completion-at-point () "Return a (start end collection) list, so that this function can be used as a hook for completion-at-point-functions." (setq py-completion-last-window-configuration (current-window-configuration)) (let ((symbol (py-complete-enhanced-symbol-before-point))) (when (not (string= "" symbol)) (let ((completions (py-complete-completions-for-symbol symbol))) (when completions (when (> (length completions) 1) ;; this-command is changed to avoid the following situation: ;; This function is invoked via indent-for-tab-command (because ;; tab-always-indent is complete) and there is a "Complete, but ;; not unique" case (e.g. "for" is completed and the next TAB key ;; press shall display a list with "for", "format"). In such a ;; case, py-indent-line would detect a repeated indentation ;; request and thus change the indentation. The changed ;; indentation would then prevent indent-for-tab-command ;; from calling the completion function. (setq this-command 'py-complete-completion-at-point)) (list (- (point) (length (car (last (split-string symbol "\\."))))) (point) completions)))))) (defun py-complete-show (string) (display-message-or-buffer string "*PythonHelp*")) (defun py-complete-help (string) "get help on a python expression" (interactive "sHelp: ") (let* ((pymacs-forget-mutability t) (help-string (pycomplete-pyhelp string (buffer-file-name)))) (if (and help-string (> (length help-string) 300)) (with-output-to-temp-buffer "*Python Help*" (princ help-string)) (py-complete-show help-string)))) (defun py-complete-help-thing-at-point nil (interactive) (let ((sym (py-complete-enhanced-dotexpr-at-point))) (if sym (py-complete-help sym)))) (set 'py-complete-current-signature nil) (defun py-complete-signature (function) "get signature of a python function or method" (let ((pymacs-forget-mutability t)) (set 'py-complete-current-signature (pycomplete-pysignature function (buffer-file-name))))) (defun py-complete-signature-show nil (let ((sym (py-complete-enhanced-dotexpr-at-point))) (if sym (progn (py-complete-show (py-complete-signature sym)))))) (defun py-complete-signature-expr nil (interactive) (let ((dotexpr (read-string "signature on: " (py-complete-enhanced-dotexpr-at-point)))) (if dotexpr (py-complete-show (py-complete-signature dotexpr))))) (defun py-complete-electric-lparen nil "electricly insert '(', and try to get a signature for the stuff to the left" (interactive) (py-complete-signature-show) (self-insert-command 1)) (defun py-complete-electric-comma nil "electricly insert ',', and redisplay latest signature" (interactive) (self-insert-command 1) (if py-complete-current-signature (py-complete-show (format "%s" py-complete-current-signature)))) (defun py-complete-location (sym) "Get definition location of sym in cons form (FILE . LINE)." (let ((location (pycomplete-pylocation sym (buffer-file-name)))) (when (and location (vectorp location) (= (length location) 2)) (cons (aref location 0) (aref location 1))))) (defun py-complete-goto-definition nil "Got to definition of Python function." (interactive) (let ((sym (py-complete-enhanced-dotexpr-at-point))) (if sym (let ((location (pycomplete-pylocation sym (buffer-file-name)))) (if (and location (vectorp location) (= (length location) 2)) (progn (find-file (aref location 0)) (goto-line (aref location 1))) (message "Cannot find the definition!")))))) (defun py-complete-parse-source () "Parse source code of Python file to get imports and completions." (let ((errstr (pycomplete-pyparse (buffer-file-name) t))) (if errstr (message "%s" errstr)))) (defun py-complete-set-keymap () "Define key map with pycomplete functions." (interactive) (define-key python-mode-map [C-tab] 'py-complete) (define-key python-mode-map [f1] 'py-complete-help-thing-at-point) (define-key python-mode-map "(" 'py-complete-electric-lparen) (define-key python-mode-map "," 'py-complete-electric-comma) (define-key python-mode-map [S-f1] 'py-complete-signature-expr) (define-key python-mode-map [f2] 'py-complete-goto-definition) (define-key python-mode-map [f3] 'py-complete-help)) (defun py-complete-initialize () "Initialize pycomplete hooks. Should be called from python-mode-hook. Keys are set when `py-complete-set-keymap-p' is non-nil." (interactive) (when py-set-complete-keymap-p (py-complete-set-keymap)) (when py-complete-set-keymap-p (py-complete-set-keymap)) ;; Parse source file after it is saved (add-hook 'after-save-hook 'py-complete-parse-source nil 'local) ;; Set up auto-complete or company if enabled (cond ((fboundp 'auto-complete-mode) (require 'auto-complete-pycomplete) (setq ac-sources (if (boundp 'py-complete-ac-sources) py-complete-ac-sources '(ac-source-pycomplete)))) ((fboundp 'company-mode) (company-mode t) (require 'company-pycomplete) (set (make-local-variable 'company-backends) '((company-pycomplete)))) ((or py-set-complete-keymap-p py-complete-set-keymap-p) (set (make-local-variable 'tab-always-indent) 'complete) (define-key python-mode-map [tab] 'indent-for-tab-command)))) (provide 'pycomplete) python-mode.el-6.1.3/completion/company-pycomplete.el0000644000000000000000000000547312271450574022661 0ustar rootroot00000000000000;;; company-pycomplete.el --- a company-mode completion back-end for pycomplete.el ;; Copyright (C) 2012 Urs Fleisch ;; Author: Urs Fleisch ;; Keywords: languages, processes, python, oop ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; The backend can be enabled using ;; (setq company-backends '((company-pycomplete))) ;;; Code: (require 'pycomplete) (require 'company) (defun company-pycomplete--grab-symbol () ;; stolen from company-pysmell--grab-symbol (let ((symbol (company-grab-symbol))) (when symbol (cons symbol (save-excursion (let ((pos (point))) (goto-char (- (point) (length symbol))) (while (eq (char-before) ?.) (goto-char (1- (point))) (skip-syntax-backward "w_")) (- pos (point)))))))) (defun company-pycomplete-doc-buffer (candidate) "Return buffer with docstring of CANDIDATE if it is available." (let* ((full-prefix (py-complete-enhanced-symbol-before-point)) (full-symbol (concat full-prefix (company-strip-prefix candidate))) (doc (py-complete-docstring-for-symbol full-symbol))) (when (and (stringp doc) (> (length doc) 0)) (with-current-buffer (company-doc-buffer) (insert doc) (current-buffer))))) (defun company-pycomplete-location (candidate) "Return location of CANDIDATE in cons form (FILE . LINE) if it is available." (let* ((full-prefix (py-complete-enhanced-symbol-before-point)) (full-symbol (concat full-prefix (company-strip-prefix candidate)))) (py-complete-location full-symbol))) (defun company-pycomplete (command &optional arg &rest ignored) "A `company-mode' completion back-end for pycomplete." (interactive (list 'interactive)) (case command ('interactive (company-begin-backend 'company-pycomplete)) ('prefix (and (derived-mode-p 'python-mode) (not (company-in-string-or-comment)) (company-pycomplete--grab-symbol))) ('candidates (py-complete-completions)) ('doc-buffer (company-pycomplete-doc-buffer arg)) ('location (company-pycomplete-location arg)))) (provide 'company-pycomplete) ;;; company-pycomplete.el ends here python-mode.el-6.1.3/completion/pycomplete.py0000644000000000000000000007125112271450574021242 0ustar rootroot00000000000000""" Python dot expression completion using Pymacs. This almost certainly needs work, but if you add (require 'pycomplete) to your init.el file and have Pymacs installed, when you hit M-TAB it will try to complete the dot expression before point. For example, given this import at the top of the file: import time typing "time.cl" then hitting M-TAB should complete "time.clock". This is unlikely to be done the way Emacs completion ought to be done, but it's a start. Perhaps someone with more Emacs mojo can take this stuff and do it right. See pycomplete.el for the Emacs Lisp side of things. Most of the public functions in this module have the signature (s, fname=None, imports=None) where s is the symbol to complete, fname is the file path and imports the list of import statements to use. The fname parameter is used as a key to cache the global and local context and the symbols imported or evaluated so far. The cache for an fname is cleared when its imports are changed. When not passing a list of imports (or None), the currently used imports are preserved. The caching should make subsequent operations (e.g. another completion or signature lookup after a completion) less expensive. """ # Original Author: Skip Montanaro # Maintainer: Urs Fleisch # Created: Oct 2004 # Keywords: python pymacs emacs # This software is provided as-is, without express or implied warranty. # Permission to use, copy, modify, distribute or sell this software, without # fee, for any purpose and by any individual or organization, is hereby # granted, provided that the above copyright notice and this paragraph # appear in all copies. # Along with pycomplete.el this file allows programmers to complete Python # symbols within the current buffer. import sys import types import inspect import keyword import os import pydoc import ast import re if sys.version_info[0] >= 3: # Python 3 import io else: # Python 2 import StringIO try: x = set except NameError: from sets import Set as set else: del x class _PyCompleteDocument(object): """Completion data for Python source file.""" if sys.version_info[0] >= 3: # Python 3 _helpout = io.StringIO @staticmethod def is_num_or_str(obj): return isinstance(obj, (int, float, str)) @staticmethod def is_class_type(obj): return type(obj) == type @staticmethod def get_unbound_function(unbound): return unbound @staticmethod def get_method_function(meth): return meth.__func__ @staticmethod def get_function_code(func): return func.__code__ @staticmethod def update_with_builtins(keys): import builtins keys.update(dir(builtins)) else: # Python 2 _helpout = StringIO.StringIO @staticmethod def is_num_or_str(obj): return isinstance(obj, (int, long, float, basestring)) @staticmethod def is_class_type(obj): return type(obj) in (types.ClassType, types.TypeType) @staticmethod def get_unbound_function(unbound): return unbound.im_func @staticmethod def get_method_function(meth): return meth.im_func @staticmethod def get_function_code(func): return func.func_code @staticmethod def update_with_builtins(keys): import __builtin__ keys.update(dir(__builtin__)) _sre_SRE_Pattern = type(re.compile('')) _sre_SRE_Match = type(re.match('', '')) # Class name in CapCase, as suggested by PEP8 Python style guide _class_name_re = re.compile(r'(?:^|\.)_?[A-Z][A-Za-z0-9]+$') _return_type_of_func = { 'bin': 'str', 'bytearray': 'bytearray', 'bytes': 'bytes', 'compile': 'types.CodeType', 'complex': 'complex', 'dict': 'dict', 'frozenset': 'frozenset', 'oct': 'str', 'open': 'io.BufferedIOBase' if sys.version_info[0] >= 3 else 'file', 'list': 'list', 'repr': 'str', 'set': 'set', 'sorted': 'list', 'str': 'str', 'tuple': 'tuple', 'vars': 'dict', 're.compile': '_PyCompleteDocument._sre_SRE_Pattern', 're.escape': 'str', 're.findall': 'list', 're.match': '_PyCompleteDocument._sre_SRE_Match', 're.search': '_PyCompleteDocument._sre_SRE_Match', 're.split': 'list', 're.sub': 'str', 're.subn': 'tuple', 'datetime.datetime': 'datetime.datetime', 'datetime.date': 'datetime.date', 'datetime.time': 'datetime.time', 'datetime.timedelta': 'datetime.timedelta', 'sys.exc_info': 'tuple', 'os.getcwd': 'str', 'os.getenv': 'str', 'os.urandom': 'bytes', 'os.path.abspath': 'str', 'os.path.basename': 'str', 'os.path.commonprefix': 'str', 'os.path.dirname': 'str', 'os.path.expanduser': 'str', 'os.path.expandvars': 'str', 'os.path.join': 'str', 'os.path.normcase': 'str', 'os.path.normpath': 'str', 'os.path.realpath': 'str', 'os.path.relpath': 'str', 'os.path.split': 'tuple', 'os.path.splitdrive': 'tuple', 'os.path.splitext': 'tuple', 'collections.defaultdict': 'collections.defaultdict', 'collections.deque': 'collections.deque', 'collections.namedtuple': 'collections.namedtuple', 'socket.socket': 'socket.socket', 'csv.excel': 'csv.excel', 'csv.excel_tab': 'csv.excel_tab' } @staticmethod def _get_type_for_function(funcname): typename = _PyCompleteDocument._return_type_of_func.get(funcname) if not typename and \ _PyCompleteDocument._class_name_re.search(funcname): typename = funcname return typename @staticmethod def _replace_pycfrt_with_typename(s): """Replace _PYCFRT(..) expressions with function return type. The names of variables assigned from function calls can be replaced by _PYCFRT(name.of.function). This function tries to replace such expressions with the corresponding function return type (PYCFRT = pycomplete function return type). If no such expression can be found, s is returned unchanged. If the type cannot be deduced, None is returned, else the substituted string.""" pycfrt_re = re.compile(r'_PYCFRT\(([^()]+)\)') return pycfrt_re.sub(lambda m: _PyCompleteDocument._get_type_for_function(m.group(1)), s) class ImportExtractor(ast.NodeVisitor): """NodeVisitor to extract the top-level import statements from an AST. To generate code containing all imports in try-except statements, call get_import_code(node), where node is a parsed AST. """ def visit_FunctionDef(self, node): # Ignore imports inside functions or methods. pass def visit_ClassDef(self, node): # Ignore imports inside classes. pass def generic_visit(self, node): # Store import statement nodes. if isinstance(node, (ast.Import, ast.ImportFrom)): self._import_nodes.append(node) ast.NodeVisitor.generic_visit(self, node) def get_import_code(self, node, fname=''): """Get compiled code of all top-level import statements found in the AST of node.""" self._import_nodes = [] self.visit(node) body = [] for imp_node in self._import_nodes: if isinstance(imp_node, ast.ImportFrom) and \ imp_node.module == '__future__': # 'SyntaxError: from __future__ imports must occur at the # beginning of the file' is raised if a 'from __future__ import' # is wrapped in try-except, so use only the import statement. body.append(imp_node) else: body.append(ast.TryExcept(body=[imp_node], handlers=[ ast.ExceptHandler(type=None, name=None, body=[ast.Pass()])], orelse=[])) node = ast.Module(body=body) ast.fix_missing_locations(node) code = compile(node, fname, 'exec') return code class CodeRemover(ast.NodeTransformer): """NodeTransformer which replaces function statements with 'pass' and keeps only safe assignments, so that the resulting code can be used for code completion. To reduce the code from the node of a parsed AST, call get_transformed_code(node). """ def visit_FunctionDef(self, node): # Replace all function statements except doc string by 'pass'. if node.body: if isinstance(node.body[0], ast.Expr) and \ isinstance(node.body[0].value, ast.Str): # Keep doc string. first_stmt = node.body[1] if len(node.body) > 1 else node.body[0] node.body = [node.body[0]] else: first_stmt = node.body[0] node.body = [] node.body.append(ast.copy_location(ast.Pass(), first_stmt)) return node return None def visit_Expr(self, node): # Remove all expressions except strings to keep doc strings. if isinstance(node.value, ast.Str): return node return None @staticmethod def _get_type_node_for_function_node(node): # Convert node to dot expression attrs = [] while isinstance(node, ast.Attribute): attrs.insert(0, node.attr) node = node.value if isinstance(node, ast.Name): attrs.insert(0, node.id) funcname = '.'.join(attrs) typename = _PyCompleteDocument._get_type_for_function(funcname) if typename: # Convert dot expression to node attrs = typename.split('.') node = None if attrs: node = ast.Name(id=attrs.pop(0), ctx=ast.Load()) while attrs: node = ast.Attribute(value=node, attr=attrs.pop(0), ctx=ast.Load()) return node return None @staticmethod def replace_unsafe_value(node, replace_self=None): """Modify value from assignment if unsafe. If replace_self is given, only assignments starting with 'self.' are processed, the assignment node is returned with 'self.' replaced by the value of replace_self (typically the class name). For other assignments, None is returned.""" for i, target in enumerate(node.targets): if not isinstance(target, (ast.Name, ast.Attribute)): # Only process assignments to names and attributes, # not tuples. return None if replace_self: if isinstance(target, ast.Attribute) and \ isinstance(target.value, ast.Name) and \ target.value.id == 'self' and \ isinstance(target.value.ctx, ast.Load): node.targets[i].value.id = replace_self if target.attr == '__name__': node.value = ast.copy_location(ast.Str(s=''), node.value) elif target.attr in ('__dict__', '__class__', '__bases__', '__doc__'): return None else: return None elif isinstance(target, ast.Name) and \ isinstance(target.ctx, ast.Store): if target.id == '__metaclass__': # Do not modify __metaclass__ assignments return node elif target.id == '__slots__': node.value = ast.copy_location( ast.List(elts=[], ctx=ast.Load()), node.value) if isinstance(node.value, (ast.Str, ast.Num)): pass elif isinstance(node.value, (ast.List, ast.Tuple)): node.value.elts = [] elif isinstance(node.value, ast.Dict): node.value.keys = [] node.value.values = [] elif isinstance(node.value, ast.ListComp): node.value = ast.copy_location(ast.List(elts=[], ctx=ast.Load()), node.value) elif isinstance(node.value, ast.Call): type_node = _PyCompleteDocument.CodeRemover._get_type_node_for_function_node(node.value.func) if type_node: # Wrap class lookup in try-except because it is not fail-safe. node.value = ast.copy_location(type_node, node.value) node = ast.copy_location(ast.TryExcept(body=[node], handlers=[ ast.ExceptHandler(type=None, name=None, body=[ast.Pass()])], orelse=[]), node) ast.fix_missing_locations(node) else: node.value = ast.copy_location( ast.Name(id='None', ctx=ast.Load()), node.value) else: node.value = ast.copy_location(ast.Name(id='None', ctx=ast.Load()), node.value) return node def visit_Assign(self, node): # Replace unsafe values of assignements by None. return self.replace_unsafe_value(node) def visit_Name(self, node): # Pass names for bases in ClassDef. return node def visit_Attribute(self, node): # Pass attributes for bases in ClassDef. return node def visit_ClassDef(self, node): # Visit nodes of class. # Store instance member assignments to be added later to generated code. self_assignments = {} for child in ast.walk(node): if isinstance(child, ast.Assign): new_child = self.replace_unsafe_value(child, replace_self=node.name) if new_child: new_var = child.targets[0].attr old_assign = self_assignments.get(new_var) if not old_assign or ( isinstance(old_assign, ast.Assign) and isinstance(old_assign.value, ast.Name) and old_assign.value.id == 'None'): self_assignments[new_var] = new_child self._class_assignments.extend(list(self_assignments.values())) return ast.NodeTransformer.generic_visit(self, node) def visit_Module(self, node): # Visit nodes of module return ast.NodeTransformer.generic_visit(self, node) def generic_visit(self, node): # Remove everything which is not handled by the methods above return None def get_transformed_code(self, node, fname=''): """Get compiled code containing only empty functions and methods and safe assignments found in the AST of node.""" self._class_assignments = [] node = self.visit(node) # The self members are added as attributes to the class objects # rather than included as class variables inside the class definition # so that names starting with '__' are not mangled. node.body.extend(self._class_assignments) code = compile(node, fname, 'exec') return code _stdout = sys.stdout _instances = {} def __init__(self, fname=None): """Constructor for internal use. The factory method instance() shall be used instead. """ self._fname = fname self._imports = None self._globald = globals().copy() self._symnames = [] self._symobjs = {} self._parse_source_called = False @classmethod def instance(cls, fname): """Get _PyCompleteDocument object for fname. If no object for this file name exists, a new object is created and registered. """ obj = cls._instances.get(fname) if obj is None: obj = _PyCompleteDocument(fname) cls._instances[fname] = obj return obj def _import_modules(self, imports): """Import modules using the statements in imports. If the imports are the same as in the last call, the methods immediately returns, also if imports is None. """ if imports is None and not self._parse_source_called: self.parse_source() if imports is None or imports == self._imports: return # changes to where the file is if self._fname: os.chdir(os.path.dirname(self._fname)) self._globald = globals().copy() self._symnames = [] self._symobjs = {} for stmt in imports: try: exec(stmt, self._globald) except TypeError: raise TypeError('invalid type: %s' % stmt) except Exception: continue self._imports = imports def _collect_symbol_names(self): """Collect the global, local, builtin symbols in _symnames. If _symnames is already set, the method immediately returns. """ if not self._symnames: keys = set(keyword.kwlist) keys.update(list(self._globald.keys())) self.update_with_builtins(keys) self._symnames = list(keys) self._symnames.sort() def _get_symbol_object(self, s): """Get a symbol by evaluating its name or importing a module or submodule with the name s. """ sym = self._symobjs.get(s) if sym is not None: return sym # changes to where the file is if self._fname: os.chdir(os.path.dirname(self._fname)) try: sym = eval(s, self._globald) except NameError: try: sym = __import__(s, self._globald) self._globald[s] = sym except ImportError: pass except AttributeError: try: sym = __import__(s, self._globald) except ImportError: pass except SyntaxError: pass if sym is not None: self._symobjs[s] = sym return sym def _load_symbol(self, s, strict=False): """Get a symbol for a dotted expression. Returns the last successfully found symbol object in the dotted chain. If strict is set True, it returns True as soon as a symbol is not found. Therefore strict=True can be used to find exactly the symbol for s, otherwise a symbol for a parent can be returned, which may be enough if searching for help on symbol. """ s = self._replace_pycfrt_with_typename(s) sym = self._symobjs.get(s) if sym is not None: return sym dots = s.split('.') if not s or len(dots) == 1: sym = self._get_symbol_object(s) else: for i in range(1, len(dots) + 1): s = '.'.join(dots[:i]) if not s: continue sym_i = self._get_symbol_object(s) if sym_i is not None: sym = sym_i elif strict: return None return sym def _get_help(self, s, imports=None): """Return string printed by help function.""" if not s: return '' if s == 'pydoc.help': # Prevent pydoc from going into interactive mode s = 'pydoc.Helper' obj = None if not keyword.iskeyword(s): try: self._import_modules(imports) obj = self._load_symbol(s, strict=False) except Exception as ex: return '%s' % ex if not obj: obj = str(s) out = self._helpout() try: sys.stdout = out pydoc.help(obj) finally: sys.stdout = self._stdout return out.getvalue() @staticmethod def _find_constructor(class_ob): """Given a class object, return a function object used for the constructor (ie, __init__() ) or None if we can't find one.""" try: return _PyCompleteDocument.get_unbound_function(class_ob.__init__) except AttributeError: for base in class_ob.__bases__: rc = _PyCompleteDocument._find_constructor(base) if rc is not None: return rc return None def get_all_completions(self, s, imports=None): """Return contextual completion of s (string of >= zero chars). If given, imports is a list of import statements to be executed first. """ self._import_modules(imports) s = self._replace_pycfrt_with_typename(s) last_dot_pos = s.rfind('.') if last_dot_pos == -1: self._collect_symbol_names() if s: return [k for k in self._symnames if k.startswith(s)] else: return self._symnames sym = self._load_symbol(s[:last_dot_pos], strict=True) if sym is not None: s = s[last_dot_pos + 1:] return [k for k in dir(sym) if k.startswith(s)] return [] def complete(self, s, imports=None): """Complete symbol if unique, else return list of completions.""" if not s: return '' completions = self.get_all_completions(s, imports) if len(completions) == 0: return None else: dots = s.split(".") prefix = os.path.commonprefix([k for k in completions]) if len(completions) == 1 or len(prefix) > len(dots[-1]): return [prefix[len(dots[-1]):]] return completions def help(self, s, imports=None): """Return help on object.""" try: return self._get_help(s, imports) except Exception as ex: return '%s' % ex def get_docstring(self, s, imports=None): """Return docstring for symbol s.""" if s and not keyword.iskeyword(s): try: self._import_modules(imports) obj = self._load_symbol(s, strict=True) if obj and not self.is_num_or_str(obj): doc = inspect.getdoc(obj) if doc: return doc except: pass return '' def get_signature(self, s, imports=None): """Return info about function parameters.""" if not s or keyword.iskeyword(s): return '' obj = None sig = "" try: self._import_modules(imports) obj = self._load_symbol(s, strict=False) except Exception as ex: return '%s' % ex if self.is_class_type(obj): # Look for the highest __init__ in the class chain. ctr = self._find_constructor(obj) if ctr is not None and type(ctr) in ( types.MethodType, types.FunctionType, types.LambdaType): obj = ctr elif type(obj) == types.MethodType: # bit of a hack for methods - turn it into a function # but we drop the "self" param. obj = self.get_method_function(obj) if type(obj) in [types.FunctionType, types.LambdaType]: (args, varargs, varkw, defaults) = inspect.getargspec(obj) sig = ('%s: %s' % (obj.__name__, inspect.formatargspec(args, varargs, varkw, defaults))) doc = getattr(obj, '__doc__', '') if doc and not sig: doc = doc.lstrip() pos = doc.find('\n') if pos < 0 or pos > 70: pos = 70 sig = doc[:pos] return sig def get_location(self, s, imports=None): """Return file path and line number of symbol, None if not found.""" if not s or keyword.iskeyword(s): return None try: self._import_modules(imports) obj = self._load_symbol(s, strict=False) if obj is not None: if self.is_class_type(obj): obj = obj.__init__ if type(obj) == types.MethodType: obj = self.get_method_function(obj) if type(obj) in [types.FunctionType, types.LambdaType]: code = self.get_function_code(obj) return (os.path.abspath(code.co_filename), code.co_firstlineno) # If not found, try using inspect. return (inspect.getsourcefile(obj), inspect.getsourcelines(obj)[1]) except: pass return None def parse_source(self, only_reload=False): """Parse source code to get imports and completions. If this method is called, the imports parameter for the other methods must be omitted (or None), so that the imports are taken from the parsed source code. If only_reload is True, the source is only parsed if it has been parsed before. None is returned if OK, else a string describing the error. """ if only_reload and not self._parse_source_called: return None self._parse_source_called = True if not self._fname: return None try: with open(self._fname) as fh: src = fh.read() except IOError as ex: return '%s' % ex # changes to where the file is os.chdir(os.path.dirname(self._fname)) try: node = ast.parse(src, self._fname) import_code = self.ImportExtractor().get_import_code(node, self._fname) except (SyntaxError, TypeError) as ex: return '%s' % ex old_globald = self._globald.copy() self._globald = globals().copy() try: exec(import_code, self._globald) except Exception as ex: self._globald = old_globald return '%s' % ex self._symnames = [] self._symobjs = {} reduced_code = self.CodeRemover().get_transformed_code(node, self._fname) try: exec(reduced_code, self._globald) except Exception as ex: return '%s' % ex return None def pycompletions(s, fname=None, imports=None): """Get a list of possible completions for s. The completions extend the expression s after the last dot. """ return _PyCompleteDocument.instance(fname).get_all_completions( s, imports) def pycomplete(s, fname=None, imports=None): """Complete the Python expression s. If multiple completions are found, a list of possible completions (names after the last dot) is returned. If one completion is found, a list with a string containing the remaining characters is returned. If no completion is found, None is returned. """ return _PyCompleteDocument.instance(fname).complete(s, imports) def pyhelp(s, fname=None, imports=None): """Return help on object s.""" return _PyCompleteDocument.instance(fname).help(s, imports) def pydocstring(s, fname=None, imports=None): """Return docstring of symbol.""" return _PyCompleteDocument.instance(fname).get_docstring(s, imports) def pysignature(s, fname=None, imports=None): """Return info about function parameters.""" return _PyCompleteDocument.instance(fname).get_signature(s, imports) def pylocation(s, fname=None, imports=None): """Return file path and line number of symbol, None if not found.""" return _PyCompleteDocument.instance(fname).get_location(s, imports) def pyparse(fname, only_reload=False): """Parse source code to get imports and completions. If this function is called, the imports parameter for the other functions must be omitted (or None), so that the imports are taken from the parsed source code. If only_reload is True, the source is only parsed if it has been parsed before. """ return _PyCompleteDocument.instance(fname).parse_source(only_reload) # Local Variables : # pymacs-auto-reload : t # End : python-mode.el-6.1.3/completion/test_pycomplete.py0000755000000000000000000002173512271450574022306 0ustar rootroot00000000000000#!/usr/bin/env python import os import linecache import tempfile from pycomplete import * def test_signature(): assert pysignature('') == '' assert pysignature('os.path.join') == 'join: (a, *p)' assert pysignature('json.dump').startswith( 'dump: (obj, fp, skipkeys=False, ensure_ascii=True, ') assert pysignature('json.JSONEncoder.encode') == 'encode: (self, o)' assert pysignature('json.JSONEncoder').startswith( '__init__: (self, skipkeys=False, ensure_ascii=True, ') assert pysignature('xml.dom.minidom.parse') == \ 'parse: (file, parser=None, bufsize=None)' assert pysignature('csv.reader') == \ 'csv_reader = reader(iterable [, dialect=\'excel\']' assert pysignature('super') in ( 'super(type) -> unbound super object', 'super() -> same as super(__class__, )') def test_help(): assert pyhelp('os.path.join').startswith('Help on function join') assert pyhelp('logging', imports=('import logging',)).startswith( 'Help on package logging:\n\nNAME\n logging\n') assert pyhelp('csv', imports=('import csv',)).startswith( 'Help on module csv:\n\nNAME\n csv - CSV parsing and writing.\n') assert pyhelp('import').startswith( 'The ``import`` statement\n************************\n') assert pyhelp('pydoc.help').startswith( 'Help on class Helper in module pydoc') assert pyhelp('') == '' def test_complete(): assert pycomplete('') == '' assert pycomplete('sys.getd') == ['getdefaultencoding', 'getdlopenflags'] assert pycomplete('set') == ['set', 'setattr'] assert pycomplete('settr') is None assert pycomplete('settr', imports=['from sys import settrace']) == [ 'ace'] # Test with cached imports assert pycomplete('settr') == ['ace'] # Not cached for other files fpath = os.path.abspath(__file__) assert pycomplete('settr', fname=fpath) is None assert pycomplete('settr', fname=fpath, imports=['from sys import settrace']) == ['ace'] assert pycomplete('foo.') is None assert pycomplete('JSONEnc') is None assert pycomplete('JSONEnc', imports=['from json import *']) == ['oder'] assert pycomplete('A') == [ 'ArithmeticError', 'AssertionError', 'AttributeError'] def test_completions(): all_completions = pycompletions('') assert all_completions[0] == 'ArithmeticError' assert all_completions[-1] == 'zip' assert pycompletions('os.path.jo') == ['join'] assert pycompletions('settr', imports=['']) == [] assert pycompletions('settr', imports=['from sys import settrace']) == ['settrace'] # Check if imports are still cached. assert pycompletions('settr', imports=None) == ['settrace'] # Change list of imports, so that cache is invalidated. assert pycompletions('settr', imports=['']) == [] def test_location(): fn, line = pylocation('os.path.join') assert os.path.exists(fn) assert linecache.getline(fn, line).startswith('def join') assert pylocation('io.StringIO') is None fn, line = pylocation('json') assert os.path.exists(fn) assert pylocation('for') is None def test_docstring(): assert pydocstring('os.path.abspath') == 'Return an absolute path.' assert pydocstring('os.path').startswith( 'Common operations on Posix pathnames.\n') assert pydocstring('json.JSONEncoder.encode').startswith( 'Return a JSON string representation of a Python data structure.\n') assert pydocstring('yield') == '' assert pydocstring('numbers.Real.real') == \ 'Real numbers are their real component.' assert pydocstring('notexisting') == '' assert pydocstring('re.IGNORECASE') == '' def test_parse_source(): tmp_file = tempfile.NamedTemporaryFile(suffix='.py', mode='w') name = tmp_file.name with tmp_file.file as fh: assert pyparse('not_existing', only_reload=True) == None assert pyparse('not_existing') == \ "[Errno 2] No such file or directory: 'not_existing'" assert pyparse(name) is None # Nothing imported so far assert pycompletions('dat' , name) == [] src = """ "Doc for module." from __future__ import print_function import sys, os, io, re from datetime import date, \ time import argparse if os.getenv('LC'): import linecache modvar = 1 mod_re = re.compile(r'^test') def testfunc(): "Doc for testfunc." import urllib def emptyfunc(): "Function with only docstring." class TestClass(date): "Doc for TestClass." CONST1 = 7 CONST2 = 'abc' CONST3 = ['a', ] def __init__(self): self._member1 = 'string member' self._member2 = None self.__member3 = [ None, open('not_existing') ] self.member4 = argparse.ArgumentParser() self.member4 = None self.member5 = open('not_existing') self.member6 = self.member7 = { 'multiple': 'targets' } self.member8, self.member9 = 'tuple', 'assignment' self.member10 = [ n for n in range(3) ] self.member11 = SyntaxError() self.member12 = testfunc() def testmeth(self, arg1=modvar): "Doc for testmeth." sys.stdout.write('From testmeth %d' % arg1) if arg1 == 2: self._member1 = None @staticmethod def teststaticmeth(arg1=2): "Doc for teststaticmeth." sys.stdout.write('From teststaticmeth %d' % arg1) @classmethod def testclassmeth(cls, arg1=3): "Doc for testclassmeth." open('not_existing') @property def testprop(self): "Doc for testprop." return 4 * 8 if __name__ == '__main__': testfunc() """ num_src_lines = len(src.splitlines()) fh.write(src) fh.flush() assert pyparse(name) == None # Check if only global imports are visible assert pycompletions('dat' , name) == ['date'] assert pycompletions('tim' , name) == ['time'] assert pycompletions('url' , name) == [] assert pycompletions('line' , name) == ['linecache'] assert pycompletions('os' , name) == ['os'] # Check for definitions in local file assert pycompletions('test' , name) == ['testfunc'] assert pycompletions('TestClass.CO' , name) == \ ['CONST1', 'CONST2', 'CONST3'] assert pycompletions('TestClass.test' , name) == \ ['testclassmeth', 'testmeth', 'testprop', 'teststaticmeth'] # Check for instance members assert pycompletions('TestClass._mem', name) == \ ['_member1', '_member2'] assert pycompletions('TestClass.__mem', name) == ['__member3'] assert pycompletions('TestClass._member1.start', name) == \ ['startswith'] assert pycompletions('TestClass._member2.', name) == [] assert pycompletions('TestClass.__member3.ext', name) == \ ['extend'] assert pycompletions('TestClass.member4.prin', name) == \ ['print_help', 'print_usage', 'print_version'] assert pycompletions('TestClass.member5.writel', name) == \ ['writelines'] assert pycompletions('TestClass.member6.from', name) == \ ['fromkeys'] assert pycompletions('TestClass.member7.from', name) == \ ['fromkeys'] assert pycompletions('TestClass.member10.ext', name) == \ ['extend'] assert pycompletions('TestClass.member11.ar', name) == \ ['args'] assert pycompletions('modvar.num', name) == ['numerator'] assert pycompletions('mod_re.ma', name) == ['match'] assert pydocstring('TestClass._member1', name) == '' assert pydocstring('TestClass._member2', name) == '' assert pydocstring('TestClass.__member3', name) == '' # Check for super class assert pycompletions('TestClass.week' , name) == ['weekday'] assert pycompletions('TestClass.utc' , name) == [] # Check signature, documentation and location assert pysignature('TestClass.testmeth', name) == \ 'testmeth: (self, arg1=1)' assert pydocstring('testfunc', name) == \ 'Doc for testfunc.' assert pylocation('TestClass.testclassmeth', name) == \ (name, num_src_lines - 10) # Verify that loaded symbols are not affected by transient # syntax error fh.write('while') fh.flush() assert pyparse(name) == \ 'invalid syntax (%s, line %d)' % (os.path.basename(name), num_src_lines + 1) assert pycompletions('dat' , name) == ['date'] # Replace file contents and check new imports fh.seek(0) fh.truncate(0) fh.write('import urllib\n') fh.flush() assert pyparse(name) == None assert pycompletions('dat' , name) == [] assert pycompletions('url' , name) == ['urllib'] def run_tests(): test_complete() test_completions() test_help() test_signature() test_location() test_docstring() test_parse_source() if __name__ == "__main__": run_tests() python-mode.el-6.1.3/completion/auto-complete-pycomplete.el0000644000000000000000000000322112271450574023756 0ustar rootroot00000000000000;;; auto-complete-pycomplete.el --- an auto-complete source for pycomplete.el ;; Copyright (C) 2012 Urs Fleisch ;; Author: Urs Fleisch ;; Keywords: languages, processes, python, oop ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; The ac-source can be enabled solely using ;; (setq ac-sources '(ac-source-pycomplete)) ;; or before the other sources using ;; (add-to-list 'ac-sources 'ac-source-pycomplete). ;;; Code: (require 'pycomplete) (require 'auto-complete) (defun ac-pycomplete-document (symbol) (let* ((full-prefix (py-complete-enhanced-symbol-before-point)) (full-symbol (concat (substring full-prefix 0 (- (length ac-prefix))) symbol))) (py-complete-docstring-for-symbol full-symbol))) (defun ac-pycomplete-candidates () (py-complete-completions-for-symbol (py-complete-enhanced-symbol-before-point))) (ac-define-source pycomplete '((candidates . ac-pycomplete-candidates) (document . ac-pycomplete-document))) (provide 'auto-complete-pycomplete) ;;; auto-complete-pycomplete.el ends here python-mode.el-6.1.3/byte-compile-directory.sh0000644000000000000000000000265712271450574021271 0ustar rootroot00000000000000#!/bin/bash # -- byte-compile Emacs Lisp files delivered with python-mode.el # Author: Andreas Roehler # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Commentary: Edit the vars pointing to the directories/files # holding your python-mode for test # assumes python-mode files in or below current directory # Code: # the path PDIR=`pwd` # python-mode file to load if [ -s "python-components-mode.el" ]; then PYTHONMODE='python-components-mode.el' else PYTHONMODE='python-mode.el' fi EMACS=emacs PYMACSDIR=Pymacs $EMACS -Q --batch --eval "(message (emacs-version))" --eval "(when (featurep 'python-mode)(unload-feature 'python-mode t))" --eval "(add-to-list 'load-path \"$PDIR/\")" --eval "(add-to-list 'load-path \"$PYMACSDIR/\")" -load "$PDIR/$PYTHONMODE" --eval '(byte-recompile-directory default-directory 1 t)' python-mode.el-6.1.3/LICENSE0000644000000000000000000010451312016643135015333 0ustar rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . python-mode.el-6.1.3/INSTALL0000644000000000000000000000103712271450574015362 0ustar rootroot00000000000000Put the respective lines into your Emacs initialisation file: (add-to-list 'load-path "PATH/TO/PYTHON-MODE/") (setq py-install-directory "PATH/TO/PYTHON-MODE/") (require 'python-mode) To change the Python default shell use M-x customize-variable py-shell-name or write (setq py-shell-name "MY-PYTHON") resp. (setq py-shell-name "PATH/TO/MY-PYTHON") IPython users for example may insert "ipython" with M-x customize-variable py-shell-name or in init-file (setq py-shell-name "ipython") resp. (setq py-shell-name "PATH/TO/ipython") python-mode.el-6.1.3/NEWS0000644000000000000000000006652312271450574015043 0ustar rootroot00000000000000Python Mode News ================ New in version 6.1.3 --------------------- PEP8 indent-alternatives when closing a list implemented Boolean `py-close-at-start-column-p', default is nil my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', ) When non-nil, it will be lined up under the first character of the line that starts the multi-line construct, as in: my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', ) - Keys C-M-a, C-M-e usable for all top-level form, lp:1191078 Boolean `py-defun-use-top-level-p' If non-nil, beginning- end-of-defun forms will use `py-beginning-of-top-level', `py-end-of-top-level', mark-defun marks top-level form at point etc. Keys C-M-a, C-M-e usable for all top-level form, lp:1191078 - New commands: py-beginning-of-block-current-column "Reach the beginning of block which starts at current column " py-beginning-of-top-level py-beginning-of-top-level py-end-of-top-level py-mark-top-level py-copy-top-level py-delete-top-level py-kill-top-level py-execute-top-level py-top-level-form-p py-comment-top-level py-beginning-of-top-level-p - `minor-block' commands added A minor block is started by a `for', `if', `try' or `with', while block covers also `def' or `class' - variable `py-keep-windows-configuration', default is nil Setting `py-keep-windows-configuration' to `t' will restore windows-configuration regardless of `py-switch-buffers-on-execute-p' and `py-split-windows-on-execute-p' settings. However, if an error occurs, it's displayed. To suppres window-changes due to error-signaling also, set `py-keep-windows-configuration' onto 'force - boolean empty-line-closes-p, default is nil When non-nil, dedent after empty line following block If non-nil, a C-j from empty line would dedent. if True: print("Part of the if-statement") print("Not part of the if-statement") - boolean py-debug-p, default is nil When non-nil, keep resp. store information useful for debugging. Temporary files are not deleted. Other functions might implement some logging etc. - heuristic exit new var `py-max-specpdl-size', default is `max-specpdl-size' py-end-of-statement will error if number of `py-max-specpdl-size' loops is completed, thus avoiding a hang from a possibly eternal loop. - `py-statement' no longer refferred to `py-copy-statement' Same with block, def, expression etc. `py-statement' made own command, which returns statement, a string. - boolean `py-max-help-buffer-p', default is nil If "*Python-Help*"-buffer be the only visible. New in version 6.1.2 --------------------- - simplified menu - `py-execute-...'-commands return result as string Controlled by boolean `py-store-result-p', Default is nil When non-nil, put resulting string of `py-execute-...' into kill-ring, so it might be yanked. - commands deleting all commented lines: `py-delete-comments-in-def-or-class' `py-delete-comments-in-class' `py-delete-comments-in-block' `py-delete-comments-in-region' - boolean `py-indent-paren-spanned-multilines-p, default is nil If non-nil, indents elements of list a value of `py-indent-offset' to first element: def foo(): if (foo && baz): bar() Default lines up with first element: def foo(): if (foo && baz): bar() - `py-output-buffer' made customizable See boolean `py-enforce-output-buffer-p' - exceptions following executed regions made point to source - command `py-empty-out-list-backward' Deletes all elements from list before point With when cursor after mystring[0:1] -------------^ ==> mystring[] ---------^ In result cursor is insided emptied delimited form." - `py-minor-expression' reconsidered, numeric args dropped grasps keyword-arguments - boolean `py-electric-kill-backward-p', default is nil. If behind a delimited form of braces, brackets or parentheses, `py-electric-backspace' runs `py-empty-out-list-backward' - py-flake8-run, flake8 API - customizable `py-backslashed-lines-indent-offset' - boolean `py-pylint-offer-current-p' If current buffers file should be offered for check. Otherwise `py-pylint-run' looks up filename from history - boolean `py-prompt-on-changed-p' When called interactively, ask for save before a changed buffer is sent to interpreter. - customizable `py-closing-list-space' Number of chars, closing parentesis outdent from opening - customizable `py-uncomment-indents-p' When non-nil, after uncomment indent lines. - boolean `py-load-skeletons-p' If skeleton definitions should be loaded - boolean `py-if-name-main-permission-p' Allows execution of code inside blocks started by if __name__== '__main__' - boolean `py-highlight-error-source-p', default is nil When py-execute-... commands raise an error, respective code in source-buffer will be highlighted. - `py-remove-overlays-at-point', command Remove overlays as set when `py-highlight-error-source-p' is non-nil. - `py-which-def-or-class', command, now used `which-function-mode' - unused variable `py-backspace-function' removed - Bundled third-party-stuff removed as reported conflicting at emacs-mirror, lp:1153998 affects autopair.el, smart-operator.el Kept menu switches resp. commands will issue a warning - dropped `py-paragraph-fill-docstring-p'; just `fill-paragraph' should DTRT - `py-set-pager-cat-p', default is nil If non-nil, $PAGER is set to 'cat' - in directory doc customizable variables are listed: variables-python-mode.org, variables-python-mode.rst New in version 6.1.1 --------------------- - comment-related commands: py-uncomment py-comment-block, py-comment-clause, py-comment-block-or-clause, py-comment-def, py-comment-class, py-comment-def-or-class, py-comment-statement - boolean `py-set-fill-column-p' If `t', enables use Python specific `fill-column' according to `py-docstring-fill-column', default is 72 and `py-comment-fill-column, default is 79 - boolean `py-tab-shifts-region-p' when `t', TAB will indent/cycle the region, not just the current line. - boolean `py-tab-indents-region-p' when `t', when first TAB doesn't shift, `indent-region' is called - command from RET customizable via `py-return-key': `py-newline-and-indent', `newline' or `py-newline-and-dedent' - boolean `py-use-font-lock-doc-face-p', default is nil If non-nil, documention strings get `font-lock-doc-face' - boolean `py-newline-delete-trailing-whitespace-p' Delete trailing whitespace maybe left by `py-newline-and-indent' - `py-electric-comment-p' new default nil - py-up minor API change If inside a delimited form --string or list-- go to it's beginning If not at beginning of a statement or block, go to it's beginning If at beginning of a statement or block, go to beginning one level above of c - py-down minor API change: Go to beginning of one level below of compound statement or definition at point. If no statement or block below, but a delimited form --string or list-- go to it's beginning. Repeated call from there will behave like down-list. - commands make underscore syntax changes easier: toggle-py-underscore-word-syntax-p py-underscore-word-syntax-p-on py-underscore-word-syntax-p-off - py-update-imports removed Do not maintain a static variable containing needed imports Determine imports on the fly rather, as it might have changed - variable `py-fill-docstring-style' renamed `py-docstring-style' New in version 6.1.0 --------------------- - py-up Go to beginning one level above of compound statement or definition at point. - py-down Go to beginning one level below of compound statement or definition at point. - Customizable output directory After checking for a remote shell, the following variables are consulted: py-use-current-dir-when-execute-p, default t When `t', current directory is used by Python-shell for output of `py-execute-buffer' and related commands py-fileless-buffer-use-default-directory-p, default t When `py-use-current-dir-when-execute-p' is non-nil and no buffer-file exists, value of `default-directory' sets current working directory of Python output shell" py-keep-shell-dir-when-execute-p, default nil Don't change Python shell's current working directory when sending code. `py-execute-directory', default nil If nothing was set so far, $VIRTUAL_ENV and $HOME are queried. - Set of commands calling Python3.3 - fill docstrings according to style, commands py-fill-string-django py-fill-string-onetwo py-fill-string-pep-257 py-fill-string-pep-257-nn py-fill-string-symmetric Customizable variable `py-fill-docstring-style' provides default value used by `py-fill-string', `py-fill-paragraph' DJANGO: \"\"\" Process foo, return bar. \"\"\" \"\"\" Process foo, return bar. If processing fails throw ProcessingError. \"\"\" ONETWO: \"\"\"Process foo, return bar.\"\"\" \"\"\" Process foo, return bar. If processing fails throw ProcessingError. \"\"\" PEP-257: \"\"\"Process foo, return bar.\"\"\" \"\"\"Process foo, return bar. If processing fails throw ProcessingError. \"\"\" PEP-257-NN: \"\"\"Process foo, return bar.\"\"\" \"\"\"Process foo, return bar. If processing fails throw ProcessingError. \"\"\" SYMMETRIC: \"\"\"Process foo, return bar.\"\"\" \"\"\" Process foo, return bar. If processing fails throw ProcessingError. \"\"\"" Built upon code seen at python.el, thanks Fabian - `py-down-statement', `py-up-statement' - toggle-py-split-windows-on-execute-p - py-split-windows-on-execute-p-off - py-split-windows-on-execute-p-on - toggle-py-switch-buffers-on-execute-p - py-switch-buffers-on-execute-p-on - py-switch-buffers-on-execute-p-off - `py-shell-switch-buffers-on-execute-p' renamed `py-switch-buffers-on-execute-p' New in version 6.0.12 --------------------- - py-sexp-function, When set, it's value is called instead of `forward-sexp', `backward-sexp Choices are py-partial-expression, py-expression, default nil - `py-partial-expression' reconsidered. Beside common moves like `defun', `statement' specific Python-mode edits are delivered: `py-expression' and `py-partial-expression'. Statement below is considered composed of two `py-expression' a = ['spam', 'eggs', 100, 1234] |_| |_________________________| Assigment operator and all inside comments is ignored. `py-partial-expression' would match six sections a = ['spam', 'eggs', 100, 1234] |_| |_____| |____| |__| |__| |_________________________| When traversing code, `py-partial-expression' climbs down and up all levels encountered, i.e. at opening `[' `py-expression' would return ['spam', 'eggs', 100, 1234], while one char behind at `'' it yields `'spam',' - `py-find-definition' also detects non-imported definition in current buffer - Choice between `py-imenu-create-index-new' and series 5. py-imenu-create-index-function made easier. Customizable variable `py-imenu-create-index-function' provided, see also command in PyTools - New commands addressing BOL as start/end: py-beginning-of-block-bol py-end-of-block-bol py-mark-block-bol py-copy-block-bol py-kill-block-bol py-delete-block-bol py-end-of-clause-bol etc. - While commands "py-beginning..." resp. "py-end..." compute the context, selecting the corresponding beginning or end, new "py-up...", "py-down..." jump regexp-based to the next element in buffer. See also menu PyEdit. New in version 6.0.11 --------------------- - improved Pymacs based code completion: - Completion of symbols from imported modules, functions, classes, module/class-level data members and instance variables in the current buffer. The information for this completion is updated whenever the file is saved. - Completion of local variables and function parameters. - Type deduction from constructor calls and literals. - Show help for modules, classes and functions. - Go to definition of modules, classes and functions. - Show signature of functions. - Support for auto-complete and company. - remote shell support - extended version of smart-operator added original smart-operator.el authored by William Xu Url: http://xwl.appspot.com/ref/smart-operator.el - py-electric-colon extended if `py-electric-colon-newline-and-indent-p' is non-nil, `py-electric-colon' calls `newline-and-indent' - boolean `py-no-completion-calls-dabbrev-expand-p' If completion function should call dabbrev-expand when no completion found. Default is `t' - boolean `py-shell-prompt-read-only', default t sets `comint-prompt-read-only', avoid unintentional edits - customizable history variables/files py-python-history defaults to "~/.python_history" py-ipython-history defaults to "~/.ipython/history" If py-honor-PYTHONHISTORY-p is `t', $PYTHONHISTORY takes precedence, default is nil If py-honor-IPYTHONDIR-p is `t', $IPYTHONHISTORY precedes, default is nil - customizable boolean `py-trailing-whitespace-smart-delete-p' Default is nil. Some commands may delete trailing whitespaces by the way. When editing other peoples code, this may produce a larger diff than expected New in version 6.0.10 -------------------- addresses bugs and speed issues New in version 6.0.9 -------------------- - autopair-mode delivered Credits to Joao Tavora http://autopair.googlecode.com see README-AUTOPAIR.org for details - Syntax highlighting in Python-shell buffers enabled boolean `py-fontify-shell-buffer-p', default is nil - py-add-abbrev, new command Similar to `add-mode-abbrev', but uses `py-partial-expression' before point for expansion to store, not `word'. Also provides a proposal for new abbrevs. Proposal for an abbrev is composed from the downcased initials of expansion - provided they are of char-class [:alpha:] For example code below would be recognised as a `py-expression' composed by three py-partial-expressions. OrderedDict.popitem(last=True) Putting the curser at the EOL, M-3 M-x py-add-abbrev would prompt "op" for an abbrev to store, as first `py-partial-expression' beginns with a "(", which is not taken as proposal. - py-edit-abbrevs Jumps to `python-mode-abbrev-table' - modeline enhanced when a path/to/my/favoured/Python is given with `py-shell-name' the Python-shell buffer before would display *ND path/to/my/favoured/Python* now: *ptmfP Python* boolean `py-modeline-display-full-path-p' boolean `py-modeline-acronym-display-home-p' If the modeline acronym should contain chars indicating the home-directory. - mode-line indicates "Py" by default customize `python-mode-modeline-display' - Pymacs intergration dropped from trunk conflicts with classic install being reported New in version 6.0.8 -------------------- - `py-pep8-run', new command checking formatting `py-pep8-help' - `py-pyflake-run', new command Pyflakes is a simple program which checks Python source files for errors. - It is similar to PyChecker in scope, but differs in - that it does not execute the modules to check them. `py-pyflake-help' - `py-pylint-run', new command calls Pylint, a Python source code analyzer which looks for programming errors, helps enforcing a coding standard and sniffs for some code smells (as defined in Martin Fowler's Refactoring book) . Pylint checks length of lines of code, if variable names are well-formed according to your coding standard, if declared interfaces are truly implemented, and much more. Additionally, it is possible to write plugins. `py-pylint-doku', `py-pylint-help' - py-pyflakespep8-run, combines calls to pyflakes and pep8 - respective flymake-modes, `pyflakespep8-flymake-mode', `pylint-flymake-mode' etc. See meny PyTools New in version 6.0.7 -------------------- - make every Python shell acces its own history-file .python3_history .python_history .ipython_history etc. - related to shell used `toggle-force-py-shell-name-p' `force-py-shell-name-p-on'/off making it easier to enforce default py-shell upon execution `toggle-force-local-shell' `py-force-local-shell-on'/off If locally indicated Python shell should be taken and enforced upon sessions execute commands, lp:988091 - specific completion: py-python2-shell-complete, py-python3-shell-complete, py-python2-script-complete, py-python3-script-complete New in version 6.0.6 -------------------- - files inside a virtual machine made visible for pdbtrack - new commands `py-toggle-split-windows-on-execute', ...-on, ...-off `py-toggle-shell-switch-buffers-on-execute', ...-on, ...-off allow `py-execute-buffer' etc. to split/not-split windows, move cursor onto output or not - Behavior of C-u M-x `py-shell' closer to common shell C-u 4 prompts for a buffer, i.e. when a "*Python*" shell is running, C-u M-x `py-shell' opens a "*Python<2>*" per default C-u 2 M-x py-shell promts for command-arguments as known from 5th-series - `py-intend-tabs-mode' sets default of `indent-tabs-mode', lp:953765 -- New boolean variable `py-intend-tabs-mode' Permits value independent from Emacs-wide `indent-tabs-mode' Commands `py-toggle-indent-tabs-mode', ...-on, ...-off menu PyTools "Toggle indent-tabs-mode" - Extended py-execute-... forms provided for "line" - new commands py-beginning/end-of-line while introduced for internal reasons --because of it's return values-- they allow repeats, i.e. when already at end-of-line, jumping to next end etc. - new boolean `py-force-py-shell-name-p' When `t', execution with Python specified in `py-shell-name' is en forced, shebang will have no effect. Default is nil. - customizable `py-separator-char', a string, see report lp:975539 Precedes guessing when not empty, is returned by function `py-separator-char' - nicer `org-cycle' behavior: when new `py-org-cycle-p' it `t', command `org-cycle' is available at shift-TAB, New in version 6.0.5 -------------------- - Menu reworked and extended - extended commands combine executing statement/block... with dedidi cated/switch... etc. This may remove some need of customization. - local environments support started If calls to common `py-shell' should use local executable instead of default system Python set `py-use-local-default' alongside with `py-shell-local-path' - `py-toggle-shells' alias of more powerful `py-switch-shells' Toggles between the interpreter customized in `py-shell-toggle-1' resp. `py-shell-toggle-2'. Was hard-coded CPython and Jython in earlier versions, now starts with Python2 and Python3 by default. - `py-shell-name' accepts PATH/TO/EXECUTABLE in addition to name of an installed default Python-Shell. Permits installing commands like (defun python-XYZ-shell (&optional argprompt) "Start an Python-XYZ interpreter ... " (interactive) (let ((py-shell-name "PATH/TO/PYTHON-XYZ")) (py-shell argprompt))) - new commands `indent-tabs-mode', `toggle-indent-tabs-mode', `indent-tabs-mode-on', `indent-tabs-mode-off' feature after a request at Stack Exchange asked Jul 13 '11 at 13:23 saying `tab-width' now follows `py-indent-offset' - new command `py-execute-region-default' forces the systems default Python interpreter to execute, ignores shebang related functions redesigned, `async' argument dropped `py-execute-region' now reads: (defun py-execute-region (start end &optional shell dedicated) "Send the region to a Python interpreter. When called with \\[univeral-argument], execution through `default-value' of `py-shell-name' is forced. When called with \\[univeral-argument] followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment. When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument. " [ ... ] - new `py-number-face', visible only when customized and `py-use-number-face-p' is `t', inherits default face With large files fontifying numbers may cause a delay Credits to github.com/fgallina/python.el/issues42 - new boolean `py-verbose-p' if `t', reached indent level etc. is messaged - new commands py-execute-buffer-dedicated, py-execute-buffer-switch -dedicated - `toggle-py-smart-indentation' new command also `py-smart-indentation-on', -off New in version 6.0.4 -------------------- - Python shell starts with `python-mode' that's needed by completion for now boolean customizable `py-start-run-py-shell' - outline-(minor-)mode enabled providing regular expressions. Customize `py-outline-minor-mode-p' to switch it on with python-mode - Hook delivered to start hs-minor-mode from python-mode Customize `py-hide-show-minor-mode-p' Key setting example: (global-set-key [(super s)] 'hs-hide-all) (global-set-key [(super S)] 'hs-show-all) - Listing of available commands in org-mode and reST format in directory "doc" - Python shells and executing forms may be called as dedicated process. See commands available \w suffix "-dedicated". - completion fixed: M-TAB completes in Python buffer, TAB completes in Python shells - py-down-FORM-lc commands Goto beginning of line following end of FORM. \"-lc\" stands for \"left-corner\" - a complementary command travelling left, whilst `py-end-of-FORM' stops at right corner. Implemented forms are "block", "clause", "def", "class", "statement". - py-down-FORM commands like py-down-block introduced in version 6.0.3, implemented also for "clause", "def", "class", "statement". Go to the beginning of next block below current level. New in version 6.0.3 -------------------- - ipython integration started - commands `ipython', `python2', `python3', `jython', `python' opening a respective python shell - py-shift-block-left, py-shift-block-right etc. Implemented forms that way are "paragraph" "block" "clause" "def" "class" "line" "statement" - py-dedent Dedent line according to `py-indent-offset'. With arg, do it that many times. If point is between indent levels, dedent to next level. Stops at BOL. Returns column reached, if dedent done, nil otherwise. - py-indent-forward-line Indent line and move one line forward. If `py-kill-empty-line' is non-nil, delete an empty line. When closing a form, use py-close-block et al, which will move and indent likewise. Returns position. - py-close-block, -clause, -def, class Set indent level to that of beginning of definition. If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline. Returns column. - new commands specifying the shell override `py-shell-name' for execution implemented shells are "python" "python2" "python2.7" "python3" "python3.2" "jython" available with default, -switch and -no-switch option, i.e. py-execute-region-python3.2 py-execute-region-python3.2-switch py-execute-region-python3.2-no-switch etc. Docstring of py-execute-region-python3.2-switch for example: "Send the region to a common shell calling the python3.2 interpreter. Ignores setting of `py-shell-switch-buffers-on-execute', output-buffer will being switched to." - Declarations Deal with assigments resp. statements in current level which don't open blocks. Provides common edit functions as copy, mark, kill, goto beg/end. Functions will be used typically to grasp initialisations resp. assignements of variables between the definition of a class or method and it's body, likewise global stuff at the head of a file. - column-marker.el Commands `column-marker-1', `column-marker-2', and `column-marker-3' each highlight a given column (using different background colors by default). M-x column-marker-1 highlights the column where the cursor is, in face `column-marker-1'. C-u 70 M-x column-marker-2 highlights column 70 in face `column-marker-2'. C-u 70 M-x column-marker-3 highlights column 70 in face `column-marker-3'. The face `column-marker-2' highlighting no longer shows. C-u M-x column-marker-3 turns off highlighting for column-marker-3, so face `column-marker-2' highlighting shows again for column 70. C-u C-u M-x column-marker-1 (or -2 or -3) erases all column highlighting. ;; Thanks a lot to it's author Rick Bielawski , to Drew Adams for his care and Emacs Wiki hosting it. New in version 6.0.2 -------------------- - py-electric-comment "Insert a comment. If starting a comment, indent accordingly. If a numeric argument ARG is provided, that many colons are inserted non-electrically. With universal-prefix-key C-u a \"#\" Electric behavior is inhibited inside a string or comment." - New commands `py-partial-expression': "." operators delimit a partial-expression on it's level. Given the function below, `py-partial-expression' called at pipe symbol would copy and return: def usage(): print """Usage: %s ....""" % ( os.path.basename(sys.argv[0])) ------------|------------------------- ==> path os.path.basename(sys.argv[0])) ------------------|------------------- ==> basename(sys.argv[0])) os.path.basename(sys.argv[0])) --------------------------|----------- ==> sys os.path.basename(sys.argv[0])) ------------------------------|------- ==> argv[0] while `py-expression' would copy and return ( os.path.basename(sys.argv[0])) ;;;;; Also for existing commands a shorthand is defined: (defalias 'py-statement 'py-copy-statement) which will mark, copy and return. - Commands implementing a behavior which customizing of `py-shell-switch-buffers-on-execute' would do: py-execute-buffer-no-switch py-execute-buffer-switch py-execute-region-no-switch py-execute-region-switch - Several bugfixes. New in version 6.0.1 -------------------- - New commands py-expression: py-copy-expression py-mark-expression py-beginning-of-expression py-end-of-expression py-kill-expression Also several of bugfixes are done. New in version 6.0 -------------------- - Finer grained commands, core re-write. As shown below for the `mark'-command, delete, copy, jump to beginning and end of the respective programming-expressions: py-mark-statement py-mark-block py-mark-block-or-clause py-mark-def py-mark-def-or-class py-mark-class py-mark-clause - Also a couple of bugfixes are done. New in version 5.2.1 -------------------- - Syntax highlight as a keyword "lambda:" just like "lambda x:". Given by Dan Davison. - Add "python3" as a key for python-mode in interpreter-mode-alist and auto-mode-alist. New in version 5.2.0 -------------------- - Fixed filling of triple-quoted strings. - Add new font-lock faces for class names and exception names. - Do not fill when calling fill-paragraph with point in a region of code. - Fixed font-locking of exception names in parenthesized lists. - Fixed font-locking of decorators with arguments. - Fixed font-locking of triple-quoted strings; single quotes appearing in triple-quoted strings no longer upset font-locking. - Fixed the stack-entry regexp used by pdbtrack so that it now works with module-level frames. - Do not bind C-c C-h; `py-help-at-point' is now on C-c C-e by default. - hide-show mode is now supported. - When shifting regions right and left, keep the region active in Emacs. python-mode.el-6.1.3/python-mode.el0000600000000000000000000406667112271437433017130 0ustar rootroot00000000000000;; python-mode.el --- Towards an Python-IDE in Emacs ;; Maintainer: Andreas Röhler ;; Keywords: languages, processes, python, oop ;; Copyright (C) 1992,1993,1994 Tim Peters ;; Author: 2003-2013 https://launchpad.net/python-mode ;; 1995-2002 Barry A. Warsaw ;; 1992-1994 Tim Peters ;; Maintainer: python-mode@python.org ;; Created: Feb 1992 ;; Keywords: python languages oop ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; commands-python-mode.org in directory doc reports ;; available commands, also a menu is provided ;; as for `py-add-abbrev': ;; Similar to `add-mode-abbrev', but uses ;; `py-partial-expression' before point for expansion to ;; store, not `word'. Also provides a proposal for new ;; abbrevs. ;; Proposal for an abbrev is composed from the downcased ;; initials of expansion - provided they are of char-class ;; [:alpha:] ;; ;; For example code below would be recognised as a ;; `py-expression' composed by three ;; py-partial-expressions. ;; ;; OrderedDict.popitem(last=True) ;; ;; Putting the curser at the EOL, M-3 M-x py-add-abbrev ;; ;; would prompt "op" for an abbrev to store, as first ;; `py-partial-expression' beginns with a "(", which is ;; not taken as proposal. ;;; Code (require 'comint) (require 'custom) (eval-when-compile (require 'cl)) (require 'compile) (require 'ansi-color) (require 'cc-cmds) (require 'shell) (require 'rx) (ignore-errors (require 'flymake)) (require 'imenu) (require 'thingatpt) (defgroup python-mode nil "Support for the Python programming language, " :group 'languages :prefix "py-") (defconst py-version "6.1.3") ;;; Customization (defcustom python-mode-modeline-display "Py" "String to display in Emacs modeline " :type 'string :group 'python-mode) (defcustom py-indent-offset 4 "Amount of offset per level of indentation. `\\[py-guess-indent-offset]' can usually guess a good value when you're editing someone else's Python code." :type 'integer :group 'python-mode) (make-variable-buffer-local 'py-indent-offset) (defcustom py-backslashed-lines-indent-offset 5 "Amount of offset per level of indentation of backslashed. No semantic indent, which diff to `py-indent-offset' indicates " :type 'integer :group 'python-mode) (make-variable-buffer-local 'py-backslashed-lines-indent-offset) (defcustom pdb-path '/usr/lib/python2.7/pdb.py "Where to find pdb.py. Edit this according to your system. If you ignore the location `M-x py-guess-pdb-path' might display it" :type 'variable :group 'python-mode) (defcustom py-verbose-p nil "If indenting functions should report reached indent level. Default is nil. " :type 'boolean :group 'python-mode) (defcustom py-max-help-buffer-p nil "If \"\*Python-Help\*\"-buffer should appear as the only visible. Default is nil. In help-buffer, \"q\" will close it. " :type 'boolean :group 'python-mode) (defcustom py-store-result-p nil "When non-nil, put resulting string of `py-execute-...' into kill-ring, so it might be yanked. Default is nil" :type 'boolean :group 'python-mode) (defcustom py-load-skeletons-p nil "If skeleton definitions should be loaded, default is nil. " :type 'boolean :group 'python-mode) (defcustom py-load-pymacs-p nil "If Pymacs related stuff should be loaded. Default is nil. Pymacs has been written by François Pinard and many others. See original source: http://pymacs.progiciels-bpi.ca" :type 'boolean :group 'python-mode) (defun py-smart-operator-check () "Check, if smart-operator-mode is loaded resp. available. Give some hints, if not." (interactive) (if (featurep 'smart-operator) 't (progn (and (boundp 'py-smart-operator-mode-p) py-smart-operator-mode-p (message "%s" "Don't see smart-operator.el. Make sure, it's installed. See in menu Options, Manage Emacs Packages. Or get it from source: URL: http://xwl.appspot.com/ref/smart-operator.el") nil)))) (defcustom py-empty-line-closes-p nil "When non-nil, dedent after empty line following block if True: print(\"Part of the if-statement\") print(\"Not part of the if-statement\") Default is nil If non-nil, a C-j from empty line dedents. " :type 'boolean :group 'python-mode) (defun py-autopair-check () "Check, if autopair-mode is available. Give some hints, if not." (interactive) (if (featurep 'autopair) 't (progn (message "%s" "Don't see autopair.el. Make sure, it's installed. If not, maybe see source: URL: http://autopair.googlecode.com") nil))) (defcustom py-smart-operator-mode-p nil "If python-mode calls (smart-operator-mode-on) Default is non-nil. " :type 'boolean :group 'python-mode :set (lambda (symbol value) (and (py-smart-operator-check) (set-default symbol value) (smart-operator-mode (if value 1 0))))) (make-variable-buffer-local 'py-smart-operator-mode-p) (defcustom py-sexp-function nil "When set, it's value is called instead of `forward-sexp', `backward-sexp' Default is nil. " :type '(choice (const :tag "default" nil) (const :tag "py-end-of-partial-expression" py-end-of-partial-expression) (const :tag "py-end-of-expression" py-end-of-expression)) :group 'python-mode) (make-variable-buffer-local 'py-sexp-function) (defvar py-autopair-mode nil) (defvar highlight-indent-active nil) (defvar smart-operator-mode nil) (defvar py-fill-column-orig fill-column) (defvar py-autofill-timer nil) (defvar py-python-completions "*Python Completions*" "Buffer name for Python-shell completions, internally used") (defvar py-ipython-completions "*IPython Completions*" "Buffer name for IPython-shell completions, internally used") (defvar py-close-completions-timer nil "Internally used by `py-timer-close-completion-buffer") (defcustom py-autopair-mode nil "If python-mode calls (autopair-mode-on) Default is nil Load `autopair-mode' written by Joao Tavora URL: http://autopair.googlecode.com " :type 'boolean :group 'python-mode :set (lambda (symbol value) (and ;; (py-autopair-check) (set-default symbol value) (autopair-mode (if value 1 0))))) (defcustom py-no-completion-calls-dabbrev-expand-p t "If completion function should call dabbrev-expand when no completion found. Default is `t' See also `py-indent-no-completion-p'" :type 'boolean :group 'python-mode) (defcustom py-indent-no-completion-p nil "If completion function should insert a TAB when no completion found. Default is `nil' See also `py-no-completion-calls-dabbrev-expand-p'" :type 'boolean :group 'python-mode) (defcustom py-set-fill-column-p nil "If python-mode should set fill-column according values in `py-comment-fill-column' and `py-docstring-fill-column'. Default is nil" :type 'boolean :group 'python-mode) (defcustom py-autofill-timer-delay 1 "Delay when idle before functions ajusting `py-docstring-fill-column' resp. `py-comment-fill-column' are called. " :type 'integer :group 'python-mode) (defcustom py-docstring-fill-column 72 "Value of `fill-column' to use when filling a docstring. Any non-integer value means do not use a different value of `fill-column' when filling docstrings." :type '(choice (integer) (const :tag "Use the current `fill-column'" t)) :group 'python-mode) (defcustom py-comment-fill-column 79 "Value of `fill-column' to use when filling a comment. Any non-integer value means do not use a different value of `fill-column' when filling docstrings." :type '(choice (integer) (const :tag "Use the current `fill-column'" t)) :group 'python-mode) (defcustom py-fontify-shell-buffer-p nil "If code in Python shell should be highlighted as in script buffer. Default is nil. If `t', related vars like `comment-start' will be set too. Seems convenient when playing with stuff in IPython shell Might not be TRT when a lot of output arrives " :type 'boolean :group 'python-mode) (defcustom py-modeline-display-full-path-p nil "If the full PATH/TO/PYTHON should be displayed in shell modeline. Default is nil. Note: when `py-shell-name' is specified with path, it's shown as an acronym in buffer-name already. " :type 'boolean :group 'python-mode) (defcustom py-modeline-acronym-display-home-p nil "If the modeline acronym should contain chars indicating the home-directory. Default is nil " :type 'boolean :group 'python-mode) (defcustom py-install-directory "" "Directory where python-mode.el and it's subdirectories should be installed. Needed for completion and other environment stuff only. " :type 'string :group 'python-mode) (defcustom py-guess-py-install-directory-p t "If in cases, `py-install-directory' isn't set, `py-set-load-path'should guess it from `buffer-file-name'. " :type 'boolean :group 'python-mode) (defcustom py-extensions "py-extensions.el" "File where extensions to python-mode.el should be installed. Used by virtualenv support. " :type 'string :group 'python-mode) (defcustom py-pylint-offer-current-p t "If current buffers file should be offered for check. Default is non-nil. If nil, `py-pylint-run' offers filename from history " :type 'boolean :group 'python-mode) (defcustom py-hide-show-minor-mode-p nil "If hide-show minor-mode should be on, default is nil. " :type 'boolean :group 'python-mode) (defcustom empty-comment-line-separates-paragraph-p t "Consider paragraph start/end lines with nothing inside but comment sign. Default is non-nil" :type 'boolean :group 'python-mode) (defcustom py-if-name-main-permission-p t "Allow execution of code inside blocks started by \"if __name__== '__main__':\". Default is non-nil" :type 'boolean :group 'python-mode) (defcustom py-use-font-lock-doc-face-p nil "If documention string inside of def or class get `font-lock-doc-face'. `font-lock-doc-face' inherits `font-lock-string-face'. Call M-x `customize-face' in order to have a visible effect. " :type 'boolean :group 'python-mode) (defcustom py-defun-use-top-level-p nil "When non-nil, keys C-M-a, C-M-e address top-level form. Default is nil. Beginning- end-of-defun forms use commands `py-beginning-of-top-level', `py-end-of-top-level' mark-defun marks top-level form at point etc. " :type 'boolean :group 'python-mode) (defcustom py-tab-shifts-region-p nil "If `t', TAB will indent/cycle the region, not just the current line. Default is nil" :type 'boolean :group 'python-mode) (defcustom py-tab-indents-region-p nil "When `t' and first TAB doesn't shift, indent-region is called. Default is nil" :type 'boolean :group 'python-mode) (defcustom py-block-comment-prefix-p t "If py-comment inserts py-block-comment-prefix. Default is t" :type 'boolean :group 'python-mode) (defcustom py-org-cycle-p nil "When non-nil, command `org-cycle' is available at shift-TAB, Default is nil. " :type 'boolean :group 'python-mode) (defcustom ipython-complete-use-separate-shell-p nil "If `ipython-complete' should use a separate shell. Thus prompt-counter is not incremented by completion. " :type 'boolean :group 'python-mode) (defcustom py-outline-minor-mode-p t "If outline minor-mode should be on, default is `t'. " :type 'boolean :group 'python-mode) (defcustom py-outline-mode-keywords '("class" "def" "elif" "else" "except" "for" "if" "while" "finally" "try" "with") "Keywords composing visible heads. " :type '(repeat string) :group 'python-mode) (defcustom py-start-run-py-shell nil "If `python-mode' should start a python-shell, `py-shell'. Default is `nil'. " :type 'boolean :group 'python-mode) (defcustom py-start-run-ipython-shell nil "If `python-mode' should start an ipython-shell. Default is `nil'. " :type 'boolean :group 'python-mode) (defcustom py-close-provides-newline t "If a newline is inserted, when line after block isn't empty. Default is non-nil. " :type 'boolean :group 'python-mode) (make-variable-buffer-local 'py-close-provides-newline) (defcustom py-dedent-keep-relative-column t "If point should follow dedent or kind of electric move to end of line. Default is t - keep relative position. " :type 'boolean :group 'python-mode) (defcustom py-indent-honors-multiline-listing nil "If `t', indents to 1+ column of opening delimiter. If `nil', indent adds one level to the beginning of statement. Default is `nil'. " :type 'boolean :group 'python-mode) (defcustom py-indent-paren-spanned-multilines-p nil "If non-nil, indents elements of list a value of `py-indent-offset' to first element: def foo(): if (foo && baz): bar() Default lines up with first element: def foo(): if (foo && baz): bar() " :type 'boolean :group 'python-mode) (defcustom py-indent-honors-inline-comment nil "If non-nil, indents to column of inlined comment start. Default is nil. " :type 'boolean :group 'python-mode) (defcustom py-closing-list-dedents-bos nil "When non-nil, indent list's closing delimiter like start-column. It will be lined up under the first character of the line that starts the multi-line construct, as in: my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', ) Default is nil, i.e. my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', ) Examples from PEP8 " :type 'boolean :group 'python-mode) (defcustom py-closing-list-space 1 "Number of chars, closing parenthesis outdent from opening, default is 1 " :type 'number :group 'python-mode) (defcustom py-closing-list-keeps-space nil "If non-nil, closing parenthesis dedents onto column of opening plus `py-closing-list-space', default is nil " :type 'boolean :group 'python-mode) (defcustom py-electric-kill-backward-p nil "Affects `py-electric-backspace'. Default is nil. If behind a delimited form of braces, brackets or parentheses, backspace will kill it's contents With when cursor after my_string[0:1] --------------^ ==> my_string[] ----------^ In result cursor is insided emptied delimited form." :type 'boolean :group 'python-mode) (defcustom py-electric-colon-active-p nil "`py-electric-colon' feature. Default is `nil'. See lp:837065 for discussions. See also `py-electric-colon-bobl-only' " :type 'boolean :group 'python-mode) (defcustom py-electric-colon-bobl-only t "When inserting a colon, do not indent lines unless at beginning of block See lp:1207405 resp. `py-electric-colon-active-p' " :type 'boolean :group 'python-mode) (defcustom py-electric-colon-greedy-p nil "If py-electric-colon should indent to the outmost reasonable level. If nil, default, it will not move from at any reasonable level. " :type 'boolean :group 'python-mode) (defcustom py-electric-colon-newline-and-indent-p nil "If non-nil, `py-electric-colon' will call `newline-and-indent'. Default is `nil'. " :type 'boolean :group 'python-mode) (defcustom py-electric-comment-p nil "If \"#\" should call `py-electric-comment'. Default is `nil'. " :type 'boolean :group 'python-mode) (defcustom py-electric-comment-add-space-p nil "If py-electric-comment should add a space. Default is `nil'. " :type 'boolean :group 'python-mode) (defcustom py-mark-decorators nil "If py-mark-def-or-class functions should mark decorators too. Default is `nil'. " :type 'boolean :group 'python-mode) (defcustom py-tab-indent t "Non-nil means TAB in Python mode calls `py-indent-line'." :type 'boolean :group 'python-mode) (defcustom py-return-key 'py-newline-and-indent "Which command should call. " :type '(choice (const :tag "default" py-newline-and-indent) (const :tag "newline" newline) (const :tag "py-newline-and-indent" py-newline-and-indent) (const :tag "py-newline-and-dedent" py-newline-and-dedent) ) :group 'python-mode) (defcustom py-complete-function 'py-shell-complete "When set, enforces function todo completion, default is nil. Normally python-mode, resp. inferior-python-mode know best which function to use. " :type '(choice (const :tag "default" nil) (const :tag "Pymacs based py-complete-completion-at-point" py-complete-completion-at-point) (const :tag "py-shell-complete" py-shell-complete) (const :tag "IPython's ipython-complete" ipython-complete) ) :group 'python-mode) (defcustom ipython-complete-function 'ipython-complete "Function used for completion in IPython shell buffers. " :type '(choice (const :tag "py-shell-complete" py-shell-complete) (const :tag "Pymacs based py-complete" py-complete) (const :tag "IPython's ipython-complete" ipython-complete)) :group 'python-mode) (make-variable-buffer-local 'ipython-complete-function) (defcustom py-encoding-string " # -*- coding: utf-8 -*-" "Default string specifying encoding of a Python file. " :type 'string :group 'python-mode) (defcustom py-shebang-startstring "#! /bin/env" "Detecting the shell in head of file. " :type 'string :group 'python-mode) (defcustom py-python-command-args '("-i") "List of string arguments to be used when starting a Python shell." :type '(repeat string) :group 'python-mode) (make-variable-buffer-local 'py-python-command-args) (defcustom py-jython-command-args '("-i") "List of string arguments to be used when starting a Jython shell." :type '(repeat string) :group 'python-mode :tag "Jython Command Args") (defcustom py-flake8-command "" "Which command to call flakes8. If empty, python-mode will guess some " :type 'string :group 'python-mode) (make-obsolete-variable 'py-jpython-command-args 'py-jython-command-args nil) (defcustom py-flake8-command-args "" "Arguments used by flake8. Default is the empty string. " :type 'string :group 'python-mode) (defcustom py-cleanup-temporary t "If temporary buffers and files used by functions executing region should be deleted afterwards. " :type 'boolean :group 'python-mode) (defcustom py-execute-no-temp-p nil "Seems Emacs-24.3 provided a way executing stuff without temporary files. " :type 'boolean :group 'python-mode) (defcustom py-lhs-inbound-indent 1 "When line starts a multiline-assignment: How many colums indent should be more than opening bracket, brace or parenthesis. " :type 'integer :group 'python-mode) (make-variable-buffer-local 'py-lhs-inbound-indent) (defcustom py-continuation-offset 2 "Additional amount of offset to give for some continuation lines. Continuation lines are those that immediately follow a backslash terminated line. " :type 'integer :group 'python-mode) (defcustom py-indent-tabs-mode nil "Python-mode starts `indent-tabs-mode' with the value specified here, default is nil. " :type 'boolean :group 'python-mode) (defcustom py-smart-indentation t "Should `python-mode' try to automagically set some indentation variables? When this variable is non-nil, two things happen when a buffer is set to `python-mode': 1. `py-indent-offset' is guessed from existing code in the buffer. Only guessed values between 2 and 8 are considered. If a valid guess can't be made (perhaps because you are visiting a new file), then the value in `py-indent-offset' is used. 2. `indent-tabs-mode' is turned off if `py-indent-offset' does not equal `tab-width' (`indent-tabs-mode' is never turned on by Python mode). This means that for newly written code, tabs are only inserted in indentation if one tab is one indentation level, otherwise only spaces are used. Note that both these settings occur *after* `python-mode-hook' is run, so if you want to defeat the automagic configuration, you must also set `py-smart-indentation' to nil in your `python-mode-hook'." :type 'boolean :group 'python-mode) (make-variable-buffer-local 'py-smart-indentation) (defcustom py-block-comment-prefix "##" "String used by \\[comment-region] to comment out a block of code. This should follow the convention for non-indenting comment lines so that the indentation commands won't get confused (i.e., the string should be of the form `#x...' where `x' is not a blank or a tab, and `...' is arbitrary). However, this string should not end in whitespace." :type 'string :group 'python-mode) (defcustom py-indent-comments t "When t, comment lines are indented. " :type 'boolean :group 'python-mode) (defcustom py-uncomment-indents-p nil "When non-nil, after uncomment indent lines. " :type 'boolean :group 'python-mode) (defcustom py-separator-char 47 "The character, which separates the system file-path components. Precedes guessing when not empty, returned by function `py-separator-char'. " :type 'character :group 'python-mode) ;; used as a string finally ;; kept a character not to break existing customizations (and (characterp py-separator-char)(setq py-separator-char (char-to-string py-separator-char))) (defcustom py-custom-temp-directory "" "If set, will take precedence over guessed values from `py-temp-directory'. Default is the empty string. When set, make sure the directory exists. " :type 'string :group 'python-mode) (defcustom py-beep-if-tab-change t "Ring the bell if `tab-width' is changed. If a comment of the form \t# vi:set tabsize=: is found before the first code line when the file is entered, and the current value of (the general Emacs variable) `tab-width' does not equal , `tab-width' is set to , a message saying so is displayed in the echo area, and if `py-beep-if-tab-change' is non-nil the Emacs bell is also rung as a warning." :type 'boolean :group 'python-mode) (defcustom py-jump-on-exception t "Jump to innermost exception frame in *Python Output* buffer. When this variable is non-nil and an exception occurs when running Python code synchronously in a subprocess, jump immediately to the source code of the innermost traceback frame." :type 'boolean :group 'python-mode) (defcustom py-ask-about-save t "If not nil, ask about which buffers to save before executing some code. Otherwise, all modified buffers are saved without asking." :type 'boolean :group 'python-mode) (defcustom py-backspace-function 'backward-delete-char-untabify "Function called by `py-electric-backspace' when deleting backwards." :type 'function :group 'python-mode) (defcustom py-delete-function 'delete-char "Function called by `py-electric-delete' when deleting forwards." :type 'function :group 'python-mode) (defcustom py-pdbtrack-do-tracking-p t "Controls whether the pdbtrack feature is enabled or not. When non-nil, pdbtrack is enabled in all comint-based buffers, e.g. shell buffers and the *Python* buffer. When using pdb to debug a Python program, pdbtrack notices the pdb prompt and displays the source file and line that the program is stopped at, much the same way as gud-mode does for debugging C programs with gdb." :type 'boolean :group 'python-mode) (make-variable-buffer-local 'py-pdbtrack-do-tracking-p) (defcustom py-pdbtrack-filename-mapping nil "Supports mapping file paths when opening file buffers in pdbtrack. When non-nil this is an alist mapping paths in the Python interpreter to paths in Emacs." :type 'alist :group 'python-mode) (defcustom py-pdbtrack-minor-mode-string " PDB" "String to use in the minor mode list when pdbtrack is enabled." :type 'string :group 'python-mode) (defcustom py-import-check-point-max 20000 "Maximum number of characters to search for a Java-ish import statement. When `python-mode' tries to calculate the shell to use (either a CPython or a Jython shell), it looks at the so-called `shebang' line -- i.e. #! line. If that's not available, it looks at some of the file heading imports to see if they look Java-like." :type 'integer :group 'python-mode) (defcustom py-jython-packages '("java" "javax") "Imported packages that imply `jython-mode'." :type '(repeat string) :group 'python-mode) (make-obsolete-variable 'py-jpython-packages 'py-jython-packages nil) (defcustom py-current-defun-show t "If `py-current-defun' should jump to the definition, highlight it while waiting PY-WHICH-FUNC-DELAY seconds, before returning to previous position. Default is `t'." :type 'boolean :group 'python-mode) (defcustom py-current-defun-delay 2 "When called interactively, `py-current-defun' should wait PY-WHICH-FUNC-DELAY seconds at the definition name found, before returning to previous position. " :type 'number :group 'python-mode) (defcustom py-new-shell-delay 0.2 "If a new comint buffer is connected to Python, commands like completion might need some delay. " :type 'integer :group 'python-mode) (defcustom py-send-receive-delay 5 "Seconds to wait for output, used by `py-send-receive'. " :type 'number :group 'python-mode) (defcustom py-honor-IPYTHONDIR-p nil "When non-nil ipython-history file is constructed by $IPYTHONDIR followed by \"/history\". Default is nil. Otherwise value of py-ipython-history is used. " :type 'boolean :group 'python-mode) (defcustom py-ipython-history "~/.ipython/history" "ipython-history default file. Used when py-honor-IPYTHONDIR-p is nil (default) " :type 'string :group 'python-mode) (defcustom py-honor-PYTHONHISTORY-p nil "When non-nil python-history file is set by $PYTHONHISTORY Default is nil. Otherwise value of py-python-history is used. " :type 'boolean :group 'python-mode) (defcustom py-python-history "~/.python_history" "python-history default file. Used when py-honor-PYTHONHISTORY-p is nil (default) " :type 'string :group 'python-mode) (defcustom py-master-file nil "If non-nil, \\[py-execute-buffer] executes the named master file instead of the buffer's file. If the file name has a relative path, the value of variable `default-directory' for the buffer is prepended to come up with a file name. Beside you may set this variable in the file's local variable section, e.g.: # Local Variables: # py-master-file: \"master.py\" # End: " :type 'string :group 'python-mode) (make-variable-buffer-local 'py-master-file) (defcustom py-pychecker-command "pychecker" "Shell command used to run Pychecker." :type 'string :group 'python-mode :tag "Pychecker Command") (defcustom py-pychecker-command-args '("--stdlib") "List of string arguments to be passed to pychecker." :type '(repeat string) :group 'python-mode :tag "Pychecker Command Args") (defcustom py-pep8-command "pep8" "Shell command used to run pep8." :type 'string :group 'python-mode :tag "PEP 8 Command") (defcustom py-pep8-command-args '("") "List of string arguments to be passed to pep8. Default is \"\" " :type '(repeat string) :group 'python-mode :tag "PEP 8 Command Args") (defcustom py-pyflakespep8-command (concat py-install-directory "/pyflakespep8.py") "Shell command used to run `pyflakespep8'." :type 'string :group 'python-mode :tag "Pyflakespep8 Command") (defcustom py-pep8-command "pep8" "Shell command used to run pep8." :type 'string :group 'python-mode :tag "PEP 8 Command") (defcustom py-pep8-command-args '("") "List of string arguments to be passed to pep8. Default is \"\" " :type '(repeat string) :group 'python-mode :tag "PEP 8 Command Args") (defcustom py-pyflakespep8-command-args '("") "List of string arguments to be passed to pyflakespep8. Default is \"\" " :type '(repeat string) :group 'python-mode :tag "Pyflakes-pep8 Command Args") (defcustom py-pyflakes-command "pyflakes" "Shell command used to run Pyflakes." :type 'string :group 'python-mode :tag "Pyflakes Command") (defcustom py-pyflakes-command-args '("") "List of string arguments to be passed to pyflakes. Default is \"\" " :type '(repeat string) :group 'python-mode :tag "Pyflakes Command Args") (defcustom py-pep8-command-args '("") "List of string arguments to be passed to pylint. Default is \"\" " :type '(repeat string) :group 'python-mode :tag "PEP 8 Command Args") (defcustom py-pylint-command "pylint" "Shell command used to run Pylint." :type 'string :group 'python-mode :tag "Pylint Command") (defcustom py-pylint-command-args '("--errors-only") "List of string arguments to be passed to pylint. Default is \"--errors-only\" " :type '(repeat string) :group 'python-mode :tag "Pylint Command Args") (defcustom py-shell-input-prompt-1-regexp "^>>> " "A regular expression to match the input prompt of the shell." :type 'string :group 'python-mode) (defcustom py-shell-input-prompt-2-regexp "^[.][.][.] " "A regular expression to match the input prompt of the shell after the first line of input." :type 'string :group 'python-mode) (defcustom py-max-specpdl-size max-specpdl-size "Heuristic exit. Limiting number of recursive calls by py-end-of-statement and related functions. Default is max-specpdl-size. This treshold is just an approximation. It might set far higher maybe. See lp:1235375. In case code is not to navigate due to errors, `which-function-mode' and others might make Emacs hang. Rather exit than. " :type 'number :group 'python-mode) (defcustom py-shell-prompt-read-only t "If non-nil, the python prompt is read only. Setting this variable will only effect new shells." :type 'boolean :group 'python-mode) (defcustom py-fileless-buffer-use-default-directory-p t "When `py-use-current-dir-when-execute-p' is non-nil and no buffer-file exists, value of `default-directory' sets current working directory of Python output shell" :type 'boolean :group 'python-mode) (defcustom py-keep-shell-dir-when-execute-p nil "Don't change Python shell's current working directory when sending code. See also `py-execute-directory'" :type 'boolean :group 'python-mode) (defcustom py-switch-buffers-on-execute-p nil "When non-nil switch to the Python output buffer. " :type 'boolean :group 'python-mode) (defcustom py-split-windows-on-execute-p t "When non-nil split windows. " :type 'boolean :group 'python-mode) (defcustom py-max-split-windows 2 "When split windows is enabled the maximum windows to allow before reusing other windows." :type 'number :group 'python-mode) (defcustom py-split-windows-on-execute-function 'split-window-vertically "How window should get splitted to display results of py-execute-... functions. " :type '(choice (const :tag "split-window-vertically" split-window-vertically) (const :tag "split-window-horizontally" split-window-horizontally) ) :group 'python-mode) (make-variable-buffer-local 'py-split-windows-on-execute-function) (defcustom py-hide-show-keywords '("class" "def" "elif" "else" "except" "for" "if" "while" "finally" "try" "with") "Keywords composing visible heads. Also used by (minor-)outline-mode " :type '(repeat string) :group 'python-mode) (defcustom py-hide-show-hide-docstrings t "Controls if doc strings can be hidden by hide-show" :type 'boolean :group 'python-mode) (defcustom py-paragraph-fill-docstring-p nil "If `py-fill-paragraph', when inside a docstring, should fill the complete string. Default is nil. Convenient use of `M-q' inside docstrings See also `py-docstring-style' " :type 'boolean :group 'python-mode) (make-variable-buffer-local 'py-paragraph-fill-docstring-p) (defcustom python-mode-hook nil "Hook run when entering Python mode." :group 'python-mode :type 'hook) (defcustom py-imenu-create-index-p nil "Non-nil means Python mode creates and displays an index menu of functions and global variables. " :type 'boolean :group 'python-mode) (defcustom py-imenu-create-index-function 'py-imenu-create-index-new "Switch between `py-imenu-create-index-new', which also lists modules variables, and series 5. index-machine" :type '(choice (const :tag "'py-imenu-create-index-new, also lists modules variables " py-imenu-create-index-new) (const :tag "py-imenu-create-index, series 5. index-machine" py-imenu-create-index-function)) :group 'python-mode) (defcustom py-shell-name "python" "A PATH/TO/EXECUTABLE or default value `py-shell' may look for, if no shell is specified by command. " :type 'string :group 'python-mode) (make-variable-buffer-local 'py-shell-name) (defvaralias 'py-python-command 'py-shell-name) (defcustom py-shell-toggle-1 py-shell-name "A PATH/TO/EXECUTABLE or default value used by `py-toggle-shell'. " :type 'string :group 'python-mode) (make-variable-buffer-local 'py-shell-toggle-1) (defcustom py-shell-toggle-2 "python3" "A PATH/TO/EXECUTABLE or default value used by `py-toggle-shell'. " :type 'string :group 'python-mode) (make-variable-buffer-local 'py-shell-toggle-2) (defcustom py-match-paren-mode nil "Non-nil means, cursor will jump to beginning or end of a block. This vice versa, to beginning first. Sets `py-match-paren-key' in python-mode-map. Customize `py-match-paren-key' which key to use. " :type 'boolean :group 'python-mode) (defcustom py-match-paren-key "%" "String used by \\[comment-region] to comment out a block of code. This should follow the convention for non-indenting comment lines so that the indentation commands won't get confused (i.e., the string should be of the form `#x...' where `x' is not a blank or a tab, and `...' is arbitrary). However, this string should not end in whitespace." :type 'string :group 'python-mode) (defcustom py-kill-empty-line t "If t, py-indent-forward-line kills empty lines. " :type 'boolean :group 'python-mode) (defcustom py-remove-cwd-from-path t "Whether to allow loading of Python modules from the current directory. If this is non-nil, Emacs removes '' from sys.path when starting an inferior Python process. This is the default, for security reasons, as it is easy for the Python process to be started without the user's realization (e.g. to perform completion)." :type 'boolean :group 'python-mode) (defcustom py-imenu-show-method-args-p nil "Controls echoing of arguments of functions & methods in the Imenu buffer. When non-nil, arguments are printed." :type 'boolean :group 'python-mode) (defcustom py-history-filter-regexp "\\`\\s-*\\S-?\\S-?\\s-*\\'" "Input matching this regexp is not saved on the history list. Default ignores all inputs of 0, 1, or 2 non-blank characters." :type 'regexp :group 'python-mode) (defcustom inferior-python-filter-regexp "\\`\\s-*\\S-?\\S-?\\s-*\\'" "Input matching this regexp is not saved on the history list. Default ignores all inputs of 0, 1, or 2 non-blank characters." :type 'regexp :group 'python-mode) (defcustom py-set-complete-keymap-p nil "If `py-complete-initialize', which sets up enviroment for Pymacs based py-complete, should load it's keys into `python-mode-map' Default is nil. See also resp. edit `py-complete-set-keymap' " :type 'boolean :group 'python-mode) (defcustom py-use-local-default nil "If `t', py-shell will use `py-shell-local-path' instead of default Python. Making switch between several virtualenv's easier, `python-mode' should deliver an installer, so named-shells pointing to virtualenv's will be available. " :type 'boolean :group 'python-mode) (defcustom py-highlight-error-source-p nil "When py-execute-... commands raise an error, respective code in source-buffer will be highlighted. Default is nil. M-x `py-remove-overlays-at-point' removes that highlighting. " :type 'boolean :group 'python-mode) (defcustom py-set-pager-cat-p nil "If the shell environment variable $PAGER should set to `cat'. If `t', use `C-c C-r' to jump to beginning of output. Then scroll normally. Avoids lp:783828, \"Terminal not fully functional\", for help('COMMAND') in python-shell When non-nil, imports module `os' " :type 'boolean :group 'python-mode) (defcustom py-prompt-on-changed-p t "When called interactively, ask for save before a changed buffer is sent to interpreter. Default is `t'" :type 'boolean :group 'python-mode) (defcustom py-dedicated-process-p nil "If commands executing code use a dedicated shell. Default is nil") (defcustom py-shell-local-path "" "If `py-use-local-default' is non-nil, `py-shell' will use EXECUTABLE indicated here incl. path. " :type 'string :group 'python-mode) (defcustom py-edit-only-p nil "When `t' `python-mode' will not take resort nor check for installed Python executables. Default is nil. See bug report at launchpad, lp:944093. " :type 'boolean :group 'python-mode) (defcustom py-force-py-shell-name-p nil "When `t', execution with kind of Python specified in `py-shell-name' is enforced, possibly shebang doesn't take precedence. " :type 'boolean :group 'python-mode) (defcustom python-mode-v5-behavior-p nil "Execute region through `shell-command-on-region' as v5 did it - lp:990079. This might fail with certain chars - see UnicodeEncodeError lp:550661" :type 'boolean :group 'python-mode) (defcustom py-trailing-whitespace-smart-delete-p nil "Default is nil. When t, python-mode calls (add-hook 'before-save-hook 'delete-trailing-whitespace nil 'local) Also commands may delete trailing whitespace by the way. When editing other peoples code, this may produce a larger diff than expected " :type 'boolean :group 'python-mode) (defcustom py-newline-delete-trailing-whitespace-p t "Delete trailing whitespace maybe left by `py-newline-and-indent'. Default is `t'. See lp:1100892 " :type 'boolean :group 'python-mode) (defcustom py-warn-tmp-files-left-p nil "Messages a warning, when `py-temp-directory' contains files susceptible being left by previous Python-mode sessions. See also lp:987534 " :type 'boolean :group 'python-mode) (defcustom py-ipython-execute-delay 0.3 "Delay needed by execute functions when no IPython shell is running. " :type 'float :group 'python-mode) (defcustom python-shell-buffer-name "Python" "Default buffer name for Python interpreter." :type 'string :group 'python-mode) (defcustom python-shell-interpreter "python" "Default Python interpreter for shell." :type 'string :group 'python-mode) (defcustom python-shell-prompt-regexp ">>> " "Regular Expression matching top\-level input prompt of python shell. It should not contain a caret (^) at the beginning." :type 'string :group 'python-mode) (defvar py-ffap-p nil) (defvar py-ffap nil) (defvar python-ffap nil) (defvar ffap-alist nil) (defun py-set-ffap-form () (cond ((and py-ffap-p py-ffap) (eval-after-load "ffap" '(push '(python-mode . py-module-path) ffap-alist)) (setq ffap-alist (remove '(python-mode . py-ffap-module-path) ffap-alist)) (setq ffap-alist (remove '(inferior-python-mode . py-ffap-module-path) ffap-alist))) (t (setq ffap-alist (remove '(python-mode . py-ffap-module-path) ffap-alist)) (setq ffap-alist (remove '(inferior-python-mode . py-ffap-module-path) ffap-alist)) (setq ffap-alist (remove '(python-mode . py-module-path) ffap-alist))))) (defcustom py-ffap-p nil "Select python-modes way to find file at point. Default is nil " :type '(choice (const :tag "default" nil) (const :tag "use py-ffap" py-ffap)) :group 'python-mode :set (lambda (symbol value) (set-default symbol value) (py-set-ffap-form))) (defcustom python-ffap-setup-code "def __FFAP_get_module_path(module): try: import os path = __import__(module).__file__ if path[-4:] == '.pyc' and os.path.exists(path[0:-1]): path = path[:-1] return path except: return ''" "Python code to get a module path." :type 'string :group 'python-mode) (defcustom py-ffap-string-code "__FFAP_get_module_path('''%s''')\n" "Python code used to get a string with the path of a module." :type 'string :group 'python-mode) (defcustom py-eldoc-setup-code "def __PYDOC_get_help(obj): try: import inspect if hasattr(obj, 'startswith'): obj = eval(obj, globals()) doc = inspect.getdoc(obj) if not doc and callable(obj): target = None if inspect.isclass(obj) and hasattr(obj, '__init__'): target = obj.__init__ objtype = 'class' else: target = obj objtype = 'def' if target: args = inspect.formatargspec( *inspect.getargspec(target) ) name = obj.__name__ doc = '{objtype} {name}{args}'.format( objtype=objtype, name=name, args=args ) else: doc = doc.splitlines()[0] except: doc = '' try: exec('print doc') except SyntaxError: print(doc)" "Python code to setup documentation retrieval." :type 'string :group 'python-mode) (defcustom py-setup-codes '(python-shell-completion-setup-code python-ffap-setup-code py-eldoc-setup-code) "List of code run by `py-shell-send-setup-codes'." :type '(repeat symbol) :group 'python-mode) (defcustom py-shell-prompt-regexp ">>> " "Regular Expression matching top\-level input prompt of python shell. It should not contain a caret (^) at the beginning." :type 'string :group 'python-mode) (defvar py-shell-prompt-regexp ">>> ") (defcustom python-shell-completion-setup-code "try: import readline except ImportError: def __COMPLETER_all_completions(text): [] else: import rlcompleter readline.set_completer(rlcompleter.Completer().complete) def __COMPLETER_all_completions(text): import sys completions = [] try: i = 0 while True: res = readline.get_completer()(text, i) if not res: break i += 1 completions.append(res) except NameError: pass return completions" "Code used to setup completion in inferior Python processes." :type 'string :group 'python-mode) (defcustom python-shell-module-completion-string-code "" "Python code used to get completions separated by semicolons for imports. For IPython v0.11, add the following line to `python-shell-completion-setup-code': from IPython.core.completerlib import module_completion and use the following as the value of this variable: ';'.join(module_completion('''%s'''))" :type 'string :group 'python-mode) (defcustom strip-chars-before "\\`[ \t\r\n]*" "Regexp indicating which chars shall be stripped before STRING - which is defined by `string-chars-preserve'." :type 'string :group 'convenience) (defcustom strip-chars-after "[ \t\r\n]*\\'" "Regexp indicating which chars shall be stripped after STRING - which is defined by `string-chars-preserve'." :type 'string :group 'convenience) (defcustom py-docstring-style 'pep-257-nn "Implemented styles are DJANGO, ONETWO, PEP-257, PEP-257-NN, SYMMETRIC, and NIL. A value of NIL won't care about quotes position and will treat docstrings a normal string, any other value may result in one of the following docstring styles: DJANGO: \"\"\" Process foo, return bar. \"\"\" \"\"\" Process foo, return bar. If processing fails throw ProcessingError. \"\"\" ONETWO: \"\"\"Process foo, return bar.\"\"\" \"\"\" Process foo, return bar. If processing fails throw ProcessingError. \"\"\" PEP-257: \"\"\"Process foo, return bar.\"\"\" \"\"\"Process foo, return bar. If processing fails throw ProcessingError. \"\"\" PEP-257-NN: \"\"\"Process foo, return bar.\"\"\" \"\"\"Process foo, return bar. If processing fails throw ProcessingError. \"\"\" SYMMETRIC: \"\"\"Process foo, return bar.\"\"\" \"\"\" Process foo, return bar. If processing fails throw ProcessingError. \"\"\"" :type '(choice (const :tag "Don't format docstrings" nil) (const :tag "Django's coding standards style." django) (const :tag "One newline and start and Two at end style." onetwo) (const :tag "PEP-257 with 2 newlines at end of string." pep-257) (const :tag "PEP-257 with 1 newline at end of string." pep-257-nn) (const :tag "Symmetric style." symmetric)) :group 'python-mode) ;; Faces (defface py-number-face '((t (:inherit default))) ;; '((t (:inherit 'font-lock-variable-name-face))) "Highlight numbers. " :group 'python-mode) (defvar py-number-face 'py-number-face) (defface py-XXX-tag-face '((t (:inherit font-lock-string-face))) "XXX\\|TODO\\|FIXME " :group 'python-mode) (defvar py-XXX-tag-face 'py-XXX-tag-face) ;; Face for None, True, False, self, and Ellipsis (defface py-pseudo-keyword-face '((t (:inherit font-lock-keyword-face))) "Face for pseudo keywords in Python mode, like self, True, False, Ellipsis." :group 'python-mode) (defvar py-pseudo-keyword-face 'py-pseudo-keyword-face) (defface py-variable-name-face '((t (:inherit default))) ;; '((t (:inherit 'font-lock-variable-name-face))) "Face method decorators." :group 'python-mode) (defvar py-variable-name-face 'py-variable-name-face) ;; PEP 318 decorators (defface py-decorators-face '((t (:inherit font-lock-keyword-face))) "Face method decorators." :group 'python-mode) (defvar py-decorators-face 'py-decorators-face) ;; Face for builtins (defface py-builtins-face '((t (:inherit font-lock-builtin-face))) "Face for builtins like TypeError, object, open, and exec." :group 'python-mode) (defvar py-builtins-face 'py-builtins-face) (defface py-class-name-face '((t (:inherit font-lock-type-face))) "Face for classes." :group 'python-mode) (defvar py-class-name-face 'py-class-name-face) ;; XXX, TODO, and FIXME comments and such (defface py-exception-name-face '((t (:inherit font-lock-builtin-face))) "." :group 'python-mode) (defvar py-exception-name-face 'py-exception-name-face) (defvar virtualenv-old-path) (defvar virtualenv-old-exec-path) (defvar py-underscore-word-syntax-p t "This is set later by defcustom, only initial value here. If underscore chars should be of syntax-class `word', not of `symbol'. Underscores in word-class makes `forward-word' etc. travel the indentifiers. Default is `t'. See also command `toggle-py-underscore-word-syntax-p' ") (defvar python-mode-message-string "python-mode.el" "Reports the python-mode branch in use.") (defvar py-local-command nil "Returns locally used executable-name. ") (make-variable-buffer-local 'py-local-command) (defvar py-this-abbrevs-changed nil "Internally used by python-mode-hook") (defvar py-local-versioned-command nil "Returns locally used executable-name including its version. ") (make-variable-buffer-local 'py-local-versioned-command) (defvar py-preoutput-leftover nil) (defvar py-preoutput-skip-next-prompt nil) (defvar py-shell-complete-debug nil "For interal use when debugging." ) (defcustom py-debug-p nil "When non-nil, keep resp. store information useful for debugging. Temporary files are not deleted. Other functions might implement some logging etc. " :type 'boolean :group 'python-mode) (defvar py-encoding-string-re "^[ \t]*#[ \t]*-\\*-[ \t]*coding:.+-\\*-" "Matches encoding string of a Python file. ") (defvar symbol-definition-start-re) (setq symbol-definition-start-re "^[ \t]*(\\(defun\\|defvar\\|defcustom\\)") (defvar py-shebang-regexp "#![ \t]?\\([^ \t\n]+\\)[ \t]*\\([biptj]+ython[^ \t\n]*\\)" "Detecting the shell in head of file. ") (defvar py-separator-char 47 "Values set by defcustom only will not be seen in batch-mode. ") (defvar py-temp-directory (let ((ok '(lambda (x) (and x (setq x (expand-file-name x)) ; always true (file-directory-p x) (file-writable-p x) x))) erg) (or (and (not (string= "" py-custom-temp-directory)) (if (funcall ok py-custom-temp-directory) (setq erg (expand-file-name py-custom-temp-directory)) (if (file-directory-p (expand-file-name py-custom-temp-directory)) (error "py-custom-temp-directory set but not writable") (error "py-custom-temp-directory not an existing directory")))) (and (funcall ok (getenv "TMPDIR")) (setq erg (getenv "TMPDIR"))) (and (funcall ok (getenv "TEMP/TMP")) (setq erg (getenv "TEMP/TMP"))) (and (funcall ok "/usr/tmp") (setq erg "/usr/tmp")) (and (funcall ok "/tmp") (setq erg "/tmp")) (and (funcall ok "/var/tmp") (setq erg "/var/tmp")) (and (eq system-type 'darwin) (funcall ok "/var/folders") (setq erg "/var/folders")) (and (or (eq system-type 'ms-dos)(eq system-type 'windows-nt)) (funcall ok (concat "c:" py-separator-char "Users")) (setq erg (concat "c:" py-separator-char "Users"))) ;; (funcall ok ".") (error "Couldn't find a usable temp directory -- set `py-temp-directory'")) (when erg (setq py-temp-directory erg))) "Directory used for temporary files created by a *Python* process. By default, guesses the first directory from this list that exists and that you can write into: the value (if any) of the environment variable TMPDIR, /usr/tmp, /tmp, /var/tmp, or the current directory. `py-custom-temp-directory' will take precedence when setq ") (defvar py-exec-command nil "Internally used. ") (make-variable-buffer-local 'py-exec-command) (defvar py-buffer-name nil "Internal use. ") (defvar py-orig-buffer-or-file nil "Internal use. ") (defvar py-python-major-version nil "Internally used. ") (make-variable-buffer-local 'py-python-major-version) (defvar py-exec-string-command nil "Mode commands will set this. ") (make-variable-buffer-local 'py-exec-string-command) (defvar py-which-bufname "Python") (make-variable-buffer-local 'py-which-bufname) (defvar py-pychecker-history nil) (defvar py-pep8-history nil) (defvar py-pyflakespep8-history nil) (defvar py-pyflakes-history nil) (defvar py-pylint-history nil) (defvar ipython-de-input-prompt-regexp "In \\[[0-9]+\\]:\\|^[ ]\\{3\\}[.]\\{3,\\}:" "A regular expression to match the IPython input prompt. ") ;; make sure it's set that way (setq ipython-de-input-prompt-regexp "In \\[[0-9]+\\]:\\|^[ ]\\{3\\}[.]\\{3,\\}:") (defvar ipython-de-output-prompt-regexp "^Out\\[[0-9]+\\]: " "A regular expression to match the output prompt of IPython.") (defvar py-force-local-shell-p nil "Used internally, see `toggle-force-local-shell'. ") (defvar python-mode-v5-behavior nil) (defvar py-bol-forms-last-indent nil "For internal use. Stores indent from last py-end-of-FORM-bol command. When this-command is py-beginning-of-FORM-bol, last-command's indent will be considered in order to jump onto right beginning position.") ;; Skip's XE workaround (unless (fboundp 'string-to-syntax) (defun string-to-syntax (s) (cond ((equal s "|") '(15)) ((equal s "_") '(3)) (t (error "Unhandled string: %s" s))))) (defvar python-mode-syntax-table nil "Syntax table for Python files.") (setq python-mode-syntax-table (let ((table (make-syntax-table))) ;; Give punctuation syntax to ASCII that normally has symbol ;; syntax or has word syntax and isn't a letter. (let ((symbol (string-to-syntax "_")) (sst (standard-syntax-table))) (dotimes (i 128) (unless (= i ?_) (if (equal symbol (aref sst i)) (modify-syntax-entry i "." table))))) (modify-syntax-entry ?$ "." table) (modify-syntax-entry ?% "." table) ;; exceptions (modify-syntax-entry ?# "<" table) (modify-syntax-entry ?\n ">" table) (modify-syntax-entry ?' "\"" table) (modify-syntax-entry ?` "$" table) (if py-underscore-word-syntax-p (modify-syntax-entry ?\_ "w" table) (modify-syntax-entry ?\_ "_" table)) table)) (defvar py-dotted-expression-syntax-table (let ((table (make-syntax-table python-mode-syntax-table))) (modify-syntax-entry ?_ "_" table) (modify-syntax-entry ?. "_" table) table) "Syntax table used to identify Python dotted expressions.") (defvar eldoc-documentation-function) (defvar py-completion-last-window-configuration nil "Internal use: restore py-restore-window-configuration when completion is done resp. abandoned. ") (defvar ipython-version nil) (defvaralias 'py-python-command 'py-shell-name) (defvaralias 'py-jpython-command 'py-shell-name) (defvaralias 'py-jython-command 'py-shell-name) (defvaralias 'py-default-interpreter 'py-shell-name) ;; (defvaralias 'python-command 'py-shell-name) (defvar py-shell-template " \(defun NAME (&optional argprompt) \"Start an DOCNAME interpreter in another window. With optional \\\\[universal-argument] user is prompted for options to pass to the DOCNAME interpreter. \" (interactive \"P\") (let\* ((py-shell-name \"FULLNAME\")) (py-shell argprompt) (when (interactive-p) (switch-to-buffer (current-buffer)) (goto-char (point-max))))) ") (defcustom py-execute-directory nil "When set, stores the file's default directory-name py-execute-... functions act upon. Used by Python-shell for output of `py-execute-buffer' and related commands. See also `py-use-current-dir-when-execute-p'" :type 'string :group 'python-mode) (defcustom py-use-current-dir-when-execute-p t "When `t', current directory is used by Python-shell for output of `py-execute-buffer' and related commands. See also `py-execute-directory'" :type 'boolean :group 'python-mode) (defcustom py-shell-prompt-output-regexp "" "Regular Expression matching output prompt of python shell. It should not contain a caret (^) at the beginning." :type 'string :group 'python-mode ) (defcustom py-keep-windows-configuration nil "If a windows is splitted displaying results, this is directed by variable `py-split-windows-on-execute-p'. Also setting `py-switch-buffers-on-execute-p' affects window-configuration. While commonly a screen splitted into source and Python-shell buffer is assumed, user may want to keep a different config. See lp:1239498 Setting `py-keep-windows-configuration' to `t' will restore windows-config regardless of settings mentioned above. However, if an error occurs, it's displayed. To suppres window-changes due to error-signaling also, set `py-keep-windows-configuration' onto 'force Default is nil " :type '(choice (const :tag "nil" nil) (const :tag "t" t) (const :tag "force" 'force)) :group 'python-mode) (defcustom py-output-buffer "*Python Output*" "When `py-enforce-output-buffer-p' is non-nil, provides the default for output-buffer. " :type 'string :group 'python-mode) (make-variable-buffer-local 'py-output-buffer) (defcustom py-enforce-output-buffer-p nil "When non-nil, current value of `py-output-buffer' is used for output, regardless of environment. Default is nil" :type 'boolean :group 'python-mode) (defvar py-exception-buffer nil "Set internally, remember source buffer where error might occur. ") (defvar py-string-delim-re "\\(\"\"\"\\|'''\\|\"\\|'\\)" "When looking at beginning of string. ") (defvar py-labelled-re "[ \\t]*:[[:print:]]+" "When looking at label. ") (defvar py-expression-skip-regexp "[^ (=:#\t\r\n\f]" "py-expression assumes chars indicated possible composing a py-expression, skip it. ") (defvar py-expression-skip-chars "^ (:=#\t\r\n\f" "py-expression assumes chars indicated possible composing a py-expression, skip it. ") (defvar py-expression-re "[^ =:#\t\r\n\f]+" "py-expression assumes chars indicated possible composing a py-expression, when looking-at or -back. ") (defvar py-not-expression-regexp "[ .=:#\t\r\n\f)]" "py-expression assumes chars indicated probably will not compose a py-expression. ") (defvar py-not-expression-chars " .=#\t\r\n\f" "py-expression assumes chars indicated probably will not compose a py-expression. ") (defvar py-partial-expression-backward-chars "^ ,\"'()[]{}:#\t\r\n\f" "py-partial-expression assumes chars indicated possible composing a py-partial-expression, skip it. ") ;; (setq py-partial-expression-backward-chars "^ ,\"'([{:#\t\r\n\f") (defvar py-partial-expression-forward-chars "^ \"')}]:#\t\r\n\f") ;; (setq py-partial-expression-forward-chars "^ \"')}]:#\t\r\n\f") (defvar py-partial-expression-regexp "[^ .=:#\t\r\n\f]" "py-partial-expression assumes chars indicated possible composing a py-partial-expression, when looking-at or -back. ") (defvar py-not-partial-expression-regexp "[ .=:#\t\r\n\f)]" "py-partial-expression assumes chars indicated probably will not compose a py-partial-expression. ") (defvar py-operator-regexp "[ \t]*\\(\\.\\|+\\|-\\|*\\|//\\|//\\|&\\|%\\||\\|\\^\\|>>\\|<<\\|<\\|<=\\|>\\|>=\\|==\\|!=\\)[ \t]*" "Matches most of Python operators inclusive whitespaces around. See also `py-assignment-regexp' ") (defvar py-assignment-regexp "[ \t]*=[^=]" "Matches assignment operator inclusive whitespaces around. See also `py-operator-regexp' ") (defvar py-delimiter-regexp "\\(,\\|;\\|:\\)[ \t\n]" "Delimiting elements of lists or other programming constructs. ") (defvar py-delimiter-chars ",;." "Chars delimiting elements of lists or other programming constructs. ") (defvar py-line-number-offset 0 "When an exception occurs as a result of py-execute-region, a subsequent py-up-exception needs the line number where the region started, in order to jump to the correct file line. This variable is set in py-execute-region and used in py-jump-to-exception.") (defvar match-paren-no-use-syntax-pps nil) (defvar py-traceback-line-re "[ \t]+File \"\\([^\"]+\\)\", line \\([0-9]+\\)" "Regular expression that describes tracebacks.") (defvar py-preoutput-result nil "Data from last `_emacs_out' line seen by the preoutput filter.") (defvar py-file-queue nil "Queue of Python temp files awaiting execution. Currently-active file is at the head of the list.") (defvar python-mode-abbrev-table nil) (defvar inferior-python-mode-abbrev-table nil "Not in use.") (defvar py-pdbtrack-input-prompt) (defvar py-pydbtrack-input-prompt) (defvar py-pdbtrack-is-tracking-p nil) (defvar py-shell-map nil "Keymap used in *Python* shell buffers.") (defvar py-font-lock-keywords nil "Additional expressions to highlight in Python mode.") (defvar jython-mode-hook nil "Hook called by `jython-mode'. `jython-mode' also calls `python-mode-hook'.") (defvar py-shell-hook nil "Hook called by `py-shell'.") (defvar ipython-completion-command-string nil "Either ipython0.10-completion-command-string or ipython0.11-completion-command-string. ipython0.11-completion-command-string also covers version 0.12") (defvar ipython0.10-completion-command-string "print(';'.join(__IP.Completer.all_completions('%s'))) #PYTHON-MODE SILENT\n" "The string send to ipython to query for all possible completions") (defvar ipython0.11-completion-command-string "print(';'.join(get_ipython().Completer.all_completions('%s'))) #PYTHON-MODE SILENT\n" "The string send to ipython to query for all possible completions") (defvar py-last-exeption-buffer nil "Internal use only - when `py-up-exception' is called in source-buffer, this will deliver the exception-buffer again. ") (defvar py-preoutput-result nil "Data from last `_emacs_out' line seen by the preoutput filter.") (defvar py-import nil) (defvar py-imenu-class-regexp (concat ; <> "\\(" ; "^[ \t]*" ; newline and maybe whitespace "\\(class[ \t]+[a-zA-Z0-9_]+\\)" ; class name ; possibly multiple superclasses "\\([ \t]*\\((\\([a-zA-Z0-9_,. \t\n]\\)*)\\)?\\)" "[ \t]*:" ; and the final : "\\)" ; >>classes<< ) "Regexp for Python classes for use with the Imenu package.") (defvar py-imenu-method-regexp (concat ; <> "\\(" ; "^[ \t]*" ; new line and maybe whitespace "\\(def[ \t]+" ; function definitions start with def "\\([a-zA-Z0-9_]+\\)" ; name is here ; function arguments... ;; "[ \t]*(\\([-+/a-zA-Z0-9_=,\* \t\n.()\"'#]*\\))" "[ \t]*(\\([^:#]*\\))" "\\)" ; end of def "[ \t]*:" ; and then the : "\\)" ; >>methods and functions<< ) "Regexp for Python methods/functions for use with the Imenu package.") (defvar py-imenu-method-no-arg-parens '(2 8) "Indices into groups of the Python regexp for use with Imenu. Using these values will result in smaller Imenu lists, as arguments to functions are not listed. See the variable `py-imenu-show-method-args-p' for more information.") (defvar py-imenu-method-arg-parens '(2 7) "Indices into groups of the Python regexp for use with imenu. Using these values will result in large Imenu lists, as arguments to functions are listed. See the variable `py-imenu-show-method-args-p' for more information.") (defvar py-imenu-generic-expression (cons (concat py-imenu-class-regexp "\\|" ; or... py-imenu-method-regexp) py-imenu-method-no-arg-parens) "Generic Python expression which may be used directly with Imenu. Used by setting the variable `imenu-generic-expression' to this value. Also, see the function \\[py-imenu-create-index] for a better alternative for finding the index.") (defvar py-imenu-generic-regexp nil) (defvar py-imenu-generic-parens nil) (defvar imenu-max-items) (defvar py-mode-output-map nil "Keymap used in *Python Output* buffers.") (defvar inferior-python-mode-map (let ((map (copy-keymap comint-mode-map))) ;; (substitute-key-definition 'complete-symbol 'py-shell-complete map global-map) (substitute-key-definition 'complete-symbol 'completion-at-point map global-map) (define-key map (kbd "RET") 'comint-send-input) (and py-complete-function (define-key map [tab] 'py-complete-function)) (define-key map "\C-c-" 'py-up-exception) (define-key map "\C-c=" 'py-down-exception) map)) (defvar py-menu) (defvar py-already-guessed-indent-offset nil "Internal use by py-indent-line. When `this-command' is `eq' to `last-command', use the guess already computed. ") (make-variable-buffer-local 'py-already-guessed-indent-offset) (defvar skeleton-further-elements) ;; (set (make-local-variable 'beginning-o1f-defun-function) 'py-beginning-of-def-or-class) ;; (set (make-local-variable 'end-of-defun-function) 'py-end-of-def-or-class)) ;; Add a designator to the minor mode strings (or (assq 'py-pdbtrack-is-tracking-p minor-mode-alist) (push '(py-pdbtrack-is-tracking-p py-pdbtrack-minor-mode-string) minor-mode-alist)) (defvar inferior-python-mode-syntax-table (let ((st (make-syntax-table python-mode-syntax-table))) ;; Don't get confused by apostrophes in the process's output (e.g. if ;; you execute "help(os)"). (modify-syntax-entry ?\' "." st) ;; Maybe we should do the same for double quotes? ;; (modify-syntax-entry ?\" "." st) st)) (defvar py-imports nil) (defvar smart-operator-mode nil) (defvar autopair-mode nil) (defvar highlight-indent-active nil) (defvar highlight-indentation nil "Menu PyEdit fails when not bound") (make-variable-buffer-local 'highlight-indentation) ;;(eval-when-compile (load (concat (py-normalize-directory py-install-directory) "extensions" py-separator-char "highlight-indentation.el"))) ;;; Constants (defconst py-blank-or-comment-re "[ \t]*\\($\\|#\\)" "Regular expression matching a blank or comment line.") (defconst py-block-closing-keywords-re "[ \t]*\\_<\\(return\\|raise\\|break\\|continue\\|pass\\)\\_>[ \n\t]" "Matches the beginning of a class, method or compound statement. ") (defconst py-finally-re "[ \t]*\\_[: \n\t]" "Regular expression matching keyword which closes a try-block. ") (defconst py-except-re "[ \t]*\\_[:( \n\t]*" "Regular expression matching keyword which composes a try-block. ") (defconst py-else-re "[ \t]*\\_[: \n\t]*" "Regular expression matching keyword which closes a for- if- or try-block. ") (defconst py-return-re ".*:?[ \t]*\\_<\\(return\\)\\_>[ \n\t]*" "Regular expression matching keyword which typically closes a function. ") (defconst py-no-outdent-1-re-raw (list "elif" "else" "except" "for" "if" "try" "while" )) (defconst py-no-outdent-2-re-raw (list "break" "continue" "pass" "raise" "return" )) (defconst py-no-outdent-re (concat "[ \t]*\\_<\\(" (regexp-opt py-no-outdent-1-re-raw) "\\)\\_>[( \t]+.*:[( \t]\\_<\\(" (regexp-opt py-no-outdent-2-re-raw) "\\)\\_>[)\t]*$") "Regular expression matching lines not to augment indent after. See py-no-outdent-1-re-raw, py-no-outdent-2-re-raw for better readable content ") (defconst py-assignment-re "\\_<\\w+\\_>[ \t]*\\(=\\|+=\\|*=\\|%=\\|&=\\|^=\\|<<=\\|-=\\|/=\\|**=\\||=\\|>>=\\|//=\\)" "If looking at the beginning of an assignment. ") (defconst py-block-re "[ \t]*\\_<\\(class\\|def\\|for\\|if\\|try\\|while\\|with\\)\\_>[:( \n\t]*" "Matches the beginning of a compound statement. ") (defconst py-minor-block-re "[ \t]*\\_<\\(for\\|if\\|try\\|with\\)\\_>[:( \n\t]*" "Matches the beginning of an `for', `if', `try' or `with' block. ") (defconst py-try-block-re "[ \t]*\\_[: \n\t]" "Matches the beginning of a `try' block. ") (defconst py-if-block-re "[ \t]*\\_[: \n\t]" "Matches the beginning of an `if' block. ") (defconst py-class-re "[ \t]*\\_<\\(class\\)\\_>[ \n\t]" "Matches the beginning of a class definition. ") (defconst py-def-or-class-re "[ \t]*\\_<\\(def\\|class\\)\\_>[ \n\t]" "Matches the beginning of a class- or functions definition. ") (defconst py-def-re "[ \t]*\\_<\\(def\\)\\_>[ \n\t]" "Matches the beginning of a functions definition. ") (defconst py-block-or-clause-re-raw (list "elif" "else" "except" "finally" "for" "if" "try" "while" "with") "Matches the beginning of a compound statement or it's clause. ") (defvar py-block-or-clause-re (concat "[ \t]*\\_<\\(" (regexp-opt py-block-or-clause-re-raw) "\\)\\_>[( \t]*.*:?") "See py-block-or-clause-re-raw, which it reads. ") (defconst py-extended-block-or-clause-re-raw (list "class" "def" "elif" "else" "except" "finally" "for" "if" "try" "while" "with") "Matches the beginning of a compound statement or it's clause. ") (defconst py-extended-block-or-clause-re (concat "[ \t]*\\_<\\(" (regexp-opt py-extended-block-or-clause-re-raw) "\\)\\_>[( \t]*.*:?") "See py-block-or-clause-re-raw, which it reads. ") (defconst py-top-level-form-re (concat "^\\_<[a-zA-Z_]\\|^\\_<\\(" (regexp-opt py-extended-block-or-clause-re-raw) "\\)\\_>[( \t]*.*:?") "A form which starts at zero indent level, but is not a comment. ") (defconst py-block-keywords (concat "\\_<\\(" (regexp-opt py-block-or-clause-re-raw) "\\)\\_>") "Matches known keywords opening a block. ") (defconst py-clause-re-raw (list "elif" "else" "except" "finally" ) "Matches the beginning of a clause. ") (defconst py-clause-re (concat "[ \t]*\\_<\\(" (regexp-opt py-clause-re-raw) "\\)\\_>[( \t]*.*:?") "See py-clause-re-raw, which it reads. ") (defconst py-elif-re "[ \t]*\\_<\\elif\\_>[:( \n\t]*" "Matches the beginning of a compound if-statement's clause exclusively. ") (defconst py-try-clause-re (concat "[ \t]*\\_<\\(" (mapconcat 'identity (list "else" "except" "finally") "\\|") "\\)\\_>[( \t]*.*:") "Matches the beginning of a compound try-statement's clause. ") (defconst py-if-re "[ \t]*\\_[( \n\t]*" "Matches the beginning of a compound statement saying `if'. ") (defconst py-try-re "[ \t]*\\_[:( \n\t]*" "Matches the beginning of a compound statement saying `try'. " ) ;;; Macro definitions (defmacro py-in-string-or-comment-p () "Returns beginning position if inside a string or comment, nil otherwise. " `(or (nth 8 (syntax-ppss)) (when (or (looking-at "\"")(looking-at "[ \t]*#[ \t]*")) (match-beginning 0)))) (defmacro py-escaped () "Return t if char is preceded by an odd number of backslashes. " `(save-excursion (< 0 (% (abs (skip-chars-backward "\\\\")) 2)))) (defmacro py-preceding-line-backslashed-p () "Return t if preceding line is a backslashed continuation line. " `(save-excursion (beginning-of-line) (skip-chars-backward " \t\r\n\f") (and (eq (char-before (point)) ?\\ ) (py-escaped)))) (defmacro py-current-line-backslashed-p () "Return t if current line is a backslashed continuation line. " `(save-excursion (end-of-line) (skip-chars-backward " \t\r\n\f") (and (eq (char-before (point)) ?\\ ) (py-escaped)))) ;;; Toggle ;; py-docstring-style forms (defun toggle-py-nil-docstring-style (&optional arg) "If nil docstring-style should be on or off. Returns value of `py-docstring-style' switched to. To set permanently, customize this variable " (interactive) (let ((arg (or arg (if (eq py-docstring-style nil) -1 1)))) (if (< 0 arg) (setq py-docstring-style 'nil) (setq py-docstring-style nil)) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style)) (defun py-nil-docstring-style-on (&optional arg) "Make sure, nil docstring-style' is on. Returns value of `py-docstring-style'. To set permanently, customize this variable " (interactive) (let ((arg (or arg 1))) (toggle-py-nil-docstring-style arg)) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style) (defun py-nil-docstring-style-off () "Make sure, nil docstring-style is off. Returns value of `py-docstring-style'. To set permanently, customize this variable " (interactive) (toggle-py-nil-docstring-style -1) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style) (defun toggle-py-onetwo-docstring-style (&optional arg) "If onetwo docstring-style should be on or off. Returns value of `py-docstring-style' switched to. To set permanently, customize this variable " (interactive) (let ((arg (or arg (if (eq py-docstring-style 'onetwo) -1 1)))) (if (< 0 arg) (setq py-docstring-style 'onetwo) (setq py-docstring-style nil)) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style)) (defun py-onetwo-docstring-style-on (&optional arg) "Make sure, onetwo docstring-style' is on. Returns value of `py-docstring-style'. To set permanently, customize this variable " (interactive) (let ((arg (or arg 1))) (toggle-py-onetwo-docstring-style arg)) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style) (defun py-onetwo-docstring-style-off () "Make sure, onetwo docstring-style is off. Returns value of `py-docstring-style'. To set permanently, customize this variable " (interactive) (toggle-py-onetwo-docstring-style -1) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style) (defun toggle-py-pep-257-docstring-style (&optional arg) "If pep-257 docstring-style should be on or off. Returns value of `py-pep-257-docstring-style' switched to. " (interactive) (let ((arg (or arg (if (eq py-docstring-style 'pep-257) -1 1)))) (if (< 0 arg) (setq py-docstring-style 'pep-257) (setq py-docstring-style nil)) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style)) (defun py-pep-257-docstring-style-on (&optional arg) "Make sure, pep-257 docstring-style' is on. Returns value of `py-pep-257-docstring-style'. " (interactive) (let ((arg (or arg 1))) (toggle-py-pep-257-docstring-style arg)) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style) (defun py-pep-257-docstring-style-off () "Make sure, pep-257 docstring-style is off. Returns value of `py-pep-257-docstring-style'. " (interactive) (toggle-py-pep-257-docstring-style -1) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style) (defun toggle-py-pep-257-nn-docstring-style (&optional arg) "If pep-257-nn docstring-style should be on or off. Returns value of `py-pep-257-nn-docstring-style' switched to. " (interactive) (let ((arg (or arg (if (eq py-docstring-style 'pep-257-nn) -1 1)))) (if (< 0 arg) (setq py-docstring-style 'pep-257-nn) (setq py-docstring-style nil)) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style)) (defun py-pep-257-nn-docstring-style-on (&optional arg) "Make sure, pep-257-nn docstring-style' is on. Returns value of `py-docstring-style'. To set permanently, customize this variable " (interactive) (let ((arg (or arg 1))) (toggle-py-pep-257-nn-docstring-style arg)) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style) (defun py-pep-257-nn-docstring-style-off () "Make sure, pep-257-nn docstring-style is off. Returns value of `py-docstring-style'. To set permanently, customize this variable " (interactive) (toggle-py-pep-257-nn-docstring-style -1) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style) (defun toggle-py-symmetric-docstring-style (&optional arg) "If symmetric docstring-style should be on or off. Returns value of `py-docstring-style' switched to. To set permanently, customize this variable " (interactive) (let ((arg (or arg (if (eq py-docstring-style 'symmetric) -1 1)))) (if (< 0 arg) (setq py-docstring-style 'symmetric) (setq py-docstring-style nil)) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style)) (defun py-symmetric-docstring-style-on (&optional arg) "Make sure, symmetric docstring-style' is on. Returns value of `py-docstring-style'. To set permanently, customize this variable " (interactive) (let ((arg (or arg 1))) (toggle-py-symmetric-docstring-style arg)) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style) (defun py-symmetric-docstring-style-off () "Make sure, symmetric docstring-style is off. Returns value of `py-docstring-style'. To set permanently, customize this variable " (interactive) (toggle-py-symmetric-docstring-style -1) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style) (defun toggle-py-django-docstring-style (&optional arg) "If django docstring-style should be on or off. Returns value of `py-docstring-style' switched to. To set permanently, customize this variable " (interactive) (let ((arg (or arg (if (eq py-docstring-style 'django) -1 1)))) (if (< 0 arg) (setq py-docstring-style 'django) (setq py-docstring-style nil)) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style)) (defun py-django-docstring-style-on (&optional arg) "Make sure, django docstring-style' is on. Returns value of `py-docstring-style'. To set permanently, customize this variable " (interactive) (let ((arg (or arg 1))) (toggle-py-django-docstring-style arg)) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style) (defun py-django-docstring-style-off () "Make sure, django docstring-style is off. Returns value of `py-docstring-style'. To set permanently, customize this variable " (interactive) (toggle-py-django-docstring-style -1) (when (or py-verbose-p (interactive-p)) (message "py-docstring-style: %s" py-docstring-style)) py-docstring-style) ;; py-underscore-word-syntax-p forms (defun toggle-py-underscore-word-syntax-p (&optional arg) "If `py-underscore-word-syntax-p' should be on or off. Returns value of `py-underscore-word-syntax-p' switched to. " (interactive) (let ((arg (or arg (if py-underscore-word-syntax-p -1 1)))) (if (< 0 arg) (progn (setq py-underscore-word-syntax-p t) (modify-syntax-entry ?\_ "w" python-mode-syntax-table)) (setq py-underscore-word-syntax-p nil) (modify-syntax-entry ?\_ "_" python-mode-syntax-table)) (when (or py-verbose-p (interactive-p)) (message "py-underscore-word-syntax-p: %s" py-underscore-word-syntax-p)) py-underscore-word-syntax-p)) (defun py-underscore-word-syntax-p-on (&optional arg) "Make sure, py-underscore-word-syntax-p' is on. Returns value of `py-underscore-word-syntax-p'. " (interactive) (let ((arg (or arg 1))) (toggle-py-underscore-word-syntax-p arg)) (when (or py-verbose-p (interactive-p)) (message "py-underscore-word-syntax-p: %s" py-underscore-word-syntax-p)) py-underscore-word-syntax-p) (defun py-underscore-word-syntax-p-off () "Make sure, `py-underscore-word-syntax-p' is off. Returns value of `py-underscore-word-syntax-p'. " (interactive) (toggle-py-underscore-word-syntax-p -1) (when (or py-verbose-p (interactive-p)) (message "py-underscore-word-syntax-p: %s" py-underscore-word-syntax-p)) py-underscore-word-syntax-p) (defcustom py-underscore-word-syntax-p t "If underscore chars should be of syntax-class `word', not of `symbol'. Underscores in word-class makes `forward-word' etc. travel the indentifiers. Default is `t'. See bug report at launchpad, lp:940812 " :type 'boolean :group 'python-mode :set (lambda (symbol value) (set-default symbol value) (toggle-py-underscore-word-syntax-p (if value 1 0)))) ;; py-electric-comment-p forms (defun toggle-py-electric-comment-p (&optional arg) "If `py-electric-comment-p' should be on or off. Returns value of `py-electric-comment-p' switched to. " (interactive) (let ((arg (or arg (if py-electric-comment-p -1 1)))) (if (< 0 arg) (setq py-electric-comment-p t) (setq py-electric-comment-p nil)) (when (or py-verbose-p (interactive-p)) (message "py-electric-comment-p: %s" py-electric-comment-p)) py-electric-comment-p)) (defun py-electric-comment-p-on (&optional arg) "Make sure, py-electric-comment-p' is on. Returns value of `py-electric-comment-p'. " (interactive) (let ((arg (or arg 1))) (toggle-py-electric-comment-p arg)) (when (or py-verbose-p (interactive-p)) (message "py-electric-comment-p: %s" py-electric-comment-p)) py-electric-comment-p) (defun py-electric-comment-p-off () "Make sure, `py-electric-comment-p' is off. Returns value of `py-electric-comment-p'. " (interactive) (toggle-py-electric-comment-p -1) (when (or py-verbose-p (interactive-p)) (message "py-electric-comment-p: %s" py-electric-comment-p)) py-electric-comment-p) ;; toggle-force-local-shell (defun toggle-force-local-shell (&optional arg) "If locally indicated Python shell should be taken and enforced upon sessions execute commands. Toggles boolean `py-force-local-shell-p' along with `py-force-py-shell-name-p' Returns value of `toggle-force-local-shell' switched to. When on, kind of an option 'follow', local shell sets `py-shell-name', enforces its use afterwards. See also commands `py-force-local-shell-on' `py-force-local-shell-off' " (interactive (list arg)) (let ((arg (or arg (if py-force-local-shell-p -1 1)))) (if (< 0 arg) (progn (setq py-shell-name (or py-local-command (py-choose-shell))) (setq py-force-local-shell-p t)) (setq py-shell-name (default-value 'py-shell-name)) (setq py-force-local-shell-p nil)) (when (interactive-p) (if py-force-local-shell-p (when py-verbose-p (message "Enforce %s" py-shell-name)) (when py-verbose-p (message "py-shell-name default restored to: %s" py-shell-name)))) py-shell-name)) (defun py-force-local-shell-on () "Make sure, `py-py-force-local-shell-p' is on. Returns value of `py-force-local-shell-p'. Kind of an option 'follow', local shell sets `py-shell-name', enforces its use afterwards " (interactive) (let* ((erg (toggle-force-local-shell 1))) (when (or py-verbose-p (interactive-p)) (message "Enforce %s" py-shell-name)))) (defun py-force-local-shell-off () "Restore `py-shell-name' default value and `behaviour'. " (interactive) (let* ((erg (toggle-force-local-shell 1))) (when (or py-verbose-p (interactive-p)) (message "py-shell-name default restored to: %s" py-shell-name) (message "Enforce %s" py-shell-name)))) ;; toggle-force-py-shell-name-p forms (defun toggle-force-py-shell-name-p (&optional arg) "If customized default `py-shell-name' should be enforced upon execution. If `py-force-py-shell-name-p' should be on or off. Returns value of `py-force-py-shell-name-p' switched to. See also commands force-py-shell-name-p-on force-py-shell-name-p-off Caveat: Completion might not work that way. " (interactive "p") (let ((arg (or arg (if py-force-py-shell-name-p -1 1)))) (if (< 0 arg) (setq py-force-py-shell-name-p t) (setq py-force-py-shell-name-p nil)) (when (or py-verbose-p (interactive-p)) (message "py-force-py-shell-name-p: %s" py-force-py-shell-name-p)) py-force-py-shell-name-p)) (defun force-py-shell-name-p-on (&optional arg) "Switches `py-force-py-shell-name-p' on. Customized default `py-shell-name' will be enforced upon execution. Returns value of `py-force-py-shell-name-p'. Caveat: Completion might not work that way. " (interactive "p") (let ((arg (or arg 1))) (toggle-force-py-shell-name-p arg)) (when (or py-verbose-p (interactive-p)) (message "py-force-py-shell-name-p: %s" py-force-py-shell-name-p)) py-force-py-shell-name-p) (defun force-py-shell-name-p-off () "Make sure, `py-force-py-shell-name-p' is off. Function to use by executes will be guessed from environment. Returns value of `py-force-py-shell-name-p'. " (interactive) (toggle-force-py-shell-name-p -1) (when (or py-verbose-p (interactive-p)) (message "py-force-py-shell-name-p: %s" py-force-py-shell-name-p)) py-force-py-shell-name-p) ;; py-toggle-indent-tabs-mode (defun py-toggle-indent-tabs-mode () "Toggle `indent-tabs-mode'. Returns value of `indent-tabs-mode' switched to. " (interactive) (when (setq indent-tabs-mode (not indent-tabs-mode)) (setq tab-width py-indent-offset)) (when (and py-verbose-p (interactive-p)) (message "indent-tabs-mode %s py-indent-offset %s" indent-tabs-mode py-indent-offset)) indent-tabs-mode) (defun py-indent-tabs-mode-on (arg) "Switch `indent-tabs-mode' on. " (interactive "p") (py-indent-tabs-mode (abs arg)(interactive-p))) (defun py-indent-tabs-mode-off (arg) "Switch `indent-tabs-mode' off. " (interactive "p") (py-indent-tabs-mode (- (abs arg))(interactive-p))) ;; py-jump-on-exception forms (defun toggle-py-jump-on-exception (&optional arg) "If `py-jump-on-exception' should be on or off. Returns value of `py-jump-on-exception' switched to. " (interactive) (let ((arg (or arg (if py-jump-on-exception -1 1)))) (if (< 0 arg) (setq py-jump-on-exception t) (setq py-jump-on-exception nil)) (when (or py-verbose-p (interactive-p)) (message "py-jump-on-exception: %s" py-jump-on-exception)) py-jump-on-exception)) (defun py-jump-on-exception-on (&optional arg) "Make sure, py-jump-on-exception' is on. Returns value of `py-jump-on-exception'. " (interactive) (let ((arg (or arg 1))) (toggle-py-jump-on-exception arg)) (when (or py-verbose-p (interactive-p)) (message "py-jump-on-exception: %s" py-jump-on-exception)) py-jump-on-exception) (defun py-jump-on-exception-off () "Make sure, `py-jump-on-exception' is off. Returns value of `py-jump-on-exception'. " (interactive) (toggle-py-jump-on-exception -1) (when (or py-verbose-p (interactive-p)) (message "py-jump-on-exception: %s" py-jump-on-exception)) py-jump-on-exception) ;; python-mode-v5-behavior-p forms (defun toggle-python-mode-v5-behavior-p (&optional arg) "If `python-mode-v5-behavior-p' should be on or off. Returns value of `python-mode-v5-behavior-p' switched to. " (interactive) (let ((arg (or arg (if python-mode-v5-behavior-p -1 1)))) (if (< 0 arg) (setq python-mode-v5-behavior-p t) (setq python-mode-v5-behavior-p nil)) (when (or py-verbose-p (interactive-p)) (message "python-mode-v5-behavior-p: %s" python-mode-v5-behavior-p)) python-mode-v5-behavior-p)) (defun python-mode-v5-behavior-p-on (&optional arg) "Make sure, `python-mode-v5-behavior-p' is on. Returns value of `python-mode-v5-behavior-p'. " (interactive) (let ((arg (or arg 1))) (toggle-python-mode-v5-behavior-p arg)) (when (or py-verbose-p (interactive-p)) (message "python-mode-v5-behavior-p: %s" python-mode-v5-behavior-p)) python-mode-v5-behavior-p) (defun python-mode-v5-behavior-p-off () "Make sure, `python-mode-v5-behavior-p' is off. Returns value of `python-mode-v5-behavior-p'. " (interactive) (toggle-python-mode-v5-behavior-p -1) (when (or py-verbose-p (interactive-p)) (message "python-mode-v5-behavior-p: %s" python-mode-v5-behavior-p)) python-mode-v5-behavior-p) ;; (defalias 'toggle-py-shell-switch-buffers-on-execute 'py-toggle-shell-switch-buffers-on-execute) (defun py-toggle-shell-switch-buffers-on-execute (&optional arg) "If `py-switch-buffers-on-execute-p' should be on or off. Returns value of `py-switch-buffers-on-execute-p' switched to. " (interactive) (let ((arg (or arg (if py-switch-buffers-on-execute-p -1 1)))) (if (< 0 arg) (setq py-switch-buffers-on-execute-p t) (setq py-switch-buffers-on-execute-p nil)) (when (interactive-p) (message "py-shell-switch-buffers-on-execute: %s" py-switch-buffers-on-execute-p)) py-switch-buffers-on-execute-p)) (defun py-shell-switch-buffers-on-execute-on (&optional arg) "Make sure, `py-switch-buffers-on-execute-p' is on. Returns value of `py-switch-buffers-on-execute-p'. " (interactive "p") (let ((arg (or arg 1))) (toggle-py-shell-switch-buffers-on-execute arg)) (when (interactive-p) (message "py-shell-switch-buffers-on-execute: %s" py-switch-buffers-on-execute-p)) py-switch-buffers-on-execute-p) (defun py-shell-switch-buffers-on-execute-off () "Make sure, `py-switch-buffers-on-execute-p' is off. Returns value of `py-switch-buffers-on-execute-p'. " (interactive) (toggle-py-shell-switch-buffers-on-execute -1) (when (interactive-p) (message "py-shell-switch-buffers-on-execute: %s" py-switch-buffers-on-execute-p)) py-switch-buffers-on-execute-p) ;; split-windows-on-execute (defalias 'toggle-py-split-windows-on-execute 'py-toggle-split-windows-on-execute) (defun py-toggle-split-windows-on-execute (&optional arg) "If `py-split-windows-on-execute-p' should be on or off. Returns value of `py-split-windows-on-execute-p' switched to. " (interactive) (let ((arg (or arg (if py-split-windows-on-execute-p -1 1)))) (if (< 0 arg) (setq py-split-windows-on-execute-p t) (setq py-split-windows-on-execute-p nil)) (when (interactive-p) (message "py-split-windows-on-execute-p: %s" py-split-windows-on-execute-p)) py-split-windows-on-execute-p)) (defun py-split-windows-on-execute-on (&optional arg) "Make sure, `py-split-windows-on-execute-p' is on. Returns value of `py-split-windows-on-execute-p'. " (interactive "p") (let ((arg (or arg 1))) (toggle-py-split-windows-on-execute arg)) (when (interactive-p) (message "py-split-windows-on-execute-p: %s" py-split-windows-on-execute-p)) py-split-windows-on-execute-p) (defun py-split-windows-on-execute-off () "Make sure, `py-split-windows-on-execute-p' is off. Returns value of `py-split-windows-on-execute-p'. " (interactive) (toggle-py-split-windows-on-execute -1) (when (interactive-p) (message "py-split-windows-on-execute-p: %s" py-split-windows-on-execute-p)) py-split-windows-on-execute-p) ;; highlight-indentation (defun py-toggle-highlight-indentation (&optional indent) "If `highlight-indentation-p' should be on or off. " (interactive "P") (unless (featurep 'highlight-indentation) (load (concat (py-normalize-directory py-install-directory) "extensions" py-separator-char "highlight-indentation.el"))) (highlight-indentation indent) (when py-verbose-p (message "highlight-indent-active: %s" highlight-indent-active)) highlight-indent-active) (defun py-highlight-indentation-off () "If `highlight-indentation-p' should be on or off. " (interactive) (unless (featurep 'highlight-indentation) (load (concat (py-normalize-directory py-install-directory) "extensions" py-separator-char "highlight-indentation.el"))) (highlight-indentation-off) (when py-verbose-p (message "highlight-indent-active: %s" highlight-indent-active)) highlight-indent-active) (defun py-highlight-indentation-on () "If `highlight-indentation-p' should be on or off. " (interactive "P") (unless (featurep 'highlight-indentation) (load (concat (py-normalize-directory py-install-directory) "extensions" py-separator-char "highlight-indentation.el"))) (highlight-indentation-on) (when py-verbose-p (message "highlight-indent-active: %s" highlight-indent-active)) highlight-indent-active) ;; Smart indentation (defalias 'toggle-py-smart-indentation 'py-toggle-smart-indentation) (defun py-toggle-smart-indentation (&optional arg) "If `py-smart-indentation' should be on or off. Returns value of `py-smart-indentation' switched to. " (interactive) (let ((arg (or arg (if py-smart-indentation -1 1)))) (if (< 0 arg) (progn (setq py-smart-indentation t) (py-guess-indent-offset)) (setq py-smart-indentation nil) (setq py-indent-offset (default-value 'py-indent-offset))) (when (interactive-p) (message "py-smart-indentation: %s" py-smart-indentation)) py-smart-indentation)) (defun py-smart-indentation-on (&optional arg) "Make sure, `py-smart-indentation' is on. Returns value of `py-smart-indentation'. " (interactive "p") (let ((arg (or arg 1))) (toggle-py-smart-indentation arg)) (when (interactive-p) (message "py-smart-indentation: %s" py-smart-indentation)) py-smart-indentation) (defun py-smart-indentation-off (&optional arg) "Make sure, `py-smart-indentation' is off. Returns value of `py-smart-indentation'. " (interactive "p") (let ((arg (if arg (- arg) -1))) (toggle-py-smart-indentation arg)) (when (interactive-p) (message "py-smart-indentation: %s" py-smart-indentation)) py-smart-indentation) ;; Smart operator (defun toggle-py-smart-operator-mode-p (&optional arg) "If `py-smart-operator-mode-p' should be on or off. Returns value of `py-smart-operator-mode-p' switched to. " (interactive) (and (py-smart-operator-check) (setq py-smart-operator-mode-p (smart-operator-mode (if smart-operator-mode 0 1))))) (defun py-smart-operator-mode-p-on () "Make sure, py-smart-operator-mode-p' is on. Returns value of `py-smart-operator-mode-p'. " (interactive) (and (py-smart-operator-check) (setq py-smart-operator-mode-p (smart-operator-mode 1)))) (defun py-smart-operator-mode-p-off () "Make sure, py-smart-operator-mode-p' is off. Returns value of `py-smart-operator-mode-p'. " (interactive) (setq py-smart-operator-mode-p (smart-operator-mode 0))) ;; py-use-current-dir-when-execute-p forms (defun toggle-py-use-current-dir-when-execute-p (&optional arg) "If `py-use-current-dir-when-execute-p' should be on or off. Returns value of `py-use-current-dir-when-execute-p' switched to. " (interactive) (let ((arg (or arg (if py-use-current-dir-when-execute-p -1 1)))) (if (< 0 arg) (setq py-use-current-dir-when-execute-p t) (setq py-use-current-dir-when-execute-p nil)) (when (or py-verbose-p (interactive-p)) (message "py-use-current-dir-when-execute-p: %s" py-use-current-dir-when-execute-p)) py-use-current-dir-when-execute-p)) (defun py-use-current-dir-when-execute-p-on (&optional arg) "Make sure, py-use-current-dir-when-execute-p' is on. Returns value of `py-use-current-dir-when-execute-p'. " (interactive) (let ((arg (or arg 1))) (toggle-py-use-current-dir-when-execute-p arg)) (when (or py-verbose-p (interactive-p)) (message "py-use-current-dir-when-execute-p: %s" py-use-current-dir-when-execute-p)) py-use-current-dir-when-execute-p) (defun py-use-current-dir-when-execute-p-off () "Make sure, `py-use-current-dir-when-execute-p' is off. Returns value of `py-use-current-dir-when-execute-p'. " (interactive) (toggle-py-use-current-dir-when-execute-p -1) (when (or py-verbose-p (interactive-p)) (message "py-use-current-dir-when-execute-p: %s" py-use-current-dir-when-execute-p)) py-use-current-dir-when-execute-p) ;; py-autopair-mode forms (defalias 'toggle-py-autopair-mode 'py-toggle-autopair-mode) (defun py-toggle-autopair-mode (&optional arg) "If `py-autopair-mode' should be on or off. Returns value of `py-autopair-mode' switched to. " (interactive) (and (py-autopair-check) (setq py-autopair-mode (autopair-mode (if autopair-mode 0 1))))) (defun py-autopair-mode-on () "Make sure, py-autopair-mode' is on. Returns value of `py-autopair-mode'. " (interactive) (and (py-autopair-check) (setq py-autopair-mode (autopair-mode 1)))) (defun py-autopair-mode-off () "Make sure, py-autopair-mode' is off. Returns value of `py-autopair-mode'. " (interactive) (setq py-autopair-mode (autopair-mode 0))) ;; py-switch-buffers-on-execute-p forms (defun toggle-py-switch-buffers-on-execute-p (&optional arg) "If `py-switch-buffers-on-execute-p' should be on or off. Returns value of `py-switch-buffers-on-execute-p' switched to. " (interactive) (let ((arg (or arg (if py-switch-buffers-on-execute-p -1 1)))) (if (< 0 arg) (setq py-switch-buffers-on-execute-p t) (setq py-switch-buffers-on-execute-p nil)) (when (or py-verbose-p (interactive-p)) (message "py-switch-buffers-on-execute-p: %s" py-switch-buffers-on-execute-p)) py-switch-buffers-on-execute-p)) (defun py-switch-buffers-on-execute-p-on (&optional arg) "Make sure, `py-py-switch-buffers-on-execute-p' is on. Returns value of `py-switch-buffers-on-execute-p'. " (interactive) (let ((arg (or arg 1))) (toggle-py-switch-buffers-on-execute-p arg)) (when (or py-verbose-p (interactive-p)) (message "py-switch-buffers-on-execute-p: %s" py-switch-buffers-on-execute-p)) py-switch-buffers-on-execute-p) (defun py-switch-buffers-on-execute-p-off () "Make sure, `py-switch-buffers-on-execute-p' is off. Returns value of `py-switch-buffers-on-execute-p'. " (interactive) (toggle-py-switch-buffers-on-execute-p -1) (when (or py-verbose-p (interactive-p)) (message "py-switch-buffers-on-execute-p: %s" py-switch-buffers-on-execute-p)) py-switch-buffers-on-execute-p) ;; py-split-windows-on-execute-p forms (defun toggle-py-split-windows-on-execute-p (&optional arg) "If `py-split-windows-on-execute-p' should be on or off. Returns value of `py-split-windows-on-execute-p' switched to. " (interactive) (let ((arg (or arg (if py-split-windows-on-execute-p -1 1)))) (if (< 0 arg) (setq py-split-windows-on-execute-p t) (setq py-split-windows-on-execute-p nil)) (when (or py-verbose-p (interactive-p)) (message "py-split-windows-on-execute-p: %s" py-split-windows-on-execute-p)) py-split-windows-on-execute-p)) (defun py-split-windows-on-execute-p-on (&optional arg) "Make sure, `py-py-split-windows-on-execute-p' is on. Returns value of `py-split-windows-on-execute-p'. " (interactive) (let ((arg (or arg 1))) (toggle-py-split-windows-on-execute-p arg)) (when (or py-verbose-p (interactive-p)) (message "py-split-windows-on-execute-p: %s" py-split-windows-on-execute-p)) py-split-windows-on-execute-p) (defun py-split-windows-on-execute-p-off () "Make sure, `py-split-windows-on-execute-p' is off. Returns value of `py-split-windows-on-execute-p'. " (interactive) (toggle-py-split-windows-on-execute-p -1) (when (or py-verbose-p (interactive-p)) (message "py-split-windows-on-execute-p: %s" py-split-windows-on-execute-p)) py-split-windows-on-execute-p) (defun py-toggle-sexp-function () "Opens customization " (interactive) (customize-variable 'py-sexp-function)) ;;; ;; Stolen from org-mode (defun py-util-clone-local-variables (from-buffer &optional regexp) "Clone local variables from FROM-BUFFER. Optional argument REGEXP selects variables to clone and defaults to \"^python-\"." (mapc (lambda (pair) (and (symbolp (car pair)) (string-match (or regexp "^python-") (symbol-name (car pair))) (set (make-local-variable (car pair)) (cdr pair)))) (buffer-local-variables from-buffer))) (defun py-send-shell-setup-code () "Send all setup code for shell. This function takes the list of setup code to send from the `py-setup-codes' list." (let ((process (get-buffer-process (current-buffer)))) (accept-process-output process 1) (dolist (code py-setup-codes) (when code (py-send-string (symbol-value code) process))))) (defun py-shell-get-process-name (py-dedicated-process-p) "Calculate the appropiate process name for inferior Python process. If DEDICATED is t and the variable `buffer-file-name' is non-nil returns a string with the form `python-shell-buffer-name'[variable `buffer-file-name'] else returns the value of `python-shell-buffer-name'. After calculating the process name adds the buffer name for the process in the `same-window-buffer-names' list." (let ((process-name (if (and py-dedicated-process-p buffer-file-name) (format "%s[%s]" python-shell-buffer-name buffer-file-name) (format "%s" python-shell-buffer-name)))) (add-to-list 'same-window-buffer-names (purecopy (format "*%s*" process-name))) process-name)) (defun py-shell-get-process (&optional argprompt py-dedicated-process-p shell switch py-buffer-name) "Get appropriate Python process for current buffer and return it." (interactive) (let ((erg (get-buffer-process (py-shell argprompt py-dedicated-process-p shell py-buffer-name t)))) (when (interactive-p) (message "%S" erg)) erg)) (defun py-shell-send-string (string &optional process msg filename) "Send STRING to inferior Python PROCESS. When `py-verbose-p' and MSG is non-nil messages the first line of STRING." (interactive "sPython command: ") (let* ((process (or process (get-buffer-process (py-shell)))) (lines (split-string string "\n")) (temp-file-name (concat (with-current-buffer (process-buffer process) (file-remote-p default-directory)) (py-normalize-directory py-temp-directory) "psss-temp.py")) (file-name (or filename (buffer-file-name) temp-file-name))) (if (> (length lines) 1) (let* () ;; ((temporary-file-directory ;; (if (file-remote-p default-directory) ;; (concat (file-remote-p default-directory) "/tmp") ;; temporary-file-directory)) ;; (temp-file-name (make-temp-file "py")) ;; (file-name (or (buffer-file-name) temp-file-name))) (with-temp-file temp-file-name (insert string) (delete-trailing-whitespace)) (py-send-file temp-file-name process temp-file-name)) (process-send-string process string) ;; (comint-send-string process string) (when (or (not (string-match "\n$" string)) (string-match "\n[ \t].*\n?$" string)) (process-send-string process "\n"))))) (defun py-send-string-no-output (string &optional process msg) "Send STRING to PROCESS and inhibit output. When MSG is non-nil messages the first line of STRING. Return the output." (let* ((output-buffer) wait (process (or process (progn (setq wait 0.2)(get-buffer-process (py-shell))))) ;; (comint-preoutput-filter-functions ;; (append comint-preoutput-filter-functions ;; '(ansi-color-filter-apply ;; (lambda (string) ;; (setq output-buffer (concat output-buffer string)) ;; "")))) ) (and wait (sit-for wait)) (py-shell-send-string string process msg) (accept-process-output process 1) (when output-buffer (replace-regexp-in-string (if (> (length py-shell-prompt-output-regexp) 0) (format "\n*%s$\\|^%s\\|\n$" py-shell-prompt-regexp (or py-shell-prompt-output-regexp "")) (format "\n*$\\|^%s\\|\n$" py-shell-prompt-regexp)) "" output-buffer)))) (defun py-send-string-return-output (string &optional process msg) "Send STRING to PROCESS and return output. When MSG is non-nil messages the first line of STRING. Return the output." (let* (output-buffer (process (or process (get-buffer-process (py-shell)))) (comint-preoutput-filter-functions (append comint-preoutput-filter-functions '(ansi-color-filter-apply (lambda (string) (setq output-buffer (concat output-buffer string)) ""))))) (py-shell-send-string string process msg) (accept-process-output process 1) (when output-buffer (setq output-buffer (replace-regexp-in-string (if (> (length py-shell-prompt-output-regexp) 0) (format "\n*%s$\\|^%s\\|\n$" python-shell-prompt-regexp (or py-shell-prompt-output-regexp "")) (format "\n*$\\|^%s\\|\n$" python-shell-prompt-regexp)) "" output-buffer))) output-buffer)) (defun py-shell-send-file (file-name &optional process temp-file-name) "Send FILE-NAME to inferior Python PROCESS. If TEMP-FILE-NAME is passed then that file is used for processing instead, while internally the shell will continue to use FILE-NAME." (interactive "fFile to send: ") (let* ((process (or process (get-buffer-process (py-shell)))) (temp-file-name (when temp-file-name (expand-file-name temp-file-name))) (file-name (or (expand-file-name file-name) temp-file-name)) py-python-command-args) (when (not file-name) (error "If FILE-NAME is nil then TEMP-FILE-NAME must be non-nil")) (py-shell-send-string (format (concat "__pyfile = open('''%s''');" "exec(compile(__pyfile.read(), '''%s''', 'exec'));" "__pyfile.close()") file-name file-name) process))) (defun py-switch-to-shell () "Switch to inferior Python process buffer." (interactive) (pop-to-buffer (py-shell) t)) ;;; (defun py-shell-completion--get-completions (input process completion-code) "Retrieve available completions for INPUT using PROCESS. Argument COMPLETION-CODE is the python code used to get completions on the current context." (with-current-buffer (process-buffer process) (let ((completions (py-send-string-no-output (format completion-code input) process))) (when (> (length completions) 2) (split-string completions "^'\\|^\"\\|;\\|'$\\|\"$" t))))) (defun py-shell--do-completion-at-point (process imports input orig) "Do completion at point for PROCESS." (with-syntax-table py-dotted-expression-syntax-table (when imports (py-send-string-no-output imports process)) (let* ((code python-shell-module-completion-string-code) (completions (py-shell-completion--get-completions input process code)) (completion (when completions (try-completion input completions)))) ;; (set-buffer oldbuf) (with-current-buffer oldbuf ;; (goto-char orig) (cond ((eq completion t) (if py-no-completion-calls-dabbrev-expand-p (or (ignore-errors (dabbrev-expand nil))(when py-indent-no-completion-p (tab-to-tab-stop))) (when py-indent-no-completion-p (tab-to-tab-stop))) nil) ((null completion) (if py-no-completion-calls-dabbrev-expand-p (or (dabbrev-expand nil)(when py-indent-no-completion-p (tab-to-tab-stop))(message "Can't find completion ")) (when py-indent-no-completion-p (tab-to-tab-stop))) nil) ((not (string= input completion)) (progn (delete-char (- (length input))) (insert completion) (move-marker pos (point)) ;; minibuffer.el expects a list, a bug IMO nil)) (t (with-output-to-temp-buffer py-python-completions (display-completion-list (all-completions input completions))) (move-marker pos (point)) nil)) (and (goto-char pos) nil))))) (defun python-shell-completion-complete-or-indent () "Complete or indent depending on the context. If content before pointer is all whitespace indent. If not try to complete." (interactive) (if (string-match "^[[:space:]]*$" (buffer-substring (comint-line-beginning-position) (point-marker))) (indent-for-tab-command) (comint-dynamic-complete))) (setq py-shell-template " \(defun NAME (&optional argprompt) \"Start an DOCNAME interpreter in another window. With optional \\\\[universal-argument] user is prompted for options to pass to the DOCNAME interpreter. \" (interactive \"P\") (let\* ((py-shell-name \"FULLNAME\")) (py-shell argprompt) (when (interactive-p) (switch-to-buffer (current-buffer)) (goto-char (point-max))))) ") (defsubst py-keep-region-active () "Keep the region active in XEmacs." ;; Ignore byte-compiler warnings you might see. Also note that ;; FSF's Emacs does it differently; its policy doesn't require us ;; to take explicit action. (and (boundp 'zmacs-region-stays) (setq zmacs-region-stays t))) ;;; Helper commands (defun py-guess-pdb-path () "If py-pdb-path isn't set, find location of pdb.py. " (interactive) (let ((ele (split-string (shell-command-to-string "whereis python"))) erg) (while (or (not erg)(string= "" erg)) (when (and (string-match "^/" (car ele)) (not (string-match "/man" (car ele)))) (setq erg (shell-command-to-string (concat "find " (car ele) " -type f -name \"pdb.py\"")))) (setq ele (cdr ele))) (if erg (when (and py-verbose-p (interactive-p)) (message "%s" erg)) (when (interactive-p) (message "%s" "pdb.py not found, please customize `pdb-path'"))) (concat "'" erg))) ;; Strip CHARS from STRING (defun string-strip (str &optional chars-before chars-after) "Return a copy of STR, CHARS removed. `CHARS-BEFORE' and `CHARS-AFTER' default is \"[ \t\r\n]*\", i.e. spaces, tabs, carriage returns, newlines and newpages. " (let ((s-c-b (or chars-before strip-chars-before)) (s-c-a (or chars-after strip-chars-after)) (erg str)) (setq erg (replace-regexp-in-string s-c-b "" erg)) (setq erg (replace-regexp-in-string s-c-a "" erg)) erg)) (defun py-warn-tmp-files-left () "Detect and warn about file of form \"py11046IoE\" in py-temp-directory. " (let ((erg1 (file-readable-p (concat py-temp-directory py-separator-char (car (directory-files py-temp-directory nil "py[[:alnum:]]+$")))))) (when (and py-verbose-p erg1) (message "py-warn-tmp-files-left: %s ?" (concat py-temp-directory py-separator-char (car (directory-files py-temp-directory nil "py[[:alnum:]]*$"))))))) (defun py-forward-line (&optional arg) "Goes to end of line after forward move. Travels right-margin comments. " (interactive "p") (let ((arg (or arg 1))) (forward-line arg) (end-of-line) (skip-chars-backward " \t") (py-beginning-of-comment) (skip-chars-backward " \t"))) (defun py-go-to-beginning-of-comment () "Go to the beginning of current line's comment, if any. From a programm use `py-beginning-of-comment' instead " (interactive) (let ((erg (py-beginning-of-comment))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)))) (defun py-clause-lookup-keyword (regexp arg &optional indent orig origline) "Returns a list, whose car is indentation, cdr position. " (let* ((orig (or orig (point))) (origline (or origline (py-count-lines))) (stop (if (< 0 arg)'(eobp)'(bobp))) (function (if (< 0 arg) 'py-end-of-statement 'py-beginning-of-statement)) (count 1) (maxindent (cond (indent indent) ((< (py-count-lines) origline) (current-indentation)) (t 0))) (complement-re (cond ((or (string-match "finally" regexp) (string-match "except" regexp)) py-try-re) ((string-match "elif" regexp) py-if-re) ((string-match "else" regexp) py-minor-block-re))) (first t) erg done strict) (while (and (not (eval stop)) (< 0 count) (or done (setq erg (funcall function)))) (setq done nil) (when (and first (< maxindent (current-indentation))) (setq maxindent (current-indentation)) (setq first nil)) (when (if strict (< (current-indentation) maxindent) (<= (current-indentation) maxindent)) (unless (looking-at py-block-or-clause-re) (setq maxindent (current-indentation))) ;; (message "%s %s" count indent) ;; nesting (cond ((and (looking-at "\\_[: \n\t]")(save-match-data (string-match regexp "finally"))) (setq indent (current-indentation)) (while (and (not (eval stop)) (funcall function) (setq done t) (not (and (eq indent (current-indentation)) (looking-at "try")))))) ;; ((and (looking-at "\\[: \n\t]")(save-match-data (string-match "else" regexp))) ;; (setq indent (current-indentation)) ;; (setq count (1+ count)) ;; (while ;; (and ;; (not (eval stop)) ;; (funcall function) ;; (setq done t) ;; (not (and (eq indent (current-indentation)) (looking-at "try\\|if")))))) ((and (looking-at "\\[: \n\t]")(save-match-data (string-match "else" regexp))) (setq indent (current-indentation)) (setq count (1+ count)) (while (and (not (eval stop)) (funcall function) (setq done t) (not (and (eq indent (current-indentation)) (looking-at "try\\|if")))))) ((and (looking-at "\\_[: \n\t]")(save-match-data (string-match "else" regexp))) (setq indent (current-indentation)) (setq count (1+ count)) (while (and (not (eval stop)) (funcall function) (setq done t) (not (and (eq indent (current-indentation)) (looking-at "try\\|if")))))) ((and (looking-at "\\_[ \n\t]")(save-match-data (string-match "elif" regexp))) (setq indent (current-indentation)) (while (and (not (eval stop)) (funcall function) (setq done t) ;; doesn't mean nesting yet (setq count (1- count)) (not (and (eq indent (current-indentation)) (looking-at "if")))))) ((and (looking-at complement-re)(<= (current-indentation) maxindent)) (setq count (1- count))) (t (cond ((and (string-match "except" regexp)(looking-at py-block-re)) (setq count (1- count))) ((and (string-match "else" regexp)(looking-at "except")) (current-indentation)) (t (setq strict t) )))))) (when erg (if (looking-at py-def-or-class-re) (setq erg (cons (+ (current-indentation) py-indent-offset) erg)) (setq erg (cons (current-indentation) erg)))) erg)) (defun py-leave-comment-or-string-backward (&optional pos) "If inside a comment or string, leave it backward. " (interactive) (let ((pps (if (featurep 'xemacs) (parse-partial-sexp (point-min) (point)) (syntax-ppss)))) (when (nth 8 pps) (goto-char (1- (nth 8 pps)))))) (defun py-beginning-of-list-pps (&optional iact last ppstart orig done) "Go to the beginning of a list. Optional ARG indicates a start-position for `parse-partial-sexp'. Return beginning position, nil if not inside." (interactive "p") (let* ((orig (or orig (point))) (ppstart (or ppstart (re-search-backward "^[a-zA-Z]" nil t 1) (point-min))) erg) (unless done (goto-char orig)) (setq done t) (if (setq erg (nth 1 (if (featurep 'xemacs) (parse-partial-sexp ppstart (point)) (syntax-ppss)))) (progn (setq last erg) (goto-char erg) (py-beginning-of-list-pps iact last ppstart orig done)) (when iact (message "%s" last)) last))) (when (featurep 'thing-at-point-utils) (defun py-beginning-of-list (&optional iact orig limit done last) "Go to beginning of any parentized, braced or bracketed expression in statement. " (interactive "p") (save-restriction (let ((orig (or orig (point))) (done done) (limit (or limit (re-search-backward "^[a-zA-Z]" nil t 1))) (last last)) (unless (or done (not limit)) (narrow-to-region limit (point-max))) (setq done t) (goto-char orig) (let* ((pt (car-safe (ar-in-parentized-p-atpt))) (br (car-safe (ar-in-braced-p-atpt))) (bk (car-safe (ar-in-bracketed-p-atpt))) (erg (car (sort (delq nil (list pt br bk)) '<)))) (if erg (progn (goto-char (1- erg)) (setq last erg) (py-beginning-of-list iact (1- erg) limit done last)) (when last (goto-char last)) (when iact (message "%s" last)) last))))) (defun py-end-of-list (&optional iact orig limit done last) "Go to end of any parentized, braced or bracketed expression in statement. " (interactive "p") (save-restriction (let ((orig (or orig (point))) (done done) (limit (or limit (re-search-backward "^[a-zA-Z]" nil t 1))) (last last)) (unless (or done (not limit)) (narrow-to-region limit (point-max))) (setq done t) (goto-char orig) (let* ((pt (car-safe (ar-in-parentized-p-atpt))) (br (car-safe (ar-in-braced-p-atpt))) (bk (car-safe (ar-in-bracketed-p-atpt))) (erg (car (sort (delq nil (list pt br bk)) '<)))) (if erg (progn (goto-char (1- erg)) (setq last erg) (py-end-of-list iact (1- erg) limit done last)) (when last (goto-char last) (match-paren) (setq last (1+ (point))) (when iact (message "%s" last)) last))))))) (defun empty-line-p () "Returns t if cursor is at an line with nothing but whitespace-characters, nil otherwise." (interactive "p") (save-excursion (progn (beginning-of-line) (looking-at "\\s-*$")))) (defun py-count-lines (&optional start end) "Count lines in accessible part until current line. See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7115" (interactive) (save-excursion (let ((count 0) (orig (point))) (goto-char (point-min)) (while (and (< (point) orig)(not (eobp)) (skip-chars-forward "^\n" orig)) (setq count (1+ count)) (unless (or (not (< (point) orig)) (eobp)) (forward-char 1) (setq count (+ count (abs (skip-chars-forward "\n" orig)))))) (when (bolp) (setq count (1+ count))) (when (interactive-p) (message "%s" count)) count))) (eval-when-compile (defconst python-rx-constituents (list `(block-start . ,(rx symbol-start (or "def" "class" "if" "elif" "else" "try" "except" "finally" "for" "while" "with") symbol-end)) `(decorator . ,(rx line-start (* space) ?@ (any letter ?_) (* (any word ?_)))) `(defun . ,(rx symbol-start (or "def" "class") symbol-end)) `(symbol-name . ,(rx (any letter ?_) (* (any word ?_)))) `(open-paren . ,(rx (or "{" "[" "("))) `(close-paren . ,(rx (or "}" "]" ")"))) `(simple-operator . ,(rx (any ?+ ?- ?/ ?& ?^ ?~ ?| ?* ?< ?> ?= ?%))) `(not-simple-operator . ,(rx (not (any ?+ ?- ?/ ?& ?^ ?~ ?| ?* ?< ?> ?= ?%)))) `(operator . ,(rx (or "+" "-" "/" "&" "^" "~" "|" "*" "<" ">" "=" "%" "**" "//" "<<" ">>" "<=" "!=" "==" ">=" "is" "not"))) `(assignment-operator . ,(rx (or "=" "+=" "-=" "*=" "/=" "//=" "%=" "**=" ">>=" "<<=" "&=" "^=" "|=")))) "Additional Python specific sexps for `python-rx'")) (defmacro python-rx (&rest regexps) "Python mode specialized rx macro which supports common python named REGEXPS." (let ((rx-constituents (append python-rx-constituents rx-constituents))) (cond ((null regexps) (error "No regexp")) ((cdr regexps) (rx-to-string `(and ,@regexps) t)) (t (rx-to-string (car regexps) t))))) ;;; ;; GNU's syntax-ppss-context (unless (functionp 'syntax-ppss-context) (defsubst syntax-ppss-context (ppss) (cond ((nth 3 ppss) 'string) ((nth 4 ppss) 'comment) (t nil)))) (defun py-history-input-filter (str) "`comint-input-filter' function for inferior Python. Don't save anything for STR matching `py-history-filter-regexp'." (not (string-match py-history-filter-regexp str))) ;; Fixme: Loses with quoted whitespace. (defun py-args-to-list (string) (let ((where (string-match "[ \t]" string))) (cond ((null where) (list string)) ((not (= where 0)) (cons (substring string 0 where) (py-args-to-list (substring string (+ 1 where))))) (t (let ((pos (string-match "[^ \t]" string))) (if pos (py-args-to-list (substring string pos)))))))) ;; Using this stops us getting lines in the buffer like ;; >>> ... ... >>> ;; Also look for (and delete) an `_emacs_ok' string and call ;; `python-preoutput-continuation' if we get it. (defun py-preoutput-filter (s) "`comint-preoutput-filter-functions' function: ignore prompts not at bol." (when py-preoutput-leftover (setq s (concat py-preoutput-leftover s)) (setq py-preoutput-leftover nil)) (let ((start 0) (res "")) ;; First process whole lines. (while (string-match "\n" s start) (let ((line (substring s start (setq start (match-end 0))))) ;; Skip prompt if needed. (when (and py-preoutput-skip-next-prompt (string-match comint-prompt-regexp line)) (setq py-preoutput-skip-next-prompt nil) (setq line (substring line (match-end 0)))) ;; Recognize special _emacs_out lines. (if (and (string-match "\\`_emacs_out \\(.*\\)\n\\'" line) (local-variable-p 'py-preoutput-result)) (progn (setq py-preoutput-result (match-string 1 line)) (set (make-local-variable 'py-preoutput-skip-next-prompt) t)) (setq res (concat res line))))) ;; Then process the remaining partial line. (unless (zerop start) (setq s (substring s start))) (cond ((and (string-match comint-prompt-regexp s) ;; Drop this prompt if it follows an _emacs_out... (or py-preoutput-skip-next-prompt ;; ... or if it's not gonna be inserted at BOL. ;; Maybe we could be more selective here. (if (zerop (length res)) (not (bolp)) (string-match ".\\'" res)))) ;; The need for this seems to be system-dependent: ;; What is this all about, exactly? --Stef ;; (if (and (eq ?. (aref s 0))) ;; (accept-process-output (get-buffer-process (current-buffer)) 1)) (setq py-preoutput-skip-next-prompt nil) res) ((let ((end (min (length "_emacs_out ") (length s)))) (eq t (compare-strings s nil end "_emacs_out " nil end))) ;; The leftover string is a prefix of _emacs_out so we don't know ;; yet whether it's an _emacs_out or something else: wait until we ;; get more output so we can resolve this ambiguity. (set (make-local-variable 'py-preoutput-leftover) s) res) (t (concat res s))))) (defun py-send-command (command) "Like `py-send-string' but resets `compilation-shell-minor-mode'." (when (py-check-comint-prompt) (with-current-buffer (process-buffer (py-proc)) (goto-char (point-max)) (compilation-forget-errors) (py-send-string command) (setq compilation-last-buffer (current-buffer))))) (defun python-send-string (string) "Evaluate STRING in inferior Python process." (interactive "sPython command: ") (comint-send-string (py-proc) string) (unless (string-match "\n\\'" string) ;; Make sure the text is properly LF-terminated. (comint-send-string (py-proc) "\n")) (when (string-match "\n[ \t].*\n?\\'" string) ;; If the string contains a final indented line, add a second newline so ;; as to make sure we terminate the multiline instruction. (comint-send-string (py-proc) "\n"))) (defun py-switch-to-python (eob-p) "Switch to the Python process buffer, maybe starting new process. With prefix arg, position cursor at end of buffer." (interactive "P") (pop-to-buffer (process-buffer (py-proc)) t) ;Runs python if needed. (when eob-p (push-mark) (goto-char (point-max)))) (defun py-proc (&optional py-dedicated-process-p) "Return the current Python process. Start a new process if necessary. " (interactive) (let (py-split-windows-on-execute-p (erg (cond ((and (not py-dedicated-process-p) (comint-check-proc (current-buffer))) (get-buffer-process (buffer-name (current-buffer)))) ((not py-dedicated-process-p) (get-buffer-process (py-shell nil nil nil nil t))) ((py-shell nil py-dedicated-process-p nil nil t))))) (when (interactive-p) (message "%S" erg)) erg)) (defun py-check-comint-prompt (&optional proc) "Return non-nil if and only if there's a normal prompt in the inferior buffer. If there isn't, it's probably not appropriate to send input to return Eldoc information etc. If PROC is non-nil, check the buffer for that process." (with-current-buffer (process-buffer (or proc (get-buffer-process (py-shell)))) (save-excursion (save-match-data (re-search-backward " *\\=" nil t))))) (defun py-outline-level () "`outline-level' function for Python mode. The level is the number of `py-indent-offset' steps of indentation of current line." (let ((erg (1+ (/ (current-indentation) py-indent-offset)))) (when (interactive-p) (message "%s" erg)) erg)) ;; FFAP support (defalias 'py-module-path 'py-ffap-module-path) (defun py-ffap-module-path (module) "Function for `ffap-alist' to return path for MODULE." (let ((process (or (and (eq major-mode 'inferior-python-mode) (get-buffer-process (current-buffer))) (py-shell-get-process)))) (if (not process) nil (let ((module-file (py-send-string-no-output (format py-ffap-string-code module) process))) (when module-file (substring-no-properties module-file 1 -1)))))) (add-hook 'python-mode-hook 'py-set-ffap-form) ;;; (defconst py-space-backslash-table (let ((table (copy-syntax-table python-mode-syntax-table))) (modify-syntax-entry ?\\ " " table) table) "`python-mode-syntax-table' with backslash given whitespace syntax.") ;; have to bind py-file-queue before installing the kill-emacs-hook (define-abbrev-table 'python-mode-abbrev-table ()) (define-abbrev-table 'inferior-python-mode-abbrev-table ()) ;; pdbtrack constants (defconst py-pdbtrack-stack-entry-regexp (concat ".*\\("py-shell-input-prompt-1-regexp">\\|>\\) *\\(.*\\)(\\([0-9]+\\))\\([?a-zA-Z0-9_<>()]+\\)()") "Regular expression pdbtrack uses to find a stack trace entry.") ;; ipython.el ;; Recognize the ipython pdb, whose prompt is 'ipdb>' or 'ipydb>' ;;instead of '(Pdb)' (setq py-pdbtrack-input-prompt "^[(<]*[Ii]?[Pp]y?db[>)]+ ") (setq py-pydbtrack-input-prompt "^[(]*ipydb[>)]+ ") ;; pydb-328837.diff ;; (defconst py-pydbtrack-stack-entry-regexp ;; "^(\\([-a-zA-Z0-9_/.]*\\):\\([0-9]+\\)):[ \t]?\\(.*\n\\)" ;; "Regular expression pdbtrack uses to find a stack trace entry for pydb. ;; ;; The debugger outputs program-location lines that look like this: ;; (/usr/bin/zonetab2pot.py:15): makePOT") (defconst py-pdbtrack-marker-regexp-file-group 2 "Group position in gud-pydb-marker-regexp that matches the file name.") (defconst py-pdbtrack-marker-regexp-line-group 3 "Group position in gud-pydb-marker-regexp that matches the line number.") (defconst py-pdbtrack-marker-regexp-funcname-group 4 "Group position in gud-pydb-marker-regexp that matches the function name.") (defconst py-pdbtrack-track-range 10000 "Max number of characters from end of buffer to search for stack entry.") ;; Bindings (defconst python-compilation-regexp-alist ;; FIXME: maybe these should move to compilation-error-regexp-alist-alist. ;; The first already is (for CAML), but the second isn't. Anyhow, ;; these are specific to the inferior buffer. -- fx `((,(rx line-start (1+ (any " \t")) "File \"" (group (1+ (not (any "\"<")))) ; avoid `' &c "\", line " (group (1+ digit))) 1 2) (,(rx " in file " (group (1+ not-newline)) " on line " (group (1+ digit))) 1 2) ;; pdb stack trace (,(rx line-start "> " (group (1+ (not (any "(\"<")))) "(" (group (1+ digit)) ")" (1+ (not (any "("))) "()") 1 2)) "`compilation-error-regexp-alist' for inferior Python.") (defconst py-font-lock-syntactic-keywords ;; Make outer chars of matching triple-quote sequences into generic ;; string delimiters. Fixme: Is there a better way? ;; First avoid a sequence preceded by an odd number of backslashes. `((,(concat "\\(?:^\\|[^\\]\\(?:\\\\.\\)*\\)" ;Prefix. "\\(?1:\"\\)\\(?2:\"\\)\\(?3:\"\\)\\(?4:\"\\)\\(?5:\"\\)\\(?6:\"\\)\\|\\(?1:\"\\)\\(?2:\"\\)\\(?3:\"\\)\\|\\(?1:'\\)\\(?2:'\\)\\(?3:'\\)\\(?4:'\\)\\(?5:'\\)\\(?6:'\\)\\|\\(?1:'\\)\\(?2:'\\)\\(?3:'\\)\\(?4:'\\)\\(?5:'\\)\\(?6:'\\)\\|\\(?1:'\\)\\(?2:'\\)\\(?3:'\\)") (1 (python-quote-syntax 1) t t) (2 (python-quote-syntax 2) t t) (3 (python-quote-syntax 3) t t) (6 (python-quote-syntax 1) t t)))) (defun python-quote-syntax (n) "Put `syntax-table' property correctly on triple quote. Used for syntactic keywords. N is the match number (1, 2 or 3)." ;; Given a triple quote, we have to check the context to know ;; whether this is an opening or closing triple or whether it's ;; quoted anyhow, and should be ignored. (For that we need to do ;; the same job as `syntax-ppss' to be correct and it seems to be OK ;; to use it here despite initial worries.) We also have to sort ;; out a possible prefix -- well, we don't _have_ to, but I think it ;; should be treated as part of the string. ;; Test cases: ;; ur"""ar""" x='"' # """ ;; x = ''' """ ' a ;; ''' ;; x '"""' x """ \"""" x (save-excursion (goto-char (match-beginning 0)) (cond ;; Consider property for the last char if in a fenced string. ((= n 3) (let* ((font-lock-syntactic-keywords nil) (syntax (syntax-ppss))) (when (eq t (nth 3 syntax)) ; after unclosed fence (goto-char (nth 8 syntax)) ; fence position ;; (skip-chars-forward "uUrR") ; skip any prefix ;; Is it a matching sequence? (if (eq (char-after) (char-after (match-beginning 2))) (eval-when-compile (string-to-syntax "|")))))) ;; Consider property for initial char, accounting for prefixes. ((or (and (= n 2) ; leading quote (not prefix) (not (match-end 1))) ; prefix is null (and (= n 1) ; prefix (match-end 1))) ; non-empty (let ((font-lock-syntactic-keywords nil)) (unless (eq 'string (syntax-ppss-context (syntax-ppss))) (eval-when-compile (string-to-syntax "|"))))) ;; Otherwise (we're in a non-matching string) the property is ;; nil, which is OK. ))) (defun py-point (position) "Returns the value of point at certain commonly referenced POSITIONs. POSITION can be one of the following symbols: bol -- beginning of line eol -- end of line bod -- beginning of def or class eod -- end of def or class bob -- beginning of buffer eob -- end of buffer boi -- back to indentation bos -- beginning of statement This function does not modify point or mark." (let (erg) (save-excursion (setq erg (progn (cond ((eq position 'bol) (beginning-of-line)) ((eq position 'eol) (end-of-line)) ((eq position 'bod) (py-beginning-of-def-or-class)) ((eq position 'eod) (py-end-of-def-or-class)) ;; Kind of funny, I know, but useful for py-up-exception. ((eq position 'bob) (goto-char (point-min))) ((eq position 'eob) (goto-char (point-max))) ((eq position 'boi) (back-to-indentation)) ((eq position 'bos) (py-beginning-of-statement)) (t (error "Unknown buffer position requested: %s" position))) (point)))) erg)) ;;; Keymap and syntax ;; Font-lock and syntax (setq py-font-lock-keywords ;; Keywords `(,(rx symbol-start (or "and" "del" "from" "not" "while" "as" "elif" "global" "or" "with" "assert" "else" "if" "pass" "yield" "break" "import" "print" "exec" "in" "continue" "finally" "is" "except" "raise" "return" "def" "for" "lambda" "try") symbol-end) ;; functions (,(rx symbol-start "def" (1+ space) (group (1+ (or word ?_)))) (1 font-lock-function-name-face)) ;; classes (,(rx symbol-start (group "class") (1+ space) (group (1+ (or word ?_)))) (1 font-lock-keyword-face) (2 py-class-name-face)) ;; (,(rx symbol-start ;; (or "raise" "except") ;; symbol-end) . py-exception-name-face) ;; already pseudo-keyword ;; (,(rx symbol-start ;; (or "None" "True" "False" "__debug__" "NotImplemented") ;; symbol-end) . font-lock-constant-face) (,(rx symbol-start (or "cls" "self" "cls" "Ellipsis" "True" "False" "None" "__debug__" "NotImplemented") symbol-end) . py-pseudo-keyword-face) ;; Decorators. (,(rx line-start (* (any " \t")) (group "@" (1+ (or word ?_)) (0+ "." (1+ (or word ?_))))) (1 py-decorators-face)) ;; Builtin Exceptions (,(rx word-start (or "ArithmeticError" "AssertionError" "AttributeError" "BaseException" "BufferError" "BytesWarning" "DeprecationWarning" "EOFError" "EnvironmentError" "Exception" "FloatingPointError" "FutureWarning" "GeneratorExit" "IOError" "ImportError" "ImportWarning" "IndentationError" "IndexError" "KeyError" "KeyboardInterrupt" "LookupError" "MemoryError" "NameError" "NoResultFound" "NotImplementedError" "OSError" "OverflowError" "PendingDeprecationWarning" "ReferenceError" "RuntimeError" "RuntimeWarning" "StandardError" "StopIteration" "SyntaxError" "SyntaxWarning" "SystemError" "SystemExit" "TabError" "TypeError" "UnboundLocalError" "UnicodeDecodeError" "UnicodeEncodeError" "UnicodeError" "UnicodeTranslateError" "UnicodeWarning" "UserWarning" "ValueError" "Warning" "ZeroDivisionError") word-end) . py-exception-name-face) ;; (,(rx (or space line-start) symbol-start "range ;; Builtins (,(rx (or space line-start) symbol-start (or "_" "__doc__" "__import__" "__name__" "__package__" "abs" "all" "any" "apply" "basestring" "bin" "bool" "buffer" "bytearray" "bytes" "callable" "chr" "classmethod" "cmp" "coerce" "compile" "complex" "delattr" "dict" "dir" "divmod" "enumerate" "eval" "execfile" "file" "filter" "float" "format" "frozenset" "getattr" "globals" "hasattr" "hash" "help" "hex" "id" "input" "int" "intern" "isinstance" "issubclass" "iter" "len" "list" "locals" "long" "map" "max" "min" "next" "object" "oct" "open" "ord" "pow" "print" "property" "range" "raw_input" "reduce" "reload" "repr" "reversed" "round" "set" "setattr" "slice" "sorted" "staticmethod" "str" "sum" "super" "tuple" "type" "unichr" "unicode" "vars" "xrange" "zip") symbol-end) . py-builtins-face) ;; (,(python-rx line-start (* (any " \t"))(group (** 0 2 "_") word (0+ (or word ?_))(** 0 2 "_"))(* (any " \t")) assignment-operator) ;; 1 py-variable-name-face) ;; asignations ;; support for a = b = c = 5 ("\\([._[:word:]]+\\)\\(?:\\[[^]]+]\\)?[[:space:]]*\\(?:\\(?:\\*\\*\\|//\\|<<\\|>>\\|[%&*+/|^-]\\)?=\\)" (1 py-variable-name-face nil nil)) ;; a, b, c = (1, 2, 3) (,(lambda (limit) (let ((re (python-rx (group (+ (any word ?. ?_))) (* space) (* ?, (* space) (+ (any word ?. ?_)) (* space)) ?, (* space) (+ (any word ?. ?_)) (* space) assignment-operator)) (res nil)) (while (and (setq res (re-search-forward re limit t)) (goto-char (match-end 1)) (nth 1 (syntax-ppss)) ;; (python-syntax-context 'paren) )) res)) (1 py-variable-name-face nil nil)) ;; Numbers (,(rx symbol-start (or (1+ digit) (1+ hex-digit)) symbol-end) . py-number-face))) (defconst py-font-lock-syntactic-keywords '(("[^\\]\\\\\\(?:\\\\\\\\\\)*\\(\\s\"\\)\\1\\(\\1\\)" (2 (7))) ("\\([RUBrub]?\\)[Rr]?\\(\\s\"\\)\\2\\(\\2\\)" (1 (py-quote-syntax 1)) (2 (py-quote-syntax 2)) (3 (py-quote-syntax 3))))) (defun py-quote-syntax (n) "Put `syntax-table' property correctly on triple quote. Used for syntactic keywords. N is the match number (1, 2 or 3)." ;; Given a triple quote, we have to check the context to know ;; whether this is an opening or closing triple or whether it's ;; quoted anyhow, and should be ignored. (For that we need to do ;; the same job as `syntax-ppss' to be correct and it seems to be OK ;; to use it here despite initial worries.) We also have to sort ;; out a possible prefix -- well, we don't _have_ to, but I think it ;; should be treated as part of the string. ;; Test cases: ;; ur"""ar""" x='"' # """ ;; x = ''' """ ' a ;; ''' ;; x '"""' x """ \"""" x (save-excursion (goto-char (match-beginning 0)) (cond ;; Consider property for the last char if in a fenced string. ((= n 3) (let* ((font-lock-syntactic-keywords nil) (syntax (if (featurep 'xemacs) (parse-partial-sexp (point-min) (point)) (syntax-ppss)))) (when (eq t (nth 3 syntax)) ; after unclosed fence (goto-char (nth 8 syntax)) ; fence position (skip-chars-forward "uUrRbB") ; skip any prefix ;; Is it a matching sequence? (if (eq (char-after) (char-after (match-beginning 2))) (eval-when-compile (string-to-syntax "|")))))) ;; Consider property for initial char, accounting for prefixes. ((or (and (= n 2) ; leading quote (not prefix) (= (match-beginning 1) (match-end 1))) ; prefix is null (and (= n 1) ; prefix (/= (match-beginning 1) (match-end 1)))) ; non-empty (let ((font-lock-syntactic-keywords nil)) (unless (eq 'string (syntax-ppss-context (if (featurep 'xemacs) (parse-partial-sexp (point-min) (point)) (syntax-ppss)))) ;; (eval-when-compile (string-to-syntax "|")) (eval-when-compile (string-to-syntax "|"))))) ;; Otherwise (we're in a non-matching string) the property is ;; nil, which is OK. ))) ;; An auxiliary syntax table which places underscore and dot in the ;; symbol class for simplicity ;; credits to python.el (defun py-beg-of-defun-function () (set (make-local-variable 'beginning-of-defun-function) 'py-beginning-of-def-or-class)) (defun py-end-of-defun-function () (set (make-local-variable 'end-of-defun-function) 'py-end-of-def-or-class)) (make-obsolete-variable 'jpython-mode-hook 'jython-mode-hook nil) ;; In previous version of python-mode.el, the hook was incorrectly ;; called py-mode-hook, and was not defvar'd. Deprecate its use. (and (fboundp 'make-obsolete-variable) (make-obsolete-variable 'py-mode-hook 'python-mode-hook nil)) (defun py-docstring-p (&optional beginning-of-string-position) "Check to see if there is a docstring at POS." (let* (pps (pos (or beginning-of-string-position (and (nth 3 (setq pps (syntax-ppss))) (nth 8 pps))))) (save-restriction (widen) (save-excursion (and pos (goto-char pos)) (if (looking-at-p "'''\\|\"\"\"") (progn (py-beginning-of-statement) (or (bobp) (py-beginning-of-def-or-class-p))) nil))))) (defun py-font-lock-syntactic-face-function (state) (if (nth 3 state) (if (py-docstring-p (nth 8 state)) font-lock-doc-face font-lock-string-face) font-lock-comment-face)) (defun py-insert-default-shebang () "Insert in buffer shebang of installed default Python. " (interactive "*") (let* ((erg (if py-edit-only-p py-shell-name (executable-find py-shell-name))) (sheb (concat "#! " erg))) (insert sheb))) (defun py-electric-comment (arg) "Insert a comment. If starting a comment, indent accordingly. If a numeric argument ARG is provided, that many \"#\" are inserted non-electrically. With \\[universal-argument] \"#\" electric behavior is inhibited inside a string or comment." (interactive "*P") (if (and py-indent-comments py-electric-comment-p) (if (ignore-errors (eq 4 (car-safe arg))) (insert "#") (when (and (eq last-command 'py-electric-comment) (looking-back " ")) (forward-char -1)) (if (interactive-p) (self-insert-command (prefix-numeric-value arg)) (insert "#")) (let ((orig (copy-marker (point))) (indent (py-compute-indentation))) (unless ;; (or (eq (current-indentation) indent) ;; (looking-back "#[ \t]*")) (goto-char orig) (beginning-of-line) (delete-horizontal-space) (indent-to indent) (goto-char orig)) (when py-electric-comment-add-space-p (unless (looking-at "[ \t]") (insert " ")))) (setq last-command this-command)) (self-insert-command (prefix-numeric-value arg)))) (defun py-electric-colon (arg) "Insert a colon and indent accordingly. If a numeric argument ARG is provided, that many colons are inserted non-electrically. Electric behavior is inhibited inside a string or comment or by universal prefix C-u. Switched by `py-electric-colon-active-p', default is nil See also `py-electric-colon-greedy-p' " (interactive "*P") (cond ((not py-electric-colon-active-p) (self-insert-command (prefix-numeric-value arg))) ((and py-electric-colon-bobl-only (save-excursion (py-beginning-of-statement) (not (py-beginning-of-block-p)))) (self-insert-command (prefix-numeric-value arg))) ((eq 4 (prefix-numeric-value arg)) (self-insert-command 1)) (t (insert ":") (unless (py-in-string-or-comment-p) (let ((orig (copy-marker (point))) (indent (py-compute-indentation))) (unless (or (eq (current-indentation) indent) (and (not py-electric-colon-greedy-p) (eq (current-indentation)(save-excursion (beginning-of-line) (py-beginning-of-block)(current-indentation)))) (and (py-top-level-form-p)(< (current-indentation) indent))) (beginning-of-line) (delete-horizontal-space) (indent-to indent)) (goto-char orig)) (when py-electric-colon-newline-and-indent-p (py-newline-and-indent)))))) (defun py-top-level-form-p () "Return non-nil, if line starts with a top level definition. Used by `py-electric-colon', which will not indent than. " (let (erg) (save-excursion (beginning-of-line) (skip-chars-forward " \t") (setq erg (looking-at py-extended-block-or-clause-re) ;; (or (looking-at py-class-re) ;; (looking-at py-def-re)) )) erg)) ;; Electric deletion (defun py-empty-out-list-backward () "Deletes all elements from list before point. " (interactive "*") (and (member (char-before) (list ?\) ?\] ?\})) (let ((orig (point)) (thischar (char-before)) pps cn) (forward-char -1) (setq pps (syntax-ppss)) (if (and (not (nth 8 pps)) (nth 1 pps)) (progn (goto-char (nth 1 pps)) (forward-char 1)) (cond ((or (eq thischar 41)(eq thischar ?\))) (setq cn "(")) ((or (eq thischar 125) (eq thischar ?\})) (setq cn "{")) ((or (eq thischar 93)(eq thischar ?\])) (setq cn "["))) (skip-chars-backward (concat "^" cn))) (delete-region (point) orig) (insert-char thischar 1) (forward-char -1)))) (defun py-electric-backspace (&optional arg) "Delete preceding character or level of indentation. With ARG do that ARG times. Returns column reached. " (interactive "*p") (let ((arg (or arg 1)) erg) (dotimes (i arg) (cond ((looking-back "^[ \t]+") (let* ((remains (% (current-column) py-indent-offset))) (if (< 0 remains) (delete-char (- remains)) (indent-line-to (- (current-indentation) py-indent-offset))))) ((and py-electric-kill-backward-p (member (char-before) (list ?\) ?\] ?\}))) (py-empty-out-list-backward)) (t (delete-char (- 1))))) (setq erg (current-column)) (when (and (interactive-p) py-verbose-p) (message "%s" erg)) erg)) (defun py-electric-delete (&optional arg) "Delete following character or levels of whitespace. With ARG do that ARG times. " (interactive "*p") (let ((arg (or arg 1))) (dotimes (i arg) (if (and (or (bolp)(looking-back "^[ \t]+")) (looking-at "[ \t]+")) (let* ((remains (% (+ (current-column) (- (match-end 0)(match-beginning 0))) py-indent-offset))) (if (< 0 remains) (delete-char remains) (delete-char py-indent-offset))) (delete-char 1))))) ;; (defun py-electric-delete (arg) ;; "Delete preceding or following character or levels of whitespace. ;; ;; The behavior of this function depends on the variable ;; `delete-key-deletes-forward'. If this variable is nil (or does not ;; exist, as in older Emacsen and non-XEmacs versions), then this ;; function behaves identically to \\[c-electric-backspace]. ;; ;; If `delete-key-deletes-forward' is non-nil and is supported in your ;; Emacs, then deletion occurs in the forward direction, by calling the ;; function in `py-delete-function'. ;; ;; \\[universal-argument] (programmatically, argument ARG) specifies the ;; number of characters to delete (default is 1)." ;; (interactive "*p") ;; (if (or (and (fboundp 'delete-forward-p) ;XEmacs 21 ;; (delete-forward-p)) ;; (and (boundp 'delete-key-deletes-forward) ;XEmacs 20 ;; delete-key-deletes-forward)) ;; (funcall py-delete-function arg) ;; (py-electric-backspace arg))) ;; required for pending-del and delsel modes (put 'py-electric-colon 'delete-selection t) ;delsel (put 'py-electric-colon 'pending-delete t) ;pending-del (put 'py-electric-backspace 'delete-selection 'supersede) ;delsel (put 'py-electric-backspace 'pending-delete 'supersede) ;pending-del (put 'py-electric-delete 'delete-selection 'supersede) ;delsel (put 'py-electric-delete 'pending-delete 'supersede) ;pending-del (defun py-indent-line-outmost (&optional arg) "Indent the current line to the outmost reasonable indent. With optional \\[universal-argument] an indent with length `py-indent-offset' is inserted unconditionally " (interactive "*P") (let* ((need (py-compute-indentation (point))) (cui (current-indentation)) (cuc (current-column))) (cond ((eq 4 (prefix-numeric-value arg)) (if indent-tabs-mode (insert (make-string 1 9)) (insert (make-string py-indent-offset 32)))) (t (if (and (eq need cui)(not (eq cuc cui))) (back-to-indentation) (beginning-of-line) (delete-horizontal-space) (indent-to need)))))) (defun py-indent-fix-region-intern (beg end) "Used when `py-tab-indents-region-p' is non-nil. " (let (indent) (save-excursion (save-restriction (beginning-of-line) (narrow-to-region beg end) (forward-line 1) (narrow-to-region (line-beginning-position) end) (beginning-of-line) (delete-region (point) (progn (skip-chars-forward " \t\r\n\f") (point))) (indent-to (py-compute-indentation)) (while (< (line-end-position) end) (forward-line 1) (beginning-of-line) (delete-region (point) (progn (skip-chars-forward " \t\r\n\f") (point))) (indent-to (py-compute-indentation)))))) ;; (exchange-point-and-mark) ) (defun py--indent-line-intern (need cui py-indent-offset col &optional beg end region) (if py-tab-indent (progn (and py-tab-indents-region-p region (py-indent-fix-region-intern beg end)) (cond ((eq need cui) (if (or (eq this-command last-command) (eq this-command 'py-indent-line)) (if (and py-tab-shifts-region-p region) (while (and (goto-char beg) (< 0 (current-indentation))) (py-shift-region-left 1 beg end)) (beginning-of-line) (delete-horizontal-space) (if (<= (line-beginning-position) (+ (point) (- col cui))) (forward-char (- col cui)) (beginning-of-line))))) ((< cui need) (if (and py-tab-shifts-region-p region) (progn (py-shift-region-right 1)) (progn (beginning-of-line) (delete-horizontal-space) (indent-to (+ (* (/ cui py-indent-offset) py-indent-offset) py-indent-offset)) (forward-char (- col cui))))) ((< need cui) (if (and py-tab-shifts-region-p region) (progn (when (eq (point) (region-end)) (exchange-point-and-mark)) (while (< 0 (current-indentation)) (py-shift-region-left 1))) (beginning-of-line) (delete-horizontal-space))) (t (if (and py-tab-shifts-region-p region) (progn ;; (when (eq (point) (region-end)) ;; (exchange-point-and-mark)) (while (< (current-indentation) need) (py-shift-region-right 1))) (beginning-of-line) (delete-horizontal-space) (indent-to need) (back-to-indentation) (if (<= (line-beginning-position) (+ (point) (- col cui))) (forward-char (- col cui)) (beginning-of-line)))))) (insert-tab))) (defun py--indent-line-base () (unless (and (not (eq this-command last-command)) (eq cui need)) (cond ((eq 4 (prefix-numeric-value arg)) (if (and (eq cui (current-indentation)) (<= need cui)) (if indent-tabs-mode (insert "\t")(insert (make-string py-indent-offset 32))) (beginning-of-line) (delete-horizontal-space) (indent-to (+ need py-indent-offset)))) ((not (eq 1 (prefix-numeric-value arg))) (py-smart-indentation-off) (py--indent-line-intern need cui this-indent-offset col beg end region)) (t (py--indent-line-intern need cui this-indent-offset col beg end region))))) (defun py-indent-line (&optional arg) "Indent the current line according to Python rules. When called interactivly with \\[universal-argument], ignore dedenting rules for block closing statements \(e.g. return, raise, break, continue, pass) An optional \\[universal-argument] followed by a numeric argument neither 1 nor 4 will switch off `py-smart-indentation' for this execution. This permits to correct allowed but unwanted indents. Similar to `toggle-py-smart-indentation' resp. `py-smart-indentation-off' followed by TAB. This function is normally used by `indent-line-function' resp. \\[indent-for-tab-command]. Returns current indentation When bound to TAB, C-q TAB inserts a TAB. When `py-tab-shifts-region-p' is `t', not just the current line, but the region is shiftet that way. If `py-tab-indents-region-p' is `t' and first TAB doesn't shift --as indent is at outmost reasonable--, indent-region is called. C-q TAB inserts a literal TAB-character. " (interactive "P") (let ((orig (copy-marker (point))) (cui (current-indentation)) need) (if (interactive-p) ;; TAB-leaves-point-in-the-wrong-lp-1178453-test (let ((region (use-region-p)) col beg end done) (unless (eq this-command last-command) (setq py-already-guessed-indent-offset nil)) (and region (setq beg (region-beginning)) (setq end (region-end)) (save-excursion (goto-char beg) (setq cui (current-indentation)) (setq col (current-column)))) (let* ((col (or col (current-column))) (this-indent-offset (cond ((and py-smart-indentation (not (eq this-command last-command))) (py-guess-indent-offset)) ((and py-smart-indentation (eq this-command last-command) py-already-guessed-indent-offset) py-already-guessed-indent-offset) (t (default-value 'py-indent-offset))))) (setq need (if (and (eq this-command last-command) py-already-guessed-indent-offset) (if region (save-excursion ;; if previous command was an indent ;; already, position reached might ;; produce false guesses (goto-char beg) (py-compute-indentation beg nil nil nil nil nil py-already-guessed-indent-offset)) (py-compute-indentation nil nil nil nil nil nil py-already-guessed-indent-offset)) (if region (save-excursion (goto-char beg) (py-compute-indentation nil nil nil nil nil nil this-indent-offset)) (py-compute-indentation nil nil nil nil nil nil this-indent-offset)))) (py--indent-line-base) (if region (and (or py-tab-shifts-region-p py-tab-indents-region-p) (not (eq (point) orig)) (exchange-point-and-mark)) (and (< (current-column) (current-indentation))(back-to-indentation))) (when (and (interactive-p) py-verbose-p)(message "%s" (current-indentation))) (current-indentation))) (setq need (py-compute-indentation)) (unless (eq cui need) (beginning-of-line) (delete-horizontal-space) (indent-to need) (if (< (point) orig) (goto-char orig)(back-to-indentation)))))) (defun py-newline-and-indent () "Add a newline and indent to outmost reasonable indent. When indent is set back manually, this is honoured in following lines. " (interactive "*") (let ((orig (point)) erg pos) (newline) (if (and py-empty-line-closes-p (or (eq this-command last-command)(py-after-empty-line))) (setq erg (indent-to-column (save-excursion (py-beginning-of-statement)(- (current-indentation) py-indent-offset)))) (when (or py-newline-delete-trailing-whitespace-p py-trailing-whitespace-smart-delete-p) (setq pos (copy-marker (point))) (save-excursion (goto-char orig) (if (and (bolp)(eolp)) (if (string-match "23.4" emacs-version) (progn (save-restriction (narrow-to-region (point) pos) (delete-trailing-whitespace))) (delete-trailing-whitespace (line-beginning-position) pos)) (skip-chars-backward " \t") (if (string-match "23.4" emacs-version) (progn (save-restriction (narrow-to-region (point) pos) (delete-trailing-whitespace))) (delete-trailing-whitespace (point) (marker-position pos)))))) (setq erg (indent-to-column (py-compute-indentation)))) (when (and (interactive-p) py-verbose-p) (message "%s" erg)) erg)) (defalias 'py-newline-and-close-block 'py-newline-and-dedent) (defun py-newline-and-dedent () "Add a newline and indent to one level below current. Returns column. " (interactive "*") (let ((cui (current-indentation)) erg) (newline) (when (< 0 cui) (setq erg (- (py-compute-indentation) py-indent-offset)) (indent-to-column erg)) (when (and (interactive-p) py-verbose-p) (message "%s" erg)) erg)) (defun py-indent-tabs-mode (arg &optional iact) "With positive ARG switch `indent-tabs-mode' on. With negative ARG switch `indent-tabs-mode' off. Returns value of `indent-tabs-mode' switched to. " (interactive "p") (if (< 0 arg) (progn (setq indent-tabs-mode t) (setq tab-width py-indent-offset)) (setq indent-tabs-mode nil)) (when (and py-verbose-p (or iact (interactive-p))) (message "indent-tabs-mode %s py-indent-offset %s" indent-tabs-mode py-indent-offset)) indent-tabs-mode) ;; Guess indent offset (defun py-guessed-sanity-check (guessed) (and (>= guessed 2)(<= guessed 8)(eq 0 (% guessed 2)))) (defun py-guess-indent-final (indents orig) "Calculate and do sanity-check. " (let* ((first (car indents)) (second (cadr indents)) (erg (if (and first second) (if (< second first) ;; (< (point) orig) (- first second) (- second first)) (default-value 'py-indent-offset)))) (setq erg (and (py-guessed-sanity-check erg) erg)) erg)) (defun py-guess-indent-forward () "Called when moving to end of a form and `py-smart-indentation' is on. " (interactive) (let* ((first (if (py-beginning-of-statement-p) (current-indentation) (progn (py-end-of-statement) (py-beginning-of-statement) (current-indentation)))) (second (if (or (looking-at py-extended-block-or-clause-re)(eq 0 first)) (progn (py-end-of-statement) (py-end-of-statement) (py-beginning-of-statement) (current-indentation)) ;; when not starting from block, look above (while (and (re-search-backward py-extended-block-or-clause-re nil 'movet 1) (or (>= (current-indentation) first) (nth 8 (syntax-ppss))))) (current-indentation)))) (list first second))) (defun py-guess-indent-backward () "Called when moving to beginning of a form and `py-smart-indentation' is on. " (let* ((cui (current-indentation)) (indent (if (< 0 cui) cui 999)) (pos (progn (while (and (re-search-backward py-extended-block-or-clause-re nil 'movet 1) (or (>= (current-indentation) indent) (nth 8 (syntax-ppss))))) (unless (bobp) (point)))) (first (and pos (current-indentation))) (second (and pos (py-end-of-statement) (py-end-of-statement) (py-beginning-of-statement)(current-indentation)))) (list first second))) (defun py-guess-indent-offset (&optional direction) "Guess `py-indent-offset'. Set local value of `py-indent-offset', return it Might change local value of `py-indent-offset' only when called downwards from beginning of block followed by a statement. Otherwise default-value is returned. " (interactive) (save-excursion (let* ((orig (point)) (indents (cond (direction (if (eq 'forward direction) (py-guess-indent-forward) (py-guess-indent-backward))) ;; guess some usable indent is above current position ((eq 0 (current-indentation)) (py-guess-indent-forward)) (t (py-guess-indent-backward)))) (erg (py-guess-indent-final indents orig))) (if erg (setq py-indent-offset erg) (setq py-indent-offset (default-value 'py-indent-offset))) (when (interactive-p) (message "%s" py-indent-offset)) py-indent-offset))) ;;; (defun py-comment-indent-function () "Python version of `comment-indent-function'." ;; This is required when filladapt is turned off. Without it, when ;; filladapt is not used, comments which start in column zero ;; cascade one character to the right (save-excursion (beginning-of-line) (let ((eol (line-end-position))) (and comment-start-skip (re-search-forward comment-start-skip eol t) (setq eol (match-beginning 0))) (goto-char eol) (skip-chars-backward " \t") (max comment-column (+ (current-column) (if (bolp) 0 1)))))) (defun py-narrow-to-defun () "Make text outside current def or class invisible. The defun visible is the one that contains point or follows point. " (interactive) (save-excursion (let ((end (py-beginning-of-def-or-class))) (py-end-of-def-or-class) (narrow-to-region (point) end)))) ;; make general form below work also in these cases (defalias 'py-beginning-of-paragraph 'backward-paragraph) (defalias 'py-end-of-paragraph 'forward-paragraph) ;;; Shifting (defalias 'py-shift-region-left 'py-shift-left) (defun py-shift-left (&optional count start end) "Dedent region according to `py-indent-offset' by COUNT times. If no region is active, current line is dedented. Returns indentation reached. " (interactive "p") (setq count (or count 1)) (let ((erg (py-shift-intern (- count) start end))) (when (and (interactive-p) py-verbose-p) (message "%s" erg)) erg)) (defalias 'py-shift-region-right 'py-shift-right) (defun py-shift-right (&optional count beg end) "Indent region according to `py-indent-offset' by COUNT times. If no region is active, current line is indented. Returns indentation reached. " (interactive "p") (setq count (or count 1)) (let ((erg (py-shift-intern count beg end))) (when (and (interactive-p) py-verbose-p) (message "%s" erg)) erg)) (defun py-shift-intern (count &optional start end) (save-excursion (let* ((inhibit-point-motion-hooks t) deactivate-mark (beg (cond (start) ((region-active-p) (save-excursion (goto-char (region-beginning)))) (t (line-beginning-position)))) (end (cond (end) ((region-active-p) (save-excursion (goto-char (region-end)))) (t (line-end-position)))) (orig end)) (setq beg (copy-marker beg)) (setq end (copy-marker end)) (if (< 0 count) (indent-rigidly beg end py-indent-offset) (indent-rigidly beg end (- py-indent-offset))) (push-mark beg t) (goto-char end) (skip-chars-backward " \t\r\n\f")) (py-indentation-of-statement))) (defun py-shift-forms-base (form arg &optional beg end) (let* ((begform (intern-soft (concat "py-beginning-of-" form))) (endform (intern-soft (concat "py-end-of-" form))) (orig (copy-marker (point))) (beg (cond (beg) ((region-active-p) (save-excursion (goto-char (region-beginning)) (line-beginning-position))) (t (save-excursion (funcall begform) (line-beginning-position))))) (end (cond (end) ((region-active-p) (region-end)) (t (funcall endform)))) (erg (py-shift-intern arg beg end))) (goto-char orig) erg)) (defun py-shift-paragraph-right (&optional arg) "Indent paragraph by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "paragraph" (or arg py-indent-offset)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-paragraph-left (&optional arg) "Dedent paragraph by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "paragraph" (- (or arg py-indent-offset))))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-block-right (&optional arg) "Indent block by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "block" (or arg py-indent-offset)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-block-left (&optional arg) "Dedent block by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "block" (- (or arg py-indent-offset))))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-minor-block-left (&optional arg) "Dedent minor-block by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. A minor block is started by a `for', `if', `try' or `with'. " (interactive "*P") (let ((erg (py-shift-forms-base "minor-block" (- (or arg py-indent-offset))))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-minor-block-right (&optional arg) "Indent minor-block by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. A minor block is started by a `for', `if', `try' or `with'. " (interactive "*P") (let ((erg (py-shift-forms-base "minor-block" (or arg py-indent-offset)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-clause-right (&optional arg) "Indent clause by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "clause" (or arg py-indent-offset)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-clause-left (&optional arg) "Dedent clause by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "clause" (- (or arg py-indent-offset))))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-block-or-clause-right (&optional arg) "Indent block-or-clause by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "block-or-clause" (or arg py-indent-offset)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-block-or-clause-left (&optional arg) "Dedent block-or-clause by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "block-or-clause" (- (or arg py-indent-offset))))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-def-right (&optional arg) "Indent def by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "def" (or arg py-indent-offset)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-def-left (&optional arg) "Dedent def by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "def" (- (or arg py-indent-offset))))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-class-right (&optional arg) "Indent class by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "class" (or arg py-indent-offset)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-class-left (&optional arg) "Dedent class by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "class" (- (or arg py-indent-offset))))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-def-or-class-right (&optional arg) "Indent def-or-class by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "def-or-class" (or arg py-indent-offset)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-def-or-class-left (&optional arg) "Dedent def-or-class by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "def-or-class" (- (or arg py-indent-offset))))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-line-right (&optional arg) "Indent line by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "line" (or arg py-indent-offset)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-line-left (&optional arg) "Dedent line by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "line" (- (or arg py-indent-offset))))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-statement-right (&optional arg) "Indent statement by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "statement" (or arg py-indent-offset)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-shift-statement-left (&optional arg) "Dedent statement by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. " (interactive "*P") (let ((erg (py-shift-forms-base "statement" (- (or arg py-indent-offset))))) (when (interactive-p) (message "%s" erg)) erg)) ;; (defun py-indent-and-forward () "Indent current line according to mode, move one line forward. " (interactive "*") (beginning-of-line) (fixup-whitespace) (indent-to (py-compute-indentation)) (if (eobp) (newline-and-indent) (forward-line 1)) (back-to-indentation)) (defun py-indent-region (start end &optional indent-offset recursive) "Reindent a region of Python code. With optional INDENT-OFFSET specify a different value than `py-indent-offset' at place. Guesses the outmost reasonable indent Returns and keeps relative position " (interactive "*r\nP") (let ((orig (copy-marker (point))) (beg start) (end (copy-marker end)) (py-indent-offset (prefix-numeric-value (or indent-offset py-indent-offset)))) (goto-char beg) (while (< (line-end-position) end) (if (and (bolp)(eolp)) (forward-line 1) (py-indent-and-forward))) (unless (and (bolp)(eolp)) (py-indent-line)) (goto-char orig))) ;;; Positions (defun py-beginning-of-paragraph-position () "Returns beginning of paragraph position. " (interactive) (save-excursion (let ((erg (progn (py-beginning-of-paragraph) (point)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-end-of-paragraph-position () "Returns end of paragraph position. " (interactive) (save-excursion (let ((erg (progn (when (looking-at "[ \\t\\r\\n\\f]*$") (skip-chars-backward " \t\r\n\f") (forward-char -1)) (py-end-of-paragraph) (point)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-beginning-of-block-position () "Returns beginning of block position. " (interactive) (save-excursion (let ((erg (py-beginning-of-block))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-end-of-block-position () "Returns end of block position. " (interactive) (save-excursion (let ((erg (progn (when (looking-at "[ \\t\\r\\n\\f]*$") (skip-chars-backward " \t\r\n\f") (forward-char -1)) (py-end-of-block)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-beginning-of-minor-block-position () "Returns beginning of minor-block position. " (interactive) (save-excursion (let ((erg (py-beginning-of-minor-block))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-end-of-minor-block-position () "Returns end of minor-block position. " (interactive) (save-excursion (let ((erg (progn (when (looking-at "[ \\t\\r\\n\\f]*$") (skip-chars-backward " \t\r\n\f") (forward-char -1)) (py-end-of-minor-block)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-beginning-of-clause-position () "Returns beginning of clause position. " (interactive) (save-excursion (let ((erg (py-beginning-of-clause))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-end-of-clause-position () "Returns end of clause position. " (interactive) (save-excursion (let ((erg (progn (when (looking-at "[ \\t\\r\\n\\f]*$") (skip-chars-backward " \t\r\n\f") (forward-char -1)) (py-end-of-clause)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-beginning-of-block-or-clause-position () "Returns beginning of block-or-clause position. " (interactive) (save-excursion (let ((erg (py-beginning-of-block-or-clause))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-end-of-block-or-clause-position () "Returns end of block-or-clause position. " (interactive) (save-excursion (let ((erg (progn (when (looking-at "[ \\t\\r\\n\\f]*$") (skip-chars-backward " \t\r\n\f") (forward-char -1)) (py-end-of-block-or-clause)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-beginning-of-def-position () "Returns beginning of def position. " (interactive) (save-excursion (let ((erg (py-beginning-of-def))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-end-of-def-position () "Returns end of def position. " (interactive) (save-excursion (let ((erg (progn (when (looking-at "[ \\t\\r\\n\\f]*$") (skip-chars-backward " \t\r\n\f") (forward-char -1)) (py-end-of-def)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-beginning-of-class-position () "Returns beginning of class position. " (interactive) (save-excursion (let ((erg (py-beginning-of-class))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-end-of-class-position () "Returns end of class position. " (interactive) (save-excursion (let ((erg (progn (when (looking-at "[ \\t\\r\\n\\f]*$") (skip-chars-backward " \t\r\n\f") (forward-char -1)) (py-end-of-class)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-beginning-of-def-or-class-position () "Returns beginning of def-or-class position. " (interactive) (save-excursion (let ((erg (py-beginning-of-def-or-class))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-end-of-def-or-class-position () "Returns end of def-or-class position. " (interactive) (save-excursion (let ((erg (progn (when (looking-at "[ \\t\\r\\n\\f]*$") (skip-chars-backward " \t\r\n\f") (forward-char -1)) (py-end-of-def-or-class)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-beginning-of-line-position () "Returns beginning of line position. " (interactive) (save-excursion (let ((erg (py-beginning-of-line))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-end-of-line-position () "Returns end of line position. " (interactive) (save-excursion (let ((erg (progn (when (looking-at "[ \\t\\r\\n\\f]*$") (skip-chars-backward " \t\r\n\f") (forward-char -1)) (py-end-of-line)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-beginning-of-statement-position () "Returns beginning of statement position. " (interactive) (save-excursion (let ((erg (py-beginning-of-statement))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-end-of-statement-position () "Returns end of statement position. " (interactive) (save-excursion (let ((erg (progn (when (looking-at "[ \\t\\r\\n\\f]*$") (skip-chars-backward " \t\r\n\f") (forward-char -1)) (py-end-of-statement)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-beginning-of-comment-position () "Returns beginning of comment position. " (interactive) (save-excursion (let ((erg (py-beginning-of-comment))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-end-of-comment-position () "Returns end of comment position. " (interactive) (save-excursion (let ((erg (progn (when (looking-at "[ \\t\\r\\n\\f]*$") (skip-chars-backward " \t\r\n\f") (forward-char -1)) (py-end-of-comment)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-beginning-of-top-level-position () "Returns beginning of top-level position. " (interactive) (save-excursion (let ((erg (py-beginning-of-top-level))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-end-of-top-level-position () "Returns end of top-level position. " (interactive) (save-excursion (let ((erg (progn (when (looking-at "[ \\t\\r\\n\\f]*$") (skip-chars-backward " \t\r\n\f") (forward-char -1)) (py-end-of-top-level)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-beginning-of-partial-expression-position () "Returns beginning of partial-expression position. " (interactive) (save-excursion (let ((erg (py-beginning-of-partial-expression))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-end-of-partial-expression-position () "Returns end of partial-expression position. " (interactive) (save-excursion (let ((erg (progn (when (looking-at "[ \\t\\r\\n\\f]*$") (skip-chars-backward " \t\r\n\f") (forward-char -1)) (py-end-of-partial-expression)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-beginning-of-expression-position () "Returns beginning of expression position. " (interactive) (save-excursion (let ((erg (py-beginning-of-expression))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-end-of-expression-position () "Returns end of expression position. " (interactive) (save-excursion (let ((erg (progn (when (looking-at "[ \\t\\r\\n\\f]*$") (skip-chars-backward " \t\r\n\f") (forward-char -1)) (py-end-of-expression)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) ;;; some more Positions not generated by ;; `py-write-beg-end-position-forms' (defalias 'py-in-list-p 'py-list-beginning-position) (defun py-list-beginning-position (&optional start) "Return lists beginning position, nil if not inside. Optional ARG indicates a start-position for `parse-partial-sexp'." (interactive) (let* ((ppstart (or start (point-min))) (erg (nth 1 (syntax-ppss)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-end-of-list-position (&optional arg) "Return end position, nil if not inside. Optional ARG indicates a start-position for `parse-partial-sexp'." (interactive) (let* ((ppstart (or arg (point-min))) (erg (syntax-ppss)) (beg (nth 1 erg)) end) (when beg (save-excursion (goto-char beg) (forward-list 1) (setq end (point)))) (when (and py-verbose-p (interactive-p)) (message "%s" end)) end)) (defun py-in-comment-p () "Return the beginning of current line's comment, if inside. " (save-restriction (widen) (let* ((pps (syntax-ppss)) (erg (when (nth 4 pps) (nth 8 pps)))) (unless erg (when (looking-at (concat "^[ \t]*" comment-start-skip)) (setq erg (point)))) erg))) (defun py-in-triplequoted-string-p () "Returns character address of start tqs-string, nil if not inside. " (interactive) (let* ((pps (syntax-ppss)) (erg (when (and (nth 3 pps) (nth 8 pps))(nth 2 pps)))) (save-excursion (unless erg (setq erg (progn (when (looking-at "\"\"\"\\|''''") (goto-char (match-end 0)) (setq pps (syntax-ppss)) (when (and (nth 3 pps) (nth 8 pps)) (nth 2 pps))))))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-in-string-p () "Returns character address of start of string, nil if not inside. " (interactive) (let* ((pps (syntax-ppss)) (erg (when (nth 3 pps) (nth 8 pps)))) (save-excursion (unless erg (setq erg (progn (when (looking-at "\"\\|'") (forward-char 1) (setq pps (syntax-ppss)) (when (nth 3 pps) (nth 8 pps))))))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-in-statement-p () "Returns list of beginning and end-position if inside. Result is useful for booleans too: (when (py-in-statement-p)...) will work. " (interactive) (let ((orig (point)) beg end erg) (save-excursion (setq end (py-end-of-statement)) (setq beg (py-beginning-of-statement)) (when (and (<= beg orig)(<= orig end)) (setq erg (cons beg end)) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)))) ;;; Bounds (defun py-bounds-of-statement (&optional position) "Returns bounds of statement at point. With optional POSITION, a number, report bounds of statement at POSITION. Returns a list, whose car is beg, cdr - end." (interactive) (save-excursion (save-restriction (widen) (when position (goto-char position)) (let ((beg (py-beginning-of-statement-position)) (end (py-end-of-statement-position))) (if (and beg end) (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end))) (list beg end)))))) (defun py-bounds-of-statements () "Bounds of consecutive multitude of statements around point. Indented same level, which don't open blocks. " (interactive) (let* ((orig-indent (progn (back-to-indentation) (unless (py-beginning-of-statement-p) (py-beginning-of-statement)) (unless (py-beginning-of-block-p) (current-indentation)))) (orig (point)) last beg end) (when orig-indent (setq beg (point)) (while (and (setq last beg) (setq beg (when (py-beginning-of-statement) (line-beginning-position))) (not (py-in-string-p)) (not (py-beginning-of-block-p)) (eq (current-indentation) orig-indent))) (setq beg last) (goto-char orig) (setq end (line-end-position)) (while (and (setq last (line-end-position)) (setq end (py-down-statement)) (not (py-beginning-of-block-p)) (not (py-in-string-p)) (eq (py-indentation-of-statement) orig-indent))) (setq end last) (goto-char orig) (if (and beg end) (progn (when (and py-verbose-p (interactive-p)) (message "%s %s" beg end)) (cons beg end)) (when (and py-verbose-p (interactive-p)) (message "%s" nil)) nil)))) (defun py-bounds-of-block (&optional position) "Returns bounds of block at point. With optional POSITION, a number, report bounds of block at POSITION. Returns a list, whose car is beg, cdr - end." (interactive) (save-excursion (save-restriction (widen) (when position (goto-char position)) (let ((beg (py-beginning-of-block-position)) (end (py-end-of-block-position))) (if (and beg end) (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end))) (list beg end)))))) (defun py-bounds-of-clause (&optional position) "Returns bounds of clause at point. With optional POSITION, a number, report bounds of clause at POSITION. Returns a list, whose car is beg, cdr - end." (interactive) (save-excursion (save-restriction (widen) (when position (goto-char position)) (let ((beg (py-beginning-of-clause-position)) (end (py-end-of-clause-position))) (if (and beg end) (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end))) (list beg end)))))) (defun py-bounds-of-block-or-clause (&optional position) "Returns bounds of block-or-clause at point. With optional POSITION, a number, report bounds of block-or-clause at POSITION. Returns a list, whose car is beg, cdr - end." (interactive) (save-excursion (save-restriction (widen) (when position (goto-char position)) (let ((beg (py-beginning-of-block-or-clause-position)) (end (py-end-of-block-or-clause-position))) (if (and beg end) (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end))) (list beg end)))))) (defun py-bounds-of-def (&optional position) "Returns bounds of def at point. With optional POSITION, a number, report bounds of def at POSITION. Returns a list, whose car is beg, cdr - end." (interactive) (save-excursion (save-restriction (widen) (when position (goto-char position)) (let ((beg (py-beginning-of-def-position)) (end (py-end-of-def-position))) (if (and beg end) (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end))) (list beg end)))))) (defun py-bounds-of-class (&optional position) "Returns bounds of class at point. With optional POSITION, a number, report bounds of class at POSITION. Returns a list, whose car is beg, cdr - end." (interactive) (save-excursion (save-restriction (widen) (when position (goto-char position)) (let ((beg (py-beginning-of-class-position)) (end (py-end-of-class-position))) (if (and beg end) (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end))) (list beg end)))))) (defun py-bounds-of-region () "Returns bounds of region at point. Returns a list, whose car is beg, cdr - end." (interactive) (save-excursion (save-restriction (widen) (let ((beg (region-beginning)) (end (region-end))) (if (and beg end) (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end))) (list beg end)))))) (defun py-beginning-of-buffer-position () (point-min)) (defun py-end-of-buffer-position () (point-max)) (defun py-bounds-of-buffer (&optional position) "Returns bounds of buffer at point. With optional POSITION, a number, report bounds of buffer at POSITION. Returns a list, whose car is beg, cdr - end." (interactive) (save-excursion (save-restriction (widen) (when position (goto-char position)) (let ((beg (py-beginning-of-buffer-position)) (end (py-end-of-buffer-position))) (if (and beg end) (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end))) (list beg end)))))) (defun py-bounds-of-expression (&optional position) "Returns bounds of expression at point. With optional POSITION, a number, report bounds of expression at POSITION. Returns a list, whose car is beg, cdr - end." (interactive) (save-excursion (save-restriction (widen) (when position (goto-char position)) (let ((beg (py-beginning-of-expression-position)) (end (py-end-of-expression-position))) (if (and beg end) (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end))) (list beg end)))))) (defun py-bounds-of-partial-expression (&optional position) "Returns bounds of partial-expression at point. With optional POSITION, a number, report bounds of partial-expression at POSITION. Returns a list, whose car is beg, cdr - end." (interactive) (save-excursion (save-restriction (widen) (when position (goto-char position)) (let ((beg (py-beginning-of-partial-expression-position)) (end (py-end-of-partial-expression-position))) (if (and beg end) (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end))) (list beg end)))))) (defun py-bounds-of-declarations () "Bounds of consecutive multitude of assigments resp. statements around point. Indented same level, which don't open blocks. Typically declarations resp. initialisations of variables following a class or function definition. See also py-bounds-of-statements " (interactive) (let* ((orig-indent (progn (back-to-indentation) (unless (py-beginning-of-statement-p) (py-beginning-of-statement)) (unless (py-beginning-of-block-p) (current-indentation)))) (orig (point)) last beg end) (when orig-indent (setq beg (line-beginning-position)) ;; look upward first (while (and (progn (unless (py-beginning-of-statement-p) (py-beginning-of-statement)) (line-beginning-position)) (py-beginning-of-statement) (not (py-beginning-of-block-p)) (eq (current-indentation) orig-indent)) (setq beg (line-beginning-position))) (goto-char orig) (while (and (setq last (line-end-position)) (setq end (py-down-statement)) (not (py-beginning-of-block-p)) (eq (py-indentation-of-statement) orig-indent))) (setq end last) (goto-char beg) (if (and beg end) (progn (when (and py-verbose-p (interactive-p)) (message "%s %s" beg end)) (cons beg end)) (when (and py-verbose-p (interactive-p)) (message "%s" nil)) nil)))) ;;; Comments, Filling (defun py-beginning-of-comment () "Go to the beginning of current line's comment, if any. Returns position if succesful. " (interactive) (save-restriction (widen) (let ((pps (syntax-ppss))) (when (nth 4 pps) (goto-char (nth 8 pps)))))) (defun py-end-of-comment () "Go to the end of comment at point. Returns position, nil if not in comment." (interactive) (let ((orig (point)) last) (while (and (not (eobp)) (or (looking-at (concat "[ \t]*" comment-start))(nth 4 (syntax-ppss))(and (bolp)(eolp)))) (unless (and (bolp)(eolp)) (setq last (point))) (forward-line 1)) (if last (progn (goto-char last) (end-of-line) (skip-chars-backward " \t\r\n\f") (point)) last))) ;;; Comment forms (defun py-comment-region (beg end &optional arg) "Like `comment-region' but uses double hash (`#') comment starter." (interactive "r\nP") (let ((comment-start (if py-block-comment-prefix-p py-block-comment-prefix comment-start))) (comment-region beg end arg))) (defun py-comment-block (&optional beg end arg) "Comments block at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default" (interactive "*") (save-excursion (let ((comment-start (if py-block-comment-prefix-p py-block-comment-prefix comment-start)) (beg (or beg (py-beginning-of-block-position))) (end (or end (py-end-of-block-position)))) (goto-char beg) (push-mark) (goto-char end) (comment-region beg end arg)))) (defun py-comment-minor-block (&optional beg end arg) "Comments minor-block at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default" (interactive "*") (save-excursion (let ((comment-start (if py-block-comment-prefix-p py-block-comment-prefix comment-start)) (beg (or beg (py-beginning-of-minor-block-position))) (end (or end (py-end-of-minor-block-position)))) (goto-char beg) (push-mark) (goto-char end) (comment-region beg end arg)))) (defun py-comment-top-level (&optional beg end arg) "Comments top-level form at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default" (interactive "*") (save-excursion (let ((comment-start (if py-block-comment-prefix-p py-block-comment-prefix comment-start)) (beg (or beg (py-beginning-of-top-level-position))) (end (or end (py-end-of-top-level-position)))) (goto-char beg) (push-mark) (goto-char end) (comment-region beg end arg)))) (defun py-comment-clause (&optional beg end arg) "Comments clause at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default" (interactive "*") (save-excursion (let ((comment-start (if py-block-comment-prefix-p py-block-comment-prefix comment-start)) (beg (or beg (py-beginning-of-clause-position))) (end (or end (py-end-of-clause-position)))) (goto-char beg) (push-mark) (goto-char end) (comment-region beg end arg)))) (defun py-comment-block-or-clause (&optional beg end arg) "Comments block-or-clause at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default" (interactive "*") (save-excursion (let ((comment-start (if py-block-comment-prefix-p py-block-comment-prefix comment-start)) (beg (or beg (py-beginning-of-block-or-clause-position))) (end (or end (py-end-of-block-or-clause-position)))) (goto-char beg) (push-mark) (goto-char end) (comment-region beg end arg)))) (defun py-comment-def (&optional beg end arg) "Comments def at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default" (interactive "*") (save-excursion (let ((comment-start (if py-block-comment-prefix-p py-block-comment-prefix comment-start)) (beg (or beg (py-beginning-of-def-position))) (end (or end (py-end-of-def-position)))) (goto-char beg) (push-mark) (goto-char end) (comment-region beg end arg)))) (defun py-comment-class (&optional beg end arg) "Comments class at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default" (interactive "*") (save-excursion (let ((comment-start (if py-block-comment-prefix-p py-block-comment-prefix comment-start)) (beg (or beg (py-beginning-of-class-position))) (end (or end (py-end-of-class-position)))) (goto-char beg) (push-mark) (goto-char end) (comment-region beg end arg)))) (defun py-comment-def-or-class (&optional beg end arg) "Comments def-or-class at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default" (interactive "*") (save-excursion (let ((comment-start (if py-block-comment-prefix-p py-block-comment-prefix comment-start)) (beg (or beg (py-beginning-of-def-or-class-position))) (end (or end (py-end-of-def-or-class-position)))) (goto-char beg) (push-mark) (goto-char end) (comment-region beg end arg)))) (defun py-comment-statement (&optional beg end arg) "Comments statement at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default" (interactive "*") (save-excursion (let ((comment-start (if py-block-comment-prefix-p py-block-comment-prefix comment-start)) (beg (or beg (py-beginning-of-statement-position))) (end (or end (py-end-of-statement-position)))) (goto-char beg) (push-mark) (goto-char end) (comment-region beg end arg)))) ;; Comment forms (defun py-uncomment-intern (beg end) (uncomment-region beg end) (when py-uncomment-indents-p (py-indent-region beg end))) (defun py-uncomment (&optional beg end) "Uncomment commented lines at point. If region is active, restrict uncommenting at region " (interactive "*") (save-excursion (save-restriction (when (use-region-p) (narrow-to-region (region-beginning) (region-end))) (let* (last (beg (or beg (save-excursion (while (and (py-beginning-of-comment) (setq last (point))(prog1 (forward-line -1)(end-of-line)))) last)))) (and (py-end-of-comment)) (py-uncomment-intern beg (point)))))) (defun py-delete-comments-in-def-or-class () "Delete all commented lines in def-or-class at point" (interactive "*") (save-excursion (let ((beg (py-beginning-of-def-or-class-position)) (end (py-end-of-def-or-class-position))) (and beg end (py--delete-comments-intern beg end))))) (defun py-delete-comments-in-class () "Delete all commented lines in class at point" (interactive "*") (save-excursion (let ((beg (py-beginning-of-class-position)) (end (py-end-of-class-position))) (and beg end (py--delete-comments-intern beg end))))) (defun py-delete-comments-in-block () "Delete all commented lines in block at point" (interactive "*") (save-excursion (let ((beg (py-beginning-of-block-position)) (end (py-end-of-block-position))) (and beg end (py--delete-comments-intern beg end))))) (defun py-delete-comments-in-region (beg end) "Delete all commented lines in region. " (interactive "r*") (save-excursion (py--delete-comments-intern beg end))) (defun py--delete-comments-intern (beg end) (save-restriction (narrow-to-region beg end) (goto-char beg) (while (and (< (line-end-position) end) (not (eobp))) (beginning-of-line) (if (looking-at (concat "[ \t]*" comment-start)) (delete-region (point) (1+ (line-end-position))) (forward-line 1))))) ;;; (defun py-join-words-wrapping (words separator line-prefix line-length) (let ((lines ()) (current-line line-prefix)) (while words (let* ((word (car words)) (maybe-line (concat current-line word separator))) (if (> (length maybe-line) line-length) (setq lines (cons (substring current-line 0 -1) lines) current-line (concat line-prefix word separator " ")) (setq current-line (concat maybe-line " ")))) (setq words (cdr words))) (setq lines (cons (substring current-line 0 (- 0 (length separator) 1)) lines)) (mapconcat 'identity (nreverse lines) "\n"))) (defun py-fix-this-indent (indent) (unless (and (eq (current-indentation) (current-column)) (eq (current-column) indent)) (beginning-of-line) (indent-to-column indent) (delete-region (point) (progn (skip-chars-forward " \t") (point))))) (defun py-fill-comment (&optional justify) "Fill the comment paragraph at point" (interactive "*P") (let (;; Non-nil if the current line contains a comment. has-comment ;; If has-comment, the appropriate fill-prefix for the comment. comment-fill-prefix) ;; Figure out what kind of comment we are looking at. (save-excursion (beginning-of-line) (cond ;; A line with nothing but a comment on it? ((looking-at "[ \t]*#[# \t]*") (setq has-comment t comment-fill-prefix (buffer-substring (match-beginning 0) (match-end 0)))) ;; A line with some code, followed by a comment? Remember that the hash ;; which starts the comment shouldn't be part of a string or character. ((progn (while (not (looking-at "#\\|$")) (skip-chars-forward "^#\n\"'\\") (cond ((eq (char-after (point)) ?\\) (forward-char 2)) ((memq (char-after (point)) '(?\" ?')) (forward-sexp 1)))) (looking-at "#+[\t ]*")) (setq has-comment t) (setq comment-fill-prefix (concat (make-string (current-column) ? ) (buffer-substring (match-beginning 0) (match-end 0))))))) (if (not has-comment) (fill-paragraph justify) ;; Narrow to include only the comment, and then fill the region. (save-restriction (narrow-to-region ;; Find the first line we should include in the region to fill. (save-excursion (while (and (zerop (forward-line -1)) (looking-at "^[ \t]*#"))) ;; We may have gone to far. Go forward again. (or (looking-at "^[ \t]*#") (forward-line 1)) (point)) ;; Find the beginning of the first line past the region to fill. (save-excursion (while (progn (forward-line 1) (looking-at "^[ \t]*#"))) (point))) ;; Lines with only hashes on them can be paragraph boundaries. (let ((paragraph-start (concat paragraph-start "\\|[ \t#]*$")) (paragraph-separate (concat paragraph-separate "\\|[ \t#]*$")) (fill-prefix comment-fill-prefix)) ;;(message "paragraph-start %S paragraph-separate %S" ;;paragraph-start paragraph-separate) (fill-paragraph justify)))) t)) (defun py-until-found (search-string liste) "Search liste for search-string until found. " (let ((liste liste) element) (while liste (if (member search-string (car liste)) (setq element (car liste) liste nil)) (setq liste (cdr liste))) element)) (defun py-end-of-string (&optional beginning-of-string-position) "Go to end of string at point, return position. Takes the result of (syntax-ppss)" (interactive) (let ((beginning-of-string-position (or beginning-of-string-position (and (nth 3 (syntax-ppss))(nth 8 (syntax-ppss))) (and (looking-at "\"\"\"\\|'''\\|\"\\|\'")(match-beginning 0)))) erg) (if beginning-of-string-position (progn (goto-char beginning-of-string-position) (goto-char (scan-sexps (point) 1)) (setq erg (point))) (error (concat "py-end-of-string: don't see end-of-string at " (buffer-name (current-buffer)) "at pos " (point)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-fill-this-paragraph (justify style) "Fill just the paragraph at point. " (interactive "*") (py-fill-string justify style (if (py-beginning-of-paragraph-p) (point) (progn (py-beginning-of-paragraph)(point))) (progn (py-end-of-paragraph)(point)))) (defun py-fill-paragraph (&optional justify style start end docstring) "`fill-paragraph-function' If `py-paragraph-fill-docstring-p' and inside a docstring, the whole docstring is formatted. See also `py-fill-string' " (interactive "P") (or (fill-comment-paragraph justify) (let* ((orig (copy-marker (point))) (pps (syntax-ppss)) (docstring (and ;; py-paragraph-fill-docstring-p (or docstring (py-docstring-p (nth 8 pps))))) (beg (cond (start) ((use-region-p) (region-beginning)) ((and docstring ;; (or py-paragraph-fill-docstring-p ;; pep-257-nn, delimiters are on first line ;; (and ;; (eq py-docstring-style 'pep-257-nn) (ignore-errors (<= (py-beginning-of-paragraph-position)(nth 8 pps)))) (nth 8 pps)) (t (py-beginning-of-paragraph-position)))) (end (copy-marker (cond (end) ((use-region-p) (region-end)) (docstring (py-end-of-string (nth 8 pps))) (t (if (or (looking-at paragraph-start)(re-search-forward paragraph-start nil t 1)) (progn (skip-chars-backward " \t\r\n\f")(point)) (point)))))) (style (or style py-docstring-style)) (this-end (point-min)) last) ;; (when (and (nth 3 pps) (< beg (nth 8 pps)) ;; docstring ;; (setq beg (nth 8 pps))) ;; (setq end (py-end-of-string (nth 8 pps)))) (save-excursion (save-restriction (narrow-to-region beg end) (cond ;; Comments ((nth 4 pps) (py-fill-comment justify)) ;; Strings/Docstrings ((or (nth 3 pps) (equal (string-to-syntax "|") (syntax-after (point))) (looking-at py-string-delim-re)) (goto-char beg) (if (and py-paragraph-fill-docstring-p docstring ;; (re-search-forward (concat "^" py-labelled-re) nil t) ) (progn (goto-char beg) ;; must process one by one (while (and (not (eobp)) (setq last (point)) (forward-paragraph) (< last (point))(< (point) end)(setq this-end (point))) (save-restriction (narrow-to-region last this-end) (goto-char last) ;; (if (re-search-forward (concat "^" py-labelled-re) nil t this-end) ;; (py-fill-labelled-string last this-end) (py-fill-string justify style last this-end pps 'no) ;;) (goto-char this-end) (widen)))) (goto-char orig) (py-fill-this-paragraph justify style))) ;; Decorators ((save-excursion (and (py-beginning-of-statement) (equal (char-after) ;; (back-to-indentation) ;; (point)) ?\@))) (py-fill-decorator justify)) (t (goto-char orig) (py-fill-string justify style (if (py-beginning-of-paragraph-p) (point) (py-beginning-of-paragraph)) (py-end-of-paragraph)))))) (goto-char orig) (back-to-indentation)) (recenter-top-bottom) ;; fill-paragraph expexts t t)) (defun py-fill-labelled-string (beg end) "Fill string or paragraph containing lines starting with label See lp:1066489 " (interactive "r*") (let ((end (copy-marker end)) (last (copy-marker (point))) this-beg this-end) (save-excursion (save-restriction (narrow-to-region beg end) (goto-char beg) (skip-chars-forward " \t\r\n\f") (if (looking-at py-labelled-re) (progn (setq this-beg (line-beginning-position)) (goto-char (match-end 0)) (while (and (not (eobp)) (re-search-forward py-labelled-re end t 1)(< last (match-beginning 0))(setq last (match-beginning 0))) (save-match-data (fill-region this-beg (1- (line-beginning-position)))) (setq this-beg (line-beginning-position)) (goto-char (match-end 0))))))))) (defun py-fill-string (&optional justify style beg end pps docstring) "String fill function for `py-fill-paragraph'. JUSTIFY should be used (if applicable) as in `fill-paragraph'. DOCSTRING is either a boolean or 'no If `py-paragraph-fill-docstring-p' is `t', `M-q` fills the complete docstring according to setting of `py-docstring-style' " (interactive "P") (save-excursion (save-restriction (let* ((style (or style py-docstring-style)) (fill-column (if (integerp py-docstring-fill-column) py-docstring-fill-column fill-column)) ;; unset python-mode value this time forward-sexp-function (orig (point-marker)) (pps-raw (or pps (syntax-ppss))) (pps (or (nth 8 pps-raw)(and (equal (string-to-syntax "|") (syntax-after (point))) (skip-chars-forward "\"'") (syntax-ppss)) (and (equal (string-to-syntax "|") (syntax-after (1- (point)))) (skip-chars-backward "\"'") (syntax-ppss)))) ;; if beginning of string is closer than arg beg, use this (beg (or (and (numberp beg) (ignore-errors (copy-marker beg))) (cond ((and (nth 3 pps) (nth 8 pps)) (goto-char (nth 8 pps)) (skip-chars-forward "\"'") (copy-marker (point))) ((equal (string-to-syntax "|") (syntax-after (point))) (copy-marker (point)))))) ;; Assume docstrings at BOL resp. indentation (docstring (unless (eq 'no docstring) (py-docstring-p (nth 8 pps)))) (end (or (ignore-errors (and end (goto-char end) (skip-chars-backward "\"' \t\f\n")(copy-marker (point)))) (progn (or (eq (marker-position beg) (point)) (goto-char (nth 8 pps))) (forward-sexp) ;; (scan-sexps (point) 1) (skip-chars-backward "\"'") (point-marker)))) multi-line-p delimiters-style erg) ;; whitespace and newline will be added according to mode again (goto-char beg) (setq beg (progn (skip-chars-forward "\"'") (copy-marker (point)))) (and docstring (delete-region (point) (progn (skip-chars-forward " \t\r\n\f") (skip-chars-forward " \t\r\n\f")(point)))) (goto-char end) (and docstring (delete-region (point) (progn (skip-chars-backward " \t\r\n\f")(point)))) (cond ((and docstring (string-match (concat "^" py-labelled-re) (buffer-substring-no-properties beg end))) (py-fill-labelled-string beg end)) ((and docstring) (narrow-to-region beg end) (fill-region (point-min) (point-max))) (t (narrow-to-region beg end) (sit-for 0.1) (fill-region beg end))) (and docstring (setq multi-line-p (> (count-matches "\n" beg end) 0))) (and docstring (setq delimiters-style (case style ;; delimiters-style is a cons cell with the form ;; (START-NEWLINES . END-NEWLINES). When any of the sexps ;; is NIL means to not add any newlines for start or end ;; of docstring. See `py-docstring-style' for a ;; graphic idea of each style. (django (cons 1 1)) (onetwo (and multi-line-p (cons 1 2))) (pep-257 (and multi-line-p (cons nil 2))) (pep-257-nn (and multi-line-p (cons nil 1))) (symmetric (and multi-line-p (cons 1 1)))))) (and docstring py-verbose-p (message "%s" delimiters-style)) (widen) (save-excursion (when (and docstring style) ;; Add the number of newlines indicated by the selected style ;; at the start of the docstring. (goto-char beg) (and (car delimiters-style) (unless (or (and (bolp)(eolp)) (save-excursion (forward-line -1)(and (bolp)(eolp)))) (or (newline (car delimiters-style)) t)) (indent-region beg end)) (and multi-line-p (forward-line 1) (unless (and (bolp)(eolp)) (insert "\n"))) ;; Add the number of newlines indicated by the selected style ;; at the end of the docstring. (goto-char end) (unless (eq (char-after) ?\n) (and (cdr delimiters-style) (or (newline (cdr delimiters-style)) t))) (setq end (progn (skip-chars-forward " \t\r\n\f")(skip-chars-forward "\"'")(copy-marker (point)))) (setq beg (progn (goto-char beg) (skip-chars-backward " \t\r\n\f")(skip-chars-backward "\"'") (copy-marker (point))))) (indent-region beg end) (goto-char end) (beginning-of-line) (unless (eq (current-indentation) (setq erg (py-compute-indentation))) (fixup-whitespace) (indent-to erg))))))) (defun py-fill-decorator (&optional justify) "Decorator fill function for `py-fill-paragraph'. " ;; (interactive "*P") t) (defun py-fill-string-django (&optional justify) "Fill docstring according to Django's coding standards style. \"\"\" Process foo, return bar. \"\"\" \"\"\" Process foo, return bar. If processing fails throw ProcessingError. \"\"\" See available styles at `py-fill-paragraph' or var `py-docstring-style' " (interactive "*P") (py-fill-string justify 'django)) (defun py-fill-string-onetwo (&optional justify) "One newline and start and Two at end style. \"\"\"Process foo, return bar.\"\"\" \"\"\" Process foo, return bar. If processing fails throw ProcessingError. \"\"\" See available styles at `py-fill-paragraph' or var `py-docstring-style' " (interactive "*P") (py-fill-string justify 'onetwo)) (defun py-fill-string-pep-257 (&optional justify) "PEP-257 with 2 newlines at end of string. \"\"\"Process foo, return bar.\"\"\" \"\"\"Process foo, return bar. If processing fails throw ProcessingError. \"\"\" See available styles at `py-fill-paragraph' or var `py-docstring-style' " (interactive "*P") (py-fill-string justify 'pep-257)) (defun py-fill-string-pep-257-nn (&optional justify) "PEP-257 with 1 newline at end of string. \"\"\"Process foo, return bar.\"\"\" \"\"\"Process foo, return bar. If processing fails throw ProcessingError. \"\"\" See available styles at `py-fill-paragraph' or var `py-docstring-style' " (interactive "*P") (py-fill-string justify 'pep-257-nn)) (defun py-fill-string-symmetric (&optional justify) "Symmetric style. \"\"\"Process foo, return bar.\"\"\" \"\"\" Process foo, return bar. If processing fails throw ProcessingError. \"\"\" See available styles at `py-fill-paragraph' or var `py-docstring-style' " (interactive "*P") (py-fill-string justify 'symmetric)) ;; (defun py-fill-paragraph (&optional justify) ;; "Like \\[fill-paragraph], but handle Python comments and strings. ;; ;; If any of the current line is a comment, fill the comment or the ;; paragraph of it that point is in, preserving the comment's indentation ;; and initial `#'s. ;; If point is inside a string, narrow to that string and fill. ;; " ;; (interactive "P") ;; (save-excursion ;; (save-restriction ;; (widen) ;; (let ((pps ;; (if (featurep 'xemacs) ;; (parse-partial-sexp (point-min) (point)) ;; (syntax-ppss)))) ;; (cond ;; ;; inside a comment ;; ((nth 4 pps) ;; (py-fill-comment justify)) ;; ;; only whitespace before the comment start ;; ((save-excursion (beginning-of-line) (looking-at "[ \t]*#")) ;; (py-fill-comment justify)) ;; ;; inside a string ;; ((nth 3 pps) ;; (py-fill-string (nth 8 pps))) ;; ;; opening quote of a string ;; ((progn (save-excursion (forward-char 1)(nth 3 pps))) ;; (save-excursion ;; (forward-char 1) ;; (py-fill-string (nth 8 pps))))))))) ;; Beginning-of- p (defun py-beginning-of-top-level-p () "Returns position, if cursor is at the beginning of a top-level, nil otherwise. " (interactive) (let (erg) (and (py-beginning-of-statement-p) (eq 0 (current-column)) (setq erg (point)) erg))) (defun py-beginning-of-line-p () "Returns position, if cursor is at the beginning of a line, nil otherwise. " (when (bolp)(point))) (defun py-beginning-of-buffer-p () "Returns position, if cursor is at the beginning of buffer, nil otherwise. " (when (bobp)(point))) (defun py-beginning-of-paragraph-p () "Returns position, if cursor is at the beginning of a paragraph, nil otherwise. " (let ((orig (point)) erg) (if (and (bolp) (looking-at paragraph-separate)) (setq erg (point)) (save-excursion (py-end-of-paragraph) (py-beginning-of-paragraph) (when (eq orig (point)) (setq erg orig))) erg))) (defun py-beginning-of-statement-p () "Returns position, if cursor is at the beginning of a statement, nil otherwise. " (let ((orig (point)) erg) (save-excursion (py-end-of-statement) (py-beginning-of-statement) (when (eq orig (point)) (setq erg orig)) erg))) (defun py-beginning-of-expression-p () "Returns position, if cursor is at the beginning of a expression, nil otherwise. " (let ((orig (point)) erg) (save-excursion (py-end-of-expression) (py-beginning-of-expression) (when (eq orig (point)) (setq erg orig)) erg))) (defun py-beginning-of-partial-expression-p () "Returns position, if cursor is at the beginning of a partial-expression, nil otherwise. " (let ((orig (point)) erg) (save-excursion (py-end-of-partial-expression) (py-beginning-of-partial-expression) (when (eq orig (point)) (setq erg orig)) erg))) (defun py-beginning-of-block-p () "Returns position, if cursor is at the beginning of a block, nil otherwise. " (when (and (looking-at py-block-re) (not (py-in-string-or-comment-p))) (point))) (defun py-beginning-of-clause-p () "Returns position, if cursor is at the beginning of a clause, nil otherwise. " (when (and (looking-at py-clause-re) (not (py-in-string-or-comment-p))) (point))) (defun py-beginning-of-block-or-clause-p () "Returns position, if cursor is at the beginning of a block-or-clause, nil otherwise. " (when (and (looking-at py-block-or-clause-re) (not (py-in-string-or-comment-p))) (point))) (defun py-beginning-of-def-p () "Returns position, if cursor is at the beginning of a def, nil otherwise. " (when (and (looking-at py-def-re) (not (py-in-string-or-comment-p))) (point))) (defun py-beginning-of-class-p () "Returns position, if cursor is at the beginning of a class, nil otherwise. " (when (and (looking-at py-class-re) (not (py-in-string-or-comment-p))) (point))) (defun py-beginning-of-def-or-class-p () "Returns position, if cursor is at the beginning of a def-or-class, nil otherwise. " (when (and (looking-at py-def-or-class-re) (not (py-in-string-or-comment-p))) (point))) (defun py-beginning-of-minor-block-p () "Returns position, if cursor is at the beginning of a minor-block, nil otherwise. A minor block is started by a `for', `if', `try' or `with'. " (when (and (looking-at py-minor-block-re) (not (py-in-string-or-comment-p))) (point))) ;; End-of- p (defun py-end-of-line-p () "Returns position, if cursor is at the end of a line, nil otherwise. " (when (eolp)(point))) (defun py-end-of-buffer-p () "Returns position, if cursor is at the end of buffer, nil otherwise. " (when (eobp)(point))) (defun py-end-of-paragraph-p () "Returns position, if cursor is at the end of a paragraph, nil otherwise. " (let ((orig (point)) erg) (if (and (eolp) (looking-at paragraph-separate)) (setq erg (point)) (save-excursion (py-beginning-of-paragraph) (py-end-of-paragraph) (when (eq orig (point)) (setq erg orig))) erg))) (defun py-end-of-statement-p () "Returns position, if cursor is at the end of a statement, nil otherwise. " (let ((orig (point)) erg) (save-excursion (py-beginning-of-statement) (py-end-of-statement) (when (eq orig (point)) (setq erg orig)) erg))) (defun py-end-of-expression-p () "Returns position, if cursor is at the end of a expression, nil otherwise. " (let ((orig (point)) erg) (save-excursion (py-beginning-of-expression) (py-end-of-expression) (when (eq orig (point)) (setq erg orig)) erg))) (defun py-end-of-partial-expression-p () "Returns position, if cursor is at the end of a partial-expression, nil otherwise. " (let ((orig (point)) erg) (save-excursion (py-beginning-of-partial-expression) (py-end-of-partial-expression) (when (eq orig (point)) (setq erg orig))) erg)) (defun py-end-of-block-p () "Returns position, if cursor is at the end of a block, nil otherwise. " (let ((orig (point)) erg) (save-excursion (py-beginning-of-block) (py-end-of-block) (when (eq orig (point)) (setq erg orig))) erg)) (defun py-end-of-clause-p () "Returns position, if cursor is at the end of a clause, nil otherwise. " (let ((orig (point)) erg) (save-excursion (py-beginning-of-clause) (py-end-of-clause) (when (eq orig (point)) (setq erg orig)) erg))) (defun py-end-of-block-or-clause-p () "Returns position, if cursor is at the end of a block-or-clause, nil otherwise. " (let ((orig (point)) erg) (save-excursion (py-beginning-of-block-or-clause) (py-end-of-block-or-clause) (when (eq orig (point)) (setq erg orig)) erg))) (defun py-end-of-def-p () "Returns position, if cursor is at the end of a def, nil otherwise. " (let ((orig (point)) erg) (save-excursion (py-beginning-of-def) (py-end-of-def) (when (eq orig (point)) (setq erg orig)) erg))) (defun py-end-of-class-p () "Returns position, if cursor is at the end of a class, nil otherwise. " (let ((orig (point)) erg) (save-excursion (py-beginning-of-class) (py-end-of-class) (when (eq orig (point)) (setq erg orig)) erg))) (defun py-end-of-def-or-class-p () "Returns position, if cursor is at the end of a def-or-class, nil otherwise. " (let ((orig (point)) erg) (save-excursion (py-beginning-of-def-or-class) (py-end-of-def-or-class) (when (eq orig (point)) (setq erg orig)) erg))) ;;; Opens-p (defun py-statement-opens-block-p (&optional regexp) "Return position if the current statement opens a block in stricter or wider sense. For stricter sense specify regexp. " (interactive) (let* ((regexp (or regexp py-block-or-clause-re)) (erg (py-statement-opens-base regexp))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-statement-opens-base (regexp) (let ((orig (point)) erg) (save-excursion (back-to-indentation) (py-end-of-statement) (py-beginning-of-statement) (when (and (<= (line-beginning-position) orig)(looking-back "^[ \t]*")(looking-at regexp)) (setq erg (point)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-statement-opens-clause-p () "Return position if the current statement opens block or clause. " (interactive) (py-statement-opens-base py-clause-re)) (defun py-statement-opens-block-or-clause-p () "Return position if the current statement opens block or clause. " (interactive) (py-statement-opens-base py-block-or-clause-re)) (defun py-statement-opens-class-p () "Return `t' if the statement opens a functions or class definition, nil otherwise. " (interactive) (py-statement-opens-base py-class-re)) (defun py-statement-opens-def-p () "Return `t' if the statement opens a functions or class definition, nil otherwise. " (interactive) (py-statement-opens-base py-def-re)) (defun py-statement-opens-def-or-class-p () "Return `t' if the statement opens a functions or class definition, nil otherwise. " (interactive) (py-statement-opens-base py-def-or-class-re)) (defun py-statement-closes-block-p () "Return t iff the current statement closes a block. I.e., if the line starts with `return', `raise', `break', `continue', and `pass'. This doesn't catch embedded statements." (let ((here (point))) (unless (py-beginning-of-statement-p) (py-beginning-of-statement)) (prog1 (looking-at py-block-closing-keywords-re) (goto-char here)))) (defun py-end-of-clause-intern (&optional regexp orig) "Used internal by functions going to the end of a current clause. " (unless (eobp) (let* ((regexp (or regexp py-block-or-clause-re)) (orig (or orig (point))) (erg (if (py-statement-opens-block-p regexp) (point) (py-go-to-keyword py-extended-block-or-clause-re) (when (py-statement-opens-block-p regexp) (point)))) ind res) (if erg (progn (setq ind (+ py-indent-offset (current-indentation))) (py-end-of-statement) (forward-line 1) (setq erg (py-travel-current-indent ind))) (goto-char orig) (py-look-downward-for-clause)) (when (and (bolp)(eolp)) (skip-chars-backward " \t\r\n\f") (py-beginning-of-comment) (skip-chars-backward " \t\r\n\f")) (when (eq (point) orig) (py-look-downward-for-clause)) (when (< orig (point)) (setq res (point))) res))) (defun py-end-base (regexp &optional orig decorator) "Used internal by functions going to the end forms. " (unless (eobp) (let* ((orig (or orig (point))) (regexp (or regexp 'py-extended-block-or-clause-re)) (thisregexp (cond ((eq regexp 'py-def-or-class-re) (concat "@\\|" py-def-or-class-re)) ((eq regexp 'py-def-re) (concat "@\\|" py-def-re)) ((eq regexp 'py-class-re) (concat "@\\|" py-class-re)) ((eq regexp 'py-minor-block-re) py-minor-block-re) (t (concat "@\\|" py-extended-block-or-clause-re)))) bofst (this (progn (back-to-indentation) (setq bofst (py-beginning-of-statement-p)) (cond ((and bofst (eq regexp 'py-clause-re)(looking-at py-extended-block-or-clause-re)) (point)) ((and bofst (looking-at (symbol-value regexp))) (point)) (t (when (cdr-safe (py-go-to-keyword thisregexp)) (when (py-statement-opens-block-p py-extended-block-or-clause-re) (point))))))) ind erg last pps thisindent done) (cond (this (setq thisindent (current-indentation)) (cond ((and py-close-provides-newline (or (eq regexp 'py-def-re)(eq regexp 'py-class-re)(eq regexp 'py-def-or-class-re))) (while (and (setq last (point))(re-search-forward "^$")(skip-chars-forward " \t\r\n\f")(or (nth 8 (setq pps (syntax-ppss))) (nth 1 pps) (< thisindent (current-column))))) ;; (goto-char last) (skip-chars-backward " \t\r\n\f") (setq done t) (and (nth 8 (setq pps (syntax-ppss))) (py-beginning-of-statement) (py-end-of-statement))) (t (while (and (py-down-statement) (or (< thisindent (current-indentation)) (and (eq thisindent (current-indentation)) (or (eq regexp 'py-minor-block-re) (eq regexp 'py-block-re)) (looking-at py-clause-re))) (py-end-of-statement)(setq last (point)))) (goto-char last)))) (t (goto-char orig))) (when (and (<= (point) orig)(not (looking-at (symbol-value regexp)))) ;; found the end above ;; py-travel-current-indent will stop of clause at equal indent (when (py-look-downward-for-beginning (symbol-value regexp)) (py-end-base regexp orig))) (setq pps (syntax-ppss)) (if (and (< orig (point)) (not (or (looking-at comment-start) (nth 8 pps) (nth 1 pps)))) (point) (goto-char (point-max)) nil)))) (defun py-look-downward-for-beginning (regexp) "When above any beginning of FORM, search downward. " (let* ((orig (point)) (erg orig) (last orig) pps) (while (and (setq last (point)) (not (eobp)) (re-search-forward regexp nil t 1)(setq erg (match-beginning 0)) (setq pps (syntax-ppss)) (or (nth 8 pps) (nth 1 pps)))) (cond ((not (or (nth 8 pps) (nth 1 pps) (or (looking-at comment-start)))) (when (ignore-errors (< orig erg)) erg))))) (defun py-look-downward-for-clause (&optional ind orig regexp) "If beginning of other clause exists downward in current block. If succesful return position. " (interactive) (unless (eobp) (let ((ind (or ind (save-excursion (py-beginning-of-statement) (if (py-statement-opens-block-p) (current-indentation) (- (current-indentation) py-indent-offset))))) (orig (or orig (point))) (regexp (or regexp py-extended-block-or-clause-re)) erg last) (end-of-line) (when (re-search-forward regexp nil t 1) (when (nth 8 (syntax-ppss)) (while (and (re-search-forward regexp nil t 1) (nth 8 (syntax-ppss))))) (setq last (point)) (back-to-indentation) (unless (and (looking-at py-clause-re) (not (nth 8 (syntax-ppss))) (eq (current-indentation) ind)) (progn (setq ind (current-indentation)) (while (and (py-end-of-statement-bol)(not (looking-at py-clause-re))(<= ind (current-indentation))))) (if (and (looking-at py-clause-re) (not (nth 8 (syntax-ppss))) (< orig (point))) (setq erg (point)) (goto-char orig)))) (when (interactive-p) (message "%s" erg)) erg))) (defun py-current-defun (&optional iact) "Go to the outermost method or class definition in current scope. Python value for `add-log-current-defun-function'. This tells add-log.el how to find the current function/method/variable. Returns name of class or methods definition, if found, nil otherwise. See customizable variables `py-current-defun-show' and `py-current-defun-delay'." (interactive "p") (save-restriction (widen) (save-excursion (let ((erg (when (py-beginning-of-def-or-class) (forward-word 1) (skip-chars-forward " \t") (prin1-to-string (symbol-at-point))))) (when (and erg py-current-defun-show (push-mark (point) t t) (skip-chars-forward "^ (") (exchange-point-and-mark) (sit-for py-current-defun-delay))) (when iact (message (prin1-to-string erg))) erg)))) (defun py-sort-imports () "Sort multiline imports. Put point inside the parentheses of a multiline import and hit \\[py-sort-imports] to sort the imports lexicographically" (interactive) (save-excursion (let ((open-paren (save-excursion (progn (up-list -1) (point)))) (close-paren (save-excursion (progn (up-list 1) (point)))) sorted-imports) (goto-char (1+ open-paren)) (skip-chars-forward " \n\t") (setq sorted-imports (sort (delete-dups (split-string (buffer-substring (point) (save-excursion (goto-char (1- close-paren)) (skip-chars-backward " \n\t") (point))) ", *\\(\n *\\)?")) ;; XXX Should this sort case insensitively? 'string-lessp)) ;; Remove empty strings. (delete-region open-paren close-paren) (goto-char open-paren) (insert "(\n") (insert (py-join-words-wrapping (remove "" sorted-imports) "," " " 78)) (insert ")")))) (defun py-in-literal (&optional lim) "Return non-nil if point is in a Python literal (a comment or string). Optional argument LIM indicates the beginning of the containing form, i.e. the limit on how far back to scan." (let* ((lim (or lim (point-min))) (state (syntax-ppss))) (cond ((nth 3 state) 'string) ((nth 4 state) 'comment)))) (defun py-which-def-or-class () "Returns concatenated `def' and `class' names in hierarchical order, if cursor is inside. Returns \"???\" otherwise Used by variable `which-func-functions' " (interactive) (let* ((orig (point)) (first t) def-or-class done last erg name) (and first (looking-at "[ \t]*\\_<\\(def\\|class\\)\\_>[ \n\t]\\([[:alnum:]_]+\\)")(not (nth 8 (syntax-ppss))) (add-to-list 'def-or-class (match-string-no-properties 2))) (while (and (not (bobp)) (not done) (or (< 0 (current-indentation)) first)) (py-beginning-of-def-or-class) (looking-at "[ \t]*\\_<\\(def\\|class\\)\\_>[ \n\t]\\([[:alnum:]_]+\\)") (setq last (point)) (setq name (match-string-no-properties 2)) (if first (progn (setq first nil) (py-end-of-def-or-class) (if (<= orig (point)) (goto-char last) (setq done t) (goto-char orig))) t) (unless done (add-to-list 'def-or-class name))) (unless done (setq def-or-class (mapconcat 'identity def-or-class "."))) (goto-char orig) (or def-or-class (setq def-or-class "???")) (when (interactive-p) (message "%s" def-or-class)) def-or-class)) (defun py-which-function () "Return the name of the function or class, if curser is in, return nil otherwise. " (interactive) (save-excursion (save-restriction (widen) (let ((orig (point)) (erg (if (and (looking-at (concat py-def-or-class-re " +\\([^(]+\\)(.+")) (not (py-in-string-or-comment-p))) (match-string-no-properties 2) (progn (py-beginning-of-def-or-class) (when (looking-at (concat py-def-or-class-re " +\\([^(]+\\)(.+")) (match-string-no-properties 2)))))) (if (and erg (< orig (py-end-of-def-or-class))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) (setq erg nil) (when (and py-verbose-p (interactive-p)) (message "%s" "Not inside a function or class")) erg))))) (defconst py-help-address "python-mode@python.org" "List dealing with usage and developing python-mode. Also accepts submission of bug reports, whilst a ticket at http://launchpad.net/python-mode is preferable for that. ") ;;; Beginning/End (defalias 'py-backward-statements 'py-beginning-of-statements) (defun py-beginning-of-statements () "Got to the beginning of statements in current level which don't open blocks. " (interactive) (let* ((bounds (py-bounds-of-statements)) (erg (car bounds))) (when erg (goto-char erg)) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defalias 'py-forward-of-statements 'py-end-of-statements) (defun py-end-of-statements () "Got to the end of statements in current level which don't open blocks. " (interactive) (let* ((bounds (py-bounds-of-statements)) (erg (cdr bounds))) (when erg (goto-char erg)) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defalias 'py-backward-expression 'py-beginning-of-expression) (defun py-beginning-of-expression (&optional arg) "Go to the beginning of a compound python expression. With numeric ARG do it that many times. A a compound python expression might be concatenated by \".\" operator, thus composed by minor python expressions. If already at the beginning or before a expression, go to next expression in buffer upwards Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference Operators however are left aside resp. limit py-expression designed for edit-purposes. " (interactive "p") (or arg (setq arg 1)) (let (erg) (if (< 0 arg) (save-restriction (widen) (setq erg (py-beginning-of-expression-intern))) (setq arg (abs arg)) (setq erg (py-end-of-expression arg))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-beginning-of-expression-intern (&optional orig) (unless (bobp) (let ((orig (or orig (point))) (pps (syntax-ppss)) erg) (cond ((and (bolp)(eolp)) (while (and (and (bolp)(eolp))(not (bobp))) (forward-line -1) (end-of-line)) (py-beginning-of-expression-intern orig)) ;; lists ((nth 1 pps) (goto-char (nth 1 pps)) (skip-chars-backward py-expression-skip-chars) (while (or (looking-back (concat py-string-delim-re py-expression-re py-string-delim-re py-operator-regexp) (line-beginning-position) t) (looking-back (concat "[[:alnum:]_]*" py-operator-regexp "[ \t]*") (line-beginning-position) t)) (goto-char (match-beginning 0)))) ;; listed elements ((looking-back (concat "[^ \t\n\r\f]+" py-delimiter-regexp)) (goto-char (match-beginning 0)) (while (looking-back (concat "[^ \t\n\r\f]+" py-delimiter-regexp)) (goto-char (match-beginning 0))) (unless (or (looking-back py-assignment-regexp) (looking-back "^[ \t]*")) (py-beginning-of-expression-intern orig))) ;; strings ((and (nth 3 pps)(nth 8 pps) (goto-char (nth 8 pps))) (cond (;; consider expression a string starting at BOL (bolp)) ((looking-back py-assignment-regexp)) ((looking-back py-operator-regexp) (when (nth 2 pps) (goto-char (nth 2 pps)))) (t (py-beginning-of-expression-intern orig)))) ;; comments left ((nth 8 pps) (goto-char (nth 8 pps)) (unless (bobp) (py-beginning-of-expression-intern orig))) ;; concatenated strings ((looking-back (concat py-string-delim-re py-expression-re py-string-delim-re py-operator-regexp py-string-delim-re py-expression-re py-string-delim-re)) (goto-char (match-beginning 0)) (while (looking-back (concat py-string-delim-re py-expression-re py-string-delim-re py-operator-regexp) (line-beginning-position) t) (goto-char (match-beginning 0))) (skip-chars-backward py-expression-skip-chars)) ;; before comment ((and (looking-at "[ \t]*#") (looking-back "^[ \t]*")) (forward-line -1) (end-of-line) (skip-chars-backward " \t\r\n\f") (unless (bobp) (forward-char -1) (py-beginning-of-expression-intern orig))) ;; before assignment ((looking-back py-assignment-regexp) (goto-char (1- (match-beginning 0))) (forward-char -1) (py-beginning-of-expression-intern orig)) ((looking-back py-operator-regexp) (goto-char (1- (match-beginning 0))) (forward-char -1) (unless (< 0 (abs (skip-chars-backward py-expression-skip-chars))) (py-beginning-of-expression-intern orig))) ((looking-back "\"\\|'") (forward-char -1) (skip-chars-backward "\"'") (unless (looking-back py-assignment-regexp) (py-beginning-of-expression-intern orig))) ((looking-back "(\\|\\[") (forward-char -1) (unless (looking-back py-assignment-regexp) (py-beginning-of-expression-intern orig))) ((looking-back "[\])}]") (forward-char -1) (unless (looking-back py-assignment-regexp) (py-beginning-of-expression-intern orig))) ;; inside expression ((looking-back py-expression-re) (skip-chars-backward py-expression-skip-chars) (unless (or (looking-back "^[ \t]*") (looking-back py-assignment-regexp)) (py-beginning-of-expression-intern orig))) ((looking-back (concat "[ \t]*" "[[:alnum:]_]*" py-operator-regexp "[[:alnum:]_]*") (line-beginning-position) t) (goto-char (match-beginning 0)) (unless (looking-back "^[ \t]*") (py-beginning-of-expression-intern orig))) ((and (eq (point) orig) (looking-back "[ \t\r\n\f]")) (skip-chars-backward " \t\r\n\f") (unless (bobp) (forward-char -1) (py-beginning-of-expression-intern orig))) ((and (eq (point) orig) (not (bobp)) (looking-back py-expression-re)) (forward-char -1) (when (< 0 (abs (skip-chars-backward py-expression-skip-chars))) (py-beginning-of-expression-intern orig))) ((and (looking-at py-expression-re) (not (looking-back "[ \t\r\n\f]"))) (unless (< 0 (abs (skip-chars-backward py-expression-skip-chars))) (py-beginning-of-expression-intern orig))) ((and (eq (point) orig)(looking-back "[ \t]*=")) (goto-char (match-beginning 0)) (skip-chars-backward " \t\r\n\f") (py-beginning-of-expression-intern orig))) (unless (or (eq (point) orig)(looking-at "[ \t]*#")) (setq erg (point))) erg))) (defun py-end-of-expression (&optional arg) "Go to the end of a compound python expression. With numeric ARG do it that many times. A a compound python expression might be concatenated by \".\" operator, thus composed by minor python expressions. Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference Operators however are left aside resp. limit py-expression designed for edit-purposes. " (interactive "p") (or arg (setq arg 1)) (let (erg) (if (< 0 arg) (save-restriction (widen) (while (< 0 arg) (setq erg (py-end-of-expression-intern)) (setq arg (1- arg)))) (setq arg (abs arg)) (setq erg (py-beginning-of-expression arg))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-end-of-expression-intern (&optional orig) (unless (eobp) (let* ((orig (or orig (point))) (pps (syntax-ppss)) erg ;; use by scan-lists parse-sexp-ignore-comments) (cond ((nth 1 pps) (goto-char (nth 1 pps)) (let ((parse-sexp-ignore-comments t)) (forward-list)) (unless (or (looking-at "[ \t]*$")(looking-at py-assignment-regexp)) (py-end-of-expression-intern orig))) ;; in comment ((nth 4 pps) (or (< (point) (progn (forward-comment 1)(point)))(forward-line 1)) (py-end-of-expression-intern orig)) ((and (bolp)(eolp)) (while (and (and (bolp)(eolp))(not (eobp))) (forward-line 1)) (py-end-of-expression-intern orig)) ((looking-at (concat py-string-delim-re py-expression-re py-string-delim-re py-operator-regexp py-string-delim-re py-expression-re py-string-delim-re)) (goto-char (match-end 0)) (while (looking-at (concat py-operator-regexp py-string-delim-re py-expression-re py-string-delim-re)) (goto-char (match-end 0)))) ;; inside string ((py-in-string-p) (when (looking-at "\"\"\"\\|'''\\|\"\\|'") (goto-char (match-end 0))) (while (nth 3 (syntax-ppss)) (forward-char 1)) ;; (if (looking-at ":") ;; (forward-char 1) (unless (looking-at "[ \t]*$") (py-end-of-expression-intern orig))) ((looking-at "[(\[]") (forward-list) ;; (if (looking-at ":") ;; (forward-char 1) (unless (looking-at "[ \t]*$") (py-end-of-expression-intern orig))) ;; ((looking-at ":") ;; (forward-char 1) ;; (unless (or (looking-at "[ \t]*$")(looking-at py-assignment-regexp)) ;; (py-end-of-expression-intern orig))) ((and (looking-at "[ \t]*#")(looking-back "^[ \t]*")) (while (and (looking-at "[ \t]*#") (not (eobp))) (forward-line 1)) (py-end-of-expression-intern orig)) ((looking-at py-assignment-regexp) (goto-char (match-end 0)) (if (looking-at "[(\[]") (forward-list 1) (py-end-of-expression-intern orig))) ((looking-at (concat "[^ \t\n\r\f]+" py-delimiter-regexp)) (goto-char (match-end 0)) (while (looking-at (concat "[^ \t\n\r\f]+" py-delimiter-regexp)) (goto-char (match-end 0))) (forward-char -1) (unless (looking-at (concat py-assignment-regexp "\\|[ \t]*$\\|" py-delimiter-regexp)) (py-end-of-expression-intern orig))) ((looking-at (concat "[ \t]*" "[^ (\t\n\r\f]+" py-operator-regexp "[^ \t\n\r\f]+")) (goto-char (match-end 0)) (while (looking-at (concat "[ \t]*" "[^ (\t]+" py-operator-regexp "[^ \t]+")) (goto-char (match-end 0))) (unless (or (looking-at "[ \t]*$")(looking-at py-assignment-regexp)) (py-end-of-expression-intern orig))) ((looking-at py-not-expression-regexp) (skip-chars-forward py-not-expression-chars) (unless (or (looking-at "[ \t]*$")(looking-at py-assignment-regexp)) (py-end-of-expression-intern orig))) ((looking-at py-expression-skip-regexp) (skip-chars-forward py-expression-skip-chars) (unless (or (looking-at "[ \n\t\r\f]*$")(looking-at py-assignment-regexp)) (py-end-of-expression-intern orig))) ;; ((looking-at ":") ;; (forward-char 1)) ) (unless (or (eq (point) orig)(and (eobp)(bolp))) (setq erg (point))) erg))) ;; Partial- or Minor Expression (defalias 'py-backward-partial-expression 'py-beginning-of-partial-expression) (defun py-beginning-of-partial-expression (&optional orig) (interactive) (let (erg) (skip-chars-backward py-partial-expression-forward-chars) (setq erg (point)) (when (interactive-p) (message "%s" erg)) erg)) (defalias 'py-forward-partial-expression 'py-end-of-partial-expression) (defun py-end-of-partial-expression (&optional orig) (interactive) (let (erg) (skip-chars-forward py-partial-expression-backward-chars) ;; group arg (and (looking-at "[\[{(]") (goto-char (scan-sexps (point) 1))) (setq erg (point)) (when (interactive-p) (message "%s" erg)) erg)) ;; Line (defun py-beginning-of-line () "Go to beginning-of-line, return position. If already at beginning-of-line and not at BOB, go to beginning of previous line. " (interactive) (let ((erg (unless (bobp) (if (bolp) (progn (forward-line -1) (progn (beginning-of-line)(point))) (progn (beginning-of-line)(point)))))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-end-of-line () "Go to end-of-line, return position. If already at end-of-line and not at EOB, go to end of next line. " (interactive) (let ((erg (unless (eobp) (if (eolp) (progn (forward-line 1) (progn (end-of-line)(point))) (progn (end-of-line)(point)))))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) ;; Statement (defalias 'py-backward-statement 'py-beginning-of-statement) (defalias 'py-previous-statement 'py-beginning-of-statement) (defalias 'py-statement-backward 'py-beginning-of-statement) (defun py-beginning-of-statement (&optional orig done limit) "Go to the initial line of a simple statement. For beginning of compound statement use py-beginning-of-block. For beginning of clause py-beginning-of-clause. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html " (interactive) (save-restriction (unless (bobp) (let* ((orig (or orig (point))) (this (point)) (cui (current-indentation)) (pps (progn (goto-char this) (parse-partial-sexp (or limit (point-min))(point)))) (done done) erg) (cond ((and (bolp)(eolp)) (skip-chars-backward " \t\r\n\f") (py-beginning-of-statement orig done limit)) ((nth 8 pps) (and (nth 3 pps) (setq done t)) (goto-char (nth 8 pps)) (py-beginning-of-statement orig done limit)) ((nth 1 pps) (goto-char (1- (nth 1 pps))) (setq done t) (py-beginning-of-statement orig done limit)) ((py-preceding-line-backslashed-p) (forward-line -1) (back-to-indentation) (setq done t) (py-beginning-of-statement orig done limit)) ((and (looking-at "[ \t]*#")(looking-back "^[ \t]*")) (forward-comment -1) (while (and (not (bobp)) (looking-at "[ \t]*#")(looking-back "^[ \t]*")) (forward-comment -1)) (unless (bobp) (py-beginning-of-statement orig done limit))) ((looking-at "[ \t]*#") (skip-chars-backward (concat "^" comment-start) (line-beginning-position)) (back-to-indentation) (unless (bobp) (py-beginning-of-statement orig done limit))) ((and (not done) (looking-at py-string-delim-re)) (when (< 0 (abs (skip-chars-backward " \t\r\n\f"))) (setq done t)) (back-to-indentation) (py-beginning-of-statement orig done limit)) ((and (not (eq (point) orig))(looking-back "^[ \t]*")) (setq erg (point))) ((and (not done) (not (eq 0 (skip-chars-backward " \t\r\n\f")))) ;; (setq done t) (py-beginning-of-statement orig done limit)) ((not (eq (current-column) (current-indentation))) (if (< 0 (abs (skip-chars-backward "^\t\r\n\f"))) (progn (setq done t) (back-to-indentation) (py-beginning-of-statement orig done limit)) (back-to-indentation) (setq done t) (py-beginning-of-statement orig done limit)))) (unless (and (looking-at "[ \t]*#") (looking-back "^[ \t]*")) (when (< (point) orig)(setq erg (point)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)))) (defalias 'py-backward-declarations 'py-beginning-of-declarations) (defun py-beginning-of-declarations () "Got to the beginning of assigments resp. statements in current level which don't open blocks. " (interactive) (let* ((bounds (py-bounds-of-declarations)) (erg (car bounds))) (when erg (goto-char erg)) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defalias 'py-forward-of-declarations 'py-end-of-declarations) (defun py-end-of-declarations () "Got to the end of assigments resp. statements in current level which don't open blocks. " (interactive) (let* ((bounds (py-bounds-of-declarations)) (erg (cdr bounds))) (when erg (goto-char erg)) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) ;;; Beginning of forms (defun py-beginning-of-form-intern (regexp &optional iact indent orig lc) "Go to beginning of FORM. With INDENT, go to beginning one level above. Whit IACT, print result in message buffer. Returns beginning of FORM if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive "P") (let (erg) (unless (bobp) (let* ((orig (or orig (point))) (indent (or indent (progn (back-to-indentation) (or (py-beginning-of-statement-p) (py-beginning-of-statement)) (current-indentation))))) (setq erg (cond ((and (< (point) orig) (looking-at (symbol-value regexp))) (point)) ((and (eq 0 (current-column)) (numberp indent) (< 0 indent)) (when (< 0 (abs (skip-chars-backward " \t\r\n\f"))) (py-beginning-of-statement) (unless (looking-at (symbol-value regexp)) (cdr (py-go-to-keyword (symbol-value regexp) (current-indentation)))))) ;; indent from first beginning of clause matters ;; ((not (looking-at py-extended-block-or-clause-re)) ;; (py-go-to-keyword py-extended-block-or-clause-re indent) ;; (if (looking-at (symbol-value regexp)) ;; (setq erg (point)) ;; (py-beginning-of-form-intern regexp iact (current-indentation) orig))) ((numberp indent) (ignore-errors (cdr (py-go-to-keyword (symbol-value regexp) indent)))) (t (ignore-errors (cdr (py-go-to-keyword (symbol-value regexp) (- (progn (if (py-beginning-of-statement-p) (current-indentation) (save-excursion (py-beginning-of-statement) (current-indentation)))) py-indent-offset))))))) (when lc (beginning-of-line) (setq erg (point))))) (when (and py-verbose-p iact) (message "%s" erg)) erg)) (defun py--narrow-in-comint-modes (&optional done limit) "In comint-modes, limit region to previous prompt. " (let ((pos (point)) (limit (or limit (and (or (eq major-mode 'comint-mode)(eq major-mode 'inferior-python-mode)) (if (re-search-backward comint-prompt-regexp nil t 1) (match-end 0) (error (format "py-beginning-of-statement: No prompt found in %s mode" major-mode))))))) (and limit (not done) (goto-char (match-end 0)) (skip-chars-forward " \t") (narrow-to-region (point) pos)))) (defun py-beginning-of-prepare (indent final-re &optional inter-re iact lc) (let ((orig (point)) (indent (or indent (progn (back-to-indentation) (or (py-beginning-of-statement-p) (py-beginning-of-statement)) (cond ((eq 0 (current-indentation)) (current-indentation)) ((looking-at (symbol-value inter-re)) (current-indentation)) (t (if (<= py-indent-offset (current-indentation)) (- (current-indentation) (if py-smart-indentation (py-guess-indent-offset) py-indent-offset)) py-indent-offset)))))) erg) (if (and (< (point) orig) (looking-at (symbol-value final-re))) (progn (and lc (beginning-of-line)) (setq erg (point)) (when (and py-verbose-p iact) (message "%s" erg)) erg) (py-beginning-of-form-intern final-re iact indent orig lc)))) (defun py-beginning-of-block (&optional indent) "Go to beginning block, skip whitespace at BOL. Returns beginning of block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (py-beginning-of-prepare indent 'py-block-re 'py-clause-re (interactive-p))) (defun py-beginning-of-clause (&optional indent) "Go to beginning clause, skip whitespace at BOL. Returns beginning of clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (py-beginning-of-prepare indent 'py-extended-block-or-clause-re 'py-extended-block-or-clause-re (interactive-p))) (defun py-beginning-of-block-or-clause (&optional indent) "Go to beginning block-or-clause, skip whitespace at BOL. Returns beginning of block-or-clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (py-beginning-of-prepare indent 'py-extended-block-or-clause-re 'py-extended-block-or-clause-re (interactive-p))) (defun py-beginning-of-def (&optional indent) "Go to beginning def, skip whitespace at BOL. Returns beginning of def if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (py-beginning-of-prepare indent 'py-def-re 'py-extended-block-or-clause-re (interactive-p))) (defun py-beginning-of-class (&optional indent) "Go to beginning class, skip whitespace at BOL. Returns beginning of class if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (py-beginning-of-prepare indent 'py-class-re 'py-extended-block-or-clause-re (interactive-p))) (defun py-beginning-of-def-or-class (&optional indent) "Go to beginning def-or-class, skip whitespace at BOL. Returns beginning of def-or-class if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. " (interactive) (py-beginning-of-prepare indent 'py-def-or-class-re 'py-extended-block-or-clause-re (interactive-p))) (defun py-beginning-of-if-block (&optional indent) "Go to beginning if-block, skip whitespace at BOL. Returns beginning of if-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (py-beginning-of-prepare indent 'py-if-block-re 'py-clause-re (interactive-p))) (defun py-beginning-of-try-block (&optional indent) "Go to beginning try-block, skip whitespace at BOL. Returns beginning of try-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (py-beginning-of-prepare indent 'py-try-block-re 'py-clause-re (interactive-p))) (defun py-beginning-of-minor-block (&optional indent) "Go to beginning minor-block, skip whitespace at BOL. Returns beginning of minor-block if successful, nil otherwise A minor block is started by a `for', `if', `try' or `with'. " (interactive) (py-beginning-of-prepare indent 'py-minor-block-re 'py-clause-re (interactive-p))) (defalias 'py-beginning-of-block-bol 'py-beginning-of-block-lc) (defun py-beginning-of-block-lc (&optional indent) "Go to beginning block, go to BOL. Returns beginning of block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (py-beginning-of-prepare indent 'py-block-re 'py-clause-re (interactive-p) t)) (defalias 'py-beginning-of-clause-bol 'py-beginning-of-clause-lc) (defun py-beginning-of-clause-lc (&optional indent) "Go to beginning clause, go to BOL. Returns beginning of clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (py-beginning-of-prepare indent 'py-extended-block-or-clause-re 'py-extended-block-or-clause-re (interactive-p) t)) (defalias 'py-beginning-of-block-or-clause-bol 'py-beginning-of-block-or-clause-lc) (defun py-beginning-of-block-or-clause-lc (&optional indent) "Go to beginning block-or-clause, go to BOL. Returns beginning of block-or-clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (py-beginning-of-prepare indent 'py-extended-block-or-clause-re 'py-extended-block-or-clause-re (interactive-p) t)) (defalias 'py-beginning-of-def-bol 'py-beginning-of-def-lc) (defun py-beginning-of-def-lc (&optional indent) "Go to beginning def, go to BOL. Returns beginning of def if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (py-beginning-of-prepare indent 'py-def-re 'py-extended-block-or-clause-re (interactive-p) t)) (defalias 'py-beginning-of-class-bol 'py-beginning-of-class-lc) (defun py-beginning-of-class-lc (&optional indent) "Go to beginning class, go to BOL. Returns beginning of class if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (py-beginning-of-prepare indent 'py-class-re 'py-extended-block-or-clause-re (interactive-p) t)) (defalias 'py-beginning-of-def-or-class-bol 'py-beginning-of-def-or-class-lc) (defun py-beginning-of-def-or-class-lc (&optional indent) "Go to beginning def-or-class, go to BOL. Returns beginning of def-or-class if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (py-beginning-of-prepare indent 'py-def-or-class-re 'py-extended-block-or-clause-re (interactive-p) t)) (defalias 'py-beginning-of-if-block-bol 'py-beginning-of-if-block-lc) (defun py-beginning-of-if-block-lc (&optional indent) "Go to beginning if-block, go to BOL. Returns beginning of if-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (py-beginning-of-prepare indent 'py-if-block-re 'py-clause-re (interactive-p) t)) (defalias 'py-beginning-of-try-block-bol 'py-beginning-of-try-block-lc) (defun py-beginning-of-try-block-lc (&optional indent) "Go to beginning try-block, go to BOL. Returns beginning of try-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (py-beginning-of-prepare indent 'py-try-block-re 'py-clause-re (interactive-p) t)) (defalias 'py-beginning-of-minor-block-bol 'py-beginning-of-minor-block-lc) (defun py-beginning-of-minor-block-lc (&optional indent) "Go to beginning minor-block, go to BOL. Returns beginning of minor-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (py-beginning-of-prepare indent 'py-minor-block-re 'py-clause-re (interactive-p) t)) ;;; (defun py-beginning-of-top-level () "Go up to beginning of statments until level of indentation is null. Returns position if successful, nil otherwise " (interactive) (let (erg) (unless (bobp) (while (and (not (bobp)) (setq erg (py-beginning-of-statement)) (< 0 (current-indentation)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-end-of-top-level () "Go to end of top-level form at point. Returns position if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (let ((orig (point)) erg) (unless (eobp) (unless (py-beginning-of-statement-p) (py-beginning-of-statement)) (unless (eq 0 (current-column)) (py-beginning-of-top-level)) (cond ((looking-at py-def-re) (setq erg (py-end-of-def))) ((looking-at py-class-re) (setq erg (py-end-of-class))) ((looking-at py-block-re) (setq erg (py-end-of-block))) (t (setq erg (py-end-of-statement)))) (unless (< orig (point)) (while (and (not (eobp)) (py-down-statement)(< 0 (current-indentation)))) (if (looking-at py-block-re) (setq erg (py-end-of-block)) (setq erg (py-end-of-statement)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py-beginning () "Go to beginning of compound statement or definition at point. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive) (py-beginning-of-form-intern 'py-extended-block-or-clause-re (interactive-p))) (defun py-end (&optional indent) "Go to end of of compound statement or definition at point. Returns position block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive "P") (let* ((orig (point)) (erg (py-end-base 'py-extended-block-or-clause-re orig))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-up (&optional indent) "Go up or to beginning of form if inside. If inside a delimited form --string or list-- go to it's beginning. If not at beginning of a statement or block, go to it's beginning. If at beginning of a statement or block, go to beginning one level above of compound statement or definition at point. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive "P") (let ((pps (syntax-ppss))) (cond ((nth 8 pps) (goto-char (nth 8 pps))) ((nth 1 pps) (goto-char (nth 1 pps))) ((py-beginning-of-statement-p) (py-beginning-of-form-intern 'py-extended-block-or-clause-re (interactive-p))) (t (py-beginning-of-statement))))) (defun py-down (&optional indent) "Go to beginning one level below of compound statement or definition at point. If no statement or block below, but a delimited form --string or list-- go to it's beginning. Repeated call from there will behave like down-list. Returns position if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive "P") (let* ((orig (point)) erg (indent (if (py-beginning-of-statement-p) (current-indentation) (progn (py-beginning-of-statement) (current-indentation)))) last) (while (and (setq last (point)) (py-end-of-statement) (py-end-of-statement) (py-beginning-of-statement) (eq (current-indentation) indent))) (if (< indent (current-indentation)) (setq erg (point)) (goto-char last)) (when (< (point) orig) (goto-char orig)) (when (and (eq (point) orig) (progn (forward-char 1) (skip-chars-forward "^\"'[({" (line-end-position)) (member (char-after) (list ?\( ?\" ?\' ?\[ ?\{))) (setq erg (point)))) (unless erg (goto-char orig)) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-end-of-block (&optional indent) "Go to end of block. Returns end of block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive "P") (let* ((orig (point)) (erg (py-end-base 'py-block-re orig))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-end-of-clause (&optional indent) "Go to end of clause. Returns end of clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive "P") (let* ((orig (point)) (erg (py-end-base 'py-clause-re orig))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-end-of-block-or-clause (&optional indent) "Go to end of block-or-clause. Returns end of block-or-clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive "P") (let* ((orig (point)) (erg (py-end-base 'py-block-or-clause-re orig))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-end-of-def (&optional indent) "Go to end of def. Returns end of def if successful, nil otherwise With \\[universal argument] or `py-mark-decorators' set to `t', decorators are marked too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive "P") (let* ((orig (point)) (erg (py-end-base 'py-def-re orig))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-end-of-class (&optional indent) "Go to end of class. Returns end of class if successful, nil otherwise With \\[universal argument] or `py-mark-decorators' set to `t', decorators are marked too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive "P") (let* ((orig (point)) (erg (py-end-base 'py-class-re orig))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-end-of-def-or-class (&optional indent) "Go to end of def-or-class. Returns end of def-or-class if successful, nil otherwise With \\[universal argument] or `py-mark-decorators' set to `t', decorators are marked too. " (interactive "P") (let* ((orig (point)) (erg (py-end-base 'py-def-or-class-re orig))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-end-of-if-block (&optional indent) "Go to end of if-block. Returns end of if-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive "P") (let* ((orig (point)) (erg (py-end-base 'py-if-block-re orig))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-end-of-try-block (&optional indent) "Go to end of try-block. Returns end of try-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html" (interactive "P") (let* ((orig (point)) (erg (py-end-base 'py-try-block-re orig))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-end-of-minor-block (&optional indent) "Go to end of minor-block. Returns end of minor-block if successful, nil otherwise A minor block is started by a `for', `if', `try' or `with'. " (interactive "P") (let* ((orig (point)) (erg (py-end-base 'py-minor-block-re orig))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) ;; Buffer (defun py-beginning-of-buffer () "Go to beginning-of-buffer, return position. " (let ((erg (unless (bobp) (goto-char (point-min))))) erg)) (defun py-end-of-buffer () "Go to end-of-buffer, return position. If already at end-of-buffer and not at EOB, go to end of next line. " (let ((erg (unless (eobp) (goto-char (point-max))))) erg)) (defalias 'py-forward-block 'py-end-of-block) (defalias 'py-forward-block-or-clause 'py-end-of-block-or-clause) (defalias 'py-forward-class 'py-end-of-class) (defalias 'py-forward-clause 'py-end-of-clause) (defalias 'end-of-def-or-class 'py-end-of-def-or-class) (defalias 'py-forward-def-or-class 'py-end-of-def-or-class) (defalias 'py-previous-block 'py-beginning-of-block) (defalias 'py-goto-block-up 'py-beginning-of-block) (defalias 'py-backward-block 'py-beginning-of-block) (defalias 'py-previous-block-or-clause 'py-beginning-of-block-or-clause) (defalias 'py-goto-block-or-clause-up 'py-beginning-of-block-or-clause) (defalias 'py-backward-block-or-clause 'py-beginning-of-block-or-clause) (defalias 'beginning-of-class 'py-beginning-of-class) (defalias 'py-backward-class 'py-beginning-of-class) (defalias 'py-previous-class 'py-beginning-of-class) (defalias 'py-previous-clause 'py-beginning-of-clause) (defalias 'py-goto-clause-up 'py-beginning-of-clause) (defalias 'py-backward-clause 'py-beginning-of-clause) (defalias 'py-backward-def-or-class 'py-beginning-of-def-or-class) (defalias 'py-previous-def-or-class 'py-beginning-of-def-or-class) ;;; Forms ;; Declarations (defun py-declarations () "Copy and mark assigments resp. statements in current level which don't open blocks or start with a keyword. See also `py-statements', which is more general, taking also simple statements starting with a keyword. " (interactive) (let* ((bounds (py-bounds-of-declarations)) (beg (car bounds)) (end (cdr bounds))) (when (and beg end) (goto-char beg) (push-mark) (goto-char end) (kill-new (buffer-substring-no-properties beg end)) (exchange-point-and-mark)))) ;; Statements (defun py-statements () "Copy and mark simple statements in current level which don't open blocks. More general than py-declarations, which would stop at keywords like a print-statement. " (interactive) (let* ((bounds (py-bounds-of-statements)) (beg (car bounds)) (end (cdr bounds))) (when (and beg end) (goto-char beg) (push-mark) (goto-char end) (kill-new (buffer-substring-no-properties beg end)) (exchange-point-and-mark)))) (defun py-go-to-keyword (regexp &optional maxindent) "Returns a list, whose car is indentation, cdr position. " (let ((orig (point)) (maxindent (or maxindent (and (< 0 (current-indentation))(current-indentation)) ;; make maxindent large enough if not set (* 99 py-indent-offset))) (first t) done erg cui) (while (and (not done) (not (bobp))) (while (and (re-search-backward regexp nil 'move 1)(nth 8 (syntax-ppss)))) ;; (or (< (point) orig) (py-beginning-of-statement)) (if (and (looking-at regexp)(if maxindent (<= (current-indentation) maxindent) t)) (progn (setq erg (point)) (setq done t)) (when (and first (not maxindent)) (setq maxindent (current-indentation)) (setq first nil)))) (when erg (setq erg (cons (current-indentation) erg))) erg)) (defun py-go-to-keyword-above (regexp &optional maxindent) "Returns a list, whose car is indentation, cdr position. " (let ((orig (point)) (maxindent (or maxindent (and (< 0 (current-indentation))(current-indentation)) ;; make maxindent large enough if not set (* 99 py-indent-offset))) (first t) done erg cui) (while (and (not done) (not (bobp))) (py-beginning-of-statement) (if (and (looking-at regexp)(if maxindent (< (current-indentation) maxindent) t)) (progn (setq erg (point)) (setq done t)) (when (and first (not maxindent)) (setq maxindent (current-indentation)) (setq first nil)))) (when erg (if (looking-at regexp) (setq erg (cons (current-indentation) erg)) (setq erg nil ))) erg)) (defun py-eos-handle-comment-start () (end-of-line) (forward-comment 99999) ;; (skip-chars-forward (concat "^" comment-start) (line-end-position)) ;; (skip-chars-backward " \t\r\n\f" (line-beginning-position)) ) (defun py-eos-handle-doublequoted-string-start (this) "Internal use, find possible end of statement from string start. " (when (and (setq this (point)) (progn (while (and (not (eobp)) (search-forward (match-string-no-properties 0) nil t 1) (nth 8 (syntax-ppss)))) (< this (point)))) (skip-chars-forward (concat "^" comment-start) (line-end-position)) (skip-chars-backward " \t\r\n\f"))) (defun py-eos-handle-singlequoted-string-start (this) "Internal use, find possible end of statement from string start. " (when (and (setq this (point)) (progn (ignore-errors (goto-char (scan-sexps (point) 1))) (< this (point)))) (skip-chars-forward (concat "^" comment-start) (line-end-position)) (skip-chars-backward " \t\r\n\f"))) (defun py-handle-eol () (skip-chars-backward " \t\r\n\f" (line-beginning-position)) (when (py-beginning-of-comment) (skip-chars-backward " \t\r\n\f" (line-beginning-position)))) (defun py-eos-handle-string-start (this) "Internal use, find possible end of statement from string start. " (when (and (setq this (point)) (progn (or (if (save-match-data (string-match "'" (match-string-no-properties 0))) (ignore-errors (goto-char (scan-sexps (point) 1)))) (while (and (search-forward (match-string-no-properties 0) nil t 1) (nth 8 (syntax-ppss))))) (< this (point)))) (skip-chars-forward (concat "^" comment-start) (line-end-position)) (skip-chars-backward " \t\r\n\f"))) (defalias 'py-statement-forward 'py-end-of-statement) (defalias 'py-next-statement 'py-end-of-statement) (defalias 'py-forward-statement 'py-end-of-statement) (defun py--skip-to-comment-or-semicolon () (and (< 0 (abs (skip-chars-forward "^#;" (line-end-position)))) (if (eq ?\; (char-after)) (skip-chars-forward ";" (line-end-position)) (skip-chars-backward " \t" (line-beginning-position))) (setq done t))) (defun py--eos-in-string () "Return stm, i.e. if string is part of a (print)-statement. " (let ((orig (point)) pos stm) (goto-char (nth 8 pps)) (unless (looking-back "^[ \t]*") (setq stm t)) ;; go to end of string (and (member (char-after) (list ?' ?\")) (ignore-errors (setq pos (scan-sexps (point) 1))) (goto-char pos)) ;; if no closing string delimiter, pos doesn't exist (unless (or stm (not pos)) (setq done t) (unless (eq 10 (char-after)) (and (< 0 (abs (skip-chars-forward "^;#" (line-end-position)))) (eq ?\; (char-after)) (skip-chars-forward ";")))) stm)) (defun py--end-of-comment-intern (pos) (while (and (not (eobp)) (forward-comment 99999))) ;; forward-comment fails sometimes (and (eq pos (point)) (prog1 (forward-line 1) (back-to-indentation)) (while (member (char-after) (list ?# 10))(forward-line 1)(back-to-indentation)))) (defun py--end-of-statement-intern () (py--skip-to-comment-or-semicolon) (let ((pos (point)) (pps (syntax-ppss)) stm) (cond ((nth 3 pps) (and (py--eos-in-string) (py--end-of-statement-intern))) ((nth 4 pps) (py--end-of-comment-intern pos)) ((nth 1 pps) (when (< orig (point)) (setq orig (point))) (goto-char (nth 1 pps)) (let ((parse-sexp-ignore-comments t)) (if (ignore-errors (forward-list)) (progn (when (looking-at ":[ \t]*$") (forward-char 1)) (setq done t) (skip-chars-forward "^#" (line-end-position)) (skip-chars-backward " \t\r\n\f" (line-beginning-position)) (py-end-of-statement orig done repeat)) (goto-char orig))))))) (defun py-end-of-statement (&optional orig done repeat) "Go to the last char of current statement. To go just beyond the final line of the current statement, use `py-down-statement-bol'. Optional argument REPEAT, the number of loops done already, is checked for py-max-specpdl-size error. Avoid eternal loops due to missing string delimters etc. " (interactive) (unless (eobp) (let ((repeat (or (and repeat (1+ repeat)) 0)) (orig (or orig (point))) erg pos last ;; use by scan-lists parse-sexp-ignore-comments forward-sexp-function stringchar stm pps) (unless done (py--skip-to-comment-or-semicolon)) (setq pps (syntax-ppss)) ;; (origline (or origline (py-count-lines))) (cond ;; wich-function-mode, lp:1235375 ((< py-max-specpdl-size repeat) (error "py-end-of-statement reached loops max. If no error, customize `py-max-specpdl-size'")) ;; list ((nth 1 pps) (when (< orig (point)) (setq orig (point))) (goto-char (nth 1 pps)) (let ((parse-sexp-ignore-comments t)) (if (ignore-errors (forward-list)) (progn (when (looking-at ":[ \t]*$") (forward-char 1)) (setq done t) (skip-chars-forward "^#" (line-end-position)) (skip-chars-backward " \t\r\n\f" (line-beginning-position)) (py-end-of-statement orig done repeat)) (goto-char orig)))) ;; string ((nth 3 pps) (and (py--eos-in-string) (py--end-of-statement-intern)) (setq pps (syntax-ppss)) (unless (and done (not (or (nth 1 pps) (nth 8 pps)))) (py-end-of-statement orig t repeat))) ;; in comment ((nth 4 pps) (py--end-of-comment-intern (point)) (py--skip-to-comment-or-semicolon) ;; (and (not done) ;; (< 0 (abs (skip-chars-forward "^;#" (line-end-position)))) ;; (or (and (eq ?\; (char-after)) ;; (skip-chars-forward ";")) ;; (skip-chars-backward " \t"))) ;; travle backslashed lines (while (and (eq (char-before (point)) ?\\ ) (py-escaped)(setq last (point))) (forward-line 1)(end-of-line)) (and last (goto-char last) (forward-line 1) (back-to-indentation)) (py-end-of-statement orig t repeat)) ((py-current-line-backslashed-p) (end-of-line) (skip-chars-backward " \t\r\n\f" (line-beginning-position)) (while (and (eq (char-before (point)) ?\\ ) (py-escaped)) (forward-line 1) (end-of-line) (skip-chars-backward " \t\r\n\f" (line-beginning-position))) (unless (eobp) (py-end-of-statement orig done repeat))) ((eq (current-indentation) (current-column)) (or (py--skip-to-comment-or-semicolon) (forward-char 1)) (setq pps (syntax-ppss)) (unless done (py--end-of-statement-intern) (py-end-of-statement orig done repeat))) ((eq orig (point)) (skip-chars-forward " \t\r\n\f#'\"") (py--skip-to-comment-or-semicolon) (py--end-of-statement-intern) (py-end-of-statement orig done repeat))) (unless (or (eq (point) orig) (member (char-before) (list 10 32 9))) (setq erg (point))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) ;;; (defun py-goto-statement-below () "Goto beginning of next statement. " (interactive) (let ((orig (point)) (erg (py-end-of-statement))) (py-beginning-of-statement) (when (< (point) orig) (goto-char erg) (py-end-of-statement) (py-beginning-of-statement)))) ;; Decorator (defun py-beginning-of-decorator () "Go to the beginning of a decorator. Returns position if succesful " (interactive) (back-to-indentation) (while (and (not (looking-at "@\\w+"))(not (and (bolp)(eolp)))(not (bobp))(forward-line -1)) (back-to-indentation)) (let ((erg (when (looking-at "@\\w+")(match-beginning 0)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-end-of-decorator () "Go to the end of a decorator. Returns position if succesful " (interactive) (let ((orig (point)) erg) (unless (looking-at "@\\w+") (setq erg (py-beginning-of-decorator))) (when erg (if (re-search-forward py-def-or-class-re nil t) (progn (back-to-indentation) (skip-chars-backward " \t\r\n\f") (py-leave-comment-or-string-backward) (skip-chars-backward " \t\r\n\f") (setq erg (point))) (goto-char orig) (end-of-line) (skip-chars-backward " \t\r\n\f") (when (ignore-errors (goto-char (py-in-list-p))) (forward-list)) (when (< orig (point)) (setq erg (point)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg))) (defun py--base (form &optional py-mark-decorators) "Returns boundaries of FORM, a cons. " (let* ((begform (intern-soft (concat "py-beginning-of-" form))) (endform (intern-soft (concat "py-end-of-" form))) (begcheckform (intern-soft (concat "py-beginning-of-" form "-p"))) (orig (point)) beg end erg) (setq beg (if (setq beg (funcall begcheckform)) beg (funcall begform))) (and py-mark-decorators (and (setq erg (py-beginning-of-decorator)) (setq beg erg))) (setq end (funcall endform)) (unless end (when (< beg (point)) (setq end (point)))) (when (interactive-p) (message "%s %s" beg end)) (cons beg end))) ;;; Forms (defun py-statement () "Statement at point. Return code of `py-statement' at point, a string. " (interactive) (let ((erg (py--base "statement"))) (buffer-substring-no-properties (car erg) (cdr erg)))) (defun py-top-level () "Top-Level at point. Return code of `py-top-level' at point, a string. " (interactive) (let ((erg (py--base "top-level"))) (buffer-substring-no-properties (car erg) (cdr erg)))) (defun py-block () "Block at point. Return code of `py-block' at point, a string. " (interactive) (let ((erg (py--base "block"))) (buffer-substring-no-properties (car erg) (cdr erg)))) (defun py-clause () "Clause at point. Return code of `py-clause' at point, a string. " (interactive) (let ((erg (py--base "clause"))) (buffer-substring-no-properties (car erg) (cdr erg)))) (defun py-block-or-clause () "Block-Or-Clause at point. Return code of `py-block-or-clause' at point, a string. " (interactive) (let ((erg (py--base "block-or-clause"))) (buffer-substring-no-properties (car erg) (cdr erg)))) (defun py-def () "Def at point. Return code of `py-def' at point, a string. " (interactive) (let ((erg (py--base "def"))) (buffer-substring-no-properties (car erg) (cdr erg)))) (defun py-class () "Class at point. Return code of `py-class' at point, a string. " (interactive) (let ((erg (py--base "class"))) (buffer-substring-no-properties (car erg) (cdr erg)))) (defun py-def-or-class () "Def-Or-Class at point. Return code of `py-def-or-class' at point, a string. " (interactive) (let ((erg (py--base "def-or-class"))) (buffer-substring-no-properties (car erg) (cdr erg)))) (defun py-expression () "Expression at point. Return code of `py-expression' at point, a string. " (interactive) (let ((erg (py--base "expression"))) (buffer-substring-no-properties (car erg) (cdr erg)))) (defun py-partial-expression () "Partial-Expression at point. Return code of `py-partial-expression' at point, a string. " (interactive) (let ((erg (py--base "partial-expression"))) (buffer-substring-no-properties (car erg) (cdr erg)))) (defun py-minor-block () "Minor-Block at point. Return code of `py-minor-block' at point, a string. " (interactive) (let ((erg (py--base "minor-block"))) (buffer-substring-no-properties (car erg) (cdr erg)))) ;;; Mark (defun py-mark-base (form &optional py-mark-decorators) "Calls py--base, returns bounds of form, a cons. " (let* ((bounds (py--base form py-mark-decorators)) (beg (car bounds))) (push-mark beg t t) bounds)) (defun py-mark-paragraph () "Mark paragraph at point. Returns beginning and end positions of marked area, a cons. " (interactive) (let (erg) (setq erg (py-mark-base "paragraph")) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-mark-block () "Mark block at point. Returns beginning and end positions of marked area, a cons. " (interactive) (let (erg) (setq erg (py-mark-base "block")) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-mark-minor-block () "Mark minor-block at point. Returns beginning and end positions of marked area, a cons. " (interactive) (let (erg) (setq erg (py-mark-base "minor-block")) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-mark-clause () "Mark clause at point. Returns beginning and end positions of marked area, a cons. " (interactive) (let (erg) (setq erg (py-mark-base "clause")) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-mark-block-or-clause () "Mark block-or-clause at point. Returns beginning and end positions of marked area, a cons. " (interactive) (let (erg) (setq erg (py-mark-base "block-or-clause")) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-mark-def (&optional arg) "Mark def at point. With \\[universal argument] or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of marked area, a cons. " (interactive "P") (let ((py-mark-decorators (or arg py-mark-decorators)) erg) (py-mark-base "def" py-mark-decorators) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-mark-class (&optional arg) "Mark class at point. With \\[universal argument] or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of marked area, a cons. " (interactive "P") (let ((py-mark-decorators (or arg py-mark-decorators)) erg) (py-mark-base "class" py-mark-decorators) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-mark-def-or-class (&optional arg) "Mark def-or-class at point. With \\[universal argument] or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of marked area, a cons. " (interactive "P") (let ((py-mark-decorators (or arg py-mark-decorators)) erg) (py-mark-base "def-or-class" py-mark-decorators) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-mark-line () "Mark line at point. Returns beginning and end positions of marked area, a cons. " (interactive) (let (erg) (setq erg (py-mark-base "line")) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-mark-statement () "Mark statement at point. Returns beginning and end positions of marked area, a cons. " (interactive) (let (erg) (setq erg (py-mark-base "statement")) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-mark-top-level () "Mark top-level form at point. Returns beginning and end positions of marked area, a cons. " (interactive) (let (erg) (setq erg (py-mark-base "top-level")) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-mark-expression () "Mark expression at point. Returns beginning and end positions of marked area, a cons. " (interactive) (let (erg) (setq erg (py-mark-base "expression")) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-mark-partial-expression () "Mark partial-expression at point. Returns beginning and end positions of marked area, a cons. " (interactive) (let (erg) (setq erg (py-mark-base "partial-expression")) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) ;;; Copy (defun py-copy-statement () "Copy statement at point. Store data in kill ring, so it might yanked back. " (interactive "*") (let ((erg (py-mark-base "statement"))) (copy-region-as-kill (car erg) (cdr erg)))) (defun py-copy-top-level () "Copy top-level at point. Store data in kill ring, so it might yanked back. " (interactive "*") (let ((erg (py-mark-base "top-level"))) (copy-region-as-kill (car erg) (cdr erg)))) (defun py-copy-block () "Copy block at point. Store data in kill ring, so it might yanked back. " (interactive "*") (let ((erg (py-mark-base "block"))) (copy-region-as-kill (car erg) (cdr erg)))) (defun py-copy-clause () "Copy clause at point. Store data in kill ring, so it might yanked back. " (interactive "*") (let ((erg (py-mark-base "clause"))) (copy-region-as-kill (car erg) (cdr erg)))) (defun py-copy-block-or-clause () "Copy block-or-clause at point. Store data in kill ring, so it might yanked back. " (interactive "*") (let ((erg (py-mark-base "block-or-clause"))) (copy-region-as-kill (car erg) (cdr erg)))) (defun py-copy-def () "Copy def at point. Store data in kill ring, so it might yanked back. " (interactive "*") (let ((erg (py-mark-base "def"))) (copy-region-as-kill (car erg) (cdr erg)))) (defun py-copy-class () "Copy class at point. Store data in kill ring, so it might yanked back. " (interactive "*") (let ((erg (py-mark-base "class"))) (copy-region-as-kill (car erg) (cdr erg)))) (defun py-copy-def-or-class () "Copy def-or-class at point. Store data in kill ring, so it might yanked back. " (interactive "*") (let ((erg (py-mark-base "def-or-class"))) (copy-region-as-kill (car erg) (cdr erg)))) (defun py-copy-expression () "Copy expression at point. Store data in kill ring, so it might yanked back. " (interactive "*") (let ((erg (py-mark-base "expression"))) (copy-region-as-kill (car erg) (cdr erg)))) (defun py-copy-partial-expression () "Copy partial-expression at point. Store data in kill ring, so it might yanked back. " (interactive "*") (let ((erg (py-mark-base "partial-expression"))) (copy-region-as-kill (car erg) (cdr erg)))) (defun py-copy-minor-block () "Copy minor-block at point. Store data in kill ring, so it might yanked back. " (interactive "*") (let ((erg (py-mark-base "minor-block"))) (copy-region-as-kill (car erg) (cdr erg)))) ;;; Delete (defun py-delete-statement () "Delete STATEMENT at point. Don't store data in kill ring. " (interactive "*") (let ((erg (py-mark-base "statement"))) (delete-region (car erg) (cdr erg)))) (defun py-delete-top-level () "Delete TOP-LEVEL at point. Don't store data in kill ring. " (interactive "*") (let ((erg (py-mark-base "top-level"))) (delete-region (car erg) (cdr erg)))) (defun py-delete-block () "Delete BLOCK at point. Don't store data in kill ring. " (interactive "*") (let ((erg (py-mark-base "block"))) (delete-region (car erg) (cdr erg)))) (defun py-delete-block-or-clause () "Delete BLOCK-OR-CLAUSE at point. Don't store data in kill ring. " (interactive "*") (let ((erg (py-mark-base "block-or-clause"))) (delete-region (car erg) (cdr erg)))) (defun py-delete-def () "Delete DEF at point. Don't store data in kill ring. " (interactive "*") (let ((erg (py-mark-base "def"))) (delete-region (car erg) (cdr erg)))) (defun py-delete-class () "Delete CLASS at point. Don't store data in kill ring. " (interactive "*") (let ((erg (py-mark-base "class"))) (delete-region (car erg) (cdr erg)))) (defun py-delete-def-or-class () "Delete DEF-OR-CLASS at point. Don't store data in kill ring. " (interactive "*") (let ((erg (py-mark-base "def-or-class"))) (delete-region (car erg) (cdr erg)))) (defun py-delete-expression () "Delete EXPRESSION at point. Don't store data in kill ring. " (interactive "*") (let ((erg (py-mark-base "expression"))) (delete-region (car erg) (cdr erg)))) (defun py-delete-partial-expression () "Delete PARTIAL-EXPRESSION at point. Don't store data in kill ring. " (interactive "*") (let ((erg (py-mark-base "partial-expression"))) (delete-region (car erg) (cdr erg)))) (defun py-delete-minor-block () "Delete MINOR-BLOCK at point. Don't store data in kill ring. A minor block is started by a `for', `if', `try' or `with'." (interactive "*") (let ((erg (py-mark-base "minor-block"))) (delete-region (car erg) (cdr erg)))) ;;; Kill (defun py-kill-statements () "Delete statements declared in current level. Store deleted statements in kill-ring " (interactive "*") (let* ((bounds (py-bounds-of-statements)) (beg (car bounds)) (end (cdr bounds))) (when (and beg end) (goto-char beg) (push-mark) (goto-char end) (kill-new (buffer-substring-no-properties beg end)) (delete-region beg end)))) (defun py-kill-declarations () "Delete variables declared in current level. Store deleted variables in kill-ring " (interactive "*") (let* ((bounds (py-bounds-of-declarations)) (beg (car bounds)) (end (cdr bounds))) (when (and beg end) (goto-char beg) (push-mark) (goto-char end) (kill-new (buffer-substring-no-properties beg end)) (delete-region beg end)))) (defun py-kill-expression () "Delete expression at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive) (let ((erg (py-mark-base "expression"))) (kill-region (car erg) (cdr erg)))) (defun py-kill-partial-expression () "Delete partial-expression at point. Stores data in kill ring. Might be yanked back using `C-y'. \".\" operators delimit a partial-expression expression on it's level, that's the difference to compound expressions." (interactive) (let ((erg (py-mark-base "partial-expression"))) (kill-region (car erg) (cdr erg)))) (defun py-kill-statement () "Delete statement at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base "statement"))) (kill-region (car erg) (cdr erg)))) (defun py-kill-top-level () "Delete top-level form at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base "top-level"))) (kill-region (car erg) (cdr erg)))) (defun py-kill-block () "Delete block at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base "block"))) (kill-region (car erg) (cdr erg)))) (defun py-kill-minor-block () "Delete minor-block at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base "minor-block"))) (kill-region (car erg) (cdr erg)))) (defun py-kill-block-or-clause () "Delete block-or-clause at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base "block-or-clause"))) (kill-region (region-beginning) (region-end)))) (defun py-kill-def-or-class () "Delete def-or-class at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base "def-or-class"))) (kill-region (car erg) (cdr erg)))) (defun py-kill-class () "Delete class at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base "class"))) (kill-region (car erg) (cdr erg)))) (defun py-kill-def () "Delete def at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base "def"))) (kill-region (car erg) (cdr erg)))) (defun py-kill-clause () "Delete clause at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base "clause"))) (kill-region (car erg) (cdr erg)))) (defalias 'py-kill-minor-expression 'py-kill-partial-expression) ;;; Beginning of line forms (defun py-mark-base-bol (form &optional py-mark-decorators) (let* ((begform (intern-soft (concat "py-beginning-of-" form "-bol"))) (endform (intern-soft (concat "py-end-of-" form "-bol"))) (begcheckform (intern-soft (concat "py-beginning-of-" form "-bol-p"))) (orig (point)) beg end erg) (setq beg (if (setq beg (funcall begcheckform)) beg (funcall begform))) (when py-mark-decorators (save-excursion (when (setq erg (py-beginning-of-decorator-bol)) (setq beg erg)))) (setq end (funcall endform)) (push-mark beg t t) (unless end (when (< beg (point)) (setq end (point)))) (when (interactive-p) (message "%s %s" beg end)) (cons beg end))) (defun py-beginning-of-block-bol-p () "Returns position, if cursor is at the beginning of block, at beginning of line, nil otherwise. " (interactive) (let ((orig (point)) (indent (current-indentation)) erg) (save-excursion (py-end-of-block-bol) (py-beginning-of-block-bol indent) (when (eq orig (point)) (setq erg orig)) erg))) (defalias 'py-down-block-lc 'py-end-of-block-bol) (defun py-end-of-block-bol () "Goto beginning of line following end of block. Returns position reached, if successful, nil otherwise. See also `py-down-block': down from current definition to next beginning of block below. " (interactive) (let ((erg (py-end-of-block))) (when erg (unless (eobp) (forward-line 1) (beginning-of-line) (setq erg (point)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-mark-block-bol () "Mark block, take beginning of line positions. Returns beginning and end positions of region, a cons. " (interactive) (let (erg) (setq erg (py-mark-base-bol "block")) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-copy-block-bol () "Delete block bol at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base-bol "block"))) (copy-region-as-kill (car erg) (cdr erg)))) (defun py-kill-block-bol () "Delete block bol at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base-bol "block"))) (kill-region (car erg) (cdr erg)))) (defun py-delete-block-bol () "Delete block bol at point. Don't store data in kill ring. " (interactive "*") (let ((erg (py-mark-base-bol "block"))) (delete-region (car erg) (cdr erg)))) (defun py-beginning-of-clause-bol-p () "Returns position, if cursor is at the beginning of clause, at beginning of line, nil otherwise. " (interactive) (let ((orig (point)) (indent (current-indentation)) erg) (save-excursion (py-end-of-clause-bol) (py-beginning-of-clause-bol indent) (when (eq orig (point)) (setq erg orig)) erg))) (defalias 'py-down-clause-lc 'py-end-of-clause-bol) (defun py-end-of-clause-bol () "Goto beginning of line following end of clause. Returns position reached, if successful, nil otherwise. See also `py-down-clause': down from current definition to next beginning of clause below. " (interactive) (let ((erg (py-end-of-clause))) (when erg (unless (eobp) (forward-line 1) (beginning-of-line) (setq erg (point)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-mark-clause-bol () "Mark clause, take beginning of line positions. Returns beginning and end positions of region, a cons. " (interactive) (let (erg) (setq erg (py-mark-base-bol "clause")) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-copy-clause-bol () "Delete clause bol at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base-bol "clause"))) (copy-region-as-kill (car erg) (cdr erg)))) (defun py-kill-clause-bol () "Delete clause bol at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base-bol "block"))) (kill-region (car erg) (cdr erg)))) (defun py-delete-clause-bol () "Delete clause bol at point. Don't store data in kill ring. " (interactive "*") (let ((erg (py-mark-base-bol "block"))) (delete-region (car erg) (cdr erg)))) (defun py-beginning-of-block-or-clause-bol-p () "Returns position, if cursor is at the beginning of block-or-clause, at beginning of line, nil otherwise. " (interactive) (let ((orig (point)) (indent (current-indentation)) erg) (save-excursion (py-end-of-block-or-clause-bol) (py-beginning-of-block-or-clause-bol indent) (when (eq orig (point)) (setq erg orig)) erg))) (defalias 'py-down-block-or-clause-lc 'py-end-of-block-or-clause-bol) (defun py-end-of-block-or-clause-bol () "Goto beginning of line following end of block-or-clause. Returns position reached, if successful, nil otherwise. See also `py-down-block-or-clause': down from current definition to next beginning of block-or-clause below. " (interactive) (let ((erg (py-end-of-block-or-clause))) (when erg (unless (eobp) (forward-line 1) (beginning-of-line) (setq erg (point)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-mark-block-or-clause-bol () "Mark block-or-clause, take beginning of line positions. Returns beginning and end positions of region, a cons. " (interactive) (let (erg) (setq erg (py-mark-base-bol "block-or-clause")) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-copy-block-or-clause-bol () "Delete block-or-clause bol at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base-bol "block-or-clause"))) (copy-region-as-kill (car erg) (cdr erg)))) (defun py-kill-block-or-clause-bol () "Delete block-or-clause bol at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base-bol "block"))) (kill-region (car erg) (cdr erg)))) (defun py-delete-block-or-clause-bol () "Delete block-or-clause bol at point. Don't store data in kill ring. " (interactive "*") (let ((erg (py-mark-base-bol "block"))) (delete-region (car erg) (cdr erg)))) (defun py-beginning-of-def-bol-p () "Returns position, if cursor is at the beginning of def, at beginning of line, nil otherwise. " (interactive) (let ((orig (point)) (indent (current-indentation)) erg) (save-excursion (py-end-of-def-bol) (py-beginning-of-def-bol indent) (when (eq orig (point)) (setq erg orig)) erg))) (defalias 'py-down-def-lc 'py-end-of-def-bol) (defun py-end-of-def-bol () "Goto beginning of line following end of def. Returns position reached, if successful, nil otherwise. See also `py-down-def': down from current definition to next beginning of def below. " (interactive) (let ((erg (py-end-of-def))) (when erg (unless (eobp) (forward-line 1) (beginning-of-line) (setq erg (point)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-mark-def-bol (&optional arg) "Mark def, take beginning of line positions. With \\[universal argument] or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of region, a cons. " (interactive "P") (let ((py-mark-decorators (or arg py-mark-decorators)) erg) (py-mark-base-bol "def" py-mark-decorators) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-copy-def-bol () "Delete def bol at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base-bol "def"))) (copy-region-as-kill (car erg) (cdr erg)))) (defun py-kill-def-bol () "Delete def bol at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base-bol "block"))) (kill-region (car erg) (cdr erg)))) (defun py-delete-def-bol () "Delete def bol at point. Don't store data in kill ring. " (interactive "*") (let ((erg (py-mark-base-bol "block"))) (delete-region (car erg) (cdr erg)))) (defun py-beginning-of-class-bol-p () "Returns position, if cursor is at the beginning of class, at beginning of line, nil otherwise. " (interactive) (let ((orig (point)) (indent (current-indentation)) erg) (save-excursion (py-end-of-class-bol) (py-beginning-of-class-bol indent) (when (eq orig (point)) (setq erg orig)) erg))) (defalias 'py-down-class-lc 'py-end-of-class-bol) (defun py-end-of-class-bol () "Goto beginning of line following end of class. Returns position reached, if successful, nil otherwise. See also `py-down-class': down from current definition to next beginning of class below. " (interactive) (let ((erg (py-end-of-class))) (when erg (unless (eobp) (forward-line 1) (beginning-of-line) (setq erg (point)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-mark-class-bol (&optional arg) "Mark class, take beginning of line positions. With \\[universal argument] or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of region, a cons. " (interactive "P") (let ((py-mark-decorators (or arg py-mark-decorators)) erg) (py-mark-base-bol "class" py-mark-decorators) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-copy-class-bol () "Delete class bol at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base-bol "class"))) (copy-region-as-kill (car erg) (cdr erg)))) (defun py-kill-class-bol () "Delete class bol at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base-bol "block"))) (kill-region (car erg) (cdr erg)))) (defun py-delete-class-bol () "Delete class bol at point. Don't store data in kill ring. " (interactive "*") (let ((erg (py-mark-base-bol "block"))) (delete-region (car erg) (cdr erg)))) (defun py-beginning-of-def-or-class-bol-p () "Returns position, if cursor is at the beginning of def-or-class, at beginning of line, nil otherwise. " (interactive) (let ((orig (point)) (indent (current-indentation)) erg) (save-excursion (py-end-of-def-or-class-bol) (py-beginning-of-def-or-class-bol indent) (when (eq orig (point)) (setq erg orig)) erg))) (defalias 'py-down-def-or-class-lc 'py-end-of-def-or-class-bol) (defun py-end-of-def-or-class-bol () "Goto beginning of line following end of def-or-class. Returns position reached, if successful, nil otherwise. See also `py-down-def-or-class': down from current definition to next beginning of def-or-class below. " (interactive) (let ((erg (py-end-of-def-or-class))) (when erg (unless (eobp) (forward-line 1) (beginning-of-line) (setq erg (point)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-mark-def-or-class-bol (&optional arg) "Mark def-or-class, take beginning of line positions. With \\[universal argument] or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of region, a cons. " (interactive "P") (let ((py-mark-decorators (or arg py-mark-decorators)) erg) (py-mark-base-bol "def-or-class" py-mark-decorators) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-copy-def-or-class-bol () "Delete def-or-class bol at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base-bol "def-or-class"))) (copy-region-as-kill (car erg) (cdr erg)))) (defun py-kill-def-or-class-bol () "Delete def-or-class bol at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base-bol "block"))) (kill-region (car erg) (cdr erg)))) (defun py-delete-def-or-class-bol () "Delete def-or-class bol at point. Don't store data in kill ring. " (interactive "*") (let ((erg (py-mark-base-bol "block"))) (delete-region (car erg) (cdr erg)))) (defun py-beginning-of-statement-bol-p () "Returns position, if cursor is at the beginning of statement, at beginning of line, nil otherwise. " (interactive) (let ((orig (point)) (indent (current-indentation)) erg) (save-excursion (py-end-of-statement-bol) (py-beginning-of-statement-bol indent) (when (eq orig (point)) (setq erg orig)) erg))) (defalias 'py-beginning-of-statement-lc 'py-beginning-of-statement-bol) (defun py-beginning-of-statement-bol (&optional indent) "Goto beginning of line where statement starts. Returns position reached, if successful, nil otherwise. See also `py-up-statement': up from current definition to next beginning of statement above. " (interactive) (let* ((indent (or indent (when (eq 'py-end-of-statement-bol (car py-bol-forms-last-indent))(cdr py-bol-forms-last-indent)))) erg) (if indent (while (and (setq erg (py-beginning-of-statement)) (< indent (current-indentation))(not (bobp)))) (setq erg (py-beginning-of-statement))) ;; reset (setq py-bol-forms-last-indent nil) (when erg (unless (eobp) (beginning-of-line) (setq erg (point)))) (when (interactive-p) (message "%s" erg)) erg)) (defalias 'py-down-statement-lc 'py-end-of-statement-bol) (defun py-end-of-statement-bol () "Goto beginning of line following end of statement. Returns position reached, if successful, nil otherwise. See also `py-down-statement': down from current definition to next beginning of statement below. " (interactive) (let ((erg (py-end-of-statement))) (when erg (unless (eobp) (forward-line 1) (beginning-of-line) (setq erg (point)))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-mark-statement-bol () "Mark statement, take beginning of line positions. Returns beginning and end positions of region, a cons. " (interactive) (let (erg) (setq erg (py-mark-base-bol "statement")) (exchange-point-and-mark) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-copy-statement-bol () "Delete statement bol at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base-bol "statement"))) (copy-region-as-kill (car erg) (cdr erg)))) (defun py-kill-statement-bol () "Delete statement bol at point. Stores data in kill ring. Might be yanked back using `C-y'. " (interactive "*") (let ((erg (py-mark-base-bol "block"))) (kill-region (car erg) (cdr erg)))) (defun py-delete-statement-bol () "Delete statement bol at point. Don't store data in kill ring. " (interactive "*") (let ((erg (py-mark-base-bol "block"))) (delete-region (car erg) (cdr erg)))) ;;; Up/Down (defun py-up-statement () "Go to the beginning of next statement upwards in buffer. Return position if statement found, nil otherwise. " (interactive) (let ((orig (point)) erg) (if (py-beginning-of-statement-p) (setq erg (py-beginning-of-statement)) (setq erg (and (py-beginning-of-statement) (py-beginning-of-statement)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-down-statement () "Go to the beginning of next statement downwards in buffer. Return position if statement found, nil otherwise. " (interactive) (let* ((orig (point)) (erg (cond ((py-end-of-statement-p) (and (py-end-of-statement) (py-beginning-of-statement))) ((ignore-errors (< orig (progn (py-end-of-statement) (py-beginning-of-statement)))) (point)) (t (goto-char orig) (and (py-end-of-statement) (py-end-of-statement)(py-beginning-of-statement)))))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-up-base (regexp) "Go to the beginning of next form upwards in buffer. Return position if form found, nil otherwise. " (let* ((orig (point)) erg) (if (bobp) (setq erg nil) (while (and (re-search-backward regexp nil t 1) (nth 8 (syntax-ppss)))) (back-to-indentation) (when (looking-at regexp) (setq erg (point))) (when py-verbose-p (message "%s" erg)) erg))) (defun py-down-base (regexp) "Go to the beginning of next form below in buffer. Return position if form found, nil otherwise. " (unless (eobp) (forward-line 1) (beginning-of-line) (let* ((orig (point)) erg) (if (eobp) (setq erg nil) (while (and (re-search-forward regexp nil 'move 1) (nth 8 (syntax-ppss)))) (back-to-indentation) (when (looking-at regexp) (setq erg (point))) (when py-verbose-p (message "%s" erg)) erg)))) (defun py-up-base-bol (regexp) "Go to the beginning of next form upwards in buffer. Return position if form found, nil otherwise. " (let* ((orig (point)) erg) (if (bobp) (setq erg nil) (while (and (re-search-backward regexp nil t 1) (nth 8 (syntax-ppss)))) (beginning-of-line) (when (looking-at regexp) (setq erg (point))) (when py-verbose-p (message "%s" erg)) erg))) (defun py-down-base-bol (regexp) "Go to the beginning of next form below in buffer. Return position if form found, nil otherwise. " (unless (eobp) (forward-line 1) (beginning-of-line) (let* ((orig (point)) erg) (if (eobp) (setq erg nil) (while (and (re-search-forward regexp nil t 1) (nth 8 (syntax-ppss)))) (beginning-of-line) (when (looking-at regexp) (setq erg (point))) (when py-verbose-p (message "%s" erg)) erg)))) (defun py-up-block () "Go to the beginning of next block upwards in buffer. Return position if block found, nil otherwise. " (interactive) (py-up-base py-block-re)) (defun py-up-minor-block () "Go to the beginning of next minor-block upwards in buffer. Return position if minor-block found, nil otherwise. " (interactive) (py-up-base py-minor-block-re)) (defun py-up-clause () "Go to the beginning of next clause upwards in buffer. Return position if clause found, nil otherwise. " (interactive) (py-up-base py-clause-re)) (defun py-up-block-or-clause () "Go to the beginning of next block-or-clause upwards in buffer. Return position if block-or-clause found, nil otherwise. " (interactive) (py-up-base py-block-or-clause-re)) (defun py-up-def () "Go to the beginning of next def upwards in buffer. Return position if def found, nil otherwise. " (interactive) (py-up-base py-def-re)) (defun py-up-class () "Go to the beginning of next class upwards in buffer. Return position if class found, nil otherwise. " (interactive) (py-up-base py-class-re)) (defun py-up-def-or-class () "Go to the beginning of next def-or-class upwards in buffer. Return position if def-or-class found, nil otherwise. " (interactive) (py-up-base py-def-or-class-re)) (defun py-down-block () "Go to the beginning of next block below in buffer. Return position if block found, nil otherwise. " (interactive) (py-down-base py-block-re)) (defun py-down-minor-block () "Go to the beginning of next minor-block below in buffer. Return position if minor-block found, nil otherwise. " (interactive) (py-down-base py-minor-block-re)) (defun py-down-clause () "Go to the beginning of next clause below in buffer. Return position if clause found, nil otherwise. " (interactive) (py-down-base py-clause-re)) (defun py-down-block-or-clause () "Go to the beginning of next block-or-clause below in buffer. Return position if block-or-clause found, nil otherwise. " (interactive) (py-down-base py-block-or-clause-re)) (defun py-down-def () "Go to the beginning of next def below in buffer. Return position if def found, nil otherwise. " (interactive) (py-down-base py-def-re)) (defun py-down-class () "Go to the beginning of next class below in buffer. Return position if class found, nil otherwise. " (interactive) (py-down-base py-class-re)) (defun py-down-def-or-class () "Go to the beginning of next def-or-class below in buffer. Return position if def-or-class found, nil otherwise. " (interactive) (py-down-base py-def-or-class-re)) (defun py-up-block-bol () "Go to the beginning of next block upwards in buffer. Go to beginning of line. Return position if block found, nil otherwise. " (interactive) (py-up-base-bol py-block-re)) (defun py-up-minor-block-bol () "Go to the beginning of next minor-block upwards in buffer. Go to beginning of line. Return position if minor-block found, nil otherwise. " (interactive) (py-up-base-bol py-minor-block-re)) (defun py-up-clause-bol () "Go to the beginning of next clause upwards in buffer. Go to beginning of line. Return position if clause found, nil otherwise. " (interactive) (py-up-base-bol py-clause-re)) (defun py-up-block-or-clause-bol () "Go to the beginning of next block-or-clause upwards in buffer. Go to beginning of line. Return position if block-or-clause found, nil otherwise. " (interactive) (py-up-base-bol py-block-or-clause-re)) (defun py-up-def-bol () "Go to the beginning of next def upwards in buffer. Go to beginning of line. Return position if def found, nil otherwise. " (interactive) (py-up-base-bol py-def-re)) (defun py-up-class-bol () "Go to the beginning of next class upwards in buffer. Go to beginning of line. Return position if class found, nil otherwise. " (interactive) (py-up-base-bol py-class-re)) (defun py-up-def-or-class-bol () "Go to the beginning of next def-or-class upwards in buffer. Go to beginning of line. Return position if def-or-class found, nil otherwise. " (interactive) (py-up-base-bol py-def-or-class-re)) (defun py-down-block-bol () "Go to the beginning of next block below in buffer. Go to beginning of line Return position if block found, nil otherwise " (interactive) (py-down-base-bol py-block-re)) (defun py-down-minor-block-bol () "Go to the beginning of next minor-block below in buffer. Go to beginning of line Return position if minor-block found, nil otherwise " (interactive) (py-down-base-bol py-minor-block-re)) (defun py-down-clause-bol () "Go to the beginning of next clause below in buffer. Go to beginning of line Return position if clause found, nil otherwise " (interactive) (py-down-base-bol py-clause-re)) (defun py-down-block-or-clause-bol () "Go to the beginning of next block-or-clause below in buffer. Go to beginning of line Return position if block-or-clause found, nil otherwise " (interactive) (py-down-base-bol py-block-or-clause-re)) (defun py-down-def-bol () "Go to the beginning of next def below in buffer. Go to beginning of line Return position if def found, nil otherwise " (interactive) (py-down-base-bol py-def-re)) (defun py-down-class-bol () "Go to the beginning of next class below in buffer. Go to beginning of line Return position if class found, nil otherwise " (interactive) (py-down-base-bol py-class-re)) (defun py-down-def-or-class-bol () "Go to the beginning of next def-or-class below in buffer. Go to beginning of line Return position if def-or-class found, nil otherwise " (interactive) (py-down-base-bol py-def-or-class-re)) ;; ripped from cc-mode (defun py-forward-into-nomenclature (&optional arg iact) "Move forward to end of a nomenclature section or word. With \\[universal-argument] (programmatically, optional argument ARG), do it that many times. A `nomenclature' is a fancy way of saying AWordWithMixedCaseNotUnderscores." (interactive "p") (or arg (setq arg 1)) (let ((case-fold-search nil) (orig (point)) erg) (if (> arg 0) (while (and (not (eobp)) (> arg 0)) ;; (setq erg (re-search-forward "\\(\\W+[_[:lower:][:digit:]ß]+\\)" nil t 1)) (cond ((or (not (eq 0 (skip-chars-forward "[[:blank:][:punct:]\n\r]"))) (not (eq 0 (skip-chars-forward "_")))) (when (or (< 1 (skip-chars-forward "[:upper:]")) (not (eq 0 (skip-chars-forward "[[:lower:][:digit:]ß]"))) (not (eq 0 (skip-chars-forward "[[:lower:][:digit:]]")))) (setq arg (1- arg)))) ((or (< 1 (skip-chars-forward "[:upper:]")) (not (eq 0 (skip-chars-forward "[[:lower:][:digit:]ß]"))) (not (eq 0 (skip-chars-forward "[[:lower:][:digit:]]")))) (setq arg (1- arg))))) (while (and (not (bobp)) (< arg 0)) (when (not (eq 0 (skip-chars-backward "[[:blank:][:punct:]\n\r\f_]"))) (forward-char -1)) (or (not (eq 0 (skip-chars-backward "[:upper:]"))) (not (eq 0 (skip-chars-backward "[[:lower:][:digit:]ß]"))) (skip-chars-backward "[[:lower:][:digit:]ß]")) (setq arg (1+ arg)))) (if (< (point) orig) (progn (when (looking-back "[[:upper:]]") ;; (looking-back "[[:blank:]]" (forward-char -1)) (if (looking-at "[[:alnum:]ß]") (setq erg (point)) (setq erg nil))) (if (and (< orig (point)) (not (eobp))) (setq erg (point)) (setq erg nil))) (when (and py-verbose-p (or iact (interactive-p))) (message "%s" erg)) erg)) (defun py-backward-into-nomenclature (&optional arg) "Move backward to beginning of a nomenclature section or word. With optional ARG, move that many times. If ARG is negative, move forward. A `nomenclature' is a fancy way of saying AWordWithMixedCaseNotUnderscores." (interactive "p") (setq arg (or arg 1)) (py-forward-into-nomenclature (- arg) arg)) (defun match-paren (&optional arg) "Go to the matching brace, bracket or parenthesis if on its counterpart. Otherwise insert the character, the key is assigned to, here `%'. With universal arg \C-u insert a `%'. " (interactive "P") (let ((parse-sexp-ignore-comments t)) (if arg (self-insert-command (if (numberp arg) arg 1)) (cond ((and (not match-paren-no-use-syntax-pps) (looking-at "\\s(")) (forward-list 1) (backward-char 1)) ((and (not match-paren-no-use-syntax-pps)(looking-at "\\s)")) (forward-char 1) (backward-list 1)) ;; if match-paren-no-syntax-pps ((looking-at "(") (ar-parentized-end-atpt)) ((looking-at ")") (ar-parentized-beginning-atpt)) ((looking-at "\\\[") (ar-bracketed-end-atpt)) ((looking-at "]") (ar-bracketed-beginning-atpt)) ((looking-at "{") (ar-braced-end-atpt)) ((looking-at "}") (ar-braced-beginning-atpt)) (t (self-insert-command 1)))))) (defun py-beginning-of-block-current-column () "Reach next beginning of block upwards which starts at current column. Return position" (interactive) (let* ((orig (point)) (cuco (current-column)) (str (make-string cuco ?\s)) pps erg) (while (and (not (bobp))(re-search-backward (concat "^" str py-block-keywords) nil t)(or (nth 8 (setq pps (syntax-ppss))) (nth 1 pps)))) (back-to-indentation) (and (< (point) orig)(setq erg (point))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-travel-current-indent (indent &optional orig) "Moves down until clause is closed, i.e. current indentation is reached. Takes a list, INDENT and START position. " (unless (eobp) (let ((orig (or orig (point))) last) (while (and (setq last (point))(not (eobp))(py-end-of-statement) (save-excursion (or (<= indent (progn (py-beginning-of-statement)(current-indentation)))(eq last (line-beginning-position)))) (py-end-of-statement-p))) (goto-char last) (when (< orig last) last)))) (defalias 'iyp 'ipython) (defalias 'ipy 'ipython) ;;; Python named shells (defun python (&optional argprompt) "Start an Python interpreter. Optional \\[universal-argument] prompts for options to pass to the Python interpreter. See `py-python-command-args'. " (interactive "P") (py-shell argprompt nil "python")) (defun ipython (&optional argprompt) "Start an IPython interpreter. Optional \\[universal-argument] prompts for options to pass to the IPython interpreter. See `py-python-command-args'. " (interactive "P") (py-shell argprompt nil "ipython")) (defun python3 (&optional argprompt) "Start an Python3 interpreter. Optional \\[universal-argument] prompts for options to pass to the Python3 interpreter. See `py-python-command-args'. " (interactive "P") (py-shell argprompt nil "python3")) (defun python2 (&optional argprompt) "Start an Python2 interpreter. Optional \\[universal-argument] prompts for options to pass to the Python2 interpreter. See `py-python-command-args'. " (interactive "P") (py-shell argprompt nil "python2")) (defun python2.7 (&optional argprompt) "Start an Python2.7 interpreter. Optional \\[universal-argument] prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'. " (interactive "P") (py-shell argprompt nil "python2.7")) (defun jython (&optional argprompt) "Start an Jython interpreter. Optional \\[universal-argument] prompts for options to pass to the Jython interpreter. See `py-python-command-args'. " (interactive "P") (py-shell argprompt nil "jython")) (defun python3.2 (&optional argprompt) "Start an Python3.2 interpreter. Optional \\[universal-argument] prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'. " (interactive "P") (py-shell argprompt nil "python3.2")) (defun python3.3 (&optional argprompt) "Start an Python3.3 interpreter. Optional \\[universal-argument] prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'. " (interactive "P") (py-shell argprompt nil "python3.3")) (defun python3.4 (&optional argprompt) "Start an Python3.3 interpreter. Optional \\[universal-argument] prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'. " (interactive "P") (py-shell argprompt nil "python3.4")) (defun bpython (&optional argprompt) "Start an Bpython interpreter. Optional \\[universal-argument] prompts for options to pass to the Bpython interpreter. See `py-python-command-args'. " (interactive "P") (py-shell argprompt nil "bpython")) ;; dedicated (defun python-dedicated (&optional argprompt switch) "Start an unique Python interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t)) (py-shell argprompt t "python"))) (defun ipython-dedicated (&optional argprompt switch) "Start an unique IPython interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the IPython interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t)) (py-shell argprompt t "ipython"))) (defun python3-dedicated (&optional argprompt switch) "Start an unique Python3 interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python3 interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t)) (py-shell argprompt t "python3"))) (defun python2-dedicated (&optional argprompt switch) "Start an unique Python2 interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python2 interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t)) (py-shell argprompt t "python2"))) (defun python2.7-dedicated (&optional argprompt switch) "Start an unique Python2.7 interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t)) (py-shell argprompt t "python2.7"))) (defun jython-dedicated (&optional argprompt switch) "Start an unique Jython interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Jython interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t)) (py-shell argprompt t "jython"))) (defun python3.2-dedicated (&optional argprompt switch) "Start an unique Python3.2 interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t)) (py-shell argprompt t "python3.2"))) (defun python3.3-dedicated (&optional argprompt switch) "Start an unique Python3.3 interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t)) (py-shell argprompt t "python3.3"))) (defun bpython-dedicated (&optional argprompt switch) "Start an unique Bpython interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Bpython interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t)) (py-shell argprompt t "bpython"))) ;; switch (defun python-switch (&optional argprompt) "Switch to Python interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python interpreter. See `py-python-command-args'." (interactive "P") (let ((py-switch-buffers-on-execute-p t)) (py-shell argprompt nil "python"))) (defun ipython-switch (&optional argprompt) "Switch to IPython interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the IPython interpreter. See `py-python-command-args'." (interactive "P") (let ((py-switch-buffers-on-execute-p t)) (py-shell argprompt nil "ipython"))) (defun python3-switch (&optional argprompt) "Switch to Python3 interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python3 interpreter. See `py-python-command-args'." (interactive "P") (let ((py-switch-buffers-on-execute-p t)) (py-shell argprompt nil "python3"))) (defun python2-switch (&optional argprompt) "Switch to Python2 interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python2 interpreter. See `py-python-command-args'." (interactive "P") (let ((py-switch-buffers-on-execute-p t)) (py-shell argprompt nil "python2"))) (defun python2.7-switch (&optional argprompt) "Switch to Python2.7 interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'." (interactive "P") (let ((py-switch-buffers-on-execute-p t)) (py-shell argprompt nil "python2.7"))) (defun jython-switch (&optional argprompt) "Switch to Jython interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Jython interpreter. See `py-python-command-args'." (interactive "P") (let ((py-switch-buffers-on-execute-p t)) (py-shell argprompt nil "jython"))) (defun python3.2-switch (&optional argprompt) "Switch to Python3.2 interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'." (interactive "P") (let ((py-switch-buffers-on-execute-p t)) (py-shell argprompt nil "python3.2"))) (defun python3.3-switch (&optional argprompt) "Switch to Python3.3 interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'." (interactive "P") (let ((py-switch-buffers-on-execute-p t)) (py-shell argprompt nil "python3.3"))) (defun bpython-switch (&optional argprompt) "Switch to Bpython interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Bpython interpreter. See `py-python-command-args'." (interactive "P") (let ((py-switch-buffers-on-execute-p t)) (py-shell argprompt nil "bpython"))) ;; no-switch (defun python-no-switch (&optional argprompt) "Open an Python interpreter in another window, but do not switch to it. Optional \\[universal-argument] prompts for options to pass to the Python interpreter. See `py-python-command-args'." (interactive "P") (let (py-switch-buffers-on-execute-p) (py-shell argprompt nil "python"))) (defun ipython-no-switch (&optional argprompt) "Open an IPython interpreter in another window, but do not switch to it. Optional \\[universal-argument] prompts for options to pass to the IPython interpreter. See `py-python-command-args'." (interactive "P") (let (py-switch-buffers-on-execute-p) (py-shell argprompt nil "ipython"))) (defun python3-no-switch (&optional argprompt) "Open an Python3 interpreter in another window, but do not switch to it. Optional \\[universal-argument] prompts for options to pass to the Python3 interpreter. See `py-python-command-args'." (interactive "P") (let (py-switch-buffers-on-execute-p) (py-shell argprompt nil "python3"))) (defun python2-no-switch (&optional argprompt) "Open an Python2 interpreter in another window, but do not switch to it. Optional \\[universal-argument] prompts for options to pass to the Python2 interpreter. See `py-python-command-args'." (interactive "P") (let (py-switch-buffers-on-execute-p) (py-shell argprompt nil "python2"))) (defun python2.7-no-switch (&optional argprompt) "Open an Python2.7 interpreter in another window, but do not switch to it. Optional \\[universal-argument] prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'." (interactive "P") (let (py-switch-buffers-on-execute-p) (py-shell argprompt nil "python2.7"))) (defun jython-no-switch (&optional argprompt) "Open an Jython interpreter in another window, but do not switch to it. Optional \\[universal-argument] prompts for options to pass to the Jython interpreter. See `py-python-command-args'." (interactive "P") (let (py-switch-buffers-on-execute-p) (py-shell argprompt nil "jython"))) (defun python3.2-no-switch (&optional argprompt) "Open an Python3.2 interpreter in another window, but do not switch to it. Optional \\[universal-argument] prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'." (interactive "P") (let (py-switch-buffers-on-execute-p) (py-shell argprompt nil "python3.2"))) (defun python3.3-no-switch (&optional argprompt) "Open an Python3.3 interpreter in another window, but do not switch to it. Optional \\[universal-argument] prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'." (interactive "P") (let (py-switch-buffers-on-execute-p) (py-shell argprompt nil "python3.3"))) (defun bpython-no-switch (&optional argprompt) "Open an Bpython interpreter in another window, but do not switch to it. Optional \\[universal-argument] prompts for options to pass to the Bpython interpreter. See `py-python-command-args'." (interactive "P") (let (py-switch-buffers-on-execute-p) (py-shell argprompt nil "bpython"))) ;; dedicated switch (defalias 'python-dedicated-switch 'python-switch-dedicated) (defun python-switch-dedicated (&optional argprompt) "Switch to an unique Python interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t) (py-switch-buffers-on-execute-p t)) (py-shell argprompt t "python"))) (defalias 'ipython-dedicated-switch 'ipython-switch-dedicated) (defun ipython-switch-dedicated (&optional argprompt) "Switch to an unique IPython interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the IPython interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t) (py-switch-buffers-on-execute-p t)) (py-shell argprompt t "ipython"))) (defalias 'python3-dedicated-switch 'python3-switch-dedicated) (defun python3-switch-dedicated (&optional argprompt) "Switch to an unique Python3 interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python3 interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t) (py-switch-buffers-on-execute-p t)) (py-shell argprompt t "python3"))) (defalias 'python2-dedicated-switch 'python2-switch-dedicated) (defun python2-switch-dedicated (&optional argprompt) "Switch to an unique Python2 interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python2 interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t) (py-switch-buffers-on-execute-p t)) (py-shell argprompt t "python2"))) (defalias 'python2.7-dedicated-switch 'python2.7-switch-dedicated) (defun python2.7-switch-dedicated (&optional argprompt) "Switch to an unique Python2.7 interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t) (py-switch-buffers-on-execute-p t)) (py-shell argprompt t "python2.7"))) (defalias 'jython-dedicated-switch 'jython-switch-dedicated) (defun jython-switch-dedicated (&optional argprompt) "Switch to an unique Jython interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Jython interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t) (py-switch-buffers-on-execute-p t)) (py-shell argprompt t "jython"))) (defalias 'python3.2-dedicated-switch 'python3.2-switch-dedicated) (defun python3.2-switch-dedicated (&optional argprompt) "Switch to an unique Python3.2 interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t) (py-switch-buffers-on-execute-p t)) (py-shell argprompt t "python3.2"))) (defalias 'python3.3-dedicated-switch 'python3.3-switch-dedicated) (defun python3.3-switch-dedicated (&optional argprompt) "Switch to an unique Python3.3 interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t) (py-switch-buffers-on-execute-p t)) (py-shell argprompt t "python3.3"))) (defalias 'bpython-dedicated-switch 'bpython-switch-dedicated) (defun bpython-switch-dedicated (&optional argprompt) "Switch to an unique Bpython interpreter in another window. Optional \\[universal-argument] prompts for options to pass to the Bpython interpreter. See `py-python-command-args'." (interactive "P") (let ((py-dedicated-process-p t) (py-switch-buffers-on-execute-p t)) (py-shell argprompt t "bpython"))) ;;; (defalias 'Python 'python) (defalias 'Python2 'python2) (defalias 'Python3 'python3) (defalias 'IPython 'ipython) (defalias 'Ipython 'ipython) ;;; Code execution (declare-function compilation-shell-minor-mode "compile" (&optional arg)) (defun py-which-execute-file-command (filename) "Return the command appropriate to Python version. Per default it's \"(format \"execfile(r'%s') # PYTHON-MODE\\n\" filename)\" for Python 2 series." (interactive) (let* ((erg (py-which-python)) (cmd (if (< erg 3) (format "execfile(r'%s') # PYTHON-MODE\n" filename) (format "exec(compile(open('%s').read(), '%s', 'exec')) # PYTHON-MODE\n" filename filename)))) (when (interactive-p) (message "%s" (prin1-to-string cmd))) cmd)) (defun py-execute-region-no-switch (start end) "Send the region to a Python interpreter. Ignores setting of `py-switch-buffers-on-execute-p', buffer with region stays current. " (interactive "r") (let (py-switch-buffers-on-execute-p) (py-execute-base start end))) (defun py-execute-region-switch (start end) "Send the region to a Python interpreter. Ignores setting of `py-switch-buffers-on-execute-p', output-buffer will being switched to. " (interactive "r") (let ((py-switch-buffers-on-execute-p t)) (py-execute-base start end))) (defun py-execute-region (start end &optional shell dedicated) "Send the region to a Python interpreter. When called with \\[universal-argument], execution through `default-value' of `py-shell-name' is forced. When called with \\[universal-argument] followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment. When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument. Optional DEDICATED (boolean) " (interactive "r\nP") (save-excursion (let ((py-shell-name (cond ((or py-force-py-shell-name-p (eq 4 (prefix-numeric-value shell))) (default-value 'py-shell-name)) ((and (numberp shell) (not (eq 1 (prefix-numeric-value shell)))) (read-from-minibuffer "(path-to-)shell-name: " (default-value 'py-shell-name))) (t shell))) (py-dedicated-process-p (or dedicated py-dedicated-process-p))) (py-execute-base start end)))) (defun py-execute-region-default (start end) "Send the region to the systems default Python interpreter. " (interactive "r") (let ((py-dedicated-process-p (default-value 'py-dedicated-process-p)) (py-shell-name (default-value 'py-shell-name))) (py-execute-base start end))) (defun py-execute-region-dedicated (start end &optional shell) "Get the region processed by an unique Python interpreter. When called with \\[universal-argument], execution through `default-value' of `py-shell-name' is forced. When called with \\[universal-argument] followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment. When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument. " (interactive "r\nP") (let ((py-shell-name (cond ((eq 4 (prefix-numeric-value shell)) (default-value 'py-shell-name)) ((and (numberp shell) (not (eq 1 (prefix-numeric-value shell)))) (read-from-minibuffer "(path-to-)shell-name: " (default-value 'py-shell-name))) (t shell))) (py-dedicated-process-p t)) (py-execute-base start end))) (defalias 'py-execute-region-dedicated-default 'py-execute-region-default-dedicated) (defun py-execute-region-default-dedicated (start end) "Send the region to an unique shell of systems default Python. " (interactive "r") (let ((py-dedicated-process-p t)) (py-execute-base start end (default-value 'py-shell-name)))) (defun py-delete-temporary (&optional file localname filebuf) (when (file-readable-p file) (delete-file file)) (when (buffer-live-p filebuf) (set-buffer filebuf) (set-buffer-modified-p 'nil) (kill-buffer filebuf)) (when (buffer-live-p localname) (kill-buffer localname))) (defun py-execute-buffer-finally (start end execute-directory wholebuf) (let* ((strg (buffer-substring-no-properties start end)) (temp (make-temp-name (concat (replace-regexp-in-string py-separator-char "-" (replace-regexp-in-string (concat "^" py-separator-char) "" (replace-regexp-in-string ":" "-" py-shell-name))) "-"))) (tempfile (concat (expand-file-name py-temp-directory) py-separator-char (replace-regexp-in-string py-separator-char "-" temp) ".py")) (tempbuf (get-buffer-create temp)) (wholebuf (when (boundp 'wholebuf) wholebuf)) erg err-p lineadd output-buffer) ;; (message "%s" strg) (set-buffer tempbuf) (erase-buffer) (unless py-if-name-main-permission-p (setq strg (replace-regexp-in-string "if[( ]*__name__[) ]*==[( ]*['\"]\\{1,3\\}__main__['\"]\\{1,3\\}[) ]*:" ;; space after __main__, i.e. will not be executed "if __name__ == '__main__ ':" strg))) (insert strg) (py-fix-start (point-min)(point-max)) (set-buffer tempbuf) (write-region (point-min) (point-max) tempfile nil t nil 'ask) (set-buffer-modified-p 'nil) (unwind-protect (setq erg (py-execute-file-base proc tempfile nil py-buffer-name py-orig-buffer-or-file execute-directory)) (sit-for 0.1) (and (or py-debug-p py-cleanup-temporary) (py-delete-temporary tempfile tempbuf))) (and erg (or py-debug-p py-store-result-p) (unless (string= (car kill-ring) erg) (kill-new erg))) erg)) (defun py-execute-python-mode-v5 (start end) (interactive "r") (let ((py-exception-buffer (current-buffer)) (pcmd (concat py-shell-name (if (string-equal py-which-bufname "Jython") " -" ;; " -c " "")))) (save-excursion (shell-command-on-region start end pcmd py-output-buffer)) (if (not (get-buffer py-output-buffer)) (message "No output.") (let* ((err-p (py-postprocess-output-buffer py-output-buffer)) (line (cadr err-p))) (if err-p (when (and py-jump-on-exception line) (pop-to-buffer py-exception-buffer)) (pop-to-buffer py-output-buffer) (goto-char (point-max)) (copy-marker (point))))))) (defun py-execute-ge24.3 (start end file execute-directory &optional py-exception-buffer proc) "An alternative way to do it. May we get rid of the temporary file? " (and (buffer-file-name) buffer-offer-save (buffer-modified-p) (y-or-n-p "Save buffer before executing? ") (write-file (buffer-file-name))) (let* ((start (copy-marker start)) (end (copy-marker end)) (py-exception-buffer (or py-exception-buffer (current-buffer))) (line (count-lines (point-min) (if (eq start (line-beginning-position)) (1+ start) start))) (strg (buffer-substring-no-properties start end)) (tempfile (or (buffer-file-name) (concat (expand-file-name py-temp-directory) py-separator-char (replace-regexp-in-string py-separator-char "-" "temp") ".py"))) (proc (or proc (if py-dedicated-process-p (get-buffer-process (py-shell nil py-dedicated-process-p py-shell-name py-buffer-name t)) (or (get-buffer-process py-buffer-name) (get-buffer-process (py-shell nil py-dedicated-process-p py-shell-name py-buffer-name t)))))) (procbuf (process-buffer proc)) (file (or file (with-current-buffer py-buffer-name (concat (file-remote-p default-directory) tempfile)))) (filebuf (get-buffer-create file)) err-p) (set-buffer filebuf) (erase-buffer) (newline line) (save-excursion (insert strg)) (py-fix-start (point) (point-max)) (unless (string-match "[jJ]ython" py-shell-name) (when (and execute-directory py-use-current-dir-when-execute-p (not (string= execute-directory default-directory))) (message "Warning: options `execute-directory' and `py-use-current-dir-when-execute-p' may conflict")) (and execute-directory (process-send-string proc (concat "import os; os.chdir(\"" execute-directory "\")\n")) ;; (py-send-string-no-output (concat "import os; os.chdir(\"" execute-directory "\")\n") proc) )) (set-buffer filebuf) (process-send-string proc (buffer-substring-no-properties (point-min) (point-max))) (sit-for 0.1) (if (and (setq err-p (save-excursion (py-postprocess-output-buffer procbuf))) (car err-p) (not (markerp err-p))) (py-jump-to-exception err-p) (py-shell-manage-windows procbuf py-buffer-name) (unless (string= (buffer-name (current-buffer)) (buffer-name procbuf)) (when py-verbose-p (message "Output buffer: %s" procbuf)))))) (defun py-execute-base (&optional start end shell filename proc file wholebuf) "Select the handler. When optional FILE is `t', no temporary file is needed. " (let* ((start (or start (and (use-region-p) (region-beginning)) (point-min))) (end (or end (and (use-region-p) (region-end)) (point-max))) (wholebuf (unless file (or wholebuf (and (eq (buffer-size) (- end start)))))) (windows-config (window-configuration-to-register 313465889)) (origline (save-restriction (widen) (count-lines (point-min) ;; count-lines doesn't honor current line when at BOL end))) (py-shell-name (or shell (py-choose-shell))) (py-exception-buffer (current-buffer)) (execute-directory (cond ((ignore-errors (file-name-directory (file-remote-p (buffer-file-name) 'localname)))) ((and py-use-current-dir-when-execute-p (buffer-file-name)) (file-name-directory (buffer-file-name))) ((and py-use-current-dir-when-execute-p py-fileless-buffer-use-default-directory-p) (expand-file-name default-directory)) ((stringp py-execute-directory) py-execute-directory) ((getenv "VIRTUAL_ENV")) (t (getenv "HOME")))) (py-buffer-name (or py-buffer-name (py-buffer-name-prepare))) (filename (or (and filename (expand-file-name filename)) (and (not (buffer-modified-p)) (buffer-file-name)))) (py-orig-buffer-or-file (or filename (current-buffer))) (proc (or proc (if py-dedicated-process-p (get-buffer-process (py-shell nil py-dedicated-process-p py-shell-name py-buffer-name t)) (or (and (boundp 'py-buffer-name) (get-buffer-process py-buffer-name)) (get-buffer-process (py-shell nil py-dedicated-process-p py-shell-name (and (boundp 'py-buffer-name) py-buffer-name) t)))))) err-p) (set-buffer py-exception-buffer) (py-update-execute-directory proc py-buffer-name execute-directory) (cond (;; enforce proceeding as python-mode.el v5 python-mode-v5-behavior-p (py-execute-python-mode-v5 start end)) (py-execute-no-temp-p (py-execute-ge24.3 start end filename execute-directory py-exception-buffer proc)) ;; No need for a temporary filename than ((and filename wholebuf) (py-execute-file-base proc filename nil py-buffer-name filename execute-directory)) (t ;; (message "%s" (current-buffer)) (py-execute-buffer-finally start end execute-directory wholebuf))))) (defun py-execute-string (&optional string shell) "Send the argument STRING to a Python interpreter. See also `py-execute-region'. " (interactive) (let ((string (or string (read-from-minibuffer "String: "))) (shell (or shell (default-value 'py-shell-name)))) (with-temp-buffer (insert string) (py-execute-region (point-min) (point-max) shell)))) (defun py-execute-string-dedicated (&optional string shell) "Send the argument STRING to an unique Python interpreter. See also `py-execute-region'. " (interactive) (let ((string (or string (read-from-minibuffer "String: "))) (shell (or shell (default-value 'py-shell-name))) (py-dedicated-process-p t)) (with-temp-buffer (insert string) (py-execute-region (point-min) (point-max) shell)))) (defun py-if-needed-insert-shell () (let ((erg (or (py-choose-shell-by-shebang) (py-choose-shell-by-import) py-shell-name))) (when (string-match " " erg) (setq erg (substring erg (1+ (string-match " " erg)))) ;; closing ">" (setq erg (substring erg 0 (1- (length erg))))) (goto-char (point-min)) (while (and (bolp)(eolp)) (delete-region (point) (1+ (line-end-position)))) (unless (looking-at py-shebang-regexp) (if (string-match (concat "^" erg) "ipython") (progn (shell-command "type ipython" t) (when (looking-at "[^/\n\r]+") (replace-match "#! "))) (if (string-match py-separator-char erg) (insert (concat "#! " erg "\n")) (insert (concat py-shebang-startstring " " erg "\n"))))))) (defun py-insert-execute-directory (directory &optional orig done) (let ((orig (or orig (point))) (done done)) (if done (goto-char done) (goto-char (point-min))) (cond ((re-search-forward "^from __future__ import " nil t 1) (py-end-of-statement) (setq done (point)) (py-insert-execute-directory directory orig done)) ((re-search-forward py-encoding-string-re nil t 1) (setq done (point)) (py-insert-execute-directory directory orig done)) ((re-search-forward py-shebang-regexp nil t 1) (setq done (point)) (py-insert-execute-directory directory orig done)) (t (forward-line 1) (unless (and (bolp)(eolp)) (newline)) (insert (concat "import os; os.chdir(\"" directory "\")\n")))))) (defun py-insert-coding () (goto-char (point-min)) (unless (re-search-forward py-encoding-string-re nil t) (goto-char (point-min)) (if (re-search-forward py-shebang-regexp nil t 1) (progn (newline) (insert (concat py-encoding-string "\n"))) (insert (concat py-encoding-string "\n"))))) (defun py-if-needed-insert-if () "Internal use by py-execute... functions. Inserts an incentive true form \"if 1:\\n.\" " (let ((needs-if (/= (py-point 'bol) (py-point 'boi)))) (when needs-if (insert "if 1:\n") (setq py-line-number-offset (- py-line-number-offset 1))))) (defun py-fix-start (start end) "Internal use by py-execute... functions. Avoid empty lines at the beginning. " (python-mode) (goto-char start) (while (and (bolp)(eolp)) (delete-region (line-beginning-position) (1+ (line-end-position)))) (back-to-indentation) (unless (py-beginning-of-statement-p) (py-down-statement)) (while (not (eq (current-indentation) 0)) (py-shift-left py-indent-offset start end)) (goto-char (point-max)) (unless (and (bolp)(eolp)) (newline))) (defun py-fetch-py-master-file () "Lookup if a `py-master-file' is specified. See also doku of variable `py-master-file' " (interactive) (save-excursion (save-restriction (widen) (goto-char (point-min)) (when (re-search-forward "^ *# Local Variables:" nil (quote move) 1) (when (re-search-forward (concat "^\\( *# py-master-file: *\\)\"\\([^ \t]+\\)\" *$") nil t 1) (setq py-master-file (match-string-no-properties 2)))))) (when (and py-verbose-p (interactive-p)) (message "%s" py-master-file))) (defun py-execute-import-or-reload (&optional argprompt shell) "Import the current buffer's file in a Python interpreter. If the file has already been imported, then do reload instead to get the latest version. If the file's name does not end in \".py\", then do execfile instead. If the current buffer is not visiting a file, do `py-execute-buffer' instead. If the file local variable `py-master-file' is non-nil, import or reload the named file instead of the buffer's file. The file may be saved based on the value of `py-execute-import-or-reload-save-p'. See also `\\[py-execute-region]'. This may be preferable to `\\[py-execute-buffer]' because: - Definitions stay in their module rather than appearing at top level, where they would clutter the global namespace and not affect uses of qualified names (MODULE.NAME). - The Python debugger gets line number information about the functions." (interactive "P") ;; Check file local variable py-master-file (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (let ((py-shell-name (or shell (py-choose-shell argprompt shell))) (file (buffer-file-name (current-buffer)))) (if file (let ((proc (or (ignore-errors (get-process (file-name-directory shell))) (get-buffer-process (py-shell argprompt py-dedicated-process-p shell (or shell (default-value 'py-shell-name)) t))))) ;; Maybe save some buffers (save-some-buffers (not py-ask-about-save) nil) (py-execute-file-base proc file (if (string-match "\\.py$" file) (let ((m (py-qualified-module-name (expand-file-name file)))) (if (string-match "python2" (file-name-nondirectory shell)) (format "import sys\nif sys.modules.has_key('%s'):\n reload(%s)\nelse:\n import %s\n" m m m) (format "import sys,imp\nif'%s' in sys.modules:\n imp.reload(%s)\nelse:\n import %s\n" m m m))) ;; (format "execfile(r'%s')\n" file) (py-which-execute-file-command file)))) (py-execute-buffer)))) (defun py-qualified-module-name (file) "Find the qualified module name for filename FILE. Basically, this goes down the directory tree as long as there are __init__.py files there." (let ((rec #'(lambda (d f) (let* ((dir (file-name-directory d)) (initpy (concat dir "__init__.py"))) (if (file-exists-p initpy) (let ((d2 (directory-file-name d))) (funcall rec (file-name-directory d2) (concat (file-name-nondirectory d2) "." f))) f))))) (funcall rec (file-name-directory file) (file-name-sans-extension (file-name-nondirectory file))))) (defun py-execute-buffer-dedicated () "Send the contents of the buffer to a unique Python interpreter. " (interactive) (let ((py-dedicated-process-p t)) (py-execute-buffer-base))) (defun py-execute-buffer-switch () "Send the contents of the buffer to a Python interpreter and switches to output. " (interactive) (let ((py-switch-buffers-on-execute-p t)) (py-execute-buffer-base))) (defalias 'py-execute-buffer-switch-dedicated 'py-execute-buffer-dedicated-switch) (defun py-execute-buffer-dedicated-switch () "Send the contents of the buffer to an unique Python interpreter. Ignores setting of `py-switch-buffers-on-execute-p'. " (interactive) (let ((py-dedicated-process-p t) (py-switch-buffers-on-execute-p t)) (py-execute-buffer-base))) (defun py-execute-buffer () "Send the contents of the buffer to a Python interpreter. " (interactive) (let ((origline 1)) (and py-prompt-on-changed-p (buffer-file-name) (interactive-p) (buffer-modified-p) (y-or-n-p "Buffer changed, save first? ") (write-file (buffer-file-name))) (py-execute-region (point-min) (point-max)))) (defun py-execute-buffer-base () "Honor `py-master-file'. " (let* ((py-master-file (or py-master-file (py-fetch-py-master-file))) (file (if py-master-file (expand-file-name py-master-file) (buffer-file-name)))) (py-execute-file file))) (defun py-execute-buffer-no-switch () "Send the contents of the buffer to a Python interpreter but don't switch to output. " (interactive) (let (py-switch-buffers-on-execute-p) (py-execute-buffer-base))) ;; Fixme: Try to define the function or class within the relevant ;; module, not just at top level. (defun py-execute-defun () "Send the current defun (class or method) to the inferior Python process." (interactive) (save-excursion (py-execute-region (progn (beginning-of-defun) (point)) (progn (end-of-defun) (point))))) (defun py-process-file (filename &optional output-buffer error-buffer) "Process \"python filename\". Optional OUTPUT-BUFFER and ERROR-BUFFER might be given. " (interactive "fDatei:") (let ((coding-system-for-read 'utf-8) (coding-system-for-write 'utf-8) (output-buffer (or output-buffer (make-temp-name "py-process-file-output"))) (pcmd (py-choose-shell))) (unless (buffer-live-p output-buffer) (set-buffer (get-buffer-create output-buffer))) (shell-command (concat pcmd " " filename) output-buffer error-buffer) (when (interactive-p) (switch-to-buffer output-buffer)))) ;;; (defun py-execute-line () "Send current line from beginning of indent to Python interpreter. " (interactive) (save-excursion (let ((beg (progn (back-to-indentation) (point)))) (py-execute-region beg (line-end-position))))) (defun py-output-filter (string) "Clear output buffer from py-shell-input prompt etc. " (interactive "*") (replace-regexp-in-string (concat "\\(\n\\|" py-shell-input-prompt-1-regexp "\\|" py-shell-input-prompt-2-regexp "\\|" "^In \\[[0-9]+\\]: *" "\\)") "" string)) (defun py-execute-file (filename) "When called interactively, user is prompted for filename. " (interactive "fFilename: ") (let (;; py-postprocess-output-buffer might want origline (origline 1) (windows-config (window-configuration-to-register 313465889)) (py-exception-buffer filename) erg) (if (file-readable-p filename) (if py-store-result-p (setq erg (py-execute-file-base nil (expand-file-name filename))) (py-execute-file-base nil (expand-file-name filename))) (message "%s not readable. %s" filename "Do you have write permissions?")) erg)) (defun py-update-separator-char () "Return the file-path separator char from current machine. When `py-separator-char' is customized, its taken. Returns char found. " (let ((erg (cond ((characterp py-separator-char) (char-to-string py-separator-char)) ;; epd hack ((and (string-match "[Ii][Pp]ython" py-shell-name) (string-match "epd\\|EPD" py-shell-name)) (replace-regexp-in-string "\n" "" (shell-command-to-string (concat py-shell-name " -c \"import os; print(os.sep)\""))))))) (if (and erg (string-match "^$" erg)) (setq erg (substring erg (string-match "^$" erg))) (setq erg (replace-regexp-in-string "\n" "" (shell-command-to-string (concat py-shell-name " -W ignore" " -c \"import os; print(os.sep)\""))))) erg)) (defun py-current-working-directory (&optional shell) "Return the directory of current `py-shell'." (replace-regexp-in-string "\n" "" (shell-command-to-string (concat (or shell py-shell-name) " -c \"import os; print(os.getcwd())\"")))) (defun py-update-execute-directory-intern (dir proc) (comint-send-string proc (concat "import os;os.chdir(\"" dir "\")\n"))) (defun py-update-execute-directory (proc procbuf execute-directory) (let ((oldbuf (current-buffer)) orig cwd) (set-buffer procbuf) (setq cwd (py-current-working-directory)) (setq orig (point)) (unless (string= execute-directory (concat cwd "/")) (py-update-execute-directory-intern (or py-execute-directory execute-directory) proc) (delete-region orig (point-max))) (set-buffer oldbuf))) (defun py-execute-file-base (&optional proc filename cmd procbuf origfile execute-directory) "Send to Python interpreter process PROC, in Python version 2.. \"execfile('FILENAME')\". Make that process's buffer visible and force display. Also make comint believe the user typed this string so that `kill-output-from-shell' does The Right Thing. Returns position where output starts. " (let* ((cmd (or cmd (format "exec(compile(open('%s').read(), '%s', 'exec')) # PYTHON-MODE\n" filename filename))) (msg (and py-verbose-p (format "## executing %s...\n" (or origfile filename)))) (procbuf (or procbuf (py-shell nil nil nil procbuf t))) (proc (or proc (get-buffer-process procbuf))) erg orig err-p) (set-buffer procbuf) (goto-char (point-max)) ;; (switch-to-buffer (current-buffer)) (setq orig (point)) (comint-send-string proc cmd) (if (setq err-p (save-excursion (py-postprocess-output-buffer procbuf))) (py-shell-manage-windows py-buffer-name nil windows-config) (and py-store-result-p (sit-for 0.1) (setq erg (py-output-filter (buffer-substring-no-properties orig (point-max)))) (unless (string= (car kill-ring) erg) (kill-new erg))) (py-shell-manage-windows (current-buffer) nil windows-config) erg))) ;;; Pdb ;; Autoloaded. (declare-function compilation-shell-minor-mode "compile" (&optional arg)) (defun py-pdbtrack-overlay-arrow (activation) "Activate or de arrow at beginning-of-line in current buffer." ;; This was derived/simplified from edebug-overlay-arrow (cond (activation (setq overlay-arrow-position (make-marker)) (setq overlay-arrow-string "=>") (set-marker overlay-arrow-position (line-beginning-position) (current-buffer)) (setq py-pdbtrack-is-tracking-p t)) (overlay-arrow-position (setq overlay-arrow-position nil) (setq py-pdbtrack-is-tracking-p nil)))) (defun py-pdbtrack-track-stack-file (text) "Show the file indicated by the pdb stack entry line, in a separate window. Activity is disabled if the buffer-local variable `py-pdbtrack-do-tracking-p' is nil. We depend on the pdb input prompt matching `py-pdbtrack-input-prompt' at the beginning of the line. If the traceback target file path is invalid, we look for the most recently visited python-mode buffer which either has the name of the current function \(or class) or which defines the function \(or class). This is to provide for remote scripts, eg, Zope's 'Script \(Python)' - put a _copy_ of the script in a buffer named for the script, and set to python-mode, and pdbtrack will find it.)" ;; Instead of trying to piece things together from partial text ;; (which can be almost useless depending on Emacs version), we ;; monitor to the point where we have the next pdb prompt, and then ;; check all text from comint-last-input-end to process-mark. ;; ;; Also, we're very conservative about clearing the overlay arrow, ;; to minimize residue. This means, for instance, that executing ;; other pdb commands wipe out the highlight. You can always do a ;; 'where' (aka 'w') command to reveal the overlay arrow. (let* ((origbuf (current-buffer)) (currproc (get-buffer-process origbuf))) (if (not (and currproc py-pdbtrack-do-tracking-p)) (py-pdbtrack-overlay-arrow nil) (let* ((procmark (process-mark currproc)) (block (buffer-substring (max comint-last-input-end (- procmark py-pdbtrack-track-range)) procmark)) target target_fname target_lineno target_buffer) (if (not (string-match (concat py-pdbtrack-input-prompt "$") block)) (py-pdbtrack-overlay-arrow nil) (setq target (py-pdbtrack-get-source-buffer block)) (if (stringp target) (message "pdbtrack: %s" target) (setq target_lineno (car target)) (setq target_buffer (cadr target)) (setq target_fname (buffer-file-name target_buffer)) (switch-to-buffer-other-window target_buffer) (goto-char (point-min)) (forward-line (1- target_lineno)) (message "pdbtrack: line %s, file %s" target_lineno target_fname) (py-pdbtrack-overlay-arrow t) (pop-to-buffer origbuf t))))))) (defun py-pdbtrack-map-filename (filename) (let ((replacement-val (assoc-default filename py-pdbtrack-filename-mapping (lambda (mapkey path) (string-match (concat "^" (regexp-quote mapkey)) path))) )) (if (not (eq replacement-val nil)) (replace-match replacement-val 't 't filename) filename))) (defun py-pdbtrack-get-source-buffer (block) "Return line number and buffer of code indicated by block's traceback text. We look first to visit the file indicated in the trace. Failing that, we look for the most recently visited python-mode buffer with the same name or having the named function. If we're unable find the source code we return a string describing the problem as best as we can determine." (if (and (not (string-match py-pdbtrack-stack-entry-regexp block)) ;; pydb integration still to be done ;; (not (string-match py-pydbtrack-stack-entry-regexp block)) ) "Traceback cue not found" (let* ((filename (match-string py-pdbtrack-marker-regexp-file-group block)) (lineno (string-to-number (match-string py-pdbtrack-marker-regexp-line-group block))) (funcname (match-string py-pdbtrack-marker-regexp-funcname-group block)) funcbuffer) (cond ((file-exists-p filename) (list lineno (find-file-noselect filename))) ((file-exists-p (py-pdbtrack-map-filename filename)) (list lineno (find-file-noselect (py-pdbtrack-map-filename filename)))) ((setq funcbuffer (py-pdbtrack-grub-for-buffer funcname lineno)) (if (string-match "/Script (Python)$" filename) ;; Add in number of lines for leading '##' comments: (setq lineno (+ lineno (save-excursion (set-buffer funcbuffer) (count-lines (point-min) (max (point-min) (string-match "^\\([^#]\\|#[^#]\\|#$\\)" (buffer-substring (point-min) (point-max))))))))) (list lineno funcbuffer)) ((= (elt filename 0) ?\<) (format "(Non-file source: '%s')" filename)) (t (format "Not found: %s(), %s" funcname filename)))))) (defun py-pdbtrack-grub-for-buffer (funcname lineno) "Find most recent buffer itself named or having function funcname. We walk the buffer-list history for python-mode buffers that are named for funcname or define a function funcname." (let ((buffers (buffer-list)) buf got) (while (and buffers (not got)) (setq buf (car buffers) buffers (cdr buffers)) (if (and (save-excursion (set-buffer buf) (string= major-mode "python-mode")) (or (string-match funcname (buffer-name buf)) (string-match (concat "^\\s-*\\(def\\|class\\)\\s-+" funcname "\\s-*(") (save-excursion (set-buffer buf) (buffer-substring (point-min) (point-max)))))) (setq got buf))) got)) ;; pdbtrack functions (defun py-pdbtrack-toggle-stack-tracking (arg) "Set variable `py-pdbtrack-do-tracking-p'. " (interactive "P") ;; (if (not (get-buffer-process (current-buffer))) ;; (error "No process associated with buffer '%s'" (current-buffer))) ;; missing or 0 is toggle, >0 turn on, <0 turn off (cond ((not arg) (setq py-pdbtrack-do-tracking-p (not py-pdbtrack-do-tracking-p))) ((zerop (prefix-numeric-value arg)) (setq py-pdbtrack-do-tracking-p nil)) ((> (prefix-numeric-value arg) 0) (setq py-pdbtrack-do-tracking-p t))) (if py-pdbtrack-do-tracking-p (progn (add-hook 'comint-output-filter-functions 'py-pdbtrack-track-stack-file t) (remove-hook 'comint-output-filter-functions 'python-pdbtrack-track-stack-file t)) (remove-hook 'comint-output-filter-functions 'py-pdbtrack-track-stack-file t) (remove-hook 'comint-output-filter-functions 'python-pdbtrack-track-stack-file t)) (message "%sabled Python's pdbtrack" (if py-pdbtrack-do-tracking-p "En" "Dis"))) (defun turn-on-pdbtrack () (interactive) (py-pdbtrack-toggle-stack-tracking 1)) (defun turn-off-pdbtrack () (interactive) (py-pdbtrack-toggle-stack-tracking 0)) ;;; Documentation (defun py-documentation (w) "Launch PyDOC on the Word at Point" (interactive (list (let* ((word (thing-at-point 'word)) (input (read-string (format "pydoc entry%s: " (if (not word) "" (format " (default %s)" word)))))) (if (string= input "") (if (not word) (error "No pydoc args given") word) ;sinon word input)))) ;sinon input (shell-command (concat py-shell-name " -c \"from pydoc import help;help(\'" w "\')\"") "*PYDOCS*") (view-buffer-other-window "*PYDOCS*" t 'kill-buffer-and-window)) (defun py-fetch-docu () "Lookup in current buffer for the doku for the symbol at point. Useful for newly defined symbol, not known to python yet. " (interactive) (let* ((symb (prin1-to-string (symbol-at-point))) (args (py-expression)) erg) (save-restriction (widen) (goto-char (point-min)) (when (re-search-forward (concat py-def-or-class-re " *" symb) nil (quote move) 1) (forward-line 1) (when (looking-at "[ \t]*\"\"\"\\|[ \t]*'''\\|[ \t]*'[^]+\\|[ \t]*\"[^\"]+") (goto-char (match-end 0)) (setq erg (buffer-substring-no-properties (match-beginning 0) (re-search-forward "\"\"\"\\|'''" nil 'move))) (when erg (set-buffer (get-buffer-create "*Python-Help*")) (erase-buffer) (when (and py-verbose-p (interactive-p)) (switch-to-buffer (current-buffer))) (insert erg))))))) (defun py-find-imports () "Find top-level imports. Returns imports " (interactive) (let (imports) (save-excursion (goto-char (point-min)) (while (re-search-forward "^import *[A-Za-z_][A-Za-z_0-9].*\\|^from +[A-Za-z_][A-Za-z_0-9.]+ +import .*" nil t) (unless (py-end-of-statement-p) (py-end-of-statement)) (setq imports (concat imports (replace-regexp-in-string "[\\]\r?\n?\s*" "" (buffer-substring-no-properties (match-beginning 0) (point))) ";")))) ;; (and imports ;; (setq imports (replace-regexp-in-string ";$" "" imports))) (when (and py-verbose-p (interactive-p)) (message "%s" imports)) imports)) (defalias 'py-describe-symbol 'py-help-at-point) (defalias 'py-eldoc-function 'py-help-at-point) (defun py-help-at-point (&optional debug) "Print help on symbol at point. If symbol is defined in current buffer, jump to it's definition Optional \\[universal-argument] used for debugging, will prevent deletion of temp file. " (interactive "P") (let* ((orig (point)) (beg (progn (when (and (looking-back "(")(not (looking-at "\\sw"))) (forward-char -1)) (skip-chars-backward "a-zA-Z0-9_." (line-beginning-position))(point))) (end (progn (skip-chars-forward "a-zA-Z0-9_." (line-end-position))(point))) (sym (buffer-substring-no-properties beg end)) (origfile (buffer-file-name)) (temp (make-temp-name (buffer-name))) (file (concat (expand-file-name temp py-temp-directory) ".py")) (cmd (py-find-imports)) ;; if symbol is defined in current buffer, go to (erg (progn (goto-char (point-min)) (when (re-search-forward (concat "^[ \t]*def " sym "(") nil t 1) (forward-char -2) (point))))) (if erg (progn (push-mark orig)(push-mark (point)) (when (and (interactive-p) py-verbose-p) (message "Jump to previous position with %s" "C-u C- C-u C-"))) (goto-char orig) (when cmd (setq cmd (mapconcat (lambda (arg) (concat "try: " arg "\nexcept: pass\n")) (split-string cmd ";" t) ""))) (setq cmd (concat "import pydoc\n" cmd)) (when (not py-remove-cwd-from-path) (setq cmd (concat cmd "import sys\n" "sys.path.insert(0, '" (file-name-directory origfile) "')\n"))) (setq cmd (concat cmd "pydoc.help('" sym "')\n")) (with-temp-buffer (insert cmd) (write-file file)) (setq erg (py-process-file file "*Python-Help*")) (if py-max-help-buffer-p (progn (set-buffer "*Python-Help*") (switch-to-buffer (current-buffer)) ;; (sit-for 0.1) (help-mode) (delete-other-windows)) (message "%s" erg)) (when (file-readable-p file) (unless (eq 4 (prefix-numeric-value debug)) (delete-file file)))))) (defun py-describe-mode () "Dump long form of `python-mode' docs." (interactive) (py-dump-help-string "Major mode for editing Python files. Knows about Python indentation, tokens, comments and continuation lines. Paragraphs are separated by blank lines only. Major sections below begin with the string `@'; specific function and variable docs begin with `->'. @EXECUTING PYTHON CODE \\[py-execute-import-or-reload]\timports or reloads the file in the Python interpreter \\[py-execute-buffer]\tsends the entire buffer to the Python interpreter \\[py-execute-region]\tsends the current region \\[py-execute-def-or-class]\tsends the current function or class definition \\[py-execute-string]\tsends an arbitrary string \\[py-shell]\tstarts a Python interpreter window; this will be used by \tsubsequent Python execution commands %c:py-execute-import-or-reload %c:py-execute-buffer %c:py-execute-region %c:py-execute-def-or-class %c:py-execute-string %c:py-shell @VARIABLES py-install-directory\twherefrom `python-mode' looks for extensions py-indent-offset\tindentation increment py-block-comment-prefix\tcomment string used by comment-region py-shell-name\tshell command to invoke Python interpreter py-temp-directory\tdirectory used for temp files (if needed) py-beep-if-tab-change\tring the bell if tab-width is changed %v:py-install-directory %v:py-indent-offset %v:py-block-comment-prefix %v:py-shell-name %v:py-temp-directory %v:py-beep-if-tab-change @KINDS OF LINES Each physical line in the file is either a `continuation line' (the preceding line ends with a backslash that's not part of a comment, or the paren/bracket/brace nesting level at the start of the line is non-zero, or both) or an `initial line' (everything else). An initial line is in turn a `blank line' (contains nothing except possibly blanks or tabs), a `comment line' (leftmost non-blank character is `#'), or a `code line' (everything else). Comment Lines Although all comment lines are treated alike by Python, Python mode recognizes two kinds that act differently with respect to indentation. An `indenting comment line' is a comment line with a blank, tab or nothing after the initial `#'. The indentation commands (see below) treat these exactly as if they were code lines: a line following an indenting comment line will be indented like the comment line. All other comment lines (those with a non-whitespace character immediately following the initial `#') are `non-indenting comment lines', and their indentation is ignored by the indentation commands. Indenting comment lines are by far the usual case, and should be used whenever possible. Non-indenting comment lines are useful in cases like these: \ta = b # a very wordy single-line comment that ends up being \t #... continued onto another line \tif a == b: ##\t\tprint 'panic!' # old code we've `commented out' \t\treturn a Since the `#...' and `##' comment lines have a non-whitespace character following the initial `#', Python mode ignores them when computing the proper indentation for the next line. Continuation Lines and Statements The `python-mode' commands generally work on statements instead of on individual lines, where a `statement' is a comment or blank line, or a code line and all of its following continuation lines (if any) considered as a single logical unit. The commands in this mode generally (when it makes sense) automatically move to the start of the statement containing point, even if point happens to be in the middle of some continuation line. @INDENTATION Primarily for entering new code: \t\\[indent-for-tab-command]\t indent line appropriately \t\\[py-newline-and-indent]\t insert newline, then indent \t\\[py-electric-backspace]\t reduce indentation, or delete single character Primarily for reindenting existing code: \t\\[py-guess-indent-offset]\t guess py-indent-offset from file content; change locally \t\\[universal-argument] \\[py-guess-indent-offset]\t ditto, but change globally \t\\[py-indent-region]\t reindent region to match its context \t\\[py-shift-left]\t shift line or region left by py-indent-offset \t\\[py-shift-right]\t shift line or region right by py-indent-offset Unlike most programming languages, Python uses indentation, and only indentation, to specify block structure. Hence the indentation supplied automatically by `python-mode' is just an educated guess: only you know the block structure you intend, so only you can supply correct indentation. The \\[indent-for-tab-command] and \\[py-newline-and-indent] keys try to suggest plausible indentation, based on the indentation of preceding statements. E.g., assuming py-indent-offset is 4, after you enter \tif a > 0: \\[py-newline-and-indent] the cursor will be moved to the position of the `_' (_ is not a character in the file, it's just used here to indicate the location of the cursor): \tif a > 0: \t _ If you then enter `c = d' \\[py-newline-and-indent], the cursor will move to \tif a > 0: \t c = d \t _ `python-mode' cannot know whether that's what you intended, or whether \tif a > 0: \t c = d \t_ was your intent. In general, `python-mode' either reproduces the indentation of the (closest code or indenting-comment) preceding statement, or adds an extra py-indent-offset blanks if the preceding statement has `:' as its last significant (non-whitespace and non- comment) character. If the suggested indentation is too much, use \\[py-electric-backspace] to reduce it. Continuation lines are given extra indentation. If you don't like the suggested indentation, change it to something you do like, and Python- mode will strive to indent later lines of the statement in the same way. If a line is a continuation line by virtue of being in an unclosed paren/bracket/brace structure (`list', for short), the suggested indentation depends on whether the current line contains the first item in the list. If it does, it's indented py-indent-offset columns beyond the indentation of the line containing the open bracket. If you don't like that, change it by hand. The remaining items in the list will mimic whatever indentation you give to the first item. If a line is a continuation line because the line preceding it ends with a backslash, the third and following lines of the statement inherit their indentation from the line preceding them. The indentation of the second line in the statement depends on the form of the first (base) line: if the base line is an assignment statement with anything more interesting than the backslash following the leftmost assigning `=', the second line is indented two columns beyond that `='. Else it's indented to two columns beyond the leftmost solid chunk of non-whitespace characters on the base line. Warning: indent-region should not normally be used! It calls \\[indent-for-tab-command] repeatedly, and as explained above, \\[indent-for-tab-command] can't guess the block structure you intend. %c:indent-for-tab-command %c:py-newline-and-indent %c:py-electric-backspace The next function may be handy when editing code you didn't write: %c:py-guess-indent-offset The remaining `indent' functions apply to a region of Python code. They assume the block structure (equals indentation, in Python) of the region is correct, and alter the indentation in various ways while preserving the block structure: %c:py-indent-region %c:py-shift-left %c:py-shift-right @MARKING & MANIPULATING REGIONS OF CODE \\[py-mark-block]\t mark block of lines \\[py-mark-def-or-class]\t mark smallest enclosing def \\[universal-argument] \\[py-mark-def-or-class]\t mark smallest enclosing class \\[comment-region]\t comment out region of code \\[universal-argument] \\[comment-region]\t uncomment region of code %c:py-mark-block %c:py-mark-def-or-class %c:comment-region @MOVING POINT \\[py-previous-statement]\t move to statement preceding point \\[py-next-statement]\t move to statement following point \\[py-goto-block-up]\t move up to start of current block \\[py-beginning-of-def-or-class]\t move to start of def \\[universal-argument] \\[py-beginning-of-def-or-class]\t move to start of class \\[py-end-of-def-or-class]\t move to end of def \\[universal-argument] \\[py-end-of-def-or-class]\t move to end of class The first two move to one statement beyond the statement that contains point. A numeric prefix argument tells them to move that many statements instead. Blank lines, comment lines, and continuation lines do not count as `statements' for these commands. So, e.g., you can go to the first code statement in a file by entering \t\\[beginning-of-buffer]\t to move to the top of the file \t\\[py-next-statement]\t to skip over initial comments and blank lines Or do `\\[py-previous-statement]' with a huge prefix argument. %c:py-previous-statement %c:py-next-statement %c:py-goto-block-up %c:py-beginning-of-def-or-class %c:py-end-of-def-or-class @LITTLE-KNOWN EMACS COMMANDS PARTICULARLY USEFUL IN PYTHON MODE `\\[indent-new-comment-line]' is handy for entering a multi-line comment. `\\[set-selective-display]' with a `small' prefix arg is ideally suited for viewing the overall class and def structure of a module. `\\[back-to-indentation]' moves point to a line's first non-blank character. `\\[indent-relative]' is handy for creating odd indentation. @OTHER EMACS HINTS If you don't like the default value of a variable, change its value to whatever you do like by putting a `setq' line in your .emacs file. E.g., to set the indentation increment to 4, put this line in your .emacs: \t(setq py-indent-offset 4) To see the value of a variable, do `\\[describe-variable]' and enter the variable name at the prompt. When entering a key sequence like `C-c C-n', it is not necessary to release the CONTROL key after doing the `C-c' part -- it suffices to press the CONTROL key, press and release `c' (while still holding down CONTROL), press and release `n' (while still holding down CONTROL), & then release CONTROL. Entering Python mode calls with no arguments the value of the variable `python-mode-hook', if that value exists and is not nil; for backward compatibility it also tries `py-mode-hook'; see the `Hooks' section of the Elisp manual for details. Obscure: When python-mode is first loaded, it looks for all bindings to newline-and-indent in the global keymap, and shadows them with local bindings to py-newline-and-indent.")) ;; (require 'info-look) ;; The info-look package does not always provide this function (it ;; appears this is the case with XEmacs 21.1) (when (fboundp 'info-lookup-maybe-add-help) (info-lookup-maybe-add-help :mode 'python-mode :regexp "[a-zA-Z0-9_]+" :doc-spec '(("(python-lib)Module Index") ("(python-lib)Class-Exception-Object Index") ("(python-lib)Function-Method-Variable Index") ("(python-lib)Miscellaneous Index")))) (declare-function info-lookup-maybe-add-help "info-look" (&rest arg)) (defun py-after-info-look () "Set up info-look for Python. Used with `eval-after-load'." (let* ((version (let ((s (shell-command-to-string (concat py-shell-name " -V")))) (string-match "^Python \\([0-9]+\\.[0-9.]+\\_>\\)" s) (match-string 1 s))) ;; Whether info files have a Python version suffix, e.g. in Debian. (versioned (with-temp-buffer (with-no-warnings (Info-mode)) (condition-case () ;; Don't use `info' because it would pop-up a *info* buffer. (with-no-warnings (Info-goto-node (format "(python%s-lib)Miscellaneous Index" version)) t) (error nil))))) (info-lookup-maybe-add-help :mode 'python-mode :regexp "[[:alnum:]_]+" :doc-spec ;; Fixme: Can this reasonably be made specific to indices with ;; different rules? Is the order of indices optimal? ;; (Miscellaneous in -ref first prefers lookup of keywords, for ;; instance.) (if versioned ;; The empty prefix just gets us highlighted terms. `((,(concat "(python" version "-ref)Miscellaneous Index") nil "") (,(concat "(python" version "-ref)Module Index" nil "")) (,(concat "(python" version "-ref)Function-Method-Variable Index" nil "")) (,(concat "(python" version "-ref)Class-Exception-Object Index" nil "")) (,(concat "(python" version "-lib)Module Index" nil "")) (,(concat "(python" version "-lib)Class-Exception-Object Index" nil "")) (,(concat "(python" version "-lib)Function-Method-Variable Index" nil "")) (,(concat "(python" version "-lib)Miscellaneous Index" nil ""))) '(("(python-ref)Miscellaneous Index" nil "") ("(python-ref)Module Index" nil "") ("(python-ref)Function-Method-Variable Index" nil "") ("(python-ref)Class-Exception-Object Index" nil "") ("(python-lib)Module Index" nil "") ("(python-lib)Class-Exception-Object Index" nil "") ("(python-lib)Function-Method-Variable Index" nil "") ("(python-lib)Miscellaneous Index" nil "")))))) (eval-after-load "info-look" '(py-after-info-look)) ;;; (defun py-send-receive (string) "Send STRING to inferior Python (if any) and return result. This is a no-op if `py-check-comint-prompt' returns nil." (or (py-send-string-no-output string) (let ((proc (py-proc))) (with-current-buffer (process-buffer proc) (when (py-check-comint-prompt proc) (set (make-local-variable 'py-preoutput-result) nil) (accept-process-output proc 5) (prog1 py-preoutput-result (kill-local-variable 'py-preoutput-result))))))) (defun py-load-file (file-name) "Load a Python file FILE-NAME into the inferior Python process. If the file has extension `.py' import or reload it as a module. Treating it as a module keeps the global namespace clean, provides function location information for debugging, and supports users of module-qualified names." (interactive "f") (py-execute-file-base (get-buffer-process (get-buffer (py-shell))) file-name)) (defalias 'py-find-function 'py-find-definition) (defun py-find-definition (&optional symbol) "Find source of definition of SYMBOL. Interactively, prompt for SYMBOL." (interactive) (set-register 98888888 (list (current-window-configuration) (point-marker))) (let* ((oldbuf (current-buffer)) (imports (py-find-imports)) (symbol (or symbol (with-syntax-table py-dotted-expression-syntax-table (current-word)))) (enable-recursive-minibuffers t) (symbol (if (interactive-p) (read-string (if symbol (format "Find location of (default %s): " symbol) "Find location of: ") nil nil symbol) symbol)) (orig (point)) (local (or (py-until-found (concat "class " symbol) imenu--index-alist) (py-until-found symbol imenu--index-alist))) source sourcefile path) ;; ismethod(), isclass(), isfunction() or isbuiltin() ;; ismethod isclass isfunction isbuiltin) (if local (if (numberp local) (progn (goto-char local) (search-forward symbol (line-end-position) nil 1) (push-mark) (goto-char (match-beginning 0)) (exchange-point-and-mark)) (error "%s" "local not a number")) (setq source (py-send-string-return-output (concat imports "import inspect;inspect.getmodule(" symbol ")"))) (cond ((string-match "SyntaxError" source) (setq source (substring-no-properties source (match-beginning 0))) (jump-to-register 98888888) (message "Can't get source: %s" source)) ((and source (string-match "builtin" source)) (progn (jump-to-register 98888888) (message "%s" source))) ((and source (setq path (replace-regexp-in-string "'" "" (py-send-string-return-output "import os;os.getcwd()"))) (setq sourcefile (replace-regexp-in-string "'" "" (py-send-string-return-output (concat "inspect.getsourcefile(" symbol ")")))) (interactive-p) (message "sourcefile: %s" sourcefile) (find-file (concat path py-separator-char sourcefile)) (goto-char (point-min)) (re-search-forward (concat py-def-or-class-re symbol) nil nil 1)) (push-mark) (goto-char (match-beginning 0)) (exchange-point-and-mark) (display-buffer oldbuf))) sourcefile))) ;;; Miscellanus (defun py-insert-super () "Insert a function \"super()\" from current environment. As example given in Python v3.1 documentation » The Python Standard Library » class C(B): def method(self, arg): super().method(arg) # This does the same thing as: # super(C, self).method(arg) Returns the string inserted. " (interactive "*") (let* ((orig (point)) (funcname (progn (py-beginning-of-def) (when (looking-at (concat py-def-re " *\\([^(]+\\) *(\\(?:[^),]*\\),? *\\([^)]*\\))")) (match-string-no-properties 2)))) (args (match-string-no-properties 3)) (ver (py-which-python)) classname erg) (if (< ver 3) (progn (py-beginning-of-class) (when (looking-at (concat py-class-re " *\\([^( ]+\\)")) (setq classname (match-string-no-properties 2))) (goto-char orig) (setq erg (concat "super(" classname ", self)." funcname "(" args ")")) ;; super(C, self).method(arg)" (insert erg)) (goto-char orig) (setq erg (concat "super()." funcname "(" args ")")) (insert erg)) erg)) (defun py-nesting-level (&optional pps) "Accepts the output of `parse-partial-sexp'. " (interactive) (let* ((pps (or (ignore-errors (nth 0 pps)) (if (featurep 'xemacs) (parse-partial-sexp (point-min) (point)) (syntax-ppss)))) (erg (nth 0 pps))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-beginning-of-commented-section (&optional last) "Leave upwards comments and/or empty lines. " (interactive) (let ((pps (syntax-ppss)) (last (or last (point)))) (if (and (or (and (nth 4 pps)(goto-char (nth 8 pps)))(looking-at comment-start)) (looking-back "^[ \t]*")(not (bobp))) (progn (skip-chars-backward " \t\r\n\f") (py-beginning-of-commented-section last)) (goto-char last)))) (defun py-empty-arglist-indent (nesting py-indent-offset indent-offset) "Internally used by `py-compute-indentation'" (if (and (eq 1 nesting) (save-excursion (back-to-indentation) (looking-at py-extended-block-or-clause-re))) (progn (back-to-indentation) (+ (current-column) (* 2 (or indent-offset py-indent-offset)))) (+ (current-indentation) py-indent-offset))) (defun py-line-backward-maybe () (skip-chars-backward " \t\f" (line-beginning-position)) (when (< 0 (abs (skip-chars-backward " \t\r\n\f"))) (setq line t))) (defun py-fetch-previous-indent (orig) "Report the preceding indent. " (save-excursion (goto-char orig) (forward-line -1) (end-of-line) (skip-chars-backward " \t\r\n\f") (current-indentation))) (defun py-continuation-offset (&optional arg) "With numeric ARG different from 1 py-continuation-offset is set to that value; returns py-continuation-offset. " (interactive "p") (let ((erg (if (eq 1 arg) py-continuation-offset (when (numberp arg) (prog1 arg (setq py-continuation-offset arg)))))) (when (and py-verbose-p (interactive-p)) (message "%s" py-continuation-offset)) py-continuation-offset)) (defun py-after-empty-line () "Return `t' if line before contains only whitespace characters. " (save-excursion (beginning-of-line) (forward-line -1) (beginning-of-line) (looking-at "\\s-*$"))) (defalias 'py-count-indentation 'py-compute-indentation) (defun py-compute-indentation (&optional orig origline closing line nesting repeat indent-offset liep) "Compute Python indentation. When HONOR-BLOCK-CLOSE-P is non-nil, statements such as `return', `raise', `break', `continue', and `pass' force one level of dedenting. Optional arguments are flags resp. values set and used by `py-compute-indentation' internally " (interactive) (save-excursion (save-restriction (widen) ;; in shell, narrow from previous prompt ;; needed by closing (unless orig (back-to-indentation)) (let* ((orig (or orig (point))) (origline (or origline (py-count-lines))) ;; closing indicates: when started, looked ;; at a single closing parenthesis ;; line: moved already a line backward (liep (or liep (line-end-position))) (line line) (pps (syntax-ppss)) (closing (or closing (and (nth 1 pps) (looking-at ".*\\(\\s)\\)")(nth 0 pps) ;; char doesn't matter for now, maybe drop (string-to-char (match-string-no-properties 1))))) ;; in a recursive call already (repeat repeat) ;; nesting: started nesting a list (nesting nesting) (indent-offset (or indent-offset py-indent-offset)) (name (current-buffer)) erg indent this-line) (if (and (not repeat) (and (comint-check-proc (current-buffer)) (re-search-backward (concat py-shell-prompt-regexp "\\|" ipython-de-output-prompt-regexp "\\|" ipython-de-input-prompt-regexp) nil t 1))) ;; common recursion not suitable because of prompt (with-temp-buffer (insert-buffer-substring name (match-end 0) orig) (goto-char orig) (setq indent (py-compute-indentation))) (unless repeat (setq nesting (nth 0 pps)) (setq repeat t)) (setq indent (cond ((and (bobp) (eq liep (line-end-position))) (current-indentation)) ((and (bobp)(py-statement-opens-block-p py-extended-block-or-clause-re)) (+ (if py-smart-indentation (py-guess-indent-offset) indent-offset) (current-indentation))) ((and (bobp)(not (py-statement-opens-block-p py-extended-block-or-clause-re))) (current-indentation)) ;; in string ((and (nth 3 pps)(nth 8 pps)) (if ;; still at original line (eq liep (line-end-position)) (progn (forward-line -1) (end-of-line) (skip-chars-backward " \t\r\n\f") (if (ignore-errors (< (nth 8 (syntax-ppss)) (line-beginning-position))) (current-indentation) (ignore-errors (goto-char (nth 8 pps))) (py-line-backward-maybe) (back-to-indentation) (py-compute-indentation orig origline closing line nesting t indent-offset liep))) (goto-char (nth 8 pps)) (current-indentation))) ((and (looking-at "\"\"\"\\|'''")(not (bobp))) (py-beginning-of-statement) (py-compute-indentation orig origline closing line nesting t indent-offset liep)) ;; comments ((nth 8 pps) (if (eq liep (line-end-position)) (progn (goto-char (nth 8 pps)) (py-line-backward-maybe) (skip-chars-backward " \t") (py-compute-indentation orig origline closing line nesting t indent-offset liep)) (goto-char (nth 8 pps)) (if line (if py-indent-honors-inline-comment (current-column) (if py-indent-comments (progn (py-beginning-of-commented-section) (py-compute-indentation orig origline closing line nesting t indent-offset liep)) 0)) (forward-char -1) (py-compute-indentation orig origline closing line nesting t indent-offset liep)))) ((and (looking-at "[ \t]*#") (looking-back "^[ \t]*")(not line) (eq liep (line-end-position))) (if py-indent-comments (progn (setq line t) (skip-chars-backward " \t\r\n\f") ;; as previous comment-line might ;; be wrongly unindented, travel ;; whole commented section (py-beginning-of-commented-section) (py-compute-indentation orig origline closing line nesting t indent-offset liep)) 0)) ((and (looking-at "[ \t]*#") (looking-back "^[ \t]*")(not (eq liep (line-end-position)))) (current-indentation)) ((and (eq ?\# (char-after)) line py-indent-honors-inline-comment) (current-column)) ;; lists ((nth 1 pps) (cond ((and nesting (not line)) ;; still at original line (save-excursion (goto-char (nth 1 pps)) (setq this-line (py-count-lines)) (cond ((< 0 (- origline this-line)) (if (< 1 (- origline this-line)) (cond (closing (cond (py-closing-list-dedents-bos (goto-char (nth 1 pps)) (current-indentation)) ((looking-back "^[ \t]*") (current-column)) ((and (looking-at "\\s([ \t]*$") py-closing-list-keeps-space) (+ (current-column) py-closing-list-space)) ((looking-at "\\s([ \t]*$") (py-empty-arglist-indent nesting py-indent-offset indent-offset)) (t (py-fetch-previous-indent orig)))) ;; already behind a dedented element in list ((<= 2 (- origline this-line)) (py-fetch-previous-indent orig)) ((< (current-indentation) (current-column)) (+ (current-indentation) py-indent-offset)) (t (py-fetch-previous-indent orig))) (cond ((looking-at "\\s([ \t]*$") (py-empty-arglist-indent nesting py-indent-offset indent-offset)) ((looking-at "\\s([ \t]*\\([^ \t]+.*\\)$") (goto-char (match-beginning 1)) (if py-indent-paren-spanned-multilines-p (+ (current-column) py-indent-offset) (current-column))) (t (+ (current-column) (* (nth 0 pps))))))) ((nth 1 (syntax-ppss)) (goto-char (nth 1 (syntax-ppss))) (setq line ;; should be faster (< (line-end-position) liep) ;; (< (py-count-lines) origline) ) (py-compute-indentation orig origline closing line nesting t indent-offset liep)) ((not (py-beginning-of-statement-p)) (py-beginning-of-statement) (py-compute-indentation orig origline closing line nesting t indent-offset liep)) (t (1+ (current-column)))))) ((and (not nesting) line) (py-beginning-of-statement) (py-compute-indentation orig origline closing line nesting t indent-offset liep)) ((not nesting) (progn (goto-char (+ py-lhs-inbound-indent (nth 1 pps))) (when (looking-at "[ \t]+") (goto-char (match-end 0))) (current-column))) (t (goto-char (nth 1 pps)) (py-compute-indentation orig origline closing line nesting t indent-offset liep)))) ((and (eq (char-after) (or ?\( ?\{ ?\[)) line) (1+ (current-column))) ((py-preceding-line-backslashed-p) (progn (py-beginning-of-statement) (setq this-line (py-count-lines)) (if (< 1 (- origline this-line)) (py-fetch-previous-indent orig) (if (looking-at "from +\\([^ \t\n]+\\) +import") py-backslashed-lines-indent-offset (+ (current-indentation) py-continuation-offset))))) ((and (looking-at py-block-closing-keywords-re) (eq liep (line-end-position))) (skip-chars-backward "[ \t\r\n\f]") (py-beginning-of-statement) (cond ((looking-at py-extended-block-or-clause-re) (+ (if py-smart-indentation (py-guess-indent-offset) indent-offset) (current-indentation))) ((looking-at py-block-closing-keywords-re) (- (current-indentation) py-indent-offset)) (t (current-column)))) ((looking-at py-block-closing-keywords-re) (if (< (line-end-position) orig) (- (current-indentation) py-indent-offset) (py-beginning-of-block-or-clause (current-indentation)) (current-indentation))) ((looking-at py-no-outdent-re) (if (eq liep (line-end-position)) (progn (back-to-indentation) (py-line-backward-maybe) (py-compute-indentation orig origline closing line nesting t indent-offset liep)) (current-indentation))) ((and (looking-at py-elif-re) (eq (py-count-lines) origline)) (py-line-backward-maybe) (car (py-clause-lookup-keyword py-elif-re -1 nil orig origline))) ((and (looking-at py-clause-re)(not line) (eq liep (line-end-position))) (cond ((looking-at py-finally-re) (car (py-clause-lookup-keyword py-finally-re -1 nil orig origline))) ((looking-at py-except-re) (car (py-clause-lookup-keyword py-except-re -1 nil orig origline))) ((looking-at py-else-re) (car (py-clause-lookup-keyword py-else-re -1 nil orig origline))) ((looking-at py-elif-re) (car (py-clause-lookup-keyword py-elif-re -1 nil orig origline))) ;; maybe at if, try, with (t (car (py-clause-lookup-keyword py-block-or-clause-re -1 nil orig origline))))) ((looking-at py-extended-block-or-clause-re) (cond ((and (not line) (eq liep (line-end-position))) (py-line-backward-maybe) (setq line t) (py-compute-indentation orig origline closing line nesting t indent-offset liep)) (t (+ (cond (indent-offset) (py-smart-indentation (py-guess-indent-offset)) (t py-indent-offset)) (current-indentation))))) ((and (< (line-end-position) liep) (eq (current-column) (current-indentation))) (and (looking-at py-assignment-re) (goto-char (match-end 0))) ;; multiline-assignment (if (and nesting (looking-at " *[[{(]")(not (looking-at ".+[]})][ \t]*$"))) (+ (current-indentation) py-indent-offset) (current-indentation))) ((looking-at py-assignment-re) (py-beginning-of-statement) (py-compute-indentation orig origline closing line nesting t indent-offset liep)) ((and (< (current-indentation) (current-column))(not line)) (back-to-indentation) (unless line (setq nesting (nth 0 (syntax-ppss)))) (py-compute-indentation orig origline closing line nesting t indent-offset liep)) ((and (not (py-beginning-of-statement-p)) (not (and line (eq ?\# (char-after))))) (if (bobp) (current-column) (if (eq (point) orig) (progn (py-line-backward-maybe) (py-compute-indentation orig origline closing line nesting t indent-offset liep)) (py-beginning-of-statement) (py-compute-indentation orig origline closing line nesting t indent-offset liep)))) ((or (py-statement-opens-block-p py-extended-block-or-clause-re)(looking-at "@")) (if (< (py-count-lines) origline) (+ (if py-smart-indentation (py-guess-indent-offset) indent-offset) (current-indentation)) (skip-chars-backward " \t\r\n\f") (setq line t) (back-to-indentation) (py-compute-indentation orig origline closing line nesting t indent-offset liep))) ((and py-empty-line-closes-p (py-after-empty-line)) (progn (py-beginning-of-statement) (- (current-indentation) py-indent-offset))) ;; still at orignial line ((and (eq liep (line-end-position)) (save-excursion (and (setq erg (py-go-to-keyword py-extended-block-or-clause-re)) (if py-smart-indentation (setq indent-offset (py-guess-indent-offset)) t) (ignore-errors (< orig (or (py-end-of-block-or-clause)(point))))))) (+ (car erg) (if py-smart-indentation (or indent (py-guess-indent-offset)) indent-offset))) ((and (not line) (eq liep (line-end-position)) (py-beginning-of-statement-p)) (py-beginning-of-statement) (py-compute-indentation orig origline closing line nesting t indent-offset liep)) (t (current-indentation)))) (when (and py-verbose-p (interactive-p)) (message "%s" indent)) indent))))) (defalias 'pios 'py-indentation-of-statement) (defalias 'ios 'py-indentation-of-statement) (defun py-indentation-of-statement () "Returns the indenation of the statement at point. " (interactive) (let ((erg (save-excursion (back-to-indentation) (or (py-beginning-of-statement-p) (py-beginning-of-statement)) (current-indentation)))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) ;; (defun py-comint-output-filter-function (string) ;; "Watch output for Python prompt and exec next file waiting in queue. ;; This function is appropriate for `comint-output-filter-functions'." ;; ;;remove ansi terminal escape sequences from string ;; (setq string (ansi-color-filter-apply string)) ;; (when (and (string-match py-shell-input-prompt-1-regexp string) ;; py-file-queue) ;; (if py-switch-buffers-on-execute-p ;; (pop-to-buffer (current-buffer))) ;; (ignore-errors (delete-file (car py-file-queue))) ;; (setq py-file-queue (cdr py-file-queue)) ;; (if py-file-queue ;; (let ((pyproc (get-buffer-process (current-buffer)))) ;; (py-execute-file-base pyproc (car py-file-queue)))))) (defun py-guess-default-python () "Defaults to \"python\", if guessing didn't succeed. " (interactive) (let* ((ptn (or py-shell-name (py-choose-shell) "python")) (erg (if py-edit-only-p ptn (executable-find ptn)))) (when (interactive-p) (if erg (message "%s" ptn) (message "%s" "Could not detect Python on your system"))))) (defun py-separator-char () "Return the file-path separator char from current machine. When `py-separator-char' is customized, its taken. Returns char found. " (let ((erg (cond ((characterp py-separator-char) (char-to-string py-separator-char)) ;; epd hack ((and (string-match "[Ii][Pp]ython" py-shell-name) (string-match "epd\\|EPD" py-shell-name)) (replace-regexp-in-string "\n" "" (shell-command-to-string (concat py-shell-name " -c \"import os; print(os.sep)\""))))))) (if (and erg (string-match "^$" erg)) (setq erg (substring erg (string-match "^$" erg))) (setq erg (replace-regexp-in-string "\n" "" (shell-command-to-string (concat py-shell-name " -W ignore" " -c \"import os; print(os.sep)\""))))) erg)) (unless py-separator-char (setq py-separator-char (py-separator-char))) (defun py-process-name (&optional name) "Return the name of the running Python process, `get-process' willsee it. " (let* ((thisname (if name (if (string-match py-separator-char name) (substring name (progn (string-match (concat "\\(.+\\)"py-separator-char "\\(.+\\)$") name) (match-beginning 2))) name) (substring py-shell-name (or (string-match (concat py-separator-char ".+$") py-shell-name) 0)))) (nname (cond (py-dedicated-process-p (make-temp-name (concat thisname "-"))) ;; ((string-match "\*" (buffer-name)) ;; (replace-regexp-in-string "\*" "" (buffer-name))) (t thisname))) (erg (cond ((or (string-match "ipython" nname) (string-match "IPython" nname)) "IPython") (nname)))) (unless (string-match "^\*" erg)(setq erg (concat "*" erg "*"))) erg)) ;; (make-variable-buffer-local 'ipython-completion-command-string) ;; (setq ipython0.10-completion-command-string "print(';'.join(__IP.Completer.all_completions('%s'))) #PYTHON-MODE SILENT\n") ;; from ipython.el (defun py-dirstack-hook () ;; the following is to synchronize dir-changes (make-local-variable 'shell-dirstack) (setq shell-dirstack nil) (make-local-variable 'shell-last-dir) (setq shell-last-dir nil) (make-local-variable 'shell-dirtrackp) (setq shell-dirtrackp t) (add-hook 'comint-input-filter-functions 'shell-directory-tracker nil t)) (defun py-set-ipython-completion-command-string () "Set and return `ipython-completion-command-string'. " (interactive) (let* ((ipython-version (shell-command-to-string (concat py-shell-name " -V")))) (if (string-match "[0-9]" ipython-version) (setq ipython-completion-command-string (cond ((string-match "^1.1.*" ipython-version) ipython0.11-completion-command-string) ((string-match "^0.1[1-3]" ipython-version) ipython0.11-completion-command-string) ((string= "^0.10" ipython-version) ipython0.10-completion-command-string))) (error ipython-version)))) (defalias 'py-dedicated-shell 'py-shell-dedicated) (defun py-shell-dedicated (&optional argprompt) "Start an interactive Python interpreter in another window. With optional \\[universal-argument] user is prompted by `py-choose-shell' for command and options to pass to the Python interpreter. " (interactive "P") (py-shell argprompt t)) (defun py-buffer-name-prepare () "Return an appropriate name to display in modeline. SEPCHAR is the file-path separator of your system. " (let ((name (capitalize py-shell-name)) prefix erg suffix liste) (when (string-match py-separator-char name) (unless py-modeline-acronym-display-home-p (when (string-match (concat "^" (expand-file-name "~")) name) (setq name (replace-regexp-in-string (concat "^" (expand-file-name "~")) "" name)))) (save-match-data (setq liste (split-string name py-separator-char))) (dolist (ele liste) (unless (string= "" ele) (setq prefix (concat prefix (char-to-string (aref ele 0)))))) (unless py-modeline-display-full-path-p (setq name (substring name (1+ (string-match (concat py-separator-char "[^" py-separator-char "]+$") name)))))) (setq erg (cond ((string= "ipython" name) (replace-regexp-in-string "ipython" "IPython" name)) ((string= "jython" name) (replace-regexp-in-string "jython" "Jython" name)) ((string= "python" name) (replace-regexp-in-string "python" "Python" name)) ((string-match "python2" name) (replace-regexp-in-string "python2" "Python2" name)) ((string-match "python3" name) (replace-regexp-in-string "python3" "Python3" name)) (t name))) (when py-dedicated-process-p (setq erg (make-temp-name (concat erg "-")))) (cond ((and prefix (string-match "^\*" erg)) (setq erg (replace-regexp-in-string "^\*" (concat "*" prefix " ") erg))) (prefix (setq erg (concat "*" prefix " " erg "*"))) (t (setq erg (concat "*" erg "*")))) erg)) (defun py-delete-numbers-and-stars-from-string (string) "Delete numbering and star chars from string, return result. Needed when file-path names are contructed from maybe numbered buffer names like \"\*Python\*<2> \"" (replace-regexp-in-string "<\\([0-9]+\\)>" "" (replace-regexp-in-string "\*" "" string))) (defun py-shell-manage-windows (output-buffer &optional windows-displayed windows-config) "Adapt or restore window configuration. Return nil " (cond ((eq py-keep-windows-configuration 'force) (py-restore-window-configuration)) ((and (boundp 'err-p) err-p) (py-restore-window-configuration) (py-jump-to-exception err-p py-exception-buffer) ;; (goto-char (point-max)) (and (window-full-height-p) (funcall py-split-windows-on-execute-function)) (display-buffer output-buffer t)) (py-keep-windows-configuration (py-restore-window-configuration)) ;; split and switch ((and py-split-windows-on-execute-p py-switch-buffers-on-execute-p) (when (< (count-windows) py-max-split-windows) (funcall py-split-windows-on-execute-function)) (set-buffer output-buffer) (goto-char (point-max)) (switch-to-buffer (current-buffer)) (display-buffer py-exception-buffer)) ;; split, not switch ((and py-split-windows-on-execute-p (not py-switch-buffers-on-execute-p)) (delete-other-windows) (if (< (count-windows) py-max-split-windows) (progn (funcall py-split-windows-on-execute-function) (set-buffer output-buffer) (goto-char (point-max)) (and (bufferp py-exception-buffer)(set-buffer py-exception-buffer) (switch-to-buffer (current-buffer)) (display-buffer output-buffer 'display-buffer-reuse-window)) (display-buffer output-buffer 'display-buffer-reuse-window)))) ;; no split, switch ((and py-switch-buffers-on-execute-p (not py-split-windows-on-execute-p)) (let (pop-up-windows) (set-buffer output-buffer) (goto-char (point-max)) (switch-to-buffer (current-buffer)))) ;; no split, no switch ((not py-switch-buffers-on-execute-p) ;; (if (equal (window-list-1) windows-displayed) ;; (jump-to-register 313465889) (let (pop-up-windows) (py-restore-window-configuration)))) nil) (defun py-report-executable (py-buffer-name) (let ((erg (downcase (replace-regexp-in-string "<\\([0-9]+\\)>" "" (replace-regexp-in-string "\*" "" (if (string-match " " py-buffer-name) (substring py-buffer-name (1+ (string-match " " py-buffer-name))) py-buffer-name)))))) (when (string-match "-" erg) (setq erg (substring erg 0 (string-match "-" erg)))) erg)) (defun py-shell-send-setup-code (process) "Send all setup code for shell. This function takes the list of setup code to send from the `py-setup-codes' list." (accept-process-output process 1) (dolist (code py-setup-codes) (py-send-string-no-output (symbol-value code) process) (sit-for 0.1))) (defun py--shell-make-comint () (set-buffer (apply 'make-comint-in-buffer executable py-buffer-name executable nil args)) (unless (interactive-p) (sit-for 0.1)) (set (make-local-variable 'comint-prompt-regexp) (cond ((string-match "[iI][pP]ython[[:alnum:]*-]*$" py-buffer-name) (concat "\\(" (mapconcat 'identity (delq nil (list py-shell-input-prompt-1-regexp py-shell-input-prompt-2-regexp ipython-de-input-prompt-regexp ipython-de-output-prompt-regexp py-pdbtrack-input-prompt py-pydbtrack-input-prompt)) "\\|") "\\)")) (t (concat "\\(" (mapconcat 'identity (delq nil (list py-shell-input-prompt-1-regexp py-shell-input-prompt-2-regexp py-pdbtrack-input-prompt py-pydbtrack-input-prompt)) "\\|") "\\)"))))) (defun py--shell-setup () (set (make-local-variable 'comint-input-filter) 'py-history-input-filter) (set (make-local-variable 'comint-prompt-read-only) py-shell-prompt-read-only) (set (make-local-variable 'comint-use-prompt-regexp) nil) (set (make-local-variable 'compilation-error-regexp-alist) python-compilation-regexp-alist) ;; (setq completion-at-point-functions nil) (and py-fontify-shell-buffer-p (set (make-local-variable 'font-lock-defaults) '(py-font-lock-keywords nil nil nil nil (font-lock-syntactic-keywords . py-font-lock-syntactic-keywords)))) (set (make-local-variable 'comment-start) "# ") (set (make-local-variable 'comment-start-skip) "^[ \t]*#+ *") (set (make-local-variable 'comment-column) 40) (set (make-local-variable 'comment-indent-function) #'py-comment-indent-function) (set (make-local-variable 'indent-region-function) 'py-indent-region) (set (make-local-variable 'indent-line-function) 'py-indent-line) (set (make-local-variable 'inhibit-point-motion-hooks) t) (setq proc (get-buffer-process (current-buffer))) (py-shell-send-setup-code proc) (and py-set-pager-cat-p (comint-simple-send proc "import os;os.environ['PAGER'] = 'cat'")) (compilation-shell-minor-mode 1) (setq comint-input-sender 'py-shell-simple-send) ;; (sit-for 0.1) (setq comint-input-ring-file-name (cond ((string-match "[iI][pP]ython[[:alnum:]*-]*$" py-buffer-name) (if py-honor-IPYTHONDIR-p (if (getenv "IPYTHONDIR") (concat (getenv "IPYTHONDIR") "/history") py-ipython-history) py-ipython-history)) (t (if py-honor-PYTHONHISTORY-p (if (getenv "PYTHONHISTORY") (concat (getenv "PYTHONHISTORY") "/" (py-report-executable py-buffer-name) "_history") py-ipython-history) py-ipython-history)))) (comint-read-input-ring t) (set-process-sentinel (get-buffer-process py-buffer-name) #'shell-write-history-on-exit) (add-hook 'comint-output-filter-functions 'ansi-color-process-output) (add-hook 'after-change-functions 'py-after-change-function nil t) (remove-hook 'comint-output-filter-functions 'font-lock-extend-jit-lock-region-after-change) (use-local-map py-shell-map) (cond (py-complete-function (add-hook 'completion-at-point-functions py-complete-function nil 'local)) (py-load-pymacs-p (add-hook 'completion-at-point-functions 'py-complete-completion-at-point nil 'local)) (t (add-hook 'completion-at-point-functions 'py-shell-complete nil 'local))) ;; pdbtrack (and py-pdbtrack-do-tracking-p (add-hook 'comint-output-filter-functions 'py-pdbtrack-track-stack-file t) (remove-hook 'comint-output-filter-functions 'python-pdbtrack-track-stack-file t)) (set-syntax-table python-mode-syntax-table)) (defun py-shell (&optional argprompt dedicated shell buffer-name no-window-managment) "Start an interactive Python interpreter in another window. Interactively, \\[universal-argument] 4 prompts for a buffer. \\[universal-argument] 2 prompts for `py-python-command-args'. If `default-directory' is a remote file name, it is also prompted to change if called with a prefix arg. Returns py-shell's buffer-name. Optional string PYSHELLNAME overrides default `py-shell-name'. BUFFER allows specifying a name, the Python process is connected to When DONE is `t', `py-shell-manage-windows' is omitted " (interactive "P") (let* ((dedicated (or dedicated py-dedicated-process-p)) (py-exception-buffer (or py-exception-buffer (current-buffer))) (coding-system-for-read 'utf-8) (coding-system-for-write 'utf-8) (args py-python-command-args) (path (getenv "PYTHONPATH")) (py-shell-name (or shell py-shell-name (py-choose-shell))) ;; reset later on (py-buffer-name (cond (buffer-name) (t (and (not dedicated) argprompt (cond ((eq 4 (prefix-numeric-value argprompt)) (prog1 (read-buffer "Py-Shell buffer: " (generate-new-buffer-name (py-buffer-name-prepare))) (when (file-remote-p default-directory) ;; It must be possible to declare a local default-directory. (setq default-directory (expand-file-name (read-file-name "Default directory: " default-directory default-directory t nil 'file-directory-p))) (setq py-separator-char (py-separator-char))))) ((and (eq 2 (prefix-numeric-value argprompt)) (fboundp 'split-string)) (setq args (split-string (read-string "Py-Shell arguments: " (concat (mapconcat 'identity py-python-command-args " ") " ")))))))))) ;; If we use a pipe, Unicode characters are not printed ;; correctly (Bug#5794) and IPython does not work at ;; all (Bug#5390). python.el ;; (process-connection-type t) ;; already in py-choose-shell (py-use-local-default (if (not (string= "" py-shell-local-path)) (expand-file-name py-shell-local-path) (when py-use-local-default (error "Abort: `py-use-local-default' is set to `t' but `py-shell-local-path' is empty. Maybe call `py-toggle-local-default-use'")))) (py-buffer-name (or py-buffer-name (py-buffer-name-prepare))) (executable (cond (py-shell-name) (py-buffer-name (py-report-executable py-buffer-name)))) proc py-smart-indentation) ;; lp:1169687, if called from within an existing py-shell, open a new one (and (bufferp py-exception-buffer)(string= py-buffer-name (buffer-name py-exception-buffer)) (setq py-buffer-name (generate-new-buffer-name py-buffer-name))) (unless (comint-check-proc py-buffer-name) (py--shell-make-comint) (py--shell-setup) ;; (add-hook 'py-shell-hook 'py-dirstack-hook) (and py-fontify-shell-buffer-p (font-lock-fontify-buffer)) (unless no-window-managment (py-shell-manage-windows py-buffer-name)) (when py-shell-hook (run-hooks 'py-shell-hook)) py-buffer-name))) (defun py-indent-forward-line (&optional arg) "Indent and move one line forward to next indentation. Returns column of line reached. If `py-kill-empty-line' is non-nil, delete an empty line. When closing a form, use py-close-block et al, which will move and indent likewise. With \\[universal argument] just indent. " (interactive "*P") (let ((orig (point)) erg) (unless (eobp) (if (and (py-in-comment-p)(not py-indent-comments)) (forward-line 1) (py-indent-line-outmost) (unless (eq 4 (prefix-numeric-value arg)) (if (eobp) (newline) (progn (forward-line 1)) (when (and py-kill-empty-line (and (bolp)(eolp)) (not (looking-at "[ \t]*\n[[:alpha:]]")) (not (eobp))) (delete-region (line-beginning-position) (line-end-position))))))) (back-to-indentation) (when (or (eq 4 (prefix-numeric-value arg)) (< orig (point))) (setq erg (current-column))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-dedent-forward-line (&optional arg) "Dedent line and move one line forward. " (interactive "*p") (py-dedent arg) (forward-line 1) (end-of-line) (skip-chars-backward " \t\r\n\f")) (defun py-dedent (&optional arg) "Dedent line according to `py-indent-offset'. With arg, do it that many times. If point is between indent levels, dedent to next level. Return indentation reached, if dedent done, nil otherwise. Affected by `py-dedent-keep-relative-column'. " (interactive "*p") (let ((orig (copy-marker (point))) erg) (dotimes (i arg) (let* ((cui (current-indentation)) (remain (% cui py-indent-offset)) (indent (* py-indent-offset (/ cui py-indent-offset)))) (beginning-of-line) (fixup-whitespace) (if (< 0 remain) (indent-to-column indent) (indent-to-column (- cui py-indent-offset))))) (when (< (point) orig) (setq erg (current-column))) (if py-dedent-keep-relative-column (goto-char orig) (end-of-line) (skip-chars-backward " \t\r\n\f")) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-close-intern (regexp) "Core function, internal used only. " (let ((cui (ignore-errors (car (py-go-to-keyword (symbol-value regexp)))))) (py-end-base regexp (point)) (forward-line 1) (if py-close-provides-newline (unless (and (bolp)(eolp)) (split-line)) (fixup-whitespace)) (indent-to-column cui) cui)) (defun py-close-def () "Set indent level to that of beginning of function definition. If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline. " (interactive "*") (let ((erg (py-close-intern py-def-re))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-close-class () "Set indent level to that of beginning of class definition. If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline. " (interactive "*") (let ((erg (py-close-intern py-class-re))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-close-clause () "Set indent level to that of beginning of clause definition. If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline. " (interactive "*") (let ((erg (py-close-intern py-clause-re))) (when (and py-verbose-p (interactive-p)) (message "%s" erg)) erg)) (defun py-close-block () "Set indent level to that of beginning of block definition. If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline. " (interactive "*") (let ((erg (py-close-intern 'py-block-re))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-class-at-point () "Return class definition as string. With interactive call, send it to the message buffer too. " (interactive) (save-excursion (let* ((beg (py-beginning-of-class)) (end (py-end-of-class)) (res (when (and (numberp beg)(numberp end)(< beg end)) (buffer-substring-no-properties beg end)))) (when (and py-verbose-p (interactive-p)) (message "%s" res)) res))) (defun py-line-at-point () "Return line as string. With interactive call, send it to the message buffer too. " (interactive) (let* ((beg (line-beginning-position)) (end (line-end-position)) (res (when (and (numberp beg)(numberp end)(< beg end)) (buffer-substring-no-properties beg end)))) (when (and py-verbose-p (interactive-p)) (message "%s" res)) res)) (defun py-looking-at-keywords-p () "If looking at a python keyword. Returns t or nil. " (interactive) (let* ((kwds1 (car (nth 1 (eval (eval (quote (car font-lock-defaults))))))) (kwds3 (car (nth 3 (eval (eval (quote (car font-lock-defaults))))))) (res (or (looking-at kwds1) (looking-at kwds3)))) (when (and py-verbose-p (interactive-p)) (message "looking-at keywords: %s" res)) res)) (defun py-match-paren-mode (&optional arg) "py-match-paren-mode nil oder t" (interactive "P") (if (or (eq 4 (prefix-numeric-value arg)) (not py-match-paren-mode)) (setq py-match-paren-mode t) (setq py-match-paren-mode nil))) (defun py-match-paren () "Goto to the opening or closing of block before or after point. With arg, do it that many times. Closes unclosed block if jumping from beginning. " (interactive) (let ((cuc (current-column)) (cid (current-indentation))) (py-beginning-of-block-or-clause) (if (< cuc (current-indentation)) (goto-char cuc) (back-to-indentation) (when (eq (point) cuc) (py-end-of-block))))) ;;; (defalias 'druck 'py-printform-insert) (defun py-printform-insert (&optional arg) "Inserts a print statement out of current `(car kill-ring)' by default, inserts ARG instead if delivered. " (interactive "*") (let* ((name (string-strip (or arg (car kill-ring)))) ;; guess if doublequotes or parentheses are needed (numbered (and (string-match "^[0-9]" name) (string-match "^[ \t]*[0-9]" name)(string-match "[0-9][ \t]*$" name))) (form (cond ((or (eq major-mode 'python-mode)(eq major-mode 'inferior-python-mode)) (if numbered (concat "print(\"" name ": %s \" % (" name "))") (concat "print(\"" name ": %s \" % \"" name "\")")))))) (insert form))) (defun eva () "Put \"eval(...)\" forms around strings at point. " (interactive "*") (skip-chars-forward " \t\r\n\f") (let* ((bounds (ar-bounds-of-word-atpt)) (beg (car bounds)) (end (cdr bounds))) (goto-char end) (insert ")") (goto-char beg) (insert "eval("))) (defun pst-here () "Kill previous \"pdb.set_trace()\" and insert it at point. " (interactive "*") (let ((orig (copy-marker (point)))) (search-backward "pdb.set_trace()") (replace-match "") (when (and (bolp)(eolp)) (delete-region (line-beginning-position) (line-end-position))) (goto-char orig) (insert "pdb.set_trace()"))) (defun py-line-to-printform-python2 (&optional arg) "Transforms the item on current in a print statement. " (interactive "*") (let* ((name (thing-at-point 'word)) (form (cond ((or (eq major-mode 'python-mode)(eq major-mode 'inferior-python-mode)) (concat "print \"" name ": %s \" % " name))))) (delete-region (line-beginning-position) (line-end-position)) (insert form)) (forward-line 1) (back-to-indentation)) ;;; Imenu ;; Note that in this format, this variable can still be used with the ;; imenu--generic-function. Otherwise, there is no real reason to have ;; it. ;; These next two variables are used when searching for the Python ;; class/definitions. Just saving some time in accessing the ;; generic-python-expression, really. (defun py-switch-imenu-index-function () "Switch between series 5. index machine `py-imenu-create-index' and `py-imenu-create-index-new', which also lists modules variables " (interactive) (if (eq major-mode 'python-mode) (progn (if (eq py-imenu-create-index-function 'py-imenu-create-index-new) ;; (setq py-imenu-create-index-function 'py-imenu-create-index) (set (make-local-variable 'py-imenu-create-index-function) 'py-imenu-create-index) ;; (setq py-imenu-create-index-function 'py-imenu-create-index-new) (set (make-local-variable 'py-imenu-create-index-function) 'py-imenu-create-index-new)) (when py-menu (easy-menu-add py-menu)) (when py-verbose-p (message "imenu-create-index-function: %s" (prin1-to-string py-imenu-create-index-function))) (funcall imenu-create-index-function)) (error "%s" "Only available in buffers set to python-mode"))) (defalias 'py-imenu-create-index-function 'py-imenu-create-index) (defun py-imenu-create-index () "Python interface function for the Imenu package. Finds all Python classes and functions/methods. Calls function \\[py-imenu-create-index-engine]. See that function for the details of how this works." (setq py-imenu-generic-regexp (car py-imenu-generic-expression) py-imenu-generic-parens (if py-imenu-show-method-args-p py-imenu-method-arg-parens py-imenu-method-no-arg-parens)) (goto-char (point-min)) ;; Warning: When the buffer has no classes or functions, this will ;; return nil, which seems proper according to the Imenu API, but ;; causes an error in the XEmacs port of Imenu. Sigh. (py-imenu-create-index-engine nil)) (defun py-imenu-create-index-engine (&optional start-indent) "Function for finding Imenu definitions in Python. Finds all definitions (classes, methods, or functions) in a Python file for the Imenu package. Returns a possibly nested alist of the form (INDEX-NAME . INDEX-POSITION) The second element of the alist may be an alist, producing a nested list as in (INDEX-NAME . INDEX-ALIST) This function should not be called directly, as it calls itself recursively and requires some setup. Rather this is the engine for the function \\[py-imenu-create-index-function]. It works recursively by looking for all definitions at the current indention level. When it finds one, it adds it to the alist. If it finds a definition at a greater indentation level, it removes the previous definition from the alist. In its place it adds all definitions found at the next indentation level. When it finds a definition that is less indented then the current level, it returns the alist it has created thus far. The optional argument START-INDENT indicates the starting indentation at which to continue looking for Python classes, methods, or functions. If this is not supplied, the function uses the indentation of the first definition found." (let (index-alist sub-method-alist looking-p def-name prev-name cur-indent def-pos (class-paren (first py-imenu-generic-parens)) (def-paren (second py-imenu-generic-parens))) (setq looking-p (re-search-forward py-imenu-generic-regexp (point-max) t)) (while looking-p (save-excursion ;; used to set def-name to this value but generic-extract-name ;; is new to imenu-1.14. this way it still works with ;; imenu-1.11 ;;(imenu--generic-extract-name py-imenu-generic-parens)) (let ((cur-paren (if (match-beginning class-paren) class-paren def-paren))) (setq def-name (buffer-substring-no-properties (match-beginning cur-paren) (match-end cur-paren)))) (save-match-data (py-beginning-of-def-or-class)) (beginning-of-line) (setq cur-indent (current-indentation))) ;; HACK: want to go to the next correct definition location. We ;; explicitly list them here but it would be better to have them ;; in a list. (setq def-pos (or (match-beginning class-paren) (match-beginning def-paren))) ;; if we don't have a starting indent level, take this one (or start-indent (setq start-indent cur-indent)) ;; if we don't have class name yet, take this one (or prev-name (setq prev-name def-name)) ;; what level is the next definition on? must be same, deeper ;; or shallower indentation (cond ;; Skip code in comments and strings ((py-in-literal)) ;; at the same indent level, add it to the list... ((= start-indent cur-indent) (push (cons def-name def-pos) index-alist)) ;; deeper indented expression, recurse ((< start-indent cur-indent) ;; the point is currently on the expression we're supposed to ;; start on, so go back to the last expression. The recursive ;; call will find this place again and add it to the correct ;; list (re-search-backward py-imenu-generic-regexp (point-min) 'move) (setq sub-method-alist (py-imenu-create-index-engine cur-indent)) (if sub-method-alist ;; we put the last element on the index-alist on the start ;; of the submethod alist so the user can still get to it. (let ((save-elmt (pop index-alist))) (push (cons prev-name (cons save-elmt sub-method-alist)) index-alist)))) ;; found less indented expression, we're done. (t (setq looking-p nil) (re-search-backward py-imenu-generic-regexp (point-min) t))) ;; end-cond (setq prev-name def-name) (and looking-p (setq looking-p (re-search-forward py-imenu-generic-regexp (point-max) 'move)))) (nreverse index-alist))) (defun py-imenu-create-index-new-intern (&optional thisend end) (let* ((pos (match-beginning 0)) (name (match-string-no-properties 2)) (classname (concat "class " name)) (thisend (or thisend (save-match-data (py-end-of-def-or-class-position)))) sublist) (while (and (re-search-forward "^[ \t]*\\(?:\\(def\\|class\\)\\)[ \t]+\\(?:\\(\\sw+\\)\\)" (or thisend end) t 1)(not (nth 8 (syntax-ppss)))) (let* ((pos (match-beginning 0)) (name (match-string-no-properties 2)) (classname (concat "class " name)) (thisend (or thisend (save-match-data (py-end-of-def-or-class-position))))) (if (string= "class" (match-string-no-properties 1)) (py-imenu-create-index-new-intern (save-match-data (py-end-of-def-or-class-position) end)) (push (cons (concat " " name) pos) sublist)))) (if classname (progn (setq sublist (nreverse sublist)) (push (cons classname pos) sublist) (push (cons classname sublist) index-alist)) (push sublist index-alist)))) (defun py-imenu-create-index-new (&optional beg end) "`imenu-create-index-function' for Python. " (set (make-local-variable 'imenu-max-items) 99) (let ((orig (point)) (beg (or beg (point-min))) (end (or end (point-max))) index-alist vars thisend sublist classname pos name) (goto-char beg) (while (and (re-search-forward "^[ \t]*\\(def\\|class\\)[ \t]+\\(\\sw+\\)" end t 1)(not (nth 8 (syntax-ppss)))) (if (save-match-data (string= "class" (match-string-no-properties 1))) (progn (setq pos (match-beginning 0) name (match-string-no-properties 2) classname (concat "class " name) thisend (save-match-data (py-end-of-def-or-class-position)) sublist '()) (while (and (re-search-forward "^[ \t]*\\(def\\|class\\)[ \t]+\\(\\sw+\\)" (or thisend end) t 1)(not (nth 8 (syntax-ppss)))) (let* ((pos (match-beginning 0)) (name (match-string-no-properties 2)) (classname (concat "class " name)) (thisend (or thisend (save-match-data (py-end-of-def-or-class-position))))) (if (string= "class" (match-string-no-properties 1)) (py-imenu-create-index-new-intern (save-match-data (py-end-of-def-or-class-position)) end) (push (cons (concat " " name) pos) sublist)))) (if classname (progn (setq sublist (nreverse sublist)) (push (cons classname pos) sublist) (push (cons classname sublist) index-alist)) (push sublist index-alist))) (let ((pos (match-beginning 0)) (name (match-string-no-properties 2))) (push (cons name pos) index-alist)))) ;; Look for module variables. (goto-char (point-min)) (while (re-search-forward "^\\(\\sw+\\)[ \t]*=" end t) (unless (nth 8 (syntax-ppss)) (let ((pos (match-beginning 1)) (name (match-string-no-properties 1))) (push (cons name pos) vars)))) (setq index-alist (nreverse index-alist)) (when vars (push (cons "Module variables" (nreverse vars)) index-alist)) (goto-char orig) index-alist)) ;;; py-shell (if py-mode-output-map nil (setq py-mode-output-map (make-sparse-keymap)) (define-key py-mode-output-map [button2] 'py-mouseto-exception) (define-key py-mode-output-map "\C-c\C-c" 'py-goto-exception) ;; TBD: Disable all self-inserting keys. This is bogus, we should ;; really implement this as *Python Output* buffer being read-only (mapc #' (lambda (key) (define-key py-mode-output-map key #'(lambda () (interactive) (beep)))) (where-is-internal 'self-insert-command))) (setq py-shell-map (let ((map (copy-keymap comint-mode-map))) (define-key map (kbd "RET") 'comint-send-input) (define-key map "\C-c-" 'py-up-exception) (define-key map "\C-c=" 'py-down-exception) (define-key map (kbd "TAB") 'py-indent-line) ;; (define-key map [tab] 'tab-to-tab-stop) ;; (define-key map "\t" 'py-shell-complete) (define-key map [(meta tab)] 'py-shell-complete) (define-key map [(control c)(!)] 'py-shell) map)) (defun py-toggle-local-default-use () (interactive) "Toggle boolean value of `py-use-local-default'. Returns `py-use-local-default' See also `py-install-local-shells' Installing named virualenv shells is the preffered way, as it leaves your system default unchanged." (setq py-use-local-default (not py-use-local-default)) (when (interactive-p) (message "py-use-local-default set to %s" py-use-local-default)) py-use-local-default) (defun py-choose-shell-by-path (&optional py-separator-char) "Select Python executable according to version desplayed in path, current buffer-file is selected from. Returns versioned string, nil if nothing appropriate found " (interactive) (lexical-let ((path (buffer-file-name)) (py-separator-char (or py-separator-char py-separator-char)) erg) (when (and path py-separator-char (string-match (concat py-separator-char "[iI]?[pP]ython[0-9.]+" py-separator-char) path)) (setq erg (substring path (1+ (string-match (concat py-separator-char "[iI]?[pP]ython[0-9.]+" py-separator-char) path)) (1- (match-end 0)) ))) (when (interactive-p) (message "%s" erg)) erg)) (defun py-choose-shell-by-shebang () "Choose shell by looking at #! on the first line. Returns the specified Python resp. Jython shell command name. " (interactive) ;; look for an interpreter specified in the first line (let* (erg res) (save-excursion (goto-char (point-min)) (when (looking-at py-shebang-regexp) (setq erg (split-string (match-string-no-properties 0) "[#! \t]")) (dolist (ele erg) (when (string-match "[bijp]+ython" ele) (setq res ele))))) (when (and py-verbose-p (interactive-p)) (message "%s" res)) res)) (defun py-choose-shell-by-import () "Choose CPython or Jython mode based imports. If a file imports any packages in `py-jython-packages', within `py-import-check-point-max' characters from the start of the file, return `jython', otherwise return nil." (let (mode) (save-excursion (goto-char (point-min)) (while (and (not mode) (search-forward-regexp "^\\(\\(from\\)\\|\\(import\\)\\) \\([^ \t\n.]+\\)" py-import-check-point-max t)) (setq mode (and (member (match-string 4) py-jython-packages) 'jython)))) mode)) (defalias 'py-version 'py-which-python) (defun py-which-python () "Returns version of Python of current environment, a number. " (interactive) (let* (treffer (cmd (py-choose-shell)) version erg) (setq treffer (string-match "\\([23]*\\.?[0-9\\.]*\\)$" cmd)) (if treffer ;; if a number if part of python name, assume it's the version (setq version (substring-no-properties cmd treffer)) (setq erg (shell-command-to-string (concat cmd " --version"))) ;; Result: "bpython version 0.9.7.1 on top of Python 2.7\n(C) 2008-2010 Bob Farrell, Andreas Stuehrk et al. See AUTHORS for detail.\n" (setq version (cond ((string-match (concat "\\(on top of Python \\)" "\\([0-9]\\.[0-9]+\\)") erg) (match-string-no-properties 2 erg)) ((string-match "\\([0-9]\\.[0-9]+\\)" erg) (substring erg 7 (1- (length erg))))))) (when (interactive-p) (if version (when py-verbose-p (message "%s" version)) (message "%s" "Could not detect Python on your system"))) (string-to-number version))) (defun py-python-current-environment () "Returns path of current Python installation. " (interactive) (let* ((cmd (py-choose-shell)) (denv (shell-command-to-string (concat "type " cmd))) (erg (substring denv (string-match "/" denv)))) (when (interactive-p) (if erg (when py-verbose-p (message "%s" erg)) (message "%s" "Could not detect Python on your system"))) erg)) ;; backward compatibility (defalias 'py-switch-shells 'py-switch-shell) (defalias 'python-toggle-shells 'py-switch-shell) (defalias 'py-toggle-shell 'py-switch-shell) (defun py-switch-shell (&optional arg) "Toggles between the interpreter customized in `py-shell-toggle-1' resp. `py-shell-toggle-2'. Was hard-coded CPython and Jython in earlier versions, now starts with Python2 and Python3 by default. ARG might be a python-version string to set to. \\[universal-argument] `py-toggle-shell' prompts to specify a reachable Python command. \\[universal-argument] followed by numerical arg 2 or 3, `py-toggle-shell' opens a respective Python shell. \\[universal-argument] followed by numerical arg 5 opens a Jython shell. Should you need more shells to select, extend this command by adding inside the first cond: ((eq NUMBER (prefix-numeric-value arg)) \"MY-PATH-TO-SHELL\") " (interactive "P") (let ((name (cond ((eq 2 (prefix-numeric-value arg)) "python2") ((eq 3 (prefix-numeric-value arg)) "python3") ((eq 4 (prefix-numeric-value arg)) (string-strip (read-from-minibuffer "Python Shell: " py-shell-name) "\" " "\" " )) ((eq 5 (prefix-numeric-value arg)) "jython") (t (if (string-match py-shell-name py-shell-toggle-1) py-shell-toggle-2 py-shell-toggle-1)))) erg msg) (cond ((or (string= "ipython" name) (string= "IPython" name)) (setq py-shell-name name py-which-bufname "IPython" msg "IPython" mode-name "IPython")) ((string-match "python3" name) (setq py-shell-name name py-which-bufname (py-buffer-name-prepare) msg "CPython" mode-name (py-buffer-name-prepare))) ((string-match "jython" name) (setq py-shell-name name py-which-bufname (py-buffer-name-prepare) msg "Jython" mode-name (py-buffer-name-prepare))) ((string-match "python" name) (setq py-shell-name name py-which-bufname (py-buffer-name-prepare) msg "CPython" mode-name py-which-bufname)) (t (setq py-shell-name name py-which-bufname name msg name mode-name name))) ;; py-edit-only-p has no interpreter ;; (if py-edit-only-p ;; (setq erg py-shell-name) (setq erg (executable-find py-shell-name)) ;;) (if erg (progn (force-mode-line-update) (when (interactive-p) (message "Using the %s shell, %s" msg erg)) (setq py-output-buffer (format "*%s Output*" py-which-bufname))) (error (concat "Could not detect " py-shell-name " on your sys tem"))))) (defalias 'py-toggle-shells 'py-choose-shell) (defalias 'py-which-shell 'py-choose-shell) (defun py-choose-shell (&optional arg pyshell dedicated py-edit-only-p) "Return an appropriate executable as a string. Returns nil, if no executable found. This does the following: - look for an interpreter with `py-choose-shell-by-shebang' - examine imports using `py-choose-shell-by-import' - look if Path/To/File indicates a Python version - if not successful, return default value of `py-shell-name' When interactivly called, messages the shell name, Emacs would in the given circtumstances. With \\[universal-argument] 4 is called `py-switch-shell' see docu there. " (interactive "P") (if (eq 4 (prefix-numeric-value arg)) (py-switch-shell '(4)) (let* ((erg (cond (py-force-py-shell-name-p py-shell-name) (py-use-local-default (if (not (string= "" py-shell-local-path)) (expand-file-name py-shell-local-path) (message "Abort: `py-use-local-default' is set to `t' but `py-shell-local-path' is empty. Maybe call `py-toggle-local-default-use'"))) ((and (comint-check-proc (current-buffer)) (string-match "ython" (process-name (get-buffer-process (current-buffer))))) (process-name (get-buffer-process (current-buffer)))) ((py-choose-shell-by-shebang)) ((py-choose-shell-by-import)) ((py-choose-shell-by-path)) (t (or (default-value 'py-shell-name) "python")))) (cmd (if py-edit-only-p erg (executable-find erg)))) (if cmd (when (interactive-p) (message "%s" cmd)) (when (interactive-p) (message "%s" "Could not detect Python on your system. Maybe set `py-edit-only-p'?"))) erg))) ;;; (defun py-normalize-directory (directory) "Make sure DIRECTORY ends with a file-path separator char. Returns DIRECTORY" (let ((erg (cond ((string-match (concat py-separator-char "$") directory) directory) ((not (string= "" directory)) (concat directory py-separator-char))))) (unless erg (when py-verbose-p (message "Warning: directory is empty"))) erg)) (defun py-install-directory-check () "Do some sanity check for `py-install-directory'. Returns `t' if successful. " (interactive) (let ((erg (and (boundp 'py-install-directory) (stringp py-install-directory) (< 1 (length py-install-directory))))) (when (interactive-p) (message "py-install-directory-check: %s" erg)) erg)) (defun py-guess-py-install-directory () "Takes value of user directory aka $HOME if `(locate-library \"python-mode\")' is not succesful. Used only, if `py-install-directory' is empty. " (interactive) (let ((erg (cond ((locate-library "python-mode") (file-name-directory (locate-library "python-mode"))) ((and (buffer-file-name)(string-match "python-mode" (buffer-file-name))) (file-name-directory (buffer-file-name))) ((string-match "python-mode" (buffer-name)) default-directory)))) (if erg (setq py-install-directory erg) (setq py-install-directory (expand-file-name "~/"))) (when (and py-verbose-p (interactive-p)) (message "Setting py-install-directory to: %s" py-install-directory)) py-install-directory)) (defun py-set-load-path () "Include needed subdirs of python-mode directory. " (interactive) (let ((py-install-directory (py-normalize-directory py-install-directory))) (cond ((and (not (string= "" py-install-directory))(stringp py-install-directory)) (add-to-list 'load-path (expand-file-name py-install-directory)) (add-to-list 'load-path (concat (expand-file-name py-install-directory) "completion")) (add-to-list 'load-path (concat (expand-file-name py-install-directory) "extensions")) (add-to-list 'load-path (concat (expand-file-name py-install-directory) "test")) (add-to-list 'load-path (concat (expand-file-name py-install-directory) "tools")) (add-to-list 'load-path (concat (expand-file-name py-install-directory) "autopair"))) ((when py-guess-py-install-directory-p (let ((guessed-py-install-directory (py-guess-py-install-directory))) (when guessed-py-install-directory (add-to-list 'load-path guessed-py-install-directory))))) (t (error "Please set `py-install-directory', see INSTALL")) (when (interactive-p) (message "%s" load-path))))) ;;; (defun py--init-easy-menu () (and (ignore-errors (require 'easymenu) t) ;; (easy-menu-define py-menu map "Python Tools" ;; `("PyTools" (easy-menu-define py-menu map "Python Mode menu" `("Python" ("Interpreter" ["Default interpreter..." py-shell :help " `py-shell' Start an interactive Python interpreter. Interactively, C-u 4 prompts for a buffer. C-u 2 prompts for `py-python-command-args'. If `default-directory' is a remote file name, it is also prompted to change if called with a prefix arg. . "] ("Other" :help "Alternative Python Shells" ["ipython" ipython :help "`ipython' Start an IPython interpreter. Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'."] ["python3" python3 :help "`python3' Start an Python3 interpreter. Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'."] ["python2" python2 :help "`python2' Start an Python2 interpreter. Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'."] ["python2.7" python2.7 :help "`python2.7' Start an Python2.7 interpreter. Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'."] ["jython" jython :help "`jython' Start an Jython interpreter. Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'."] ["python3.3" python3.3 :help "`python3.3' Start an Python3.3 interpreter. Optional C-u prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'."] ["python3.4" python3.4 :help "`python3.3' Start an Python3.4 interpreter. Optional C-u prompts for options to pass to the Python3.4 interpreter. See `py-python-command-args'."] "-" ["python-dedicated" python-dedicated :help "`python-dedicated' Start an unique Python interpreter in another window. Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'."] ["ipython-dedicated" ipython-dedicated :help "`ipython-dedicated' Start an unique IPython interpreter in another window. Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'."] ["python3-dedicated" python3-dedicated :help "`python3-dedicated' Start an unique Python3 interpreter in another window. Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'."] ["python2-dedicated" python2-dedicated :help "`python2-dedicated' Start an unique Python2 interpreter in another window. Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'."] ["python2.7-dedicated" python2.7-dedicated :help "`python2'.7-dedicated Start an unique Python2.7 interpreter in another window. Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'."] ["jython-dedicated" jython-dedicated :help "`jython-dedicated' Start an unique Jython interpreter in another window. Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'."] "-" ("Ignoring defaults " :help "Commands will ignore default setting of `py-switch-buffers-on-execute-p' and `py-split-windows-on-execute-p'" ["Execute file python switch" py-execute-file-python-switch :help " `py-execute-file-python-switch' Send file to a Python interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python no-switch" py-execute-file-python-no-switch :help " `py-execute-file-python-no-switch' Send file to a Python interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python dedicated" py-execute-file-python-dedicated :help " `py-execute-file-python-dedicated' Send file to a Python interpreter. Uses a dedicated shell. "] ["Execute file python dedicated switch" py-execute-file-python-dedicated-switch :help " `py-execute-file-python-dedicated-switch' Send file to a Python interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file ipython switch" py-execute-file-ipython-switch :help " `py-execute-file-ipython-switch' Send file to a Ipython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file ipython no-switch" py-execute-file-ipython-no-switch :help " `py-execute-file-ipython-no-switch' Send file to a Ipython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file ipython dedicated" py-execute-file-ipython-dedicated :help " `py-execute-file-ipython-dedicated' Send file to a Ipython interpreter. Uses a dedicated shell. "] ["Execute file ipython dedicated switch" py-execute-file-ipython-dedicated-switch :help " `py-execute-file-ipython-dedicated-switch' Send file to a Ipython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python3 switch" py-execute-file-python3-switch :help " `py-execute-file-python3-switch' Send file to a Python3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python3 no-switch" py-execute-file-python3-no-switch :help " `py-execute-file-python3-no-switch' Send file to a Python3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python3 dedicated" py-execute-file-python3-dedicated :help " `py-execute-file-python3-dedicated' Send file to a Python3 interpreter. Uses a dedicated shell. "] ["Execute file python3 dedicated switch" py-execute-file-python3-dedicated-switch :help " `py-execute-file-python3-dedicated-switch' Send file to a Python3 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python2 switch" py-execute-file-python2-switch :help " `py-execute-file-python2-switch' Send file to a Python2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python2 no-switch" py-execute-file-python2-no-switch :help " `py-execute-file-python2-no-switch' Send file to a Python2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python2 dedicated" py-execute-file-python2-dedicated :help " `py-execute-file-python2-dedicated' Send file to a Python2 interpreter. Uses a dedicated shell. "] ["Execute file python2 dedicated switch" py-execute-file-python2-dedicated-switch :help " `py-execute-file-python2-dedicated-switch' Send file to a Python2 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python2.7 switch" py-execute-file-python2.7-switch :help " `py-execute-file-python2.7-switch' Send file to a Python2.7 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python2.7 no-switch" py-execute-file-python2.7-no-switch :help " `py-execute-file-python2.7-no-switch' Send file to a Python2.7 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python2.7 dedicated" py-execute-file-python2.7-dedicated :help " `py-execute-file-python2.7-dedicated' Send file to a Python2.7 interpreter. Uses a dedicated shell. "] ["Execute file python2.7 dedicated switch" py-execute-file-python2.7-dedicated-switch :help " `py-execute-file-python2.7-dedicated-switch' Send file to a Python2.7 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file jython switch" py-execute-file-jython-switch :help " `py-execute-file-jython-switch' Send file to a Jython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file jython no-switch" py-execute-file-jython-no-switch :help " `py-execute-file-jython-no-switch' Send file to a Jython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file jython dedicated" py-execute-file-jython-dedicated :help " `py-execute-file-jython-dedicated' Send file to a Jython interpreter. Uses a dedicated shell. "] ["Execute file jython dedicated switch" py-execute-file-jython-dedicated-switch :help " `py-execute-file-jython-dedicated-switch' Send file to a Jython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python3.3 switch" py-execute-file-python3.3-switch :help " `py-execute-file-python3.3-switch' Send file to a Python3.3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python3.3 no-switch" py-execute-file-python3.3-no-switch :help " `py-execute-file-python3.3-no-switch' Send file to a Python3.3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python3.3 dedicated" py-execute-file-python3.3-dedicated :help " `py-execute-file-python3.3-dedicated' Send file to a Python3.3 interpreter. Uses a dedicated shell. "] ["Execute file python3.3 dedicated switch" py-execute-file-python3.3-dedicated-switch :help " `py-execute-file-python3.3-dedicated-switch' Send file to a Python3.3 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file bpython switch" py-execute-file-bpython-switch :help " `py-execute-file-bpython-switch' Send file to a Bpython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file bpython no-switch" py-execute-file-bpython-no-switch :help " `py-execute-file-bpython-no-switch' Send file to a Bpython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file bpython dedicated" py-execute-file-bpython-dedicated :help " `py-execute-file-bpython-dedicated' Send file to a Bpython interpreter. Uses a dedicated shell. "] ["Execute file bpython dedicated switch" py-execute-file-bpython-dedicated-switch :help " `py-execute-file-bpython-dedicated-switch' Send file to a Bpython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ) ) ) "-" ("Mark" ["Mark block" py-mark-block :help " `py-mark-block' Mark block at point. Returns beginning and end positions of marked area, a cons. "] ["Mark minor block" py-mark-minor-block :help " `py-mark-minor-block' Mark minor-block at point. A minor block is started by a `for', `if', `try' or `with'. Returns beginning and end positions of marked area, a cons. "] ["Mark def or class" py-mark-def-or-class :help " `py-mark-def-or-class' Mark def-or-class at point. Returns beginning and end positions of marked area, a cons. "] ["Mark statement" py-mark-statement :help "`py-mark-statement' Mark statement at point"] ["Mark top level" py-mark-top-level :help " `py-mark-top-level' Mark top-level form at point. Returns beginning and end positions of marked area, a cons. "] ["Mark clause" py-mark-clause :help "`py-mark-clause' Mark innermost compound statement at point"] ["Mark def" py-mark-def :help "`py-mark-def' Mark innermost definition at point"] ["Mark expression" py-mark-expression :help "`py-mark-expression' Mark expression at point"] ["Mark partial expression" py-mark-partial-expression :help "`py-mark-partial-expression' \".\" operators delimit a partial-expression expression on it's level"] ["Mark class" py-mark-class :help "`py-mark-class' Mark innermost definition at point"] ["Mark comment" py-mark-comment :help "`py-mark-comment' Mark commented section at point"] "-" ["Mark block bol" py-mark-block-bol :help "`py-mark-block-bol' Mark block at point reaching beginning-of-line. "] ["Mark clause bol" py-mark-clause-bol :help "`py-mark-clause-bol' Mark clause at point reaching beginning-of-line. "] ["Mark block-or-clause bol" py-mark-block-or-clause-bol :help "`py-mark-block-or-clause-bol' Mark block-or-clause at point reaching beginning-of-line. "] ["Mark def bol" py-mark-def-bol :help "`py-mark-def-bol' Mark def at point reaching beginning-of-line. "] ["Mark class bol" py-mark-class-bol :help "`py-mark-class-bol' Mark class at point reaching beginning-of-line. "] ["Mark def-or-class bol" py-mark-def-or-class-bol :help "`py-mark-def-or-class-bol' Mark def-or-class at point reaching beginning-of-line. "] ["Mark if-block bol" py-mark-if-block-bol :help "`py-mark-if-block-bol' Mark if-block at point reaching beginning-of-line. "] ["Mark try-block bol" py-mark-try-block-bol :help "`py-mark-try-block-bol' Mark try-block at point reaching beginning-of-line. "] ["Mark minor-block bol" py-mark-minor-block-bol :help "`py-mark-minor-block-bol' Mark minor-block at point reaching beginning-of-line. A minor block is started by a `for', `if', `try' or `with'."] ) "-" ["Shift region left" py-shift-region-left :help " `py-shift-region-left' Dedent region according to `py-indent-offset' by COUNT times. If no region is active, current line is dedented. Returns indentation reached. "] ["Shift region right" py-shift-region-right :help " `py-shift-region-right' Indent region according to `py-indent-offset' by COUNT times. If no region is active, current line is indented. Returns indentation reached. "] "-" ("Comment" ["Comment Region" py-comment-region (point) (mark) :help "Like `comment-region' but uses double hash (`#') comment starter." ] ["Uncomment" py-uncomment :help " `py-uncomment' Uncomment commented lines at point. If region is active, restrict uncommenting at region . "] ["Uncomment Region" (py-comment-region (point) (mark) '(4)) :help "(py-comment-region (point) (mark) '(4))" ] "-" ["Comment block" py-comment-block :help " `py-comment-block' Comments block at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ["Comment minor-block" py-comment-minor-block :help " `py-comment-minor-block' Comments minor-block at point. A minor block is started by a `for', `if', `try' or `with'. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ["Comment top level" py-comment-top-level :help " `py-comment-top-level' Comments top-level form at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ["Comment clause" py-comment-clause :help " `py-comment-clause' Comments clause at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ["Comment block or clause" py-comment-block-or-clause :help " `py-comment-block-or-clause' Comments block-or-clause at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ["Comment def" py-comment-def :help " `py-comment-def' Comments def at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ["Comment class" py-comment-class :help " `py-comment-class' Comments class at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ["Comment def or class" py-comment-def-or-class :help " `py-comment-def-or-class' Comments def-or-class at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ["Comment statement" py-comment-statement :help " `py-comment-statement' Comments statement at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ) "-" ("Move" ["Beginning of block" py-beginning-of-block :help " `py-beginning-of-block' Go to beginning block, skip whitespace at BOL. "] ["Go to end of block" py-end-of-block] "-" ["Beginning of def or class" py-beginning-of-def-or-class :help " `py-beginning-of-def-or-class' Go to beginning def-or-class, skip whitespace at BOL. Returns beginning of def-or-class if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. "] ["End of def or class" py-end-of-def-or-class :help " `py-end-of-def-or-class' Go to end of def-or-class. Returns end of def-or-class if successful, nil otherwise With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. "] "-" ["Beginning of statement" py-beginning-of-statement :help " `py-beginning-of-statement' Go to the initial line of a simple statement. "] ["End of statement" py-end-of-statement :help " `py-end-of-statement' Go to the last char of current statement. To go just beyond the final line of the current statement, use `py-down-statement-bol'. "] "-" ["Backward into nomenclature" py-backward-into-nomenclature :help " `py-backward-into-nomenclature' Go backward into nomenclature A nomenclature is a fancy way of saying AWordWithMixedCaseNotUnderscores. "] ["Forward into nomenclature" py-forward-into-nomenclature :help " `py-forward-into-nomenclature' Go forward into nomenclature A nomenclature is a fancy way of saying AWordWithMixedCaseNotUnderscores. "] "-" ("More" ["Up level" py-up :help " `py-up' Go to beginning one level above of compound statement or definition at point. "] ["Down level" py-down :help " `py-down' Go to beginning one level below of compound statement or definition at point. "] "-" ["Beginning of top level" py-beginning-of-top-level :help " `py-beginning-of-top-level' Go to the very beginning of top-level form at point. "] ["End of top level" py-end-of-top-level :help " `py-end-of-top-level' Go to end of top-level form at point. "] "-" ["Beginning of block current-column" py-beginning-of-block-current-column :help " `py-beginning-of-block-current-column' Reach next beginning of block upwards which starts at current column. Return position. "] "-" ["Move to start of def" py-beginning-of-def t] ["Move to end of def" py-end-of-def t] "-" ["Beginning of clause" py-beginning-of-clause :help " `py-beginning-of-clause' Go to beginning clause, skip whitespace at BOL. "] ["End of clause" py-end-of-clause :help " `py-end-of-clause' Go to end of clause. "] "-" ["Beginning of comment" py-beginning-of-comment :help " `py-beginning-of-comment' Go to beginning of comment at point. "] ["End of comment" py-end-of-comment :help " `py-end-of-comment' Go to end of comment at point. "] "-" ["Go to start of expression" (py-beginning-of-expression t) t] ["Move to end of expression" (py-end-of-expression t) t] "-" ["Go to start of minor-expression" (py-beginning-of-minor-expression t) t] ["Move to end of minor-expression" (py-end-of-minor-expression t) t] "-" ["Beginning of minor block" py-beginning-of-minor-block :help " `py-beginning-of-minor-block' Go to beginning minor-block, skip whitespace at BOL. Returns beginning of minor-block if successful, nil otherwise A minor block is started by a `for', `if', `try' or `with'. "] ["End of minor block" py-end-of-minor-block :help " `py-end-of-minor-block' Go to end of minor-block. Returns end of minor-block if successful, nil otherwise A minor block is started by a `for', `if', `try' or `with'. "] ) ) "-" ("Copy " ["Copy statement" py-copy-statement :help "`py-copy-statement' Copy statement at point"] ["Copy top level" py-copy-top-level :help " `py-copy-top-level' Copy top-level form at point. "] ["Copy clause" py-copy-clause :help "`py-copy-clause' Copy innermost clause at point"] ["Copy block" py-copy-block :help "`py-copy-block' Copy innermost block at point"] ["Copy minor block" py-copy-minor-block :help " `py-copy-minor-block' Copy minor-block at point. Store data in kill ring, so it might yanked back. A minor block is started by a `for', `if', `try' or `with'. "] ["Copy def" py-copy-def :help "`py-copy-def' Copy innermost definition at point"] ["Copy expression" py-copy-expression :help "`py-copy-expression' Copy expression at point"] ["Copy partial expression" py-copy-partial-expression :help "`py-copy-partial-expression' \".\" operators delimit a partial-expression expression on it's level"] ["Copy class" py-copy-class :help "`py-copy-class' Copy innermost definition at point"] ["Copy Def-or-Class" py-copy-def-or-class :help "`py-copy-def-or-class' Copy innermost definition at point"] ) "-" ["Execute region" py-execute-region :help " `py-execute-region' Send the region to a Python interpreter. When called with C-u followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment. "] ["Execute buffer" py-execute-buffer :help " `py-execute-buffer' Send the contents of the buffer to a Python interpreter. When called with C-u, execution through `default-value' of `py-shell-name' is forced. When called with C-u followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment. If the file local variable `py-master-file' is non-nil, execute the named file instead of the buffer's file."] ["Execute def or class" py-execute-def-or-class :help " `py-execute-def-or-class' Send def-or-class at point to a Python interpreter. When called with C-u, execution through `default-value' of `py-shell-name' is forced. See also `py-force-py-shell-name-p'. When called with C-u followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment."] ["Execute statement" py-execute-statement :help " `py-execute-statement' Send statement at point to a Python interpreter. When called with C-u, execution through `default-value' of `py-shell-name' is forced. See also `py-force-py-shell-name-p'. When called with C-u followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment."] ["Execute string" py-execute-string :help " `py-execute-string' Send the argument STRING to a Python interpreter. See also `py-execute-region'. "] ("More... " :help "Python-specific features" ["Execute top level" py-execute-top-level :help " `py-execute-top-level' Send top-level form at point to a Python interpreter. "] ["Execute block" py-execute-block :help "`py-execute-block' Send block at point to Python interpreter. "] ["Execute minor block" py-execute-minor-block :help " `py-execute-minor-block' Send minor-block at point to a Python interpreter. A minor block is started by a `for', `if', `try' or `with'. . "] ["Execute def" py-execute-def :help "`py-execute-def' Send def at point to Python interpreter. "] ["Execute class" py-execute-class :help "`py-execute-class' Send class at point to Python interpreter. "] ["Execute file" py-execute-file :help "`py-execute-file' Send file at point to Python interpreter. "] ;; statement ("Execute statement " :help "Execute statement functions" ["py-execute-statement-python" py-execute-statement-python :help "Execute statement through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-statement-ipython" py-execute-statement-ipython :help "Execute statement through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-statement-python3" py-execute-statement-python3 :help "Execute statement through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-statement-python2" py-execute-statement-python2 :help "Execute statement through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-statement-python2.7" py-execute-statement-python2.7 :help "Execute statement through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-statement-jython" py-execute-statement-jython :help "Execute statement through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-statement-python3.3" py-execute-statement-python3.3 :help "Execute statement through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-statement-bpython" py-execute-statement-bpython :help "Execute statement through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated ["py-execute-statement-python-dedicated" py-execute-statement-python-dedicated :help "Execute statement through a unique Python interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-statement-ipython-dedicated" py-execute-statement-ipython-dedicated :help "Execute statement through a unique IPython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-statement-python3-dedicated" py-execute-statement-python3-dedicated :help "Execute statement through a unique Python3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-statement-python2-dedicated" py-execute-statement-python2-dedicated :help "Execute statement through a unique Python2 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-statement-python2.7-dedicated" py-execute-statement-python2.7-dedicated :help "Execute statement through a unique Python2.7 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-statement-jython-dedicated" py-execute-statement-jython-dedicated :help "Execute statement through a unique Jython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-statement-python3.3-dedicated" py-execute-statement-python3.3-dedicated :help "Execute statement through a unique Python3.3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-statement-bpython-dedicated" py-execute-statement-bpython-dedicated :help "Execute statement through a unique Bpython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ("Ignoring defaults " :help "Commands will ignore default setting of `py-switch-buffers-on-execute-p' and `py-split-windows-on-execute-p'" ;; switch ["py-execute-statement-python-switch" py-execute-statement-python-switch :help "Execute statement through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-statement-ipython-switch" py-execute-statement-ipython-switch :help "Execute statement through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-statement-python3-switch" py-execute-statement-python3-switch :help "Execute statement through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-statement-python2-switch" py-execute-statement-python2-switch :help "Execute statement through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-statement-python2.7-switch" py-execute-statement-python2.7-switch :help "Execute statement through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-statement-jython-switch" py-execute-statement-jython-switch :help "Execute statement through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-statement-python3.3-switch" py-execute-statement-python3.3-switch :help "Execute statement through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-statement-bpython-switch" py-execute-statement-bpython-switch :help "Execute statement through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated-switch ["py-execute-statement-python-dedicated-switch" py-execute-statement-python-dedicated-switch :help "Execute statement through a unique Python interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-statement-ipython-dedicated-switch" py-execute-statement-ipython-dedicated-switch :help "Execute statement through a uniquen IPython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-statement-python3-dedicated-switch" py-execute-statement-python3-dedicated-switch :help "Execute statement through a unique Python3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-statement-python2-dedicated-switch" py-execute-statement-python2-dedicated-switch :help "Execute statement through a unique Python2 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-statement-python2.7-dedicated-switch" py-execute-statement-python2.7-dedicated-switch :help "Execute statement through a unique Python2.7 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-statement-jython-dedicated-switch" py-execute-statement-jython-dedicated-switch :help "Execute statement through a unique Jython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-statement-python3.3-dedicated-switch" py-execute-statement-python3.3-dedicated-switch :help "Execute statement through a unique Python3.3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-statement-bpython-dedicated-switch" py-execute-statement-bpython-dedicated-switch :help "Execute statement through a unique Bpython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] )) ;; block ("Execute block " :help "Execute block functions" ["py-execute-block-python" py-execute-block-python :help "Execute block through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-block-ipython" py-execute-block-ipython :help "Execute block through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-block-python3" py-execute-block-python3 :help "Execute block through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-block-python2" py-execute-block-python2 :help "Execute block through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-block-python2.7" py-execute-block-python2.7 :help "Execute block through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-block-jython" py-execute-block-jython :help "Execute block through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-block-python3.3" py-execute-block-python3.3 :help "Execute block through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-block-bpython" py-execute-block-bpython :help "Execute block through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated ["py-execute-block-python-dedicated" py-execute-block-python-dedicated :help "Execute block through a unique Python interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-block-ipython-dedicated" py-execute-block-ipython-dedicated :help "Execute block through a unique IPython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-block-python3-dedicated" py-execute-block-python3-dedicated :help "Execute block through a unique Python3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-block-python2-dedicated" py-execute-block-python2-dedicated :help "Execute block through a unique Python2 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-block-python2.7-dedicated" py-execute-block-python2.7-dedicated :help "Execute block through a unique Python2.7 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-block-jython-dedicated" py-execute-block-jython-dedicated :help "Execute block through a unique Jython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-block-python3.3-dedicated" py-execute-block-python3.3-dedicated :help "Execute block through a unique Python3.3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-block-bpython-dedicated" py-execute-block-bpython-dedicated :help "Execute block through a unique Bpython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ("Ignoring defaults " :help "Commands will ignore default setting of `py-switch-buffers-on-execute-p' and `py-split-windows-on-execute-p'" ;; switch ["py-execute-block-python-switch" py-execute-block-python-switch :help "Execute block through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-block-ipython-switch" py-execute-block-ipython-switch :help "Execute block through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-block-python3-switch" py-execute-block-python3-switch :help "Execute block through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-block-python2-switch" py-execute-block-python2-switch :help "Execute block through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-block-python2.7-switch" py-execute-block-python2.7-switch :help "Execute block through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-block-jython-switch" py-execute-block-jython-switch :help "Execute block through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-block-python3.3-switch" py-execute-block-python3.3-switch :help "Execute block through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-block-bpython-switch" py-execute-block-bpython-switch :help "Execute block through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated-switch ["py-execute-block-python-dedicated-switch" py-execute-block-python-dedicated-switch :help "Execute block through a unique Python interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-block-ipython-dedicated-switch" py-execute-block-ipython-dedicated-switch :help "Execute block through a uniquen IPython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-block-python3-dedicated-switch" py-execute-block-python3-dedicated-switch :help "Execute block through a unique Python3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-block-python2-dedicated-switch" py-execute-block-python2-dedicated-switch :help "Execute block through a unique Python2 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-block-python2.7-dedicated-switch" py-execute-block-python2.7-dedicated-switch :help "Execute block through a unique Python2.7 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-block-jython-dedicated-switch" py-execute-block-jython-dedicated-switch :help "Execute block through a unique Jython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-block-python3.3-dedicated-switch" py-execute-block-python3.3-dedicated-switch :help "Execute block through a unique Python3.3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-block-bpython-dedicated-switch" py-execute-block-bpython-dedicated-switch :help "Execute block through a unique Bpython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] )) ;; def ("Execute def " :help "Execute def functions" ["py-execute-def-python" py-execute-def-python :help "Execute def through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-def-ipython" py-execute-def-ipython :help "Execute def through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-def-python3" py-execute-def-python3 :help "Execute def through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-def-python2" py-execute-def-python2 :help "Execute def through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-def-python2.7" py-execute-def-python2.7 :help "Execute def through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-def-jython" py-execute-def-jython :help "Execute def through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-def-python3.3" py-execute-def-python3.3 :help "Execute def through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-def-bpython" py-execute-def-bpython :help "Execute def through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated ["py-execute-def-python-dedicated" py-execute-def-python-dedicated :help "Execute def through a unique Python interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-def-ipython-dedicated" py-execute-def-ipython-dedicated :help "Execute def through a unique IPython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-def-python3-dedicated" py-execute-def-python3-dedicated :help "Execute def through a unique Python3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-def-python2-dedicated" py-execute-def-python2-dedicated :help "Execute def through a unique Python2 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-def-python2.7-dedicated" py-execute-def-python2.7-dedicated :help "Execute def through a unique Python2.7 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-def-jython-dedicated" py-execute-def-jython-dedicated :help "Execute def through a unique Jython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-def-python3.3-dedicated" py-execute-def-python3.3-dedicated :help "Execute def through a unique Python3.3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-def-bpython-dedicated" py-execute-def-bpython-dedicated :help "Execute def through a unique Bpython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ("Ignoring defaults " :help "Commands will ignore default setting of `py-switch-buffers-on-execute-p' and `py-split-windows-on-execute-p'" ;; switch ["py-execute-def-python-switch" py-execute-def-python-switch :help "Execute def through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-def-ipython-switch" py-execute-def-ipython-switch :help "Execute def through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-def-python3-switch" py-execute-def-python3-switch :help "Execute def through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-def-python2-switch" py-execute-def-python2-switch :help "Execute def through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-def-python2.7-switch" py-execute-def-python2.7-switch :help "Execute def through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-def-jython-switch" py-execute-def-jython-switch :help "Execute def through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-def-python3.3-switch" py-execute-def-python3.3-switch :help "Execute def through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-def-bpython-switch" py-execute-def-bpython-switch :help "Execute def through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated-switch ["py-execute-def-python-dedicated-switch" py-execute-def-python-dedicated-switch :help "Execute def through a unique Python interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-def-ipython-dedicated-switch" py-execute-def-ipython-dedicated-switch :help "Execute def through a uniquen IPython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-def-python3-dedicated-switch" py-execute-def-python3-dedicated-switch :help "Execute def through a unique Python3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-def-python2-dedicated-switch" py-execute-def-python2-dedicated-switch :help "Execute def through a unique Python2 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-def-python2.7-dedicated-switch" py-execute-def-python2.7-dedicated-switch :help "Execute def through a unique Python2.7 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-def-jython-dedicated-switch" py-execute-def-jython-dedicated-switch :help "Execute def through a unique Jython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-def-python3.3-dedicated-switch" py-execute-def-python3.3-dedicated-switch :help "Execute def through a unique Python3.3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-def-bpython-dedicated-switch" py-execute-def-bpython-dedicated-switch :help "Execute def through a unique Bpython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] )) ;; class ("Execute class " :help "Execute class functions" ["py-execute-class-python" py-execute-class-python :help "Execute class through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-class-ipython" py-execute-class-ipython :help "Execute class through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-class-python3" py-execute-class-python3 :help "Execute class through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-class-python2" py-execute-class-python2 :help "Execute class through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-class-python2.7" py-execute-class-python2.7 :help "Execute class through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-class-jython" py-execute-class-jython :help "Execute class through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-class-python3.3" py-execute-class-python3.3 :help "Execute class through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-class-bpython" py-execute-class-bpython :help "Execute class through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated ["py-execute-class-python-dedicated" py-execute-class-python-dedicated :help "Execute class through a unique Python interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-class-ipython-dedicated" py-execute-class-ipython-dedicated :help "Execute class through a unique IPython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-class-python3-dedicated" py-execute-class-python3-dedicated :help "Execute class through a unique Python3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-class-python2-dedicated" py-execute-class-python2-dedicated :help "Execute class through a unique Python2 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-class-python2.7-dedicated" py-execute-class-python2.7-dedicated :help "Execute class through a unique Python2.7 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-class-jython-dedicated" py-execute-class-jython-dedicated :help "Execute class through a unique Jython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-class-python3.3-dedicated" py-execute-class-python3.3-dedicated :help "Execute class through a unique Python3.3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-class-bpython-dedicated" py-execute-class-bpython-dedicated :help "Execute class through a unique Bpython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ("Ignoring defaults " :help "Commands will ignore default setting of `py-switch-buffers-on-execute-p' and `py-split-windows-on-execute-p'" ;; switch ["py-execute-class-python-switch" py-execute-class-python-switch :help "Execute class through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-class-ipython-switch" py-execute-class-ipython-switch :help "Execute class through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-class-python3-switch" py-execute-class-python3-switch :help "Execute class through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-class-python2-switch" py-execute-class-python2-switch :help "Execute class through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-class-python2.7-switch" py-execute-class-python2.7-switch :help "Execute class through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-class-jython-switch" py-execute-class-jython-switch :help "Execute class through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-class-python3.3-switch" py-execute-class-python3.3-switch :help "Execute class through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-class-bpython-switch" py-execute-class-bpython-switch :help "Execute class through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated-switch ["py-execute-class-python-dedicated-switch" py-execute-class-python-dedicated-switch :help "Execute class through a unique Python interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-class-ipython-dedicated-switch" py-execute-class-ipython-dedicated-switch :help "Execute class through a uniquen IPython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-class-python3-dedicated-switch" py-execute-class-python3-dedicated-switch :help "Execute class through a unique Python3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-class-python2-dedicated-switch" py-execute-class-python2-dedicated-switch :help "Execute class through a unique Python2 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-class-python2.7-dedicated-switch" py-execute-class-python2.7-dedicated-switch :help "Execute class through a unique Python2.7 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-class-jython-dedicated-switch" py-execute-class-jython-dedicated-switch :help "Execute class through a unique Jython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-class-python3.3-dedicated-switch" py-execute-class-python3.3-dedicated-switch :help "Execute class through a unique Python3.3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-class-bpython-dedicated-switch" py-execute-class-bpython-dedicated-switch :help "Execute class through a unique Bpython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] )) ;; region ("Execute region " :help "Execute region functions" ["py-execute-region-python" py-execute-region-python :help "Execute region through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-region-ipython" py-execute-region-ipython :help "Execute region through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-region-python3" py-execute-region-python3 :help "Execute region through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-region-python2" py-execute-region-python2 :help "Execute region through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-region-python2.7" py-execute-region-python2.7 :help "Execute region through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-region-jython" py-execute-region-jython :help "Execute region through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-region-python3.3" py-execute-region-python3.3 :help "Execute region through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-region-bpython" py-execute-region-bpython :help "Execute region through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated ["py-execute-region-python-dedicated" py-execute-region-python-dedicated :help "Execute region through a unique Python interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-region-ipython-dedicated" py-execute-region-ipython-dedicated :help "Execute region through a unique IPython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-region-python3-dedicated" py-execute-region-python3-dedicated :help "Execute region through a unique Python3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-region-python2-dedicated" py-execute-region-python2-dedicated :help "Execute region through a unique Python2 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-region-python2.7-dedicated" py-execute-region-python2.7-dedicated :help "Execute region through a unique Python2.7 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-region-jython-dedicated" py-execute-region-jython-dedicated :help "Execute region through a unique Jython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-region-python3.3-dedicated" py-execute-region-python3.3-dedicated :help "Execute region through a unique Python3.3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-region-bpython-dedicated" py-execute-region-bpython-dedicated :help "Execute region through a unique Bpython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ("Ignoring defaults " :help "Commands will ignore default setting of `py-switch-buffers-on-execute-p' and `py-split-windows-on-execute-p'" ;; switch ["py-execute-region-python-switch" py-execute-region-python-switch :help "Execute region through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-region-ipython-switch" py-execute-region-ipython-switch :help "Execute region through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-region-python3-switch" py-execute-region-python3-switch :help "Execute region through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-region-python2-switch" py-execute-region-python2-switch :help "Execute region through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-region-python2.7-switch" py-execute-region-python2.7-switch :help "Execute region through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-region-jython-switch" py-execute-region-jython-switch :help "Execute region through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-region-python3.3-switch" py-execute-region-python3.3-switch :help "Execute region through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-region-bpython-switch" py-execute-region-bpython-switch :help "Execute region through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated-switch ["py-execute-region-python-dedicated-switch" py-execute-region-python-dedicated-switch :help "Execute region through a unique Python interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-region-ipython-dedicated-switch" py-execute-region-ipython-dedicated-switch :help "Execute region through a uniquen IPython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-region-python3-dedicated-switch" py-execute-region-python3-dedicated-switch :help "Execute region through a unique Python3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-region-python2-dedicated-switch" py-execute-region-python2-dedicated-switch :help "Execute region through a unique Python2 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-region-python2.7-dedicated-switch" py-execute-region-python2.7-dedicated-switch :help "Execute region through a unique Python2.7 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-region-jython-dedicated-switch" py-execute-region-jython-dedicated-switch :help "Execute region through a unique Jython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-region-python3.3-dedicated-switch" py-execute-region-python3.3-dedicated-switch :help "Execute region through a unique Python3.3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-region-bpython-dedicated-switch" py-execute-region-bpython-dedicated-switch :help "Execute region through a unique Bpython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] )) ;; file ("Execute file " :help "Execute file functions" ["Execute file python" py-execute-file-python :help " `py-execute-file-python' Send file to a Python interpreter. "] ["Execute file ipython" py-execute-file-ipython :help " `py-execute-file-ipython' Send file to a Ipython interpreter. "] ["Execute file python3" py-execute-file-python3 :help " `py-execute-file-python3' Send file to a Python3 interpreter. "] ["Execute file python2" py-execute-file-python2 :help " `py-execute-file-python2' Send file to a Python2 interpreter. "] ["Execute file python2.7" py-execute-file-python2.7 :help " `py-execute-file-python2.7' Send file to a Python2.7 interpreter. "] ["Execute file jython" py-execute-file-jython :help " `py-execute-file-jython' Send file to a Jython interpreter. "] ["Execute file python3.3" py-execute-file-python3.3 :help " `py-execute-file-python3.3' Send file to a Python3.3 interpreter. "] ["Execute file bpython" py-execute-file-bpython :help " `py-execute-file-bpython' Send file to a Bpython interpreter. "] ("Ignoring defaults " :help "Commands will ignore default setting of `py-switch-buffers-on-execute-p' and `py-split-windows-on-execute-p'" ["Execute file python switch" py-execute-file-python-switch :help " `py-execute-file-python-switch' Send file to a Python interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python no-switch" py-execute-file-python-no-switch :help " `py-execute-file-python-no-switch' Send file to a Python interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python dedicated" py-execute-file-python-dedicated :help " `py-execute-file-python-dedicated' Send file to a Python interpreter. Uses a dedicated shell. "] ["Execute file python dedicated switch" py-execute-file-python-dedicated-switch :help " `py-execute-file-python-dedicated-switch' Send file to a Python interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file ipython switch" py-execute-file-ipython-switch :help " `py-execute-file-ipython-switch' Send file to a Ipython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file ipython no-switch" py-execute-file-ipython-no-switch :help " `py-execute-file-ipython-no-switch' Send file to a Ipython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file ipython dedicated" py-execute-file-ipython-dedicated :help " `py-execute-file-ipython-dedicated' Send file to a Ipython interpreter. Uses a dedicated shell. "] ["Execute file ipython dedicated switch" py-execute-file-ipython-dedicated-switch :help " `py-execute-file-ipython-dedicated-switch' Send file to a Ipython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python3 switch" py-execute-file-python3-switch :help " `py-execute-file-python3-switch' Send file to a Python3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python3 no-switch" py-execute-file-python3-no-switch :help " `py-execute-file-python3-no-switch' Send file to a Python3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python3 dedicated" py-execute-file-python3-dedicated :help " `py-execute-file-python3-dedicated' Send file to a Python3 interpreter. Uses a dedicated shell. "] ["Execute file python3 dedicated switch" py-execute-file-python3-dedicated-switch :help " `py-execute-file-python3-dedicated-switch' Send file to a Python3 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python2 switch" py-execute-file-python2-switch :help " `py-execute-file-python2-switch' Send file to a Python2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python2 no-switch" py-execute-file-python2-no-switch :help " `py-execute-file-python2-no-switch' Send file to a Python2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python2 dedicated" py-execute-file-python2-dedicated :help " `py-execute-file-python2-dedicated' Send file to a Python2 interpreter. Uses a dedicated shell. "] ["Execute file python2 dedicated switch" py-execute-file-python2-dedicated-switch :help " `py-execute-file-python2-dedicated-switch' Send file to a Python2 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python2.7 switch" py-execute-file-python2.7-switch :help " `py-execute-file-python2.7-switch' Send file to a Python2.7 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python2.7 no-switch" py-execute-file-python2.7-no-switch :help " `py-execute-file-python2.7-no-switch' Send file to a Python2.7 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python2.7 dedicated" py-execute-file-python2.7-dedicated :help " `py-execute-file-python2.7-dedicated' Send file to a Python2.7 interpreter. Uses a dedicated shell. "] ["Execute file python2.7 dedicated switch" py-execute-file-python2.7-dedicated-switch :help " `py-execute-file-python2.7-dedicated-switch' Send file to a Python2.7 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file jython switch" py-execute-file-jython-switch :help " `py-execute-file-jython-switch' Send file to a Jython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file jython no-switch" py-execute-file-jython-no-switch :help " `py-execute-file-jython-no-switch' Send file to a Jython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file jython dedicated" py-execute-file-jython-dedicated :help " `py-execute-file-jython-dedicated' Send file to a Jython interpreter. Uses a dedicated shell. "] ["Execute file jython dedicated switch" py-execute-file-jython-dedicated-switch :help " `py-execute-file-jython-dedicated-switch' Send file to a Jython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python3.3 switch" py-execute-file-python3.3-switch :help " `py-execute-file-python3.3-switch' Send file to a Python3.3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python3.3 no-switch" py-execute-file-python3.3-no-switch :help " `py-execute-file-python3.3-no-switch' Send file to a Python3.3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python3.3 dedicated" py-execute-file-python3.3-dedicated :help " `py-execute-file-python3.3-dedicated' Send file to a Python3.3 interpreter. Uses a dedicated shell. "] ["Execute file python3.3 dedicated switch" py-execute-file-python3.3-dedicated-switch :help " `py-execute-file-python3.3-dedicated-switch' Send file to a Python3.3 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file bpython switch" py-execute-file-bpython-switch :help " `py-execute-file-bpython-switch' Send file to a Bpython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file bpython no-switch" py-execute-file-bpython-no-switch :help " `py-execute-file-bpython-no-switch' Send file to a Bpython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file bpython dedicated" py-execute-file-bpython-dedicated :help " `py-execute-file-bpython-dedicated' Send file to a Bpython interpreter. Uses a dedicated shell. "] ["Execute file bpython dedicated switch" py-execute-file-bpython-dedicated-switch :help " `py-execute-file-bpython-dedicated-switch' Send file to a Bpython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ) ) ) "-" ("Virtualenv" ["Virtualenv workon" virtualenv-workon :help " runs `virtualenv-workon' Make sure virtualenv is provided "] ["Virtualenv activate" virtualenv-activate :help " `virtualenv-activate' Activate the virtualenv located in DIR. "] ["Virtualenv deactivate" virtualenv-deactivate :help " `virtualenv-deactivate' Deactivate the current virtual enviroment. "] ["Virtualenv p" virtualenv-p :help " `virtualenv-p' Check if a directory is a virtualenv. "] ) ["Execute import or reload" py-execute-import-or-reload :help " `py-execute-import-or-reload' Import the current buffer's file in a Python interpreter. If the file has already been imported, then do reload instead to get the latest version. If the file's name does not end in ".py", then do execfile instead. If the current buffer is not visiting a file, do `py-execute-buffer' instead. If the file local variable `py-master-file' is non-nil, import or reload the named file instead of the buffer's file. The file may be saved based on the value of `py-execute-import-or-reload-save-p'. See also `M-x py-execute-region'. This may be preferable to `M-x py-execute-buffer' because: - Definitions stay in their module rather than appearing at top level, where they would clutter the global namespace and not affect uses of qualified names (MODULE.NAME). - The Python debugger gets line number information about the functions. "] ("Help" ["Describe mode" py-describe-mode t] ["Help on symbol" py-describe-symbol :help "`py-describe-symbol'\n Use pydoc on symbol at point"] ;; ["py-complete-help" py-complete-help ;; :help " `py-complete-help' ;; Get help on a Python expression.\n ;; Needs Pymacs "] ;; ;; ["Help thing at point" py-complete-help-thing-at-point ;; :help " `py-complete-help-thing-at-point'\n ;; Needs Pymacs "] ;; ["Signature" py-complete-signature-expr ;; :help " Print object's signature\n ;; Needs Pymacs"] ) ["Debugger" pdb :help "`pdb' Run pdb under GUD"] ("Checks" ["pychecker-run" py-pychecker-run :help "`py-pychecker-run' Run pychecker Call `easy_install pyflakes' resp. `pip... 'if not available"] ("Pylint " :help "Extendet report options Call `easy_install pylint' resp. `pip...' if not available" ["py-pylint-run" py-pylint-run :help "`py-pylint-run' Pylint will display a number of messages as it analyzes the code, as well as some statistics about the number of warnings and errors found in different files - unless called with arg \"--errors-only\". The messages are classified under various categories such as errors and warnings Pylint checks length of lines of code, if variable names are well-formed according to your coding standard, if declared interfaces are truly implemented, and much more. Additionally, it is possible to write plugins. Call `easy_install pylint' resp. `pip...' if not available "] ["py-pylint-help" py-pylint-help :help "`py-pylint-help' List extendet report options "] ["pylint-flymake-mode" pylint-flymake-mode :help "`pylint-flymake-mode' Toggle flymake-mode running `pylint' "]) ("pep8 " :help "Check formatting Call `easy_install pep8' resp. `pip...' if not available" ["pep8-run" py-pep8-run :help "`py-pep8-run' Check formatting (default on the file currently visited) Call `easy_install pep8' resp. `pip...' if not available "] ["pep8-help" py-pep8-help :help "`py-pep8-help' Display help for pep8 format checker) "] ["pep8-flymake-mode" pep8-flymake-mode :help "`pep8-flymake-mode' Toggle flymake-mode running `pep8' "]) ("Pyflakes " :help "Non intrusive code checker Call `easy_install pyflakes' resp. `pip...' if not available" ["pyflakes-run" py-pyflakes-run :help "`py-pyflakes-run' Run pyflakes Call `easy_install pyflakes' resp. `pip...' if not available"] ["pyflakes-help" py-pyflakes-help :help "`py-pyflakes-help' Display help for Pyflakes "] ["pyflakes-flymake-mode" pyflakes-flymake-mode :help "`pyflakes-flymake-mode' Toggle flymake-mode running `pyflakes' "] ) ("Flake8 " :help "code checker running " ["Flake8 run" py-flake8-run :help " `py-flake8-run' Flake8 is a wrapper around these tools: - PyFlakes - pep8 - Ned Batchelder's McCabe script It also adds features: - files that contain this line are skipped:: # flake8: noqa - lines that contain a ``# noqa`` comment at the end will not issue warnings. - a Git and a Mercurial hook. - a McCabe complexity checker. - extendable through ``flake8.extension`` entry points. . "] ["Flake8 help" py-flake8-help :help " `py-flake8-help' Display flake8 command line help messages. "] ) ("Pyflakes-pep8 " :help "Non intrusive code checker running `pyflakes' and `pep8' call `easy_install pyflakes' resp. `pip...' and `easy_install pep8' if basics not available" ["pyflakespep8-run" py-pyflakespep8-run :help "`py-pyflakespep8-run' Run `pyflakespep8' Call `easy_install pyflakes' resp. `pip...' if not available"] ["pyflakespep8-help" py-pyflakespep8-help :help "`py-pyflakespep8-help' Display help for Pyflakespep8 "] ["pyflakespep8-flymake-mode" pyflakespep8-flymake-mode :help "`pyflakespep8-flymake-mode' Toggle flymake-mode running `pyflakespep8' "]) ) ("Customize" ["Python-mode customize group" (customize-group 'python-mode) :help "Open the customization buffer for Python mode"] ("Switches" :help "Toggle useful modes like `highlight-indentation'" ("Interpreter" ["Execute without temporary file" (setq py-execute-no-temp-p (not py-execute-no-temp-p)) :help " `py-execute-no-temp-p' Seems Emacs-24.3 provided a way executing stuff without temporary files. In experimental state yet " :style toggle :selected py-execute-no-temp-p] ["Warn tmp files left " (setq py-warn-tmp-files-left-p (not py-warn-tmp-files-left-p)) :help "Messages a warning, when `py-temp-directory' contains files susceptible being left by previous Python-mode sessions. See also lp:987534 Use `M-x customize-variable' to set it permanently" :style toggle :selected py-warn-tmp-files-left-p] ["Shell prompt read only" (setq py-shell-prompt-read-only (not py-shell-prompt-read-only)) :help "If non-nil, the python prompt is read only. Setting this variable will only effect new shells.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-shell-prompt-read-only] ["Remove cwd from path" (setq py-remove-cwd-from-path (not py-remove-cwd-from-path)) :help "Whether to allow loading of Python modules from the current directory. If this is non-nil, Emacs removes '' from sys.path when starting an inferior Python process. This is the default, for security reasons, as it is easy for the Python process to be started without the user's realization (e.g. to perform completion).Use `M-x customize-variable' to set it permanently" :style toggle :selected py-remove-cwd-from-path] ["Honor IPYTHONDIR " (setq py-honor-IPYTHONDIR-p (not py-honor-IPYTHONDIR-p)) :help "When non-nil ipython-history file is constructed by \$IPYTHONDIR followed by "/history". Default is nil. Otherwise value of py-ipython-history is used. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-honor-IPYTHONDIR-p] ["Honor PYTHONHISTORY " (setq py-honor-PYTHONHISTORY-p (not py-honor-PYTHONHISTORY-p)) :help "When non-nil python-history file is set by \$PYTHONHISTORY Default is nil. Otherwise value of py-python-history is used. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-honor-PYTHONHISTORY-p] ["Enforce py-shell-name" force-py-shell-name-p-on :help "Enforce customized default `py-shell-name' should upon execution. "] ["Don't enforce default interpreter" force-py-shell-name-p-off :help "Make execute commands guess interpreter from environment"] ["Enforce local Python shell " py-force-local-shell-on :help "Locally indicated Python being enforced upon sessions execute commands. "] ["Remove local Python shell enforcement, restore default" py-force-local-shell-off :help "Restore `py-shell-name' default value and `behaviour'. "] ["Run `py-shell' at start" (setq py-start-run-py-shell (not py-start-run-py-shell)) :help "If `python-mode' should start a python-shell, `py-shell'. Default is `nil'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-start-run-py-shell] ["Start run ipython shell" (setq py-start-run-ipython-shell (not py-start-run-ipython-shell)) :help "If `python-mode' should start an ipython-shell. Default is `nil'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-start-run-ipython-shell] ) ("Execute" ["Force shell name " (setq py-force-py-shell-name-p (not py-force-py-shell-name-p)) :help "When `t', execution with kind of Python specified in `py-shell-name' is enforced, possibly shebang doesn't take precedence. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-force-py-shell-name-p] ["Enforce py-output-buffer" (setq py-enforce-output-buffer-p (not py-enforce-output-buffer-p)) :help " `py-enforce-output-buffer-p' When non-nil, value of `py-output-buffer' is used for output, regardless of environment. Default is nil." :style toggle :selected py-enforce-output-buffer-p] ["Cleanup temporary" (setq py-cleanup-temporary (not py-cleanup-temporary)) :help "If temporary buffers and files used by functions executing region should be deleted afterwards. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-cleanup-temporary] ["Execute no temp " (setq py-execute-no-temp-p (not py-execute-no-temp-p)) :help "Seems Emacs-24.3 provided a way executing stuff without temporary files. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-execute-no-temp-p] ["Execute \"if name == main\" blocks p" (setq py-if-name-main-permission-p (not py-if-name-main-permission-p)) :help " `py-if-name-main-permission-p' Allow execution of code inside blocks delimited by if __name__ == '__main__' Default is non-nil. " :style toggle :selected py-if-name-main-permission-p] ["Ask about save" (setq py-ask-about-save (not py-ask-about-save)) :help "If not nil, ask about which buffers to save before executing some code. Otherwise, all modified buffers are saved without asking.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-ask-about-save] ["Store result" (setq py-store-result-p (not py-store-result-p)) :help " `py-store-result-p' When non-nil, put resulting string of `py-execute-...' into kill-ring, so it might be yanked. " :style toggle :selected py-store-result-p] ["Prompt on changed " (setq py-prompt-on-changed-p (not py-prompt-on-changed-p)) :help "When called interactively, ask for save before a changed buffer is sent to interpreter. Default is `t'Use `M-x customize-variable' to set it permanently" :style toggle :selected py-prompt-on-changed-p] ["Dedicated process " (setq py-dedicated-process-p (not py-dedicated-process-p)) :help "If commands executing code use a dedicated shell. Default is nilUse `M-x customize-variable' to set it permanently" :style toggle :selected py-dedicated-process-p] ) ("TAB related" ["indent-tabs-mode" (setq indent-tabs-mode (not indent-tabs-mode)) :help "Indentation can insert tabs if this is non-nil. Use `M-x customize-variable' to set it permanently" :style toggle :selected indent-tabs-mode] ["Tab indent" (setq py-tab-indent (not py-tab-indent)) :help "Non-nil means TAB in Python mode calls `py-indent-line'.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-tab-indent] ["Tab shifts region " (setq py-tab-shifts-region-p (not py-tab-shifts-region-p)) :help "If `t', TAB will indent/cycle the region, not just the current line. Default is nil See also `py-tab-indents-region-p' Use `M-x customize-variable' to set it permanently" :style toggle :selected py-tab-shifts-region-p] ["Tab indents region " (setq py-tab-indents-region-p (not py-tab-indents-region-p)) :help "When `t' and first TAB doesn't shift, indent-region is called. Default is nil See also `py-tab-shifts-region-p' Use `M-x customize-variable' to set it permanently" :style toggle :selected py-tab-indents-region-p] ) ("Filling" ("Docstring styles" :help "Toggle values of `py-docstring-style' In order to set permanently customize this variable" ("Nil" :help "Toggle nil value of `py-docstring-style' Use `M-x customize-variable' to set it permanently" ["Toggle nil docstring style" toggle-py-nil-docstring-style :help "If nil docstring-style should be on or off Returns value of `py-docstring-style' switched to Use `M-x customize-variable' to set it permanently"] ["Nil on" py-nil-docstring-style-on :help "Make sure, nil docstring-style is on Use `M-x customize-variable' to set it permanently"] ["Nil off" py-nil-docstring-style-off :help "Restores default value of `py-docstring-style' Use `M-x customize-variable' to set it permanently"]) ("Onetwo" :help "Toggle onetwo value of `py-docstring-style' In order to set permanently customize this variable" ["Toggle onetwo docstring style" toggle-py-onetwo-docstring-style :help "If onetwo docstring-style should be on or off Returns value of `py-docstring-style' switched to Use `M-x customize-variable' to set it permanently"] ["Onetwo on" py-onetwo-docstring-style-on :help "Make sure, onetwo docstring-style is on Use `M-x customize-variable' to set it permanently"] ["Onetwo off" py-onetwo-docstring-style-off :help " Restores default value of `py-docstring-style' Use `M-x customize-variable' to set it permanently"]) ("Pep 257" :help "Toggle pep-257 value of `py-docstring-style' In order to set permanently customize this variable" ["Toggle pep 257 docstring style" toggle-py-pep-257-docstring-style :help "If pep-257 docstring-style should be on or off Returns value of `py-docstring-style' switched to Use `M-x customize-variable' to set it permanently"] ["Pep 257 on" py-pep-257-docstring-style-on :help "Make sure, pep-257 docstring-style is on Use `M-x customize-variable' to set it permanently"] ["Pep 257 off" py-pep-257-docstring-style-off :help " Restores default value of `py-docstring-style' Use `M-x customize-variable' to set it permanently"]) ("Pep 257 nn" :help "Toggle pep-257-nn value of `py-docstring-style' In order to set permanently customize this variable" ["Toggle pep 257 nn docstring style" toggle-py-pep-257-nn-docstring-style :help "If pep-257-nn docstring-style should be on or off Returns value of `py-docstring-style' switched to Use `M-x customize-variable' to set it permanently"] ["Pep 257 nn on" py-pep-257-nn-docstring-style-on :help "Make sure, pep-257-nn docstring-style is on Use `M-x customize-variable' to set it permanently"] ["Pep 257 nn off" py-pep-257-nn-docstring-style-off :help " Restores default value of `py-docstring-style' Use `M-x customize-variable' to set it permanently"]) ("Symmetric" :help "Toggle symmetric value of `py-docstring-style' In order to set permanently customize this variable" ["Toggle symmetric docstring style" toggle-py-symmetric-docstring-style :help "If symmetric docstring-style should be on or off Returns value of `py-docstring-style' switched to Use `M-x customize-variable' to set it permanently"] ["Symmetric on" py-symmetric-docstring-style-on :help "Make sure, symmetric docstring-style is on Use `M-x customize-variable' to set it permanently"] ["Symmetric off" py-symmetric-docstring-style-off :help " Restores default value of `py-docstring-style' Use `M-x customize-variable' to set it permanently"]) ("Django" :help "Toggle django value of `py-docstring-style' In order to set permanently customize this variable" ["Toggle django docstring style" toggle-py-django-docstring-style :help "If django docstring-style should be on or off Returns value of `py-docstring-style' switched to Use `M-x customize-variable' to set it permanently"] ["Django on" py-django-docstring-style-on :help "Make sure, django docstring-style is on Use `M-x customize-variable' to set it permanently"] ["Django off" py-django-docstring-style-off :help "Restores default value of `py-docstring-style' Use `M-x customize-variable' to set it permanently"]) ) ["Fill-paragraph fill docstring " (setq py-paragraph-fill-docstring-p (not py-paragraph-fill-docstring-p)) :help "If `py-fill-paragraph', when inside a docstring, should fill the complete string. Default is nil. Convenient use of `M-q' inside docstrings See also `py-docstring-style' Use `M-x customize-variable' to set it permanently" :style toggle :selected py-paragraph-fill-docstring-p] ["Auto-fill mode" (setq py-set-fill-column-p (not py-set-fill-column-p)) :help "Set Python specific `fill-column' according to `py-docstring-fill-column' and `py-comment-fill-column' Use `M-x customize-variable' to set it permanently" :style toggle :selected py-set-fill-column-p] ["Use current dir when execute" (setq py-use-current-dir-when-execute-p (not py-use-current-dir-when-execute-p)) :help " `toggle-py-use-current-dir-when-execute-p' Use `M-x customize-variable' to set it permanently" :style toggle :selected py-use-current-dir-when-execute-p] ) ("Indent" ["Close at start column" (setq py-closing-list-dedents-bos (not py-closing-list-dedents-bos)) :help "When non-nil, indent list's closing delimiter like start-column. It will be lined up under the first character of the line that starts the multi-line construct, as in: my_list = \[ 1, 2, 3, 4, 5, 6, ] Use `M-x customize-variable' to set it permanently" :style toggle :selected py-closing-list-dedents-bos] ["Closing list keeps space" (setq py-closing-list-keeps-space (not py-closing-list-keeps-space)) :help "If non-nil, closing parenthesis dedents onto column of opening plus `py-closing-list-space', default is nil Use `M-x customize-variable' to set it permanently" :style toggle :selected py-closing-list-keeps-space] ["Closing list space" (setq py-closing-list-space (not py-closing-list-space)) :help "Number of chars, closing parenthesis outdent from opening, default is 1 Use `M-x customize-variable' to set it permanently" :style toggle :selected py-closing-list-space] ["Tab shifts region " (setq py-tab-shifts-region-p (not py-tab-shifts-region-p)) :help "If `t', TAB will indent/cycle the region, not just the current line. Default is nil See also `py-tab-indents-region-p'Use `M-x customize-variable' to set it permanently" :style toggle :selected py-tab-shifts-region-p] ["Lhs inbound indent" (setq py-lhs-inbound-indent (not py-lhs-inbound-indent)) :help "When line starts a multiline-assignment: How many colums indent should be more than opening bracket, brace or parenthesis. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-lhs-inbound-indent] ["Continuation offset" (setq py-continuation-offset (not py-continuation-offset)) :help "With numeric ARG different from 1 py-continuation-offset is set to that value; returns py-continuation-offset. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-continuation-offset] ["Electric colon" (setq py-electric-colon-active-p (not py-electric-colon-active-p)) :help " `py-electric-colon-active-p' `py-electric-colon' feature. Default is `nil'. See lp:837065 for discussions. " :style toggle :selected py-electric-colon-active-p] ["Electric colon at beginning of block only" (setq py-electric-colon-bobl-only (not py-electric-colon-bobl-only)) :help "When inserting a colon, do not indent lines unless at beginning of block. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-electric-colon-bobl-only] ["Electric yank active " (setq py-electric-yank-active-p (not py-electric-yank-active-p)) :help " When non-nil, `yank' will be followed by an `indent-according-to-mode'. Default is nilUse `M-x customize-variable' to set it permanently" :style toggle :selected py-electric-yank-active-p] ["Electric kill backward " (setq py-electric-kill-backward-p (not py-electric-kill-backward-p)) :help "Affects `py-electric-backspace'. Default is nil. If behind a delimited form of braces, brackets or parentheses, backspace will kill it's contents With when cursor after my_string\[0:1] --------------^ ==> my_string\[] ----------^ In result cursor is insided emptied delimited form.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-electric-kill-backward-p] ["Trailing whitespace smart delete " (setq py-trailing-whitespace-smart-delete-p (not py-trailing-whitespace-smart-delete-p)) :help "Default is nil. When t, python-mode calls (add-hook 'before-save-hook 'delete-trailing-whitespace nil 'local) Also commands may delete trailing whitespace by the way. When editing other peoples code, this may produce a larger diff than expected Use `M-x customize-variable' to set it permanently" :style toggle :selected py-trailing-whitespace-smart-delete-p] ["Newline delete trailing whitespace " (setq py-newline-delete-trailing-whitespace-p (not py-newline-delete-trailing-whitespace-p)) :help "Delete trailing whitespace maybe left by `py-newline-and-indent'. Default is `t'. See lp:1100892 Use `M-x customize-variable' to set it permanently" :style toggle :selected py-newline-delete-trailing-whitespace-p] ["Dedent keep relative column" (setq py-dedent-keep-relative-column (not py-dedent-keep-relative-column)) :help "If point should follow dedent or kind of electric move to end of line. Default is t - keep relative position. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-dedent-keep-relative-column] ["Indent paren spanned multilines " (setq py-indent-paren-spanned-multilines-p (not py-indent-paren-spanned-multilines-p)) :help "If non-nil, indents elements of list a value of `py-indent-offset' to first element: def foo(): if (foo && baz): bar() Default lines up with first element: def foo(): if (foo && baz): bar() Use `M-x customize-variable' to set it permanently" :style toggle :selected py-indent-paren-spanned-multilines-p] ["Indent honors multiline listing" (setq py-indent-honors-multiline-listing (not py-indent-honors-multiline-listing)) :help "If `t', indents to 1\+ column of opening delimiter. If `nil', indent adds one level to the beginning of statement. Default is `nil'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-indent-honors-multiline-listing] ["Indent comment " (setq py-indent-comments (not py-indent-comments)) :help "If comments should be indented like code. Default is `nil'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-indent-comments] ["Uncomment indents " (setq py-uncomment-indents-p (not py-uncomment-indents-p)) :help "When non-nil, after uncomment indent lines. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-uncomment-indents-p] ["Indent honors inline comment" (setq py-indent-honors-inline-comment (not py-indent-honors-inline-comment)) :help "If non-nil, indents to column of inlined comment start. Default is nil. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-indent-honors-inline-comment] ["Kill empty line" (setq py-kill-empty-line (not py-kill-empty-line)) :help "If t, py-indent-forward-line kills empty lines. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-kill-empty-line] ("Smart indentation" :help "Toggle py-smart-indentation' Use `M-x customize-variable' to set it permanently" ["Toggle py-smart-indentation" toggle-py-smart-indentation :help "Toggles py-smart-indentation Use `M-x customize-variable' to set it permanently"] ["py-smart-indentation on" py-smart-indentation-on :help "Switches py-smart-indentation on Use `M-x customize-variable' to set it permanently"] ["py-smart-indentation off" py-smart-indentation-off :help "Switches py-smart-indentation off Use `M-x customize-variable' to set it permanently"] ) ["Beep if tab change" (setq py-beep-if-tab-change (not py-beep-if-tab-change)) :help "Ring the bell if `tab-width' is changed. If a comment of the form # vi:set tabsize=: is found before the first code line when the file is entered, and the current value of (the general Emacs variable) `tab-width' does not equal , `tab-width' is set to , a message saying so is displayed in the echo area, and if `py-beep-if-tab-change' is non-nil the Emacs bell is also rung as a warning.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-beep-if-tab-change] ["Highlight indentation" highlight-indentation :help "Toggle highlight indentation. Use `M-x customize-variable' to set it permanently Make sure `highlight-indentation' is installed" ] ["Electric comment " (setq py-electric-comment-p (not py-electric-comment-p)) :help "If \"#\" should call `py-electric-comment'. Default is `nil'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-electric-comment-p] ["Electric comment add space " (setq py-electric-comment-add-space-p (not py-electric-comment-add-space-p)) :help "If py-electric-comment should add a space. Default is `nil'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-electric-comment-add-space-p] ["Empty line closes " (setq py-empty-line-closes-p (not py-empty-line-closes-p)) :help "When non-nil, dedent after empty line following block if True: print(\"Part of the if-statement\") print(\"Not part of the if-statement\") Default is nil If non-nil, a C-j from empty line dedents. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-empty-line-closes-p] ) ("Fontification" ["Mark decorators" (setq py-mark-decorators (not py-mark-decorators)) :help "If py-mark-def-or-class functions should mark decorators too. Default is `nil'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-mark-decorators] ["Fontify shell buffer " (setq py-fontify-shell-buffer-p (not py-fontify-shell-buffer-p)) :help "If code in Python shell should be highlighted as in script buffer. Default is nil. If `t', related vars like `comment-start' will be set too. Seems convenient when playing with stuff in IPython shell Might not be TRT when a lot of output arrives Use `M-x customize-variable' to set it permanently" :style toggle :selected py-fontify-shell-buffer-p] ["Use font lock doc face " (setq py-use-font-lock-doc-face-p (not py-use-font-lock-doc-face-p)) :help "If documention string inside of def or class get `font-lock-doc-face'. `font-lock-doc-face' inherits `font-lock-string-face'. Call M-x `customize-face' in order to have a visible effect. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-use-font-lock-doc-face-p] ) ("Directory" ["Guess install directory " (setq py-guess-py-install-directory-p (not py-guess-py-install-directory-p)) :help "If in cases, `py-install-directory' isn't set, `py-set-load-path'should guess it from `buffer-file-name'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-guess-py-install-directory-p] ["Use local default" (setq py-use-local-default (not py-use-local-default)) :help "If `t', py-shell will use `py-shell-local-path' instead of default Python. Making switch between several virtualenv's easier, `python-mode' should deliver an installer, so named-shells pointing to virtualenv's will be available. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-use-local-default] ["Use current dir when execute " (setq py-use-current-dir-when-execute-p (not py-use-current-dir-when-execute-p)) :help "When `t', current directory is used by Python-shell for output of `py-execute-buffer' and related commands. See also `py-execute-directory'Use `M-x customize-variable' to set it permanently" :style toggle :selected py-use-current-dir-when-execute-p] ["Keep shell dir when execute " (setq py-keep-shell-dir-when-execute-p (not py-keep-shell-dir-when-execute-p)) :help "Don't change Python shell's current working directory when sending code. See also `py-execute-directory'Use `M-x customize-variable' to set it permanently" :style toggle :selected py-keep-shell-dir-when-execute-p] ["Fileless buffer use default directory " (setq py-fileless-buffer-use-default-directory-p (not py-fileless-buffer-use-default-directory-p)) :help "When `py-use-current-dir-when-execute-p' is non-nil and no buffer-file exists, value of `default-directory' sets current working directory of Python output shellUse `M-x customize-variable' to set it permanently" :style toggle :selected py-fileless-buffer-use-default-directory-p] ) ("Display" ["Modeline display full path " (setq py-modeline-display-full-path-p (not py-modeline-display-full-path-p)) :help "If the full PATH/TO/PYTHON should be displayed in shell modeline. Default is nil. Note: when `py-shell-name' is specified with path, it's shown as an acronym in buffer-name already. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-modeline-display-full-path-p] ["Modeline acronym display home " (setq py-modeline-acronym-display-home-p (not py-modeline-acronym-display-home-p)) :help "If the modeline acronym should contain chars indicating the home-directory. Default is nil Use `M-x customize-variable' to set it permanently" :style toggle :selected py-modeline-acronym-display-home-p] ["Hide show hide docstrings" (setq py-hide-show-hide-docstrings (not py-hide-show-hide-docstrings)) :help "Controls if doc strings can be hidden by hide-showUse `M-x customize-variable' to set it permanently" :style toggle :selected py-hide-show-hide-docstrings] ["Hide comments when hiding all" (setq py-hide-comments-when-hiding-all (not py-hide-comments-when-hiding-all)) :help "Hide the comments too when you do an `hs-hide-all'.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-hide-comments-when-hiding-all] ["Max help buffer " (setq py-max-help-buffer-p (not py-max-help-buffer-p)) :help "If \"\*Python-Help\*\"-buffer should appear as the only visible. Default is nil. In help-buffer, \"q\" will close it. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-max-help-buffer-p] ) ("Completion" ["Ipython complete use separate shell " (setq ipython-complete-use-separate-shell-p (not ipython-complete-use-separate-shell-p)) :help "If `ipython-complete' should use a separate shell. Thus prompt-counter is not incremented by completion. Use `M-x customize-variable' to set it permanently" :style toggle :selected ipython-complete-use-separate-shell-p] ["Set complete keymap " (setq py-set-complete-keymap-p (not py-set-complete-keymap-p)) :help "If `py-complete-initialize', which sets up enviroment for Pymacs based py-complete, should load it's keys into `python-mode-map' Default is nil. See also resp. edit `py-complete-set-keymap' Use `M-x customize-variable' to set it permanently" :style toggle :selected py-set-complete-keymap-p] ["No completion calls dabbrev expand " (setq py-no-completion-calls-dabbrev-expand-p (not py-no-completion-calls-dabbrev-expand-p)) :help "If completion function should call dabbrev-expand when no completion found. Default is `t' See also `py-indent-no-completion-p'Use `M-x customize-variable' to set it permanently" :style toggle :selected py-no-completion-calls-dabbrev-expand-p] ["Indent no completion " (setq py-indent-no-completion-p (not py-indent-no-completion-p)) :help "If completion function should indent when no completion found. Default is `t' See also `py-no-completion-calls-dabbrev-expand-p'Use `M-x customize-variable' to set it permanently" :style toggle :selected py-indent-no-completion-p] ["Company pycomplete " (setq py-company-pycomplete-p (not py-company-pycomplete-p)) :help "Load company-pycomplete stuff. Default is nilUse `M-x customize-variable' to set it permanently" :style toggle :selected py-company-pycomplete-p] ) ("Debug" ["Pdbtrack do tracking " (setq py-pdbtrack-do-tracking-p (not py-pdbtrack-do-tracking-p)) :help "Controls whether the pdbtrack feature is enabled or not. When non-nil, pdbtrack is enabled in all comint-based buffers, e.g. shell buffers and the \*Python\* buffer. When using pdb to debug a Python program, pdbtrack notices the pdb prompt and displays the source file and line that the program is stopped at, much the same way as gud-mode does for debugging C programs with gdb.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-pdbtrack-do-tracking-p] ["Jump on exception" (setq py-jump-on-exception (not py-jump-on-exception)) :help "Jump to innermost exception frame in Python output buffer. When this variable is non-nil and an exception occurs when running Python code synchronously in a subprocess, jump immediately to the source code of the innermost traceback frame. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-jump-on-exception] ["Highlight error in source " (setq py-highlight-error-source-p (not py-highlight-error-source-p )) :help "Use `M-x customize-variable' to set it permanently" :style toggle :selected py-highlight-error-source-p] ["Pylint offer current " (setq py-pylint-offer-current-p (not py-pylint-offer-current-p)) :help "If current buffers file should be offered for check. Default is non-nil. If nil, `py-pylint-run' offers filename from history Use `M-x customize-variable' to set it permanently" :style toggle :selected py-pylint-offer-current-p] ) ["Switch buffers on execute" (setq py-switch-buffers-on-execute-p (not py-switch-buffers-on-execute-p)) :help "When non-nil switch to the Python output buffer. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-switch-buffers-on-execute-p] ["Split windows on execute" (setq py-split-windows-on-execute-p (not py-split-windows-on-execute-p)) :help "When non-nil split windows. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-split-windows-on-execute-p] ("Other" ["Defun use top level " (setq py-defun-use-top-level-p (not py-defun-use-top-level-p)) :help "When non-nil, keys C-M-a, C-M-e address top-level form. Beginning- end-of-defun forms use commands `py-beginning-of-top-level', `py-end-of-top-level' mark-defun marks top-level form at point etc. " :style toggle :selected py-defun-use-top-level-p] ["Python mode v5 behavior" (setq python-mode-v5-behavior-p (not python-mode-v5-behavior-p)) :help "Execute region through `shell-command-on-region' as v5 did it - lp:990079. This might fail with certain chars - see UnicodeEncodeError lp:550661 Use `M-x customize-variable' to set it permanently" :style toggle :selected python-mode-v5-behavior-p] ["Load pymacs " (setq py-load-pymacs-p (not py-load-pymacs-p)) :help "If Pymacs related stuff should be loaded. Default is nil. Pymacs has been written by François Pinard and many others. See original source: http://pymacs.progiciels-bpi.caUse `M-x customize-variable' to set it permanently" :style toggle :selected py-load-pymacs-p] ["Verbose " (setq py-verbose-p (not py-verbose-p)) :help "If functions should report results. Default is nil. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-verbose-p] ["Edit only " (setq py-edit-only-p (not py-edit-only-p)) :help "When `t' `python-mode' will not take resort nor check for installed Python executables. Default is nil. See bug report at launchpad, lp:944093. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-edit-only-p] ["Imenu create index " (setq py-imenu-create-index-p (not py-imenu-create-index-p)) :help "Non-nil means Python mode creates and displays an index menu of functions and global variables. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-imenu-create-index-p] ["Imenu show method args " (setq py-imenu-show-method-args-p (not py-imenu-show-method-args-p)) :help "Controls echoing of arguments of functions & methods in the Imenu buffer. When non-nil, arguments are printed.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-imenu-show-method-args-p] ["Match paren mode" (setq py-match-paren-mode (not py-match-paren-mode)) :help "Non-nil means, cursor will jump to beginning or end of a block. This vice versa, to beginning first. Sets `py-match-paren-key' in python-mode-map. Customize `py-match-paren-key' which key to use. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-match-paren-mode] ["Close provides newline" (setq py-close-provides-newline (not py-close-provides-newline)) :help "If a newline is inserted, when line after block isn't empty. Default is non-nil. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-close-provides-newline] ["Block comment prefix " (setq py-block-comment-prefix-p (not py-block-comment-prefix-p)) :help "If py-comment inserts py-block-comment-prefix. Default is tUse `M-x customize-variable' to set it permanently" :style toggle :selected py-block-comment-prefix-p] ["Empty comment line separates paragraph " (setq empty-comment-line-separates-paragraph-p (not empty-comment-line-separates-paragraph-p)) :help "Consider paragraph start/end lines with nothing inside but comment sign. Default is non-nilUse `M-x customize-variable' to set it permanently" :style toggle :selected empty-comment-line-separates-paragraph-p] ["Org cycle " (setq py-org-cycle-p (not py-org-cycle-p)) :help "When non-nil, command `org-cycle' is available at shift-TAB, Default is nil. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-org-cycle-p] ("Underscore word syntax" :help "Toggle `py-underscore-word-syntax-p'" ["Toggle underscore word syntax" toggle-py-underscore-word-syntax-p :help " `toggle-py-underscore-word-syntax-p' If `py-underscore-word-syntax-p' should be on or off. Returns value of `py-underscore-word-syntax-p' switched to. . Use `M-x customize-variable' to set it permanently"] ["Underscore word syntax on" py-underscore-word-syntax-p-on :help " `py-underscore-word-syntax-p-on' Make sure, py-underscore-word-syntax-p' is on. Returns value of `py-underscore-word-syntax-p'. . Use `M-x customize-variable' to set it permanently"] ["Underscore word syntax off" py-underscore-word-syntax-p-off :help " `py-underscore-word-syntax-p-off' Make sure, `py-underscore-word-syntax-p' is off. Returns value of `py-underscore-word-syntax-p'. . Use `M-x customize-variable' to set it permanently"] ) ["Set pager cat" (setq py-set-pager-cat-p (not py-set-pager-cat-p)) :help "If the shell environment variable \$PAGER should set to `cat'. If `t', use `C-c C-r' to jump to beginning of output. Then scroll normally. Avoids lp:783828, \"Terminal not fully functional\", for help('COMMAND') in python-shell When non-nil, imports module `os' Use `M-x customize-variable' to set it permanently" :style toggle :selected py-set-pager-cat-p] ["Current defun show" (setq py-current-defun-show (not py-current-defun-show)) :help "If `py-current-defun' should jump to the definition, highlight it while waiting PY-WHICH-FUNC-DELAY seconds, before returning to previous position. Default is `t'.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-current-defun-show] ("Autopair mode" :help "Toggle `autopair-mode'" ["Toggle autopair mode" toggle-py-autopair-mode :help " `toggle-autopair-mode' If `autopair-mode' should be on or off. Returns value of `autopair-mode ' switched to. "] ["Autopair mode on" py-autopair-mode-on :help " `autopair-mode on' Make sure, `autopair-mode' is on. Returns value of `autopair-mode'. "] ["Autopair mode off" py-autopair-mode-off :help " `autopair-mode' off Make sure, `autopair-mode' is off. Returns value of `autopair-mode'. "] ) ["Switch index-function" py-switch-imenu-index-function :help "`py-switch-imenu-index-function' Switch between `py-imenu-create-index' from 5.1 series and `py-imenu-create-index-new'."] ;; py-smart-operator-mode-p forms ("Smart operator mode" :help "Toggle `smart-operator-mode'" ["Toggle smart operator mode" toggle-py-smart-operator-mode-p :help " `toggle-smart-operator-mode' If `smart-operator-mode' should be on or off. Returns value of `smart-operator-mode ' switched to. "] ["Smart operator mode on" py-smart-operator-mode-p-on :help " `smart-operator-mode -on' Make sure, `smart-operator-mode' is on. Returns value of `smart-operator-mode'. "] ["Smart operator mode off" py-smart-operator-mode-p-off :help " `smart-operator-mode' off Make sure, `smart-operator-mode' is off. Returns value of `smart-operator-mode'. "] ) ) ) ) ("More... " ("Edit commands " ("Kill " ["Kill statement" py-kill-statement :help "`py-kill-statement' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Kill top level" py-kill-top-level :help " `py-kill-top-level' Delete top-level form at point. Stores data in kill ring. Might be yanked back using `C-y'. "] ["Kill clause" py-kill-clause :help "`py-kill-clause' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Kill block" py-kill-block :help "`py-kill-block' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Kill minor block" py-kill-minor-block :help " `py-kill-minor-block' Delete minor-block at point. Stores data in kill ring. Might be yanked back using `C-y'. "] ["Kill def-or-class" py-kill-def-or-class :help "`py-kill-def-or-class' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Kill expression" py-kill-expression :help "`py-kill-expression' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Kill partial-expression" py-kill-partial-expression :help "`py-kill-partial-expression' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Kill class" py-kill-class :help "`py-kill-class' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Kill def" py-kill-def :help "`py-kill-def' Delete innermost compound statement at point, store deleted string in kill-ring"]) ("Delete" ["Delete statement " py-delete-statement :help "`py-delete-statement' Delete STATEMENT at point, don't store in kill-ring. "] ["Delete top-level " py-delete-top-level :help "`py-delete-top-level' Delete TOP-LEVEL at point, don't store in kill-ring. "] ["Delete block " py-delete-block :help "`py-delete-block' Delete BLOCK at point, don't store in kill-ring. "] ["Delete block-or-clause " py-delete-block-or-clause :help "`py-delete-block-or-clause' Delete BLOCK-OR-CLAUSE at point, don't store in kill-ring. "] ["Delete def " py-delete-def :help "`py-delete-def' Delete DEF at point, don't store in kill-ring. "] ["Delete class " py-delete-class :help "`py-delete-class' Delete CLASS at point, don't store in kill-ring. "] ["Delete def-or-class " py-delete-def-or-class :help "`py-delete-def-or-class' Delete DEF-OR-CLASS at point, don't store in kill-ring. "] ["Delete expression " py-delete-expression :help "`py-delete-expression' Delete EXPRESSION at point, don't store in kill-ring. "] ["Delete partial-expression " py-delete-partial-expression :help "`py-delete-partial-expression' Delete PARTIAL-EXPRESSION at point, don't store in kill-ring. "] ["Delete minor-block " py-delete-minor-block :help "`py-delete-minor-block' Delete MINOR-BLOCK at point, don't store in kill-ring. A minor block is started by a `for', `if', `try' or `with'. "] ) "-" ("Shift right " ["Shift block right" py-shift-block-right :help "`py-shift-block-right' Shift block right. "] ["Shift clause right" py-shift-clause-right :help "`py-shift-clause-right' Shift clause right. "] ["Shift statement right" py-shift-statement-right :help "`py-shift-statement-right' Shift statement right. "] ["Shift minor block right" py-shift-minor-block-right :help " `py-shift-minor-block-right' Indent minor-block by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. "] ["Shift def-or-class right" py-shift-def-or-class-right :help "`py-shift-def-or-class-right' Shift def-or-class right. "] ["Shift class right" py-shift-class-right :help "`py-shift-class-right' Shift class right. "] ["Shift def right" py-shift-def-right :help "`py-shift-def-right' Shift def right. "] ["Shift block-or-clause right" py-shift-block-or-clause-right :help "`py-shift-block-or-clause-right' Shift block-or-clause right. "] ["Shift region left" py-shift-region-left :help " `py-shift-region-left' Dedent region according to `py-indent-offset' by COUNT times. If no region is active, current line is dedented. Returns indentation reached. "] ["Shift region right" py-shift-region-right :help " `py-shift-region-right' Indent region according to `py-indent-offset' by COUNT times. If no region is active, current line is indented. Returns indentation reached. "] ) ("Shift left " ["Shift block left" py-shift-block-left :help "`py-shift-block-left' Shift block left. "] ["Shift clause left" py-shift-clause-left :help "`py-shift-clause-left' Shift clause left. "] ["Shift statement left" py-shift-statement-left :help "`py-shift-statement-left' Shift statement left. "] ["Shift minor block left" py-shift-minor-block-left :help " `py-shift-minor-block-left' Dedent minor-block by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. "] ["Shift def-or-class left" py-shift-def-or-class-left :help "`py-shift-def-or-class-left' Shift def-or-class left. "] ["Shift class left" py-shift-class-left :help "`py-shift-class-left' Shift class left. "] ["Shift def left" py-shift-def-left :help "`py-shift-def-left' Shift def left. "] ["Shift block-or-clause left" py-shift-block-or-clause-left :help "`py-shift-block-or-clause-left' Shift block-or-clause left. "] ) ("More" :help "extended edit commands'" ["Empty out list backward" py-empty-out-list-backward :help " `py-empty-out-list-backward' Deletes all elements from list before point. "] ["Revert boolean assignent" py-boolswitch :help " `py-boolswitch' Edit the assigment of a boolean variable, rever them. I.e. switch it from \"True\" to \"False\" and vice versa "] ["Remove overlays at point" py-remove-overlays-at-point :help " `py-remove-overlays-at-point' Remove overlays as set when `py-highlight-error-source-p' is non-nil. "] ) ) "-" ("Forms " ("Comment" ["Beginning of comment" py-beginning-of-comment :help " `py-beginning-of-comment' Go to beginning of comment at point. "] ["End of comment" py-end-of-comment :help " `py-end-of-comment' Go to end of comment at point. "] ) ("Block" ["Beginning of block" py-beginning-of-block :help "`py-beginning-of-block' Go to start of innermost compound statement at point"] ["End of block" py-end-of-block :help "`py-end-of-block' Go to end of innermost compound statement at point"] ["Down block" py-down-block :help "`py-down-block' Go to the beginning of next block below in buffer. Returns indentation if block found, nil otherwise. "] ["Up block" py-up-block :help "`py-up-block' Go upwards to the beginning of next block below in buffer. Returns indentation if block found, nil otherwise. "] ["Copy block" py-copy-block :help "`py-copy-block' Copy innermost compound statement at point"] ["Kill block" py-kill-block :help "`py-kill-block' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Delete block" py-delete-block :help "`py-delete-block' Delete innermost compound statement at point, don't store deleted string in kill-ring"] ["Shift block right" py-shift-block-right :help "`py-shift-block-right' Shift block right. "] ["Shift block left" py-shift-block-left :help "`py-shift-block-left' Shift block left. "] ["Comment block" py-comment-block :help " `py-comment-block' Comments block at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ) ("Top-level form" ["Beginning of top-level form" py-beginning-of-top-level :help "`py-beginning-of-top-level' Go to start of top-level form form at point"] ["End of top-level form" py-end-of-top-level :help "`py-end-of-top-level' Go to end of top-level form at point"] ["Down top-level form" py-down-top-level :help "`py-down-top-level' Go to the beginning of top-level form below in buffer. "] ["Up top-level form" py-up-top-level :help "`py-up-top-level' Go upwards to the beginning of next top-level form in buffer. "] ["Copy top-level form" py-copy-top-level :help "`py-copy-top-level' Copy innermost top-level form at point"] ["Kill top-level form" py-kill-top-level :help "`py-kill-top-level' Delete top-level form at point, store deleted string in kill-ring"] ["Delete top-level form" py-delete-top-level :help "`py-delete-top-level' Delete top-level form at point, don't store deleted string in kill-ring"] ["Comment top-level form" py-comment-top-level :help " `py-comment-top-level' Comments top-level form at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ) ("Minor-block" ["Beginning of minor-block" py-beginning-of-minor-block :help "`py-beginning-of-minor-block' Go to start of innermost minor-block at point"] ["End of minor-block" py-end-of-minor-block :help "`py-end-of-minor-block' Go to end of innermost minor-block at point"] ["Down minor-block" py-down-minor-block :help "`py-down-minor-block' Go to the beginning of next minor-block below in buffer. Returns indentation if minor-block found, nil otherwise. "] ["Up minor-block" py-up-minor-block :help "`py-up-minor-block' Go upwards to the beginning of next minor-block below in buffer. Returns indentation if minor-block found, nil otherwise. "] ["Copy minor-block" py-copy-minor-block :help "`py-copy-minor-block' Copy innermost minor-block at point"] ["Kill minor-block" py-kill-minor-block :help "`py-kill-minor-block' Delete innermost minor-block at point, store deleted string in kill-ring"] ["Delete minor-block" py-delete-minor-block :help "`py-delete-minor-block' Delete innermost minor-block at point, don't store deleted string in kill-ring"] ["Shift minor-block right" py-shift-minor-block-right :help "`py-shift-minor-block-right' Shift minor-block right. "] ["Shift minor-block left" py-shift-minor-block-left :help "`py-shift-minor-block-left' Shift minor-block left. "] ["Comment minor-block" py-comment-minor-block :help " `py-comment-minor-block' Comments minor-block at point. Uses double hash (`#') comment starter when `py-minor-block-comment-prefix-p' is `t', the default. "] ) ("Def-or-class " ["Beginning of Def-or-Class" py-beginning-of-def-or-class :help "`py-beginning-of-def-or-class' Go to start of innermost definition at point"] ["End of Def-or-Class" py-end-of-def-or-class :help "`py-end-of-def-or-class' Go to end of innermost function definition at point"] ["Down def-or-class" py-down-def-or-class :help "`py-down-def-or-class' Go to the beginning of next def-or-class below in buffer. Returns indentation if def-or-class found, nil otherwise. "] ["Up def-or-class" py-up-def-or-class :help "`py-up-def-or-class' Go upwards to the beginning of next def-or-class below in buffer. Returns indentation if def-or-class found, nil otherwise. "] ["Copy Def-or-Class" py-copy-def-or-class :help "`py-copy-def-or-class' Copy innermost definition at point"] ["Kill def-or-class" py-kill-def-or-class :help "`py-kill-def-or-class' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Delete def-or-class" py-delete-def-or-class :help "`py-delete-def-or-class' Delete def-or-class at point, don't store deleted string in kill-ring"] ["Shift def-or-class right" py-shift-def-or-class-right :help "`py-shift-def-or-class-right' Shift def-or-class right. "] ["Shift def-or-class left" py-shift-def-or-class-left :help "`py-shift-def-or-class-left' Shift def-or-class left. "] ["Comment def or class" py-comment-def-or-class :help " `py-comment-def-or-class' Comments def-or-class at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "]) ("Clause " ["Beginning of clause" py-beginning-of-clause :help "`py-beginning-of-clause' Go to start of innermost compound statement at point"] ["End of clause" py-end-of-clause :help "`py-end-of-clause' Go to end of innermost compound statement at point"] ["Down clause" py-down-clause :help "`py-down-clause' Go to the beginning of next clause below in buffer. Returns indentation if clause found, nil otherwise. "] ["Up clause" py-up-clause :help "`py-up-clause' Go upwards to the beginning of next clause below in buffer. Returns indentation if clause found, nil otherwise. "] ["Copy clause" py-copy-clause :help "`py-copy-clause' Copy innermost compound statement at point"] ["Kill clause" py-kill-clause :help "`py-kill-clause' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Delete clause" py-delete-clause :help "`py-delete-clause' Delete innermost compound statement at point, don't store deleted string in kill-ring"] ["Shift clause right" py-shift-clause-right :help "`py-shift-clause-right' Shift clause right. "] ["Shift clause left" py-shift-clause-left :help "`py-shift-clause-left' Shift clause left. "] ["Comment clause" py-comment-clause :help " `py-comment-clause' Comments clause at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "]) ("Statement " ["Beginning of Statement" py-beginning-of-statement :help "`py-beginning-of-statement' Go to start of innermost definition at point"] ["End of Statement" py-end-of-statement :help "`py-end-of-statement' Go to end of innermost function definition at point"] ["Copy statement" py-copy-statement :help "`py-copy-statement' Copy innermost definition at point"] ["Kill statement" py-kill-statement :help "`py-kill-statement' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Delete statement" py-delete-statement :help "`py-delete-statement' Delete statement at point, don't store deleted string in kill-ring"] ["Shift statement right" py-shift-statement-right :help "`py-shift-statement-right' Shift statement right. "] ["Shift statement left" py-shift-statement-left :help "`py-shift-statement-left' Shift statement left. "] ["Comment statement" py-comment-statement :help " `py-comment-statement' Comments statement at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "]) ("Expression" ["Beginning of expression" py-beginning-of-expression :help "Go to the beginning of a compound python expression. A a compound python expression might be concatenated by \".\" operator, thus composed by minor python expressions. Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference Operators however are left aside resp. limit py-expression designed for edit-purposes."] ["End of expression" py-end-of-expression :help "`py-end-of-expression' Go to the end of a compound python expression. A a compound python expression might be concatenated by \".\" operator, thus composed by minor python expressions. Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference Operators however are left aside resp. limit py-expression designed for edit-purposes."] ["Beginning of expression" py-beginning-of-expression :help "`py-beginning-of-expression' Go to start of a Python expression"] ["End of expression" py-end-of-expression :help "`py-end-of-expression' Go to end of a Python expression"] ["Copy expression" py-copy-expression :help "`py-copy-expression' Copy expression at point"] ["Kill expression" py-kill-expression :help "`py-kill-expression' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Delete expression" py-delete-expression :help "`py-delete-expression' Delete expression at point, don't store deleted string in kill-ring"]) ("Partial expression" ["Beginning of minor expression" py-beginning-of-partial-expression :help "`py-beginning-of-partial-expression' Go to start of an minor expression Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference Operators however are left aside resp. limit py-expression designed for edit-purposes."] ["End of partial-expression" py-end-of-partial-expression :help "`py-end-of-partial-expression' Go to end of an partial-expression Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference Operators however are left aside resp. limit py-expression designed for edit-purposes."] ["Copy partial expression" py-copy-partial-expression :help "`py-copy-partial-expression' \".\" operators delimit a partial-expression expression on it's level"] ["Kill partial-expression" py-kill-partial-expression :help "`py-kill-partial-expression' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Delete partial-expression" py-delete-partial-expression :help "`py-delete-partial-expression' Delete partial-expression at point, don't store deleted string in kill-ring"]) ("Class " ["Beginning of Class" py-beginning-of-class :help "`py-beginning-of-class' Go to start of innermost definition at point"] ["End of Class" py-end-of-class :help "`py-end-of-class' Go to end of innermost function definition at point"] ["Down class" py-down-class :help "`py-down-class' Go to the beginning of next class below in buffer. Returns indentation if class found, nil otherwise. "] ["Up class" py-up-class :help "`py-up-class' Go upwards to the beginning of next class below in buffer. Returns indentation if class found, nil otherwise. "] ["Copy class" py-copy-class :help "`py-copy-class' Copy innermost definition at point"] ["Kill class" py-kill-class :help "`py-kill-class' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Delete class" py-delete-class :help "`py-delete-class' Delete class at point, don't store deleted string in kill-ring"] ["Shift class right" py-shift-class-right :help "`py-shift-class-right' Shift class right. "] ["Shift class left" py-shift-class-left :help "`py-shift-class-left' Shift class left. "] ["Comment class" py-comment-class :help " `py-comment-class' Comments class at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "]) ("Def " ["Beginning of Def" py-beginning-of-def :help "`py-beginning-of-def' Go to start of innermost definition at point"] ["End of Def" py-end-of-def :help "`py-end-of-def' Go to end of innermost function definition at point"] ["Down def" py-down-def :help "`py-down-def' Go to the beginning of next def below in buffer. Returns indentation if def found, nil otherwise. "] ["Up def" py-up-def :help "`py-up-def' Go upwards to the beginning of next def below in buffer. Returns indentation if def found, nil otherwise. "] ["Copy def" py-copy-def :help "`py-copy-def' Copy innermost definition at point"] ["Kill def" py-kill-def :help "`py-kill-def' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Delete def" py-delete-def :help "`py-delete-def' Delete def at point, don't store deleted string in kill-ring"] ["Shift def right" py-shift-def-right :help "`py-shift-def-right' Shift def right. "] ["Shift def left" py-shift-def-left :help "`py-shift-def-left' Shift def left. "] ["Comment def" py-comment-def :help " `py-comment-def' Comments def at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ) "-" ("Block bol " ["Beginning of block bol" py-beginning-of-block-bol :help "`py-beginning-of-block-bol' Go to beginning of line at beginning of block. Returns position reached, if successful, nil otherwise. "] ["End of block bol" py-end-of-block-bol :help "`py-end-of-block-bol' Go to beginning of line following end of block. Returns position reached, if successful, nil otherwise. "] ["Up block bol" py-up-block-bol :help "`py-up-block-bol' Go to next block upwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Down block bol" py-down-block-bol :help "`py-down-block-bol' Go to next block downwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Mark block bol" py-mark-block-bol :help "`py-mark-block-bol' Mark block at point. "] ["Copy block bol" py-copy-block-bol :help "`py-copy-block-bol' Copy block at point. "] ["Kill block bol" py-kill-block-bol :help "`py-kill-block-bol' Kill block at point. "] ["Delete block bol" py-delete-block-bol :help "`py-delete-block-bol' Delete block at point. "] ["Shift block right" py-shift-block-right :help "`py-shift-block-right' Shift block right. "] ["Shift block left" py-shift-block-left :help "`py-shift-block-left' Shift block left. "] ) ("Minor-block bol " ["Beginning of minor-block bol" py-beginning-of-minor-block-bol :help "`py-beginning-of-minor-block-bol' Go to beginning of line at beginning of minor-block. Returns position reached, if successful, nil otherwise. A minor block is started by a `for', `if', `try' or `with'. "] ["End of minor-block bol" py-end-of-minor-block-bol :help "`py-end-of-minor-block-bol' Go to beginning of line following end of minor-block. Returns position reached, if successful, nil otherwise. A minor block is started by a `for', `if', `try' or `with'. "] ["Up minor-block bol" py-up-minor-block-bol :help "`py-up-minor-block-bol' Go to next minor-block upwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. A minor block is started by a `for', `if', `try' or `with'. "] ["Down minor-block bol" py-down-minor-block-bol :help "`py-down-minor-block-bol' Go to next minor-block downwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. A minor block is started by a `for', `if', `try' or `with'. "] ["Mark minor-block bol" py-mark-minor-block-bol :help "`py-mark-minor-block-bol' Mark minor-block at point. A minor block is started by a `for', `if', `try' or `with'. "] ["Copy minor-block bol" py-copy-minor-block-bol :help "`py-copy-minor-block-bol' Copy minor-block at point. A minor block is started by a `for', `if', `try' or `with'. "] ["Kill minor-block bol" py-kill-minor-block-bol :help "`py-kill-minor-block-bol' Kill minor-block at point. A minor block is started by a `for', `if', `try' or `with'. "] ["Delete minor-block bol" py-delete-minor-block-bol :help "`py-delete-minor-block-bol' Delete minor-block at point. A minor block is started by a `for', `if', `try' or `with'. "] ["Shift minor-block right" py-shift-minor-block-right :help "`py-shift-minor-block-right' Shift minor-block right. A minor block is started by a `for', `if', `try' or `with'. "] ["Shift minor-block left" py-shift-minor-block-left :help "`py-shift-minor-block-left' Shift minor-block left. A minor block is started by a `for', `if', `try' or `with'. "] ) ("Clause bol " ["Beginning of clause bol" py-beginning-of-clause-bol :help "`py-beginning-of-clause-bol' Go to beginning of line at beginning of clause. Returns position reached, if successful, nil otherwise. "] ["End of clause bol" py-end-of-clause-bol :help "`py-end-of-clause-bol' Go to beginning of line following end of clause. Returns position reached, if successful, nil otherwise. "] ["Up clause bol" py-up-clause-bol :help "`py-up-clause-bol' Go to next clause upwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Down clause bol" py-down-clause-bol :help "`py-down-clause-bol' Go to next clause downwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Mark clause bol" py-mark-clause-bol :help "`py-mark-clause-bol' Mark clause at point. "] ["Copy clause bol" py-copy-clause-bol :help "`py-copy-clause-bol' Copy clause at point. "] ["Kill clause bol" py-kill-clause-bol :help "`py-kill-clause-bol' Kill clause at point. "] ["Delete clause bol" py-delete-clause-bol :help "`py-delete-clause-bol' Delete clause at point. "] ["Shift clause right" py-shift-clause-right :help "`py-shift-clause-right' Shift clause right. "] ["Shift clause left" py-shift-clause-left :help "`py-shift-clause-left' Shift clause left. "]) ("Block-Or-Clause bol " ["Beginning of block-or-clause bol" py-beginning-of-block-or-clause-bol :help "`py-beginning-of-block-or-clause-bol' Go to beginning of line at beginning of block-or-clause. Returns position reached, if successful, nil otherwise. "] ["End of block-or-clause bol" py-end-of-block-or-clause-bol :help "`py-end-of-block-or-clause-bol' Go to beginning of line following end of block-or-clause. Returns position reached, if successful, nil otherwise. "] ["Up block-or-clause bol" py-up-block-or-clause-bol :help "`py-up-block-or-clause-bol' Go to next block-or-clause upwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Down block-or-clause bol" py-down-block-or-clause-bol :help "`py-down-block-or-clause-bol' Go to next block-or-clause downwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Mark block-or-clause bol" py-mark-block-or-clause-bol :help "`py-mark-block-or-clause-bol' Mark block-or-clause at point. "] ["Copy block-or-clause bol" py-copy-block-or-clause-bol :help "`py-copy-block-or-clause-bol' Copy block-or-clause at point. "] ["Kill block-or-clause bol" py-kill-block-or-clause-bol :help "`py-kill-block-or-clause-bol' Kill block-or-clause at point. "] ["Delete block-or-clause bol" py-delete-block-or-clause-bol :help "`py-delete-block-or-clause-bol' Delete block-or-clause at point. "] ["Shift block-or-clause right" py-shift-block-or-clause-right :help "`py-shift-block-or-clause-right' Shift block-or-clause right. "] ["Shift block-or-clause left" py-shift-block-or-clause-left :help "`py-shift-block-or-clause-left' Shift block-or-clause left. "]) ("Def bol " ["Beginning of def bol" py-beginning-of-def-bol :help "`py-beginning-of-def-bol' Go to beginning of line at beginning of def. Returns position reached, if successful, nil otherwise. "] ["End of def bol" py-end-of-def-bol :help "`py-end-of-def-bol' Go to beginning of line following end of def. Returns position reached, if successful, nil otherwise. "] ["Up def bol" py-up-def-bol :help "`py-up-def-bol' Go to next def upwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Down def bol" py-down-def-bol :help "`py-down-def-bol' Go to next def downwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Mark def bol" py-mark-def-bol :help "`py-mark-def-bol' Mark def at point. "] ["Copy def bol" py-copy-def-bol :help "`py-copy-def-bol' Copy def at point. "] ["Kill def bol" py-kill-def-bol :help "`py-kill-def-bol' Kill def at point. "] ["Delete def bol" py-delete-def-bol :help "`py-delete-def-bol' Delete def at point. "] ["Shift def right" py-shift-def-right :help "`py-shift-def-right' Shift def right. "] ["Shift def left" py-shift-def-left :help "`py-shift-def-left' Shift def left. "]) ("Class bol " ["Beginning of class bol" py-beginning-of-class-bol :help "`py-beginning-of-class-bol' Go to beginning of line at beginning of class. Returns position reached, if successful, nil otherwise. "] ["End of class bol" py-end-of-class-bol :help "`py-end-of-class-bol' Go to beginning of line following end of class. Returns position reached, if successful, nil otherwise. "] ["Up class bol" py-up-class-bol :help "`py-up-class-bol' Go to next class upwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Down class bol" py-down-class-bol :help "`py-down-class-bol' Go to next class downwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Mark class bol" py-mark-class-bol :help "`py-mark-class-bol' Mark class at point. "] ["Copy class bol" py-copy-class-bol :help "`py-copy-class-bol' Copy class at point. "] ["Kill class bol" py-kill-class-bol :help "`py-kill-class-bol' Kill class at point. "] ["Delete class bol" py-delete-class-bol :help "`py-delete-class-bol' Delete class at point. "] ["Shift class right" py-shift-class-right :help "`py-shift-class-right' Shift class right. "] ["Shift class left" py-shift-class-left :help "`py-shift-class-left' Shift class left. "]) ("Def-Or-Class bol " ["Beginning of def-or-class bol" py-beginning-of-def-or-class-bol :help "`py-beginning-of-def-or-class-bol' Go to beginning of line at beginning of def-or-class. Returns position reached, if successful, nil otherwise. "] ["End of def-or-class bol" py-end-of-def-or-class-bol :help "`py-end-of-def-or-class-bol' Go to beginning of line following end of def-or-class. Returns position reached, if successful, nil otherwise. "] ["Up def-or-class bol" py-up-def-or-class-bol :help "`py-up-def-or-class-bol' Go to next def-or-class upwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Down def-or-class bol" py-down-def-or-class-bol :help "`py-down-def-or-class-bol' Go to next def-or-class downwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Mark def-or-class bol" py-mark-def-or-class-bol :help "`py-mark-def-or-class-bol' Mark def-or-class at point. "] ["Copy def-or-class bol" py-copy-def-or-class-bol :help "`py-copy-def-or-class-bol' Copy def-or-class at point. "] ["Kill def-or-class bol" py-kill-def-or-class-bol :help "`py-kill-def-or-class-bol' Kill def-or-class at point. "] ["Delete def-or-class bol" py-delete-def-or-class-bol :help "`py-delete-def-or-class-bol' Delete def-or-class at point. "] ["Shift def-or-class right" py-shift-def-or-class-right :help "`py-shift-def-or-class-right' Shift def-or-class right. "] ["Shift def-or-class left" py-shift-def-or-class-left :help "`py-shift-def-or-class-left' Shift def-or-class left. "] ) ("Statement bol " ["Beginning of statement bol" py-beginning-of-statement-bol :help "`py-beginning-of-statement-bol' Go to beginning of line at beginning of statement. Returns position reached, if successful, nil otherwise. "] ["End of statement bol" py-end-of-statement-bol :help "`py-end-of-statement-bol' Go to beginning of line following end of statement. Returns position reached, if successful, nil otherwise. "] ["Mark statement bol" py-mark-statement-bol :help "`py-mark-statement-bol' Mark statement at point. "] ["Copy statement bol" py-copy-statement-bol :help "`py-copy-statement-bol' Copy statement at point. "] ["Kill statement bol" py-kill-statement-bol :help "`py-kill-statement-bol' Kill statement at point. "] ["Delete statement bol" py-delete-statement-bol :help "`py-delete-statement-bol' Delete statement at point. "] ["Shift statement right" py-shift-statement-right :help "`py-shift-statement-right' Shift statement right. "] ["Shift statement left" py-shift-statement-left :help "`py-shift-statement-left' Shift statement left. "]) ) "-" ("Filling" :help "see also customizable `py-docstring-style'" ["Fill string" py-fill-string :help " `py-fill-string' Uses value of `py-docstring-style', if set. "] ["Fill paragraph" py-fill-paragraph :help " `py-fill-paragraph' Uses value of `py-docstring-style', if set. "] ["Fill comment" py-fill-comment :help " `py-fill-comment' Fill comment at point. "] ["Fill string django-style " py-fill-string-django :help " `py-fill-string-django' \"\"\" Process foo, return bar. \"\"\" \"\"\" Process foo, return bar. If processing fails throw ProcessingError. \"\"\" See available styles at `py-fill-paragraph' or var `py-docstring-style' "] ["py fill string onetwo" py-fill-string-onetwo :help " `py-fill-string-onetwo' One newline and start and Two at end style. \"\"\"Process foo, return bar.\"\"\" \"\"\" Process foo, return bar. If processing fails throw ProcessingError. \"\"\" See available styles at `py-fill-paragraph' or var `py-docstring-style'"] ["py fill string pep 257" py-fill-string-pep-257 :help " `py-fill-string-pep-257' PEP-257 with 2 newlines at end of string. \"\"\"Process foo, return bar.\"\"\" \"\"\"Process foo, return bar. If processing fails throw ProcessingError. \"\"\" See available styles at `py-fill-paragraph' or var `py-docstring-style'"] ["py fill string pep 257 nn" py-fill-string-pep-257-nn :help " `py-fill-string-pep-257-nn' PEP-257 with 1 newline at end of string. \"\"\"Process foo, return bar.\"\"\" \"\"\"Process foo, return bar. If processing fails throw ProcessingError. \"\"\" See available styles at `py-fill-paragraph' or var `py-docstring-style'"] ["py fill string symmetric" py-fill-string-symmetric :help " `py-fill-string-symmetric' Symmetric style. \"\"\"Process foo, return bar.\"\"\" \"\"\" Process foo, return bar. If processing fails throw ProcessingError. \"\"\" See available styles at `py-fill-paragraph' or var `py-docstring-style'"]) ("Electric " :help "electric commands'" ["Hungry delete backwards" py-hungry-delete-backwards :help " `py-hungry-delete-backwards' Delete the preceding character or all preceding whitespace back to the previous non-whitespace character. See also C-c . "] ["Hungry delete forward" py-hungry-delete-forward :help " `py-hungry-delete-forward' Delete the following character or all following whitespace up to the next non-whitespace character. See also C-c . "] ["Electric colon" py-electric-colon :help " `py-electric-colon' Insert a colon and indent accordingly. If a numeric argument ARG is provided, that many colons are inserted non-electrically. Electric behavior is inhibited inside a string or comment or by universal prefix C-u. Switched by `py-electric-colon-active-p', default is nil See also `py-electric-colon-greedy-p' "] ["Electric colon greedy " (setq py-electric-colon-greedy-p (not py-electric-colon-greedy-p)) :help "If py-electric-colon should indent to the outmost reasonable level. If nil, default, it will not move from at any reasonable level. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-electric-colon-greedy-p] ["Electric colon newline and indent " (setq py-electric-colon-newline-and-indent-p (not py-electric-colon-newline-and-indent-p)) :help "If non-nil, `py-electric-colon' will call `newline-and-indent'. Default is `nil'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-electric-colon-newline-and-indent-p] ["Electric delete" py-electric-delete :help " `py-electric-delete' Delete following character or levels of whitespace. With ARG do that ARG times. "] ["Electric backspace" py-electric-backspace :help " `py-electric-backspace' Delete preceding character or level of indentation. With ARG do that ARG times. Returns column reached. "] ["Electric comment" py-electric-comment :help " `py-electric-comment' Insert a comment. If starting a comment, indent accordingly. If a numeric argument ARG is provided, that many \"#\" are inserted non-electrically. With C-u \"#\" electric behavior is inhibited inside a string or comment. "] ["Electric left paren" py-complete-electric-lparen :help " `py-complete-electric-lparen' electricly insert '(', and try to get a signature for the stuff to the left.\n Needs Pymacs"] ["Complete electric comma" py-complete-electric-comma :help " `py-complete-electric-comma' electricly insert ',', and redisplay latest signature.\n Needs Pymacs"] ["Electric yank" py-electric-yank :help " `py-electric-yank' Perform command `yank' followed by an `indent-according-to-mode' . "]) ("Abbrevs" :help "see also `py-add-abbrev'" :filter (lambda (&rest junk) (abbrev-table-menu python-mode-abbrev-table))) ["add-abbrev" py-add-abbrev :help "Defines python-mode specific abbrev for last expressions before point. Argument is how many `py-partial-expression's form the expansion; or zero means the region is the expansion. "] ("Skeletons" :help "See also templates in YASnippet" ["if" py-if :help "Inserts if-statement"] ["py-else" py-else :help "Inserts else-statement"] ["py-while" py-while :help "Inserts while-statement"] ["py-for" py-for :help "Inserts for-statement"] ["py-try/finally" py-try/finally :help "Inserts py-try/finally-statement"] ["py-try/except" py-try/except :help "Inserts py-try/except-statement"] ) ("Completion" :help "Completion options" ["Complete symbol" py-shell-complete :help "`py-shell-complete' Complete (qualified) symbol before point"] ["Complete" py-complete :help " `py-complete' Complete symbol before point using Pymacs . "]) ["Find function" py-find-function :help "`py-find-function' Try to find source definition of function at point"] ))))) (defvar python-mode-map) (setq python-mode-map (let ((map (make-sparse-keymap))) ;; electric keys (define-key map [(:)] 'py-electric-colon) (define-key map [(\#)] 'py-electric-comment) (define-key map [(delete)] 'py-electric-delete) (define-key map [(backspace)] 'py-electric-backspace) (define-key map [(control backspace)] 'py-hungry-delete-backwards) (define-key map [(control c) (delete)] 'py-hungry-delete-forward) ;; (define-key map [(control y)] 'py-electric-yank) ;; moving point (define-key map [(control c)(control p)] 'py-beginning-of-statement) (define-key map [(control c)(control n)] 'py-end-of-statement) (define-key map [(control c)(control u)] 'py-beginning-of-block) (define-key map [(control c)(control q)] 'py-end-of-block) (define-key map [(control meta a)] 'py-beginning-of-def-or-class) (define-key map [(control meta e)] 'py-end-of-def-or-class) ;; (define-key map [(meta i)] 'py-indent-forward-line) (define-key map [(control j)] 'py-newline-and-indent) ;; Most Pythoneers expect RET `py-newline-and-indent' ;; (define-key map (kbd "RET") 'py-newline-and-dedent) (define-key map (kbd "RET") py-return-key) ;; (define-key map (kbd "RET") 'newline) (define-key map [(super backspace)] 'py-dedent) ;; (define-key map [(control return)] 'py-newline-and-dedent) ;; indentation level modifiers (define-key map [(control c)(control l)] 'py-shift-left) (define-key map [(control c)(control r)] 'py-shift-right) (define-key map [(control c)(<)] 'py-shift-left) (define-key map [(control c)(>)] 'py-shift-right) (define-key map [(control c)(tab)] 'py-indent-region) (define-key map [(control c)(:)] 'py-guess-indent-offset) ;; subprocess commands (define-key map [(control c)(control c)] 'py-execute-buffer) (define-key map [(control c)(control m)] 'py-execute-import-or-reload) (define-key map [(control c)(control s)] 'py-execute-string) (define-key map [(control c)(|)] 'py-execute-region) (define-key map [(control meta x)] 'py-execute-def-or-class) (define-key map [(control c)(!)] 'py-shell) (define-key map [(control c)(control t)] 'py-toggle-shell) (define-key map [(control meta h)] 'py-mark-def-or-class) (define-key map [(control c)(control k)] 'py-mark-block-or-clause) (define-key map [(control c)(.)] 'py-expression) ;; Miscellaneous (define-key map [(super q)] 'py-copy-statement) (define-key map [(control c)(control d)] 'py-pdbtrack-toggle-stack-tracking) (define-key map [(control c)(control f)] 'py-sort-imports) (define-key map [(control c)(\#)] 'py-comment-region) (define-key map [(control c)(\?)] 'py-describe-mode) (define-key map [(control c)(control e)] 'py-help-at-point) (define-key map [(control c)(-)] 'py-up-exception) (define-key map [(control c)(=)] 'py-down-exception) (define-key map [(control x) (n) (d)] 'py-narrow-to-defun) ;; information (define-key map [(control c)(control b)] 'py-submit-bug-report) (define-key map [(control c)(control v)] 'py-version) (define-key map [(control c)(control w)] 'py-pychecker-run) (define-key map (kbd "TAB") 'py-indent-line) ;; (if py-complete-function ;; (progn ;; (define-key map [(meta tab)] py-complete-function) ;; (define-key map [(esc) (tab)] py-complete-function)) ;; (define-key map [(meta tab)] 'py-shell-complete) ;; (define-key map [(esc) (tab)] 'py-shell-complete)) (substitute-key-definition 'complete-symbol 'completion-at-point map global-map) (substitute-key-definition 'backward-up-list 'py-up map global-map) (substitute-key-definition 'down-list 'py-down map global-map) (and (ignore-errors (require 'easymenu) t) ;; (easy-menu-define py-menu map "Python Tools" ;; `("PyTools" (easy-menu-define py-menu map "Python Mode menu" `("Python" ("Interpreter" ["Default interpreter..." py-shell :help " `py-shell' Start an interactive Python interpreter. Interactively, C-u 4 prompts for a buffer. C-u 2 prompts for `py-python-command-args'. If `default-directory' is a remote file name, it is also prompted to change if called with a prefix arg. . "] ("Other" :help "Alternative Python Shells" ["ipython" ipython :help "`ipython' Start an IPython interpreter. Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'."] ["python3" python3 :help "`python3' Start an Python3 interpreter. Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'."] ["python2" python2 :help "`python2' Start an Python2 interpreter. Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'."] ["python2.7" python2.7 :help "`python2.7' Start an Python2.7 interpreter. Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'."] ["jython" jython :help "`jython' Start an Jython interpreter. Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'."] ["python3.3" python3.3 :help "`python3.3' Start an Python3.3 interpreter. Optional C-u prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'."] ["python3.4" python3.4 :help "`python3.3' Start an Python3.4 interpreter. Optional C-u prompts for options to pass to the Python3.4 interpreter. See `py-python-command-args'."] "-" ["python-dedicated" python-dedicated :help "`python-dedicated' Start an unique Python interpreter in another window. Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'."] ["ipython-dedicated" ipython-dedicated :help "`ipython-dedicated' Start an unique IPython interpreter in another window. Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'."] ["python3-dedicated" python3-dedicated :help "`python3-dedicated' Start an unique Python3 interpreter in another window. Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'."] ["python2-dedicated" python2-dedicated :help "`python2-dedicated' Start an unique Python2 interpreter in another window. Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'."] ["python2.7-dedicated" python2.7-dedicated :help "`python2'.7-dedicated Start an unique Python2.7 interpreter in another window. Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'."] ["jython-dedicated" jython-dedicated :help "`jython-dedicated' Start an unique Jython interpreter in another window. Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'."] "-" ("Ignoring defaults " :help "Commands will ignore default setting of `py-switch-buffers-on-execute-p' and `py-split-windows-on-execute-p'" ["Execute file python switch" py-execute-file-python-switch :help " `py-execute-file-python-switch' Send file to a Python interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python no-switch" py-execute-file-python-no-switch :help " `py-execute-file-python-no-switch' Send file to a Python interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python dedicated" py-execute-file-python-dedicated :help " `py-execute-file-python-dedicated' Send file to a Python interpreter. Uses a dedicated shell. "] ["Execute file python dedicated switch" py-execute-file-python-dedicated-switch :help " `py-execute-file-python-dedicated-switch' Send file to a Python interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file ipython switch" py-execute-file-ipython-switch :help " `py-execute-file-ipython-switch' Send file to a Ipython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file ipython no-switch" py-execute-file-ipython-no-switch :help " `py-execute-file-ipython-no-switch' Send file to a Ipython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file ipython dedicated" py-execute-file-ipython-dedicated :help " `py-execute-file-ipython-dedicated' Send file to a Ipython interpreter. Uses a dedicated shell. "] ["Execute file ipython dedicated switch" py-execute-file-ipython-dedicated-switch :help " `py-execute-file-ipython-dedicated-switch' Send file to a Ipython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python3 switch" py-execute-file-python3-switch :help " `py-execute-file-python3-switch' Send file to a Python3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python3 no-switch" py-execute-file-python3-no-switch :help " `py-execute-file-python3-no-switch' Send file to a Python3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python3 dedicated" py-execute-file-python3-dedicated :help " `py-execute-file-python3-dedicated' Send file to a Python3 interpreter. Uses a dedicated shell. "] ["Execute file python3 dedicated switch" py-execute-file-python3-dedicated-switch :help " `py-execute-file-python3-dedicated-switch' Send file to a Python3 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python2 switch" py-execute-file-python2-switch :help " `py-execute-file-python2-switch' Send file to a Python2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python2 no-switch" py-execute-file-python2-no-switch :help " `py-execute-file-python2-no-switch' Send file to a Python2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python2 dedicated" py-execute-file-python2-dedicated :help " `py-execute-file-python2-dedicated' Send file to a Python2 interpreter. Uses a dedicated shell. "] ["Execute file python2 dedicated switch" py-execute-file-python2-dedicated-switch :help " `py-execute-file-python2-dedicated-switch' Send file to a Python2 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python2.7 switch" py-execute-file-python2.7-switch :help " `py-execute-file-python2.7-switch' Send file to a Python2.7 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python2.7 no-switch" py-execute-file-python2.7-no-switch :help " `py-execute-file-python2.7-no-switch' Send file to a Python2.7 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python2.7 dedicated" py-execute-file-python2.7-dedicated :help " `py-execute-file-python2.7-dedicated' Send file to a Python2.7 interpreter. Uses a dedicated shell. "] ["Execute file python2.7 dedicated switch" py-execute-file-python2.7-dedicated-switch :help " `py-execute-file-python2.7-dedicated-switch' Send file to a Python2.7 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file jython switch" py-execute-file-jython-switch :help " `py-execute-file-jython-switch' Send file to a Jython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file jython no-switch" py-execute-file-jython-no-switch :help " `py-execute-file-jython-no-switch' Send file to a Jython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file jython dedicated" py-execute-file-jython-dedicated :help " `py-execute-file-jython-dedicated' Send file to a Jython interpreter. Uses a dedicated shell. "] ["Execute file jython dedicated switch" py-execute-file-jython-dedicated-switch :help " `py-execute-file-jython-dedicated-switch' Send file to a Jython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python3.3 switch" py-execute-file-python3.3-switch :help " `py-execute-file-python3.3-switch' Send file to a Python3.3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python3.3 no-switch" py-execute-file-python3.3-no-switch :help " `py-execute-file-python3.3-no-switch' Send file to a Python3.3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python3.3 dedicated" py-execute-file-python3.3-dedicated :help " `py-execute-file-python3.3-dedicated' Send file to a Python3.3 interpreter. Uses a dedicated shell. "] ["Execute file python3.3 dedicated switch" py-execute-file-python3.3-dedicated-switch :help " `py-execute-file-python3.3-dedicated-switch' Send file to a Python3.3 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file bpython switch" py-execute-file-bpython-switch :help " `py-execute-file-bpython-switch' Send file to a Bpython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file bpython no-switch" py-execute-file-bpython-no-switch :help " `py-execute-file-bpython-no-switch' Send file to a Bpython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file bpython dedicated" py-execute-file-bpython-dedicated :help " `py-execute-file-bpython-dedicated' Send file to a Bpython interpreter. Uses a dedicated shell. "] ["Execute file bpython dedicated switch" py-execute-file-bpython-dedicated-switch :help " `py-execute-file-bpython-dedicated-switch' Send file to a Bpython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ) ) ) "-" ("Mark" ["Mark block" py-mark-block :help " `py-mark-block' Mark block at point. Returns beginning and end positions of marked area, a cons. "] ["Mark minor block" py-mark-minor-block :help " `py-mark-minor-block' Mark minor-block at point. A minor block is started by a `for', `if', `try' or `with'. Returns beginning and end positions of marked area, a cons. "] ["Mark def or class" py-mark-def-or-class :help " `py-mark-def-or-class' Mark def-or-class at point. Returns beginning and end positions of marked area, a cons. "] ["Mark statement" py-mark-statement :help "`py-mark-statement' Mark statement at point"] ["Mark top level" py-mark-top-level :help " `py-mark-top-level' Mark top-level form at point. Returns beginning and end positions of marked area, a cons. "] ["Mark clause" py-mark-clause :help "`py-mark-clause' Mark innermost compound statement at point"] ["Mark def" py-mark-def :help "`py-mark-def' Mark innermost definition at point"] ["Mark expression" py-mark-expression :help "`py-mark-expression' Mark expression at point"] ["Mark partial expression" py-mark-partial-expression :help "`py-mark-partial-expression' \".\" operators delimit a partial-expression expression on it's level"] ["Mark class" py-mark-class :help "`py-mark-class' Mark innermost definition at point"] ["Mark comment" py-mark-comment :help "`py-mark-comment' Mark commented section at point"] "-" ["Mark block bol" py-mark-block-bol :help "`py-mark-block-bol' Mark block at point reaching beginning-of-line. "] ["Mark clause bol" py-mark-clause-bol :help "`py-mark-clause-bol' Mark clause at point reaching beginning-of-line. "] ["Mark block-or-clause bol" py-mark-block-or-clause-bol :help "`py-mark-block-or-clause-bol' Mark block-or-clause at point reaching beginning-of-line. "] ["Mark def bol" py-mark-def-bol :help "`py-mark-def-bol' Mark def at point reaching beginning-of-line. "] ["Mark class bol" py-mark-class-bol :help "`py-mark-class-bol' Mark class at point reaching beginning-of-line. "] ["Mark def-or-class bol" py-mark-def-or-class-bol :help "`py-mark-def-or-class-bol' Mark def-or-class at point reaching beginning-of-line. "] ["Mark if-block bol" py-mark-if-block-bol :help "`py-mark-if-block-bol' Mark if-block at point reaching beginning-of-line. "] ["Mark try-block bol" py-mark-try-block-bol :help "`py-mark-try-block-bol' Mark try-block at point reaching beginning-of-line. "] ["Mark minor-block bol" py-mark-minor-block-bol :help "`py-mark-minor-block-bol' Mark minor-block at point reaching beginning-of-line. A minor block is started by a `for', `if', `try' or `with'."] ) "-" ["Shift region left" py-shift-region-left :help " `py-shift-region-left' Dedent region according to `py-indent-offset' by COUNT times. If no region is active, current line is dedented. Returns indentation reached. "] ["Shift region right" py-shift-region-right :help " `py-shift-region-right' Indent region according to `py-indent-offset' by COUNT times. If no region is active, current line is indented. Returns indentation reached. "] "-" ("Comment" ["Comment Region" py-comment-region (point) (mark) :help "Like `comment-region' but uses double hash (`#') comment starter." ] ["Uncomment" py-uncomment :help " `py-uncomment' Uncomment commented lines at point. If region is active, restrict uncommenting at region . "] ["Uncomment Region" (py-comment-region (point) (mark) '(4)) :help "(py-comment-region (point) (mark) '(4))" ] "-" ["Comment block" py-comment-block :help " `py-comment-block' Comments block at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ["Comment minor-block" py-comment-minor-block :help " `py-comment-minor-block' Comments minor-block at point. A minor block is started by a `for', `if', `try' or `with'. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ["Comment top level" py-comment-top-level :help " `py-comment-top-level' Comments top-level form at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ["Comment clause" py-comment-clause :help " `py-comment-clause' Comments clause at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ["Comment block or clause" py-comment-block-or-clause :help " `py-comment-block-or-clause' Comments block-or-clause at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ["Comment def" py-comment-def :help " `py-comment-def' Comments def at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ["Comment class" py-comment-class :help " `py-comment-class' Comments class at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ["Comment def or class" py-comment-def-or-class :help " `py-comment-def-or-class' Comments def-or-class at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ["Comment statement" py-comment-statement :help " `py-comment-statement' Comments statement at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ) "-" ("Move" ["Beginning of block" py-beginning-of-block :help " `py-beginning-of-block' Go to beginning block, skip whitespace at BOL. "] ["Go to end of block" py-end-of-block] "-" ["Beginning of def or class" py-beginning-of-def-or-class :help " `py-beginning-of-def-or-class' Go to beginning def-or-class, skip whitespace at BOL. Returns beginning of def-or-class if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. "] ["End of def or class" py-end-of-def-or-class :help " `py-end-of-def-or-class' Go to end of def-or-class. Returns end of def-or-class if successful, nil otherwise With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. "] "-" ["Beginning of statement" py-beginning-of-statement :help " `py-beginning-of-statement' Go to the initial line of a simple statement. "] ["End of statement" py-end-of-statement :help " `py-end-of-statement' Go to the last char of current statement. To go just beyond the final line of the current statement, use `py-down-statement-bol'. "] "-" ["Backward into nomenclature" py-backward-into-nomenclature :help " `py-backward-into-nomenclature' Go backward into nomenclature A nomenclature is a fancy way of saying AWordWithMixedCaseNotUnderscores. "] ["Forward into nomenclature" py-forward-into-nomenclature :help " `py-forward-into-nomenclature' Go forward into nomenclature A nomenclature is a fancy way of saying AWordWithMixedCaseNotUnderscores. "] "-" ("More" ["Up level" py-up :help " `py-up' Go to beginning one level above of compound statement or definition at point. "] ["Down level" py-down :help " `py-down' Go to beginning one level below of compound statement or definition at point. "] "-" ["Beginning of top level" py-beginning-of-top-level :help " `py-beginning-of-top-level' Go to the very beginning of top-level form at point. "] ["End of top level" py-end-of-top-level :help " `py-end-of-top-level' Go to end of top-level form at point. "] "-" ["Beginning of block current-column" py-beginning-of-block-current-column :help " `py-beginning-of-block-current-column' Reach next beginning of block upwards which starts at current column. Return position. "] "-" ["Move to start of def" py-beginning-of-def t] ["Move to end of def" py-end-of-def t] "-" ["Beginning of clause" py-beginning-of-clause :help " `py-beginning-of-clause' Go to beginning clause, skip whitespace at BOL. "] ["End of clause" py-end-of-clause :help " `py-end-of-clause' Go to end of clause. "] "-" ["Beginning of comment" py-beginning-of-comment :help " `py-beginning-of-comment' Go to beginning of comment at point. "] ["End of comment" py-end-of-comment :help " `py-end-of-comment' Go to end of comment at point. "] "-" ["Go to start of expression" (py-beginning-of-expression t) t] ["Move to end of expression" (py-end-of-expression t) t] "-" ["Go to start of minor-expression" (py-beginning-of-minor-expression t) t] ["Move to end of minor-expression" (py-end-of-minor-expression t) t] "-" ["Beginning of minor block" py-beginning-of-minor-block :help " `py-beginning-of-minor-block' Go to beginning minor-block, skip whitespace at BOL. Returns beginning of minor-block if successful, nil otherwise A minor block is started by a `for', `if', `try' or `with'. "] ["End of minor block" py-end-of-minor-block :help " `py-end-of-minor-block' Go to end of minor-block. Returns end of minor-block if successful, nil otherwise A minor block is started by a `for', `if', `try' or `with'. "] ) ) "-" ("Copy " ["Copy statement" py-copy-statement :help "`py-copy-statement' Copy statement at point"] ["Copy top level" py-copy-top-level :help " `py-copy-top-level' Copy top-level form at point. "] ["Copy clause" py-copy-clause :help "`py-copy-clause' Copy innermost clause at point"] ["Copy block" py-copy-block :help "`py-copy-block' Copy innermost block at point"] ["Copy minor block" py-copy-minor-block :help " `py-copy-minor-block' Copy minor-block at point. Store data in kill ring, so it might yanked back. A minor block is started by a `for', `if', `try' or `with'. "] ["Copy def" py-copy-def :help "`py-copy-def' Copy innermost definition at point"] ["Copy expression" py-copy-expression :help "`py-copy-expression' Copy expression at point"] ["Copy partial expression" py-copy-partial-expression :help "`py-copy-partial-expression' \".\" operators delimit a partial-expression expression on it's level"] ["Copy class" py-copy-class :help "`py-copy-class' Copy innermost definition at point"] ["Copy Def-or-Class" py-copy-def-or-class :help "`py-copy-def-or-class' Copy innermost definition at point"] ) "-" ["Execute region" py-execute-region :help " `py-execute-region' Send the region to a Python interpreter. When called with C-u followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment. "] ["Execute buffer" py-execute-buffer :help " `py-execute-buffer' Send the contents of the buffer to a Python interpreter. When called with C-u, execution through `default-value' of `py-shell-name' is forced. When called with C-u followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment. If the file local variable `py-master-file' is non-nil, execute the named file instead of the buffer's file."] ["Execute def or class" py-execute-def-or-class :help " `py-execute-def-or-class' Send def-or-class at point to a Python interpreter. When called with C-u, execution through `default-value' of `py-shell-name' is forced. See also `py-force-py-shell-name-p'. When called with C-u followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment."] ["Execute statement" py-execute-statement :help " `py-execute-statement' Send statement at point to a Python interpreter. When called with C-u, execution through `default-value' of `py-shell-name' is forced. See also `py-force-py-shell-name-p'. When called with C-u followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment."] ["Execute string" py-execute-string :help " `py-execute-string' Send the argument STRING to a Python interpreter. See also `py-execute-region'. "] ("More... " :help "Python-specific features" ["Execute top level" py-execute-top-level :help " `py-execute-top-level' Send top-level form at point to a Python interpreter. "] ["Execute block" py-execute-block :help "`py-execute-block' Send block at point to Python interpreter. "] ["Execute minor block" py-execute-minor-block :help " `py-execute-minor-block' Send minor-block at point to a Python interpreter. A minor block is started by a `for', `if', `try' or `with'. . "] ["Execute def" py-execute-def :help "`py-execute-def' Send def at point to Python interpreter. "] ["Execute class" py-execute-class :help "`py-execute-class' Send class at point to Python interpreter. "] ["Execute file" py-execute-file :help "`py-execute-file' Send file at point to Python interpreter. "] ;; statement ("Execute statement " :help "Execute statement functions" ["py-execute-statement-python" py-execute-statement-python :help "Execute statement through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-statement-ipython" py-execute-statement-ipython :help "Execute statement through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-statement-python3" py-execute-statement-python3 :help "Execute statement through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-statement-python2" py-execute-statement-python2 :help "Execute statement through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-statement-python2.7" py-execute-statement-python2.7 :help "Execute statement through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-statement-jython" py-execute-statement-jython :help "Execute statement through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-statement-python3.3" py-execute-statement-python3.3 :help "Execute statement through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-statement-bpython" py-execute-statement-bpython :help "Execute statement through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated ["py-execute-statement-python-dedicated" py-execute-statement-python-dedicated :help "Execute statement through a unique Python interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-statement-ipython-dedicated" py-execute-statement-ipython-dedicated :help "Execute statement through a unique IPython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-statement-python3-dedicated" py-execute-statement-python3-dedicated :help "Execute statement through a unique Python3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-statement-python2-dedicated" py-execute-statement-python2-dedicated :help "Execute statement through a unique Python2 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-statement-python2.7-dedicated" py-execute-statement-python2.7-dedicated :help "Execute statement through a unique Python2.7 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-statement-jython-dedicated" py-execute-statement-jython-dedicated :help "Execute statement through a unique Jython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-statement-python3.3-dedicated" py-execute-statement-python3.3-dedicated :help "Execute statement through a unique Python3.3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-statement-bpython-dedicated" py-execute-statement-bpython-dedicated :help "Execute statement through a unique Bpython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ("Ignoring defaults " :help "Commands will ignore default setting of `py-switch-buffers-on-execute-p' and `py-split-windows-on-execute-p'" ;; switch ["py-execute-statement-python-switch" py-execute-statement-python-switch :help "Execute statement through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-statement-ipython-switch" py-execute-statement-ipython-switch :help "Execute statement through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-statement-python3-switch" py-execute-statement-python3-switch :help "Execute statement through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-statement-python2-switch" py-execute-statement-python2-switch :help "Execute statement through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-statement-python2.7-switch" py-execute-statement-python2.7-switch :help "Execute statement through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-statement-jython-switch" py-execute-statement-jython-switch :help "Execute statement through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-statement-python3.3-switch" py-execute-statement-python3.3-switch :help "Execute statement through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-statement-bpython-switch" py-execute-statement-bpython-switch :help "Execute statement through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated-switch ["py-execute-statement-python-dedicated-switch" py-execute-statement-python-dedicated-switch :help "Execute statement through a unique Python interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-statement-ipython-dedicated-switch" py-execute-statement-ipython-dedicated-switch :help "Execute statement through a uniquen IPython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-statement-python3-dedicated-switch" py-execute-statement-python3-dedicated-switch :help "Execute statement through a unique Python3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-statement-python2-dedicated-switch" py-execute-statement-python2-dedicated-switch :help "Execute statement through a unique Python2 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-statement-python2.7-dedicated-switch" py-execute-statement-python2.7-dedicated-switch :help "Execute statement through a unique Python2.7 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-statement-jython-dedicated-switch" py-execute-statement-jython-dedicated-switch :help "Execute statement through a unique Jython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-statement-python3.3-dedicated-switch" py-execute-statement-python3.3-dedicated-switch :help "Execute statement through a unique Python3.3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-statement-bpython-dedicated-switch" py-execute-statement-bpython-dedicated-switch :help "Execute statement through a unique Bpython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] )) ;; block ("Execute block " :help "Execute block functions" ["py-execute-block-python" py-execute-block-python :help "Execute block through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-block-ipython" py-execute-block-ipython :help "Execute block through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-block-python3" py-execute-block-python3 :help "Execute block through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-block-python2" py-execute-block-python2 :help "Execute block through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-block-python2.7" py-execute-block-python2.7 :help "Execute block through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-block-jython" py-execute-block-jython :help "Execute block through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-block-python3.3" py-execute-block-python3.3 :help "Execute block through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-block-bpython" py-execute-block-bpython :help "Execute block through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated ["py-execute-block-python-dedicated" py-execute-block-python-dedicated :help "Execute block through a unique Python interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-block-ipython-dedicated" py-execute-block-ipython-dedicated :help "Execute block through a unique IPython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-block-python3-dedicated" py-execute-block-python3-dedicated :help "Execute block through a unique Python3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-block-python2-dedicated" py-execute-block-python2-dedicated :help "Execute block through a unique Python2 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-block-python2.7-dedicated" py-execute-block-python2.7-dedicated :help "Execute block through a unique Python2.7 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-block-jython-dedicated" py-execute-block-jython-dedicated :help "Execute block through a unique Jython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-block-python3.3-dedicated" py-execute-block-python3.3-dedicated :help "Execute block through a unique Python3.3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-block-bpython-dedicated" py-execute-block-bpython-dedicated :help "Execute block through a unique Bpython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ("Ignoring defaults " :help "Commands will ignore default setting of `py-switch-buffers-on-execute-p' and `py-split-windows-on-execute-p'" ;; switch ["py-execute-block-python-switch" py-execute-block-python-switch :help "Execute block through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-block-ipython-switch" py-execute-block-ipython-switch :help "Execute block through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-block-python3-switch" py-execute-block-python3-switch :help "Execute block through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-block-python2-switch" py-execute-block-python2-switch :help "Execute block through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-block-python2.7-switch" py-execute-block-python2.7-switch :help "Execute block through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-block-jython-switch" py-execute-block-jython-switch :help "Execute block through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-block-python3.3-switch" py-execute-block-python3.3-switch :help "Execute block through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-block-bpython-switch" py-execute-block-bpython-switch :help "Execute block through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated-switch ["py-execute-block-python-dedicated-switch" py-execute-block-python-dedicated-switch :help "Execute block through a unique Python interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-block-ipython-dedicated-switch" py-execute-block-ipython-dedicated-switch :help "Execute block through a uniquen IPython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-block-python3-dedicated-switch" py-execute-block-python3-dedicated-switch :help "Execute block through a unique Python3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-block-python2-dedicated-switch" py-execute-block-python2-dedicated-switch :help "Execute block through a unique Python2 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-block-python2.7-dedicated-switch" py-execute-block-python2.7-dedicated-switch :help "Execute block through a unique Python2.7 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-block-jython-dedicated-switch" py-execute-block-jython-dedicated-switch :help "Execute block through a unique Jython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-block-python3.3-dedicated-switch" py-execute-block-python3.3-dedicated-switch :help "Execute block through a unique Python3.3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-block-bpython-dedicated-switch" py-execute-block-bpython-dedicated-switch :help "Execute block through a unique Bpython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] )) ;; def ("Execute def " :help "Execute def functions" ["py-execute-def-python" py-execute-def-python :help "Execute def through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-def-ipython" py-execute-def-ipython :help "Execute def through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-def-python3" py-execute-def-python3 :help "Execute def through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-def-python2" py-execute-def-python2 :help "Execute def through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-def-python2.7" py-execute-def-python2.7 :help "Execute def through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-def-jython" py-execute-def-jython :help "Execute def through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-def-python3.3" py-execute-def-python3.3 :help "Execute def through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-def-bpython" py-execute-def-bpython :help "Execute def through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated ["py-execute-def-python-dedicated" py-execute-def-python-dedicated :help "Execute def through a unique Python interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-def-ipython-dedicated" py-execute-def-ipython-dedicated :help "Execute def through a unique IPython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-def-python3-dedicated" py-execute-def-python3-dedicated :help "Execute def through a unique Python3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-def-python2-dedicated" py-execute-def-python2-dedicated :help "Execute def through a unique Python2 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-def-python2.7-dedicated" py-execute-def-python2.7-dedicated :help "Execute def through a unique Python2.7 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-def-jython-dedicated" py-execute-def-jython-dedicated :help "Execute def through a unique Jython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-def-python3.3-dedicated" py-execute-def-python3.3-dedicated :help "Execute def through a unique Python3.3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-def-bpython-dedicated" py-execute-def-bpython-dedicated :help "Execute def through a unique Bpython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ("Ignoring defaults " :help "Commands will ignore default setting of `py-switch-buffers-on-execute-p' and `py-split-windows-on-execute-p'" ;; switch ["py-execute-def-python-switch" py-execute-def-python-switch :help "Execute def through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-def-ipython-switch" py-execute-def-ipython-switch :help "Execute def through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-def-python3-switch" py-execute-def-python3-switch :help "Execute def through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-def-python2-switch" py-execute-def-python2-switch :help "Execute def through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-def-python2.7-switch" py-execute-def-python2.7-switch :help "Execute def through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-def-jython-switch" py-execute-def-jython-switch :help "Execute def through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-def-python3.3-switch" py-execute-def-python3.3-switch :help "Execute def through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-def-bpython-switch" py-execute-def-bpython-switch :help "Execute def through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated-switch ["py-execute-def-python-dedicated-switch" py-execute-def-python-dedicated-switch :help "Execute def through a unique Python interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-def-ipython-dedicated-switch" py-execute-def-ipython-dedicated-switch :help "Execute def through a uniquen IPython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-def-python3-dedicated-switch" py-execute-def-python3-dedicated-switch :help "Execute def through a unique Python3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-def-python2-dedicated-switch" py-execute-def-python2-dedicated-switch :help "Execute def through a unique Python2 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-def-python2.7-dedicated-switch" py-execute-def-python2.7-dedicated-switch :help "Execute def through a unique Python2.7 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-def-jython-dedicated-switch" py-execute-def-jython-dedicated-switch :help "Execute def through a unique Jython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-def-python3.3-dedicated-switch" py-execute-def-python3.3-dedicated-switch :help "Execute def through a unique Python3.3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-def-bpython-dedicated-switch" py-execute-def-bpython-dedicated-switch :help "Execute def through a unique Bpython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] )) ;; class ("Execute class " :help "Execute class functions" ["py-execute-class-python" py-execute-class-python :help "Execute class through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-class-ipython" py-execute-class-ipython :help "Execute class through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-class-python3" py-execute-class-python3 :help "Execute class through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-class-python2" py-execute-class-python2 :help "Execute class through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-class-python2.7" py-execute-class-python2.7 :help "Execute class through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-class-jython" py-execute-class-jython :help "Execute class through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-class-python3.3" py-execute-class-python3.3 :help "Execute class through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-class-bpython" py-execute-class-bpython :help "Execute class through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated ["py-execute-class-python-dedicated" py-execute-class-python-dedicated :help "Execute class through a unique Python interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-class-ipython-dedicated" py-execute-class-ipython-dedicated :help "Execute class through a unique IPython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-class-python3-dedicated" py-execute-class-python3-dedicated :help "Execute class through a unique Python3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-class-python2-dedicated" py-execute-class-python2-dedicated :help "Execute class through a unique Python2 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-class-python2.7-dedicated" py-execute-class-python2.7-dedicated :help "Execute class through a unique Python2.7 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-class-jython-dedicated" py-execute-class-jython-dedicated :help "Execute class through a unique Jython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-class-python3.3-dedicated" py-execute-class-python3.3-dedicated :help "Execute class through a unique Python3.3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-class-bpython-dedicated" py-execute-class-bpython-dedicated :help "Execute class through a unique Bpython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ("Ignoring defaults " :help "Commands will ignore default setting of `py-switch-buffers-on-execute-p' and `py-split-windows-on-execute-p'" ;; switch ["py-execute-class-python-switch" py-execute-class-python-switch :help "Execute class through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-class-ipython-switch" py-execute-class-ipython-switch :help "Execute class through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-class-python3-switch" py-execute-class-python3-switch :help "Execute class through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-class-python2-switch" py-execute-class-python2-switch :help "Execute class through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-class-python2.7-switch" py-execute-class-python2.7-switch :help "Execute class through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-class-jython-switch" py-execute-class-jython-switch :help "Execute class through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-class-python3.3-switch" py-execute-class-python3.3-switch :help "Execute class through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-class-bpython-switch" py-execute-class-bpython-switch :help "Execute class through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated-switch ["py-execute-class-python-dedicated-switch" py-execute-class-python-dedicated-switch :help "Execute class through a unique Python interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-class-ipython-dedicated-switch" py-execute-class-ipython-dedicated-switch :help "Execute class through a uniquen IPython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-class-python3-dedicated-switch" py-execute-class-python3-dedicated-switch :help "Execute class through a unique Python3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-class-python2-dedicated-switch" py-execute-class-python2-dedicated-switch :help "Execute class through a unique Python2 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-class-python2.7-dedicated-switch" py-execute-class-python2.7-dedicated-switch :help "Execute class through a unique Python2.7 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-class-jython-dedicated-switch" py-execute-class-jython-dedicated-switch :help "Execute class through a unique Jython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-class-python3.3-dedicated-switch" py-execute-class-python3.3-dedicated-switch :help "Execute class through a unique Python3.3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-class-bpython-dedicated-switch" py-execute-class-bpython-dedicated-switch :help "Execute class through a unique Bpython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] )) ;; region ("Execute region " :help "Execute region functions" ["py-execute-region-python" py-execute-region-python :help "Execute region through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-region-ipython" py-execute-region-ipython :help "Execute region through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-region-python3" py-execute-region-python3 :help "Execute region through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-region-python2" py-execute-region-python2 :help "Execute region through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-region-python2.7" py-execute-region-python2.7 :help "Execute region through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-region-jython" py-execute-region-jython :help "Execute region through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-region-python3.3" py-execute-region-python3.3 :help "Execute region through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-region-bpython" py-execute-region-bpython :help "Execute region through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated ["py-execute-region-python-dedicated" py-execute-region-python-dedicated :help "Execute region through a unique Python interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-region-ipython-dedicated" py-execute-region-ipython-dedicated :help "Execute region through a unique IPython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-region-python3-dedicated" py-execute-region-python3-dedicated :help "Execute region through a unique Python3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-region-python2-dedicated" py-execute-region-python2-dedicated :help "Execute region through a unique Python2 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-region-python2.7-dedicated" py-execute-region-python2.7-dedicated :help "Execute region through a unique Python2.7 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-region-jython-dedicated" py-execute-region-jython-dedicated :help "Execute region through a unique Jython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-region-python3.3-dedicated" py-execute-region-python3.3-dedicated :help "Execute region through a unique Python3.3 interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ["py-execute-region-bpython-dedicated" py-execute-region-bpython-dedicated :help "Execute region through a unique Bpython interpreter. Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "] ("Ignoring defaults " :help "Commands will ignore default setting of `py-switch-buffers-on-execute-p' and `py-split-windows-on-execute-p'" ;; switch ["py-execute-region-python-switch" py-execute-region-python-switch :help "Execute region through a Python interpreter. With \\[universal-argument] use an unique Python interpreter. "] ["py-execute-region-ipython-switch" py-execute-region-ipython-switch :help "Execute region through an IPython interpreter. With \\[universal-argument] use an unique IPython interpreter. "] ["py-execute-region-python3-switch" py-execute-region-python3-switch :help "Execute region through a Python3 interpreter. With \\[universal-argument] use an unique Python3 interpreter. "] ["py-execute-region-python2-switch" py-execute-region-python2-switch :help "Execute region through a Python2 interpreter. With \\[universal-argument] use an unique Python2 interpreter. "] ["py-execute-region-python2.7-switch" py-execute-region-python2.7-switch :help "Execute region through a Python2.7 interpreter. With \\[universal-argument] use an unique Python2.7 interpreter. "] ["py-execute-region-jython-switch" py-execute-region-jython-switch :help "Execute region through a Jython interpreter. With \\[universal-argument] use an unique Jython interpreter. "] ["py-execute-region-python3.3-switch" py-execute-region-python3.3-switch :help "Execute region through a Python3.3 interpreter. With \\[universal-argument] use an unique Python3.3 interpreter. "] ["py-execute-region-bpython-switch" py-execute-region-bpython-switch :help "Execute region through a Bpython interpreter. With \\[universal-argument] use an unique Bpython interpreter. "] ;; dedicated-switch ["py-execute-region-python-dedicated-switch" py-execute-region-python-dedicated-switch :help "Execute region through a unique Python interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-region-ipython-dedicated-switch" py-execute-region-ipython-dedicated-switch :help "Execute region through a uniquen IPython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-region-python3-dedicated-switch" py-execute-region-python3-dedicated-switch :help "Execute region through a unique Python3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-region-python2-dedicated-switch" py-execute-region-python2-dedicated-switch :help "Execute region through a unique Python2 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-region-python2.7-dedicated-switch" py-execute-region-python2.7-dedicated-switch :help "Execute region through a unique Python2.7 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-region-jython-dedicated-switch" py-execute-region-jython-dedicated-switch :help "Execute region through a unique Jython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-region-python3.3-dedicated-switch" py-execute-region-python3.3-dedicated-switch :help "Execute region through a unique Python3.3 interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] ["py-execute-region-bpython-dedicated-switch" py-execute-region-bpython-dedicated-switch :help "Execute region through a unique Bpython interpreter. Switch to output buffer; ignores `py-switch-buffers-on-execute-p' "] )) ;; file ("Execute file " :help "Execute file functions" ["Execute file python" py-execute-file-python :help " `py-execute-file-python' Send file to a Python interpreter. "] ["Execute file ipython" py-execute-file-ipython :help " `py-execute-file-ipython' Send file to a Ipython interpreter. "] ["Execute file python3" py-execute-file-python3 :help " `py-execute-file-python3' Send file to a Python3 interpreter. "] ["Execute file python2" py-execute-file-python2 :help " `py-execute-file-python2' Send file to a Python2 interpreter. "] ["Execute file python2.7" py-execute-file-python2.7 :help " `py-execute-file-python2.7' Send file to a Python2.7 interpreter. "] ["Execute file jython" py-execute-file-jython :help " `py-execute-file-jython' Send file to a Jython interpreter. "] ["Execute file python3.3" py-execute-file-python3.3 :help " `py-execute-file-python3.3' Send file to a Python3.3 interpreter. "] ["Execute file bpython" py-execute-file-bpython :help " `py-execute-file-bpython' Send file to a Bpython interpreter. "] ("Ignoring defaults " :help "Commands will ignore default setting of `py-switch-buffers-on-execute-p' and `py-split-windows-on-execute-p'" ["Execute file python switch" py-execute-file-python-switch :help " `py-execute-file-python-switch' Send file to a Python interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python no-switch" py-execute-file-python-no-switch :help " `py-execute-file-python-no-switch' Send file to a Python interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python dedicated" py-execute-file-python-dedicated :help " `py-execute-file-python-dedicated' Send file to a Python interpreter. Uses a dedicated shell. "] ["Execute file python dedicated switch" py-execute-file-python-dedicated-switch :help " `py-execute-file-python-dedicated-switch' Send file to a Python interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file ipython switch" py-execute-file-ipython-switch :help " `py-execute-file-ipython-switch' Send file to a Ipython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file ipython no-switch" py-execute-file-ipython-no-switch :help " `py-execute-file-ipython-no-switch' Send file to a Ipython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file ipython dedicated" py-execute-file-ipython-dedicated :help " `py-execute-file-ipython-dedicated' Send file to a Ipython interpreter. Uses a dedicated shell. "] ["Execute file ipython dedicated switch" py-execute-file-ipython-dedicated-switch :help " `py-execute-file-ipython-dedicated-switch' Send file to a Ipython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python3 switch" py-execute-file-python3-switch :help " `py-execute-file-python3-switch' Send file to a Python3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python3 no-switch" py-execute-file-python3-no-switch :help " `py-execute-file-python3-no-switch' Send file to a Python3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python3 dedicated" py-execute-file-python3-dedicated :help " `py-execute-file-python3-dedicated' Send file to a Python3 interpreter. Uses a dedicated shell. "] ["Execute file python3 dedicated switch" py-execute-file-python3-dedicated-switch :help " `py-execute-file-python3-dedicated-switch' Send file to a Python3 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python2 switch" py-execute-file-python2-switch :help " `py-execute-file-python2-switch' Send file to a Python2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python2 no-switch" py-execute-file-python2-no-switch :help " `py-execute-file-python2-no-switch' Send file to a Python2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python2 dedicated" py-execute-file-python2-dedicated :help " `py-execute-file-python2-dedicated' Send file to a Python2 interpreter. Uses a dedicated shell. "] ["Execute file python2 dedicated switch" py-execute-file-python2-dedicated-switch :help " `py-execute-file-python2-dedicated-switch' Send file to a Python2 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python2.7 switch" py-execute-file-python2.7-switch :help " `py-execute-file-python2.7-switch' Send file to a Python2.7 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python2.7 no-switch" py-execute-file-python2.7-no-switch :help " `py-execute-file-python2.7-no-switch' Send file to a Python2.7 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python2.7 dedicated" py-execute-file-python2.7-dedicated :help " `py-execute-file-python2.7-dedicated' Send file to a Python2.7 interpreter. Uses a dedicated shell. "] ["Execute file python2.7 dedicated switch" py-execute-file-python2.7-dedicated-switch :help " `py-execute-file-python2.7-dedicated-switch' Send file to a Python2.7 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file jython switch" py-execute-file-jython-switch :help " `py-execute-file-jython-switch' Send file to a Jython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file jython no-switch" py-execute-file-jython-no-switch :help " `py-execute-file-jython-no-switch' Send file to a Jython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file jython dedicated" py-execute-file-jython-dedicated :help " `py-execute-file-jython-dedicated' Send file to a Jython interpreter. Uses a dedicated shell. "] ["Execute file jython dedicated switch" py-execute-file-jython-dedicated-switch :help " `py-execute-file-jython-dedicated-switch' Send file to a Jython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python3.3 switch" py-execute-file-python3.3-switch :help " `py-execute-file-python3.3-switch' Send file to a Python3.3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file python3.3 no-switch" py-execute-file-python3.3-no-switch :help " `py-execute-file-python3.3-no-switch' Send file to a Python3.3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file python3.3 dedicated" py-execute-file-python3.3-dedicated :help " `py-execute-file-python3.3-dedicated' Send file to a Python3.3 interpreter. Uses a dedicated shell. "] ["Execute file python3.3 dedicated switch" py-execute-file-python3.3-dedicated-switch :help " `py-execute-file-python3.3-dedicated-switch' Send file to a Python3.3 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file bpython switch" py-execute-file-bpython-switch :help " `py-execute-file-bpython-switch' Send file to a Bpython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ["Execute file bpython no-switch" py-execute-file-bpython-no-switch :help " `py-execute-file-bpython-no-switch' Send file to a Bpython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil". "] ["Execute file bpython dedicated" py-execute-file-bpython-dedicated :help " `py-execute-file-bpython-dedicated' Send file to a Bpython interpreter. Uses a dedicated shell. "] ["Execute file bpython dedicated switch" py-execute-file-bpython-dedicated-switch :help " `py-execute-file-bpython-dedicated-switch' Send file to a Bpython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil". "] ) ) ) "-" ("Virtualenv" ["Virtualenv workon" virtualenv-workon :help " runs `virtualenv-workon' Make sure virtualenv is provided "] ["Virtualenv activate" virtualenv-activate :help " `virtualenv-activate' Activate the virtualenv located in DIR. "] ["Virtualenv deactivate" virtualenv-deactivate :help " `virtualenv-deactivate' Deactivate the current virtual enviroment. "] ["Virtualenv p" virtualenv-p :help " `virtualenv-p' Check if a directory is a virtualenv. "] ) ["Execute import or reload" py-execute-import-or-reload :help " `py-execute-import-or-reload' Import the current buffer's file in a Python interpreter. If the file has already been imported, then do reload instead to get the latest version. If the file's name does not end in ".py", then do execfile instead. If the current buffer is not visiting a file, do `py-execute-buffer' instead. If the file local variable `py-master-file' is non-nil, import or reload the named file instead of the buffer's file. The file may be saved based on the value of `py-execute-import-or-reload-save-p'. See also `M-x py-execute-region'. This may be preferable to `M-x py-execute-buffer' because: - Definitions stay in their module rather than appearing at top level, where they would clutter the global namespace and not affect uses of qualified names (MODULE.NAME). - The Python debugger gets line number information about the functions. "] ("Help" ["Describe mode" py-describe-mode t] ["Help on symbol" py-help-at-point :help "`py-help-at-point'\n Use pydoc on symbol at point"] ;; ["py-complete-help" py-complete-help ;; :help " `py-complete-help' ;; Get help on a Python expression.\n ;; Needs Pymacs "] ;; ;; ["Help thing at point" py-complete-help-thing-at-point ;; :help " `py-complete-help-thing-at-point'\n ;; Needs Pymacs "] ;; ["Signature" py-complete-signature-expr ;; :help " Print object's signature\n ;; Needs Pymacs"] ) ["Debugger" pdb :help "`pdb' Run pdb under GUD"] ("Checks" ["pychecker-run" py-pychecker-run :help "`py-pychecker-run' Run pychecker Call `easy_install pyflakes' resp. `pip... 'if not available"] ("Pylint " :help "Extendet report options Call `easy_install pylint' resp. `pip...' if not available" ["py-pylint-run" py-pylint-run :help "`py-pylint-run' Pylint will display a number of messages as it analyzes the code, as well as some statistics about the number of warnings and errors found in different files - unless called with arg \"--errors-only\". The messages are classified under various categories such as errors and warnings Pylint checks length of lines of code, if variable names are well-formed according to your coding standard, if declared interfaces are truly implemented, and much more. Additionally, it is possible to write plugins. Call `easy_install pylint' resp. `pip...' if not available "] ["py-pylint-help" py-pylint-help :help "`py-pylint-help' List extendet report options "] ["pylint-flymake-mode" pylint-flymake-mode :help "`pylint-flymake-mode' Toggle flymake-mode running `pylint' "]) ("pep8 " :help "Check formatting Call `easy_install pep8' resp. `pip...' if not available" ["pep8-run" py-pep8-run :help "`py-pep8-run' Check formatting (default on the file currently visited) Call `easy_install pep8' resp. `pip...' if not available "] ["pep8-help" py-pep8-help :help "`py-pep8-help' Display help for pep8 format checker) "] ["pep8-flymake-mode" pep8-flymake-mode :help "`pep8-flymake-mode' Toggle flymake-mode running `pep8' "]) ("Pyflakes " :help "Non intrusive code checker Call `easy_install pyflakes' resp. `pip...' if not available" ["pyflakes-run" py-pyflakes-run :help "`py-pyflakes-run' Run pyflakes Call `easy_install pyflakes' resp. `pip...' if not available"] ["pyflakes-help" py-pyflakes-help :help "`py-pyflakes-help' Display help for Pyflakes "] ["pyflakes-flymake-mode" pyflakes-flymake-mode :help "`pyflakes-flymake-mode' Toggle flymake-mode running `pyflakes' "] ) ("Flake8 " :help "code checker running " ["Flake8 run" py-flake8-run :help " `py-flake8-run' Flake8 is a wrapper around these tools: - PyFlakes - pep8 - Ned Batchelder's McCabe script It also adds features: - files that contain this line are skipped:: # flake8: noqa - lines that contain a ``# noqa`` comment at the end will not issue warnings. - a Git and a Mercurial hook. - a McCabe complexity checker. - extendable through ``flake8.extension`` entry points. . "] ["Flake8 help" py-flake8-help :help " `py-flake8-help' Display flake8 command line help messages. "] ) ("Pyflakes-pep8 " :help "Non intrusive code checker running `pyflakes' and `pep8' call `easy_install pyflakes' resp. `pip...' and `easy_install pep8' if basics not available" ["pyflakespep8-run" py-pyflakespep8-run :help "`py-pyflakespep8-run' Run `pyflakespep8' Call `easy_install pyflakes' resp. `pip...' if not available"] ["pyflakespep8-help" py-pyflakespep8-help :help "`py-pyflakespep8-help' Display help for Pyflakespep8 "] ["pyflakespep8-flymake-mode" pyflakespep8-flymake-mode :help "`pyflakespep8-flymake-mode' Toggle flymake-mode running `pyflakespep8' "]) ) ("Customize" ["Python-mode customize group" (customize-group 'python-mode) :help "Open the customization buffer for Python mode"] ("Switches" :help "Toggle useful modes like `highlight-indentation'" ("Interpreter" ["Execute without temporary file" (setq py-execute-no-temp-p (not py-execute-no-temp-p)) :help " `py-execute-no-temp-p' Seems Emacs-24.3 provided a way executing stuff without temporary files. In experimental state yet " :style toggle :selected py-execute-no-temp-p] ["Warn tmp files left " (setq py-warn-tmp-files-left-p (not py-warn-tmp-files-left-p)) :help "Messages a warning, when `py-temp-directory' contains files susceptible being left by previous Python-mode sessions. See also lp:987534 Use `M-x customize-variable' to set it permanently" :style toggle :selected py-warn-tmp-files-left-p] ["Shell prompt read only" (setq py-shell-prompt-read-only (not py-shell-prompt-read-only)) :help "If non-nil, the python prompt is read only. Setting this variable will only effect new shells.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-shell-prompt-read-only] ["Remove cwd from path" (setq py-remove-cwd-from-path (not py-remove-cwd-from-path)) :help "Whether to allow loading of Python modules from the current directory. If this is non-nil, Emacs removes '' from sys.path when starting an inferior Python process. This is the default, for security reasons, as it is easy for the Python process to be started without the user's realization (e.g. to perform completion).Use `M-x customize-variable' to set it permanently" :style toggle :selected py-remove-cwd-from-path] ["Honor IPYTHONDIR " (setq py-honor-IPYTHONDIR-p (not py-honor-IPYTHONDIR-p)) :help "When non-nil ipython-history file is constructed by \$IPYTHONDIR followed by "/history". Default is nil. Otherwise value of py-ipython-history is used. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-honor-IPYTHONDIR-p] ["Honor PYTHONHISTORY " (setq py-honor-PYTHONHISTORY-p (not py-honor-PYTHONHISTORY-p)) :help "When non-nil python-history file is set by \$PYTHONHISTORY Default is nil. Otherwise value of py-python-history is used. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-honor-PYTHONHISTORY-p] ["Enforce py-shell-name" force-py-shell-name-p-on :help "Enforce customized default `py-shell-name' should upon execution. "] ["Don't enforce default interpreter" force-py-shell-name-p-off :help "Make execute commands guess interpreter from environment"] ["Enforce local Python shell " py-force-local-shell-on :help "Locally indicated Python being enforced upon sessions execute commands. "] ["Remove local Python shell enforcement, restore default" py-force-local-shell-off :help "Restore `py-shell-name' default value and `behaviour'. "] ["Run `py-shell' at start" (setq py-start-run-py-shell (not py-start-run-py-shell)) :help "If `python-mode' should start a python-shell, `py-shell'. Default is `nil'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-start-run-py-shell] ["Start run ipython shell" (setq py-start-run-ipython-shell (not py-start-run-ipython-shell)) :help "If `python-mode' should start an ipython-shell. Default is `nil'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-start-run-ipython-shell] ) ("Execute" ["Force shell name " (setq py-force-py-shell-name-p (not py-force-py-shell-name-p)) :help "When `t', execution with kind of Python specified in `py-shell-name' is enforced, possibly shebang doesn't take precedence. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-force-py-shell-name-p] ["Enforce py-output-buffer" (setq py-enforce-output-buffer-p (not py-enforce-output-buffer-p)) :help " `py-enforce-output-buffer-p' When non-nil, value of `py-output-buffer' is used for output, regardless of environment. Default is nil." :style toggle :selected py-enforce-output-buffer-p] ["Cleanup temporary" (setq py-cleanup-temporary (not py-cleanup-temporary)) :help "If temporary buffers and files used by functions executing region should be deleted afterwards. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-cleanup-temporary] ["Execute no temp " (setq py-execute-no-temp-p (not py-execute-no-temp-p)) :help "Seems Emacs-24.3 provided a way executing stuff without temporary files. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-execute-no-temp-p] ["Execute \"if name == main\" blocks p" (setq py-if-name-main-permission-p (not py-if-name-main-permission-p)) :help " `py-if-name-main-permission-p' Allow execution of code inside blocks delimited by if __name__ == '__main__' Default is non-nil. " :style toggle :selected py-if-name-main-permission-p] ["Ask about save" (setq py-ask-about-save (not py-ask-about-save)) :help "If not nil, ask about which buffers to save before executing some code. Otherwise, all modified buffers are saved without asking.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-ask-about-save] ["Store result" (setq py-store-result-p (not py-store-result-p)) :help " `py-store-result-p' When non-nil, put resulting string of `py-execute-...' into kill-ring, so it might be yanked. " :style toggle :selected py-store-result-p] ["Prompt on changed " (setq py-prompt-on-changed-p (not py-prompt-on-changed-p)) :help "When called interactively, ask for save before a changed buffer is sent to interpreter. Default is `t'Use `M-x customize-variable' to set it permanently" :style toggle :selected py-prompt-on-changed-p] ["Dedicated process " (setq py-dedicated-process-p (not py-dedicated-process-p)) :help "If commands executing code use a dedicated shell. Default is nilUse `M-x customize-variable' to set it permanently" :style toggle :selected py-dedicated-process-p] ) ("TAB related" ["indent-tabs-mode" (setq indent-tabs-mode (not indent-tabs-mode)) :help "Indentation can insert tabs if this is non-nil. Use `M-x customize-variable' to set it permanently" :style toggle :selected indent-tabs-mode] ["Tab indent" (setq py-tab-indent (not py-tab-indent)) :help "Non-nil means TAB in Python mode calls `py-indent-line'.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-tab-indent] ["Tab shifts region " (setq py-tab-shifts-region-p (not py-tab-shifts-region-p)) :help "If `t', TAB will indent/cycle the region, not just the current line. Default is nil See also `py-tab-indents-region-p' Use `M-x customize-variable' to set it permanently" :style toggle :selected py-tab-shifts-region-p] ["Tab indents region " (setq py-tab-indents-region-p (not py-tab-indents-region-p)) :help "When `t' and first TAB doesn't shift, indent-region is called. Default is nil See also `py-tab-shifts-region-p' Use `M-x customize-variable' to set it permanently" :style toggle :selected py-tab-indents-region-p] ) ("Filling" ("Docstring styles" :help "Toggle values of `py-docstring-style' In order to set permanently customize this variable" ("Nil" :help "Toggle nil value of `py-docstring-style' Use `M-x customize-variable' to set it permanently" ["Toggle nil docstring style" toggle-py-nil-docstring-style :help "If nil docstring-style should be on or off Returns value of `py-docstring-style' switched to Use `M-x customize-variable' to set it permanently"] ["Nil on" py-nil-docstring-style-on :help "Make sure, nil docstring-style is on Use `M-x customize-variable' to set it permanently"] ["Nil off" py-nil-docstring-style-off :help "Restores default value of `py-docstring-style' Use `M-x customize-variable' to set it permanently"]) ("Onetwo" :help "Toggle onetwo value of `py-docstring-style' In order to set permanently customize this variable" ["Toggle onetwo docstring style" toggle-py-onetwo-docstring-style :help "If onetwo docstring-style should be on or off Returns value of `py-docstring-style' switched to Use `M-x customize-variable' to set it permanently"] ["Onetwo on" py-onetwo-docstring-style-on :help "Make sure, onetwo docstring-style is on Use `M-x customize-variable' to set it permanently"] ["Onetwo off" py-onetwo-docstring-style-off :help " Restores default value of `py-docstring-style' Use `M-x customize-variable' to set it permanently"]) ("Pep 257" :help "Toggle pep-257 value of `py-docstring-style' In order to set permanently customize this variable" ["Toggle pep 257 docstring style" toggle-py-pep-257-docstring-style :help "If pep-257 docstring-style should be on or off Returns value of `py-docstring-style' switched to Use `M-x customize-variable' to set it permanently"] ["Pep 257 on" py-pep-257-docstring-style-on :help "Make sure, pep-257 docstring-style is on Use `M-x customize-variable' to set it permanently"] ["Pep 257 off" py-pep-257-docstring-style-off :help " Restores default value of `py-docstring-style' Use `M-x customize-variable' to set it permanently"]) ("Pep 257 nn" :help "Toggle pep-257-nn value of `py-docstring-style' In order to set permanently customize this variable" ["Toggle pep 257 nn docstring style" toggle-py-pep-257-nn-docstring-style :help "If pep-257-nn docstring-style should be on or off Returns value of `py-docstring-style' switched to Use `M-x customize-variable' to set it permanently"] ["Pep 257 nn on" py-pep-257-nn-docstring-style-on :help "Make sure, pep-257-nn docstring-style is on Use `M-x customize-variable' to set it permanently"] ["Pep 257 nn off" py-pep-257-nn-docstring-style-off :help " Restores default value of `py-docstring-style' Use `M-x customize-variable' to set it permanently"]) ("Symmetric" :help "Toggle symmetric value of `py-docstring-style' In order to set permanently customize this variable" ["Toggle symmetric docstring style" toggle-py-symmetric-docstring-style :help "If symmetric docstring-style should be on or off Returns value of `py-docstring-style' switched to Use `M-x customize-variable' to set it permanently"] ["Symmetric on" py-symmetric-docstring-style-on :help "Make sure, symmetric docstring-style is on Use `M-x customize-variable' to set it permanently"] ["Symmetric off" py-symmetric-docstring-style-off :help " Restores default value of `py-docstring-style' Use `M-x customize-variable' to set it permanently"]) ("Django" :help "Toggle django value of `py-docstring-style' In order to set permanently customize this variable" ["Toggle django docstring style" toggle-py-django-docstring-style :help "If django docstring-style should be on or off Returns value of `py-docstring-style' switched to Use `M-x customize-variable' to set it permanently"] ["Django on" py-django-docstring-style-on :help "Make sure, django docstring-style is on Use `M-x customize-variable' to set it permanently"] ["Django off" py-django-docstring-style-off :help "Restores default value of `py-docstring-style' Use `M-x customize-variable' to set it permanently"]) ) ["Fill-paragraph fill docstring " (setq py-paragraph-fill-docstring-p (not py-paragraph-fill-docstring-p)) :help "If `py-fill-paragraph', when inside a docstring, should fill the complete string. Default is nil. Convenient use of `M-q' inside docstrings See also `py-docstring-style' Use `M-x customize-variable' to set it permanently" :style toggle :selected py-paragraph-fill-docstring-p] ["Auto-fill mode" (setq py-set-fill-column-p (not py-set-fill-column-p)) :help "Set Python specific `fill-column' according to `py-docstring-fill-column' and `py-comment-fill-column' Use `M-x customize-variable' to set it permanently" :style toggle :selected py-set-fill-column-p] ["Use current dir when execute" (setq py-use-current-dir-when-execute-p (not py-use-current-dir-when-execute-p)) :help " `toggle-py-use-current-dir-when-execute-p' Use `M-x customize-variable' to set it permanently" :style toggle :selected py-use-current-dir-when-execute-p] ) ("Indent" ["Close at start column" (setq py-closing-list-dedents-bos (not py-closing-list-dedents-bos)) :help "When non-nil, indent list's closing delimiter like start-column. It will be lined up under the first character of the line that starts the multi-line construct, as in: my_list = \[ 1, 2, 3, 4, 5, 6, ] Use `M-x customize-variable' to set it permanently" :style toggle :selected py-closing-list-dedents-bos] ["Closing list keeps space" (setq py-closing-list-keeps-space (not py-closing-list-keeps-space)) :help "If non-nil, closing parenthesis dedents onto column of opening plus `py-closing-list-space', default is nil Use `M-x customize-variable' to set it permanently" :style toggle :selected py-closing-list-keeps-space] ["Closing list space" (setq py-closing-list-space (not py-closing-list-space)) :help "Number of chars, closing parenthesis outdent from opening, default is 1 Use `M-x customize-variable' to set it permanently" :style toggle :selected py-closing-list-space] ["Tab shifts region " (setq py-tab-shifts-region-p (not py-tab-shifts-region-p)) :help "If `t', TAB will indent/cycle the region, not just the current line. Default is nil See also `py-tab-indents-region-p'Use `M-x customize-variable' to set it permanently" :style toggle :selected py-tab-shifts-region-p] ["Lhs inbound indent" (setq py-lhs-inbound-indent (not py-lhs-inbound-indent)) :help "When line starts a multiline-assignment: How many colums indent should be more than opening bracket, brace or parenthesis. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-lhs-inbound-indent] ["Continuation offset" (setq py-continuation-offset (not py-continuation-offset)) :help "With numeric ARG different from 1 py-continuation-offset is set to that value; returns py-continuation-offset. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-continuation-offset] ["Electric colon" (setq py-electric-colon-active-p (not py-electric-colon-active-p)) :help " `py-electric-colon-active-p' `py-electric-colon' feature. Default is `nil'. See lp:837065 for discussions. " :style toggle :selected py-electric-colon-active-p] ["Electric colon at beginning of block only" (setq py-electric-colon-bobl-only (not py-electric-colon-bobl-only)) :help "When inserting a colon, do not indent lines unless at beginning of block. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-electric-colon-bobl-only] ["Electric yank active " (setq py-electric-yank-active-p (not py-electric-yank-active-p)) :help " When non-nil, `yank' will be followed by an `indent-according-to-mode'. Default is nilUse `M-x customize-variable' to set it permanently" :style toggle :selected py-electric-yank-active-p] ["Electric kill backward " (setq py-electric-kill-backward-p (not py-electric-kill-backward-p)) :help "Affects `py-electric-backspace'. Default is nil. If behind a delimited form of braces, brackets or parentheses, backspace will kill it's contents With when cursor after my_string\[0:1] --------------^ ==> my_string\[] ----------^ In result cursor is insided emptied delimited form.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-electric-kill-backward-p] ["Trailing whitespace smart delete " (setq py-trailing-whitespace-smart-delete-p (not py-trailing-whitespace-smart-delete-p)) :help "Default is nil. When t, python-mode calls (add-hook 'before-save-hook 'delete-trailing-whitespace nil 'local) Also commands may delete trailing whitespace by the way. When editing other peoples code, this may produce a larger diff than expected Use `M-x customize-variable' to set it permanently" :style toggle :selected py-trailing-whitespace-smart-delete-p] ["Newline delete trailing whitespace " (setq py-newline-delete-trailing-whitespace-p (not py-newline-delete-trailing-whitespace-p)) :help "Delete trailing whitespace maybe left by `py-newline-and-indent'. Default is `t'. See lp:1100892 Use `M-x customize-variable' to set it permanently" :style toggle :selected py-newline-delete-trailing-whitespace-p] ["Dedent keep relative column" (setq py-dedent-keep-relative-column (not py-dedent-keep-relative-column)) :help "If point should follow dedent or kind of electric move to end of line. Default is t - keep relative position. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-dedent-keep-relative-column] ["Indent paren spanned multilines " (setq py-indent-paren-spanned-multilines-p (not py-indent-paren-spanned-multilines-p)) :help "If non-nil, indents elements of list a value of `py-indent-offset' to first element: def foo(): if (foo && baz): bar() Default lines up with first element: def foo(): if (foo && baz): bar() Use `M-x customize-variable' to set it permanently" :style toggle :selected py-indent-paren-spanned-multilines-p] ["Indent honors multiline listing" (setq py-indent-honors-multiline-listing (not py-indent-honors-multiline-listing)) :help "If `t', indents to 1\+ column of opening delimiter. If `nil', indent adds one level to the beginning of statement. Default is `nil'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-indent-honors-multiline-listing] ["Indent comment " (setq py-indent-comments (not py-indent-comments)) :help "If comments should be indented like code. Default is `nil'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-indent-comments] ["Uncomment indents " (setq py-uncomment-indents-p (not py-uncomment-indents-p)) :help "When non-nil, after uncomment indent lines. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-uncomment-indents-p] ["Indent honors inline comment" (setq py-indent-honors-inline-comment (not py-indent-honors-inline-comment)) :help "If non-nil, indents to column of inlined comment start. Default is nil. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-indent-honors-inline-comment] ["Kill empty line" (setq py-kill-empty-line (not py-kill-empty-line)) :help "If t, py-indent-forward-line kills empty lines. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-kill-empty-line] ("Smart indentation" :help "Toggle py-smart-indentation' Use `M-x customize-variable' to set it permanently" ["Toggle py-smart-indentation" toggle-py-smart-indentation :help "Toggles py-smart-indentation Use `M-x customize-variable' to set it permanently"] ["py-smart-indentation on" py-smart-indentation-on :help "Switches py-smart-indentation on Use `M-x customize-variable' to set it permanently"] ["py-smart-indentation off" py-smart-indentation-off :help "Switches py-smart-indentation off Use `M-x customize-variable' to set it permanently"] ) ["Beep if tab change" (setq py-beep-if-tab-change (not py-beep-if-tab-change)) :help "Ring the bell if `tab-width' is changed. If a comment of the form # vi:set tabsize=: is found before the first code line when the file is entered, and the current value of (the general Emacs variable) `tab-width' does not equal , `tab-width' is set to , a message saying so is displayed in the echo area, and if `py-beep-if-tab-change' is non-nil the Emacs bell is also rung as a warning.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-beep-if-tab-change] ["Highlight indentation" highlight-indentation :help "Toggle highlight indentation. Use `M-x customize-variable' to set it permanently Make sure `highlight-indentation' is installed" ] ["Electric comment " (setq py-electric-comment-p (not py-electric-comment-p)) :help "If \"#\" should call `py-electric-comment'. Default is `nil'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-electric-comment-p] ["Electric comment add space " (setq py-electric-comment-add-space-p (not py-electric-comment-add-space-p)) :help "If py-electric-comment should add a space. Default is `nil'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-electric-comment-add-space-p] ["Empty line closes " (setq py-empty-line-closes-p (not py-empty-line-closes-p)) :help "When non-nil, dedent after empty line following block if True: print(\"Part of the if-statement\") print(\"Not part of the if-statement\") Default is nil If non-nil, a C-j from empty line dedents. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-empty-line-closes-p] ) ("Fontification" ["Mark decorators" (setq py-mark-decorators (not py-mark-decorators)) :help "If py-mark-def-or-class functions should mark decorators too. Default is `nil'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-mark-decorators] ["Fontify shell buffer " (setq py-fontify-shell-buffer-p (not py-fontify-shell-buffer-p)) :help "If code in Python shell should be highlighted as in script buffer. Default is nil. If `t', related vars like `comment-start' will be set too. Seems convenient when playing with stuff in IPython shell Might not be TRT when a lot of output arrives Use `M-x customize-variable' to set it permanently" :style toggle :selected py-fontify-shell-buffer-p] ["Use font lock doc face " (setq py-use-font-lock-doc-face-p (not py-use-font-lock-doc-face-p)) :help "If documention string inside of def or class get `font-lock-doc-face'. `font-lock-doc-face' inherits `font-lock-string-face'. Call M-x `customize-face' in order to have a visible effect. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-use-font-lock-doc-face-p] ) ("Directory" ["Guess install directory " (setq py-guess-py-install-directory-p (not py-guess-py-install-directory-p)) :help "If in cases, `py-install-directory' isn't set, `py-set-load-path'should guess it from `buffer-file-name'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-guess-py-install-directory-p] ["Use local default" (setq py-use-local-default (not py-use-local-default)) :help "If `t', py-shell will use `py-shell-local-path' instead of default Python. Making switch between several virtualenv's easier, `python-mode' should deliver an installer, so named-shells pointing to virtualenv's will be available. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-use-local-default] ["Use current dir when execute " (setq py-use-current-dir-when-execute-p (not py-use-current-dir-when-execute-p)) :help "When `t', current directory is used by Python-shell for output of `py-execute-buffer' and related commands. See also `py-execute-directory'Use `M-x customize-variable' to set it permanently" :style toggle :selected py-use-current-dir-when-execute-p] ["Keep shell dir when execute " (setq py-keep-shell-dir-when-execute-p (not py-keep-shell-dir-when-execute-p)) :help "Don't change Python shell's current working directory when sending code. See also `py-execute-directory'Use `M-x customize-variable' to set it permanently" :style toggle :selected py-keep-shell-dir-when-execute-p] ["Fileless buffer use default directory " (setq py-fileless-buffer-use-default-directory-p (not py-fileless-buffer-use-default-directory-p)) :help "When `py-use-current-dir-when-execute-p' is non-nil and no buffer-file exists, value of `default-directory' sets current working directory of Python output shellUse `M-x customize-variable' to set it permanently" :style toggle :selected py-fileless-buffer-use-default-directory-p] ) ("Display" ["Modeline display full path " (setq py-modeline-display-full-path-p (not py-modeline-display-full-path-p)) :help "If the full PATH/TO/PYTHON should be displayed in shell modeline. Default is nil. Note: when `py-shell-name' is specified with path, it's shown as an acronym in buffer-name already. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-modeline-display-full-path-p] ["Modeline acronym display home " (setq py-modeline-acronym-display-home-p (not py-modeline-acronym-display-home-p)) :help "If the modeline acronym should contain chars indicating the home-directory. Default is nil Use `M-x customize-variable' to set it permanently" :style toggle :selected py-modeline-acronym-display-home-p] ["Hide show hide docstrings" (setq py-hide-show-hide-docstrings (not py-hide-show-hide-docstrings)) :help "Controls if doc strings can be hidden by hide-showUse `M-x customize-variable' to set it permanently" :style toggle :selected py-hide-show-hide-docstrings] ["Hide comments when hiding all" (setq py-hide-comments-when-hiding-all (not py-hide-comments-when-hiding-all)) :help "Hide the comments too when you do an `hs-hide-all'.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-hide-comments-when-hiding-all] ["Max help buffer " (setq py-max-help-buffer-p (not py-max-help-buffer-p)) :help "If \"\*Python-Help\*\"-buffer should appear as the only visible. Default is nil. In help-buffer, \"q\" will close it. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-max-help-buffer-p] ) ("Completion" ["Ipython complete use separate shell " (setq ipython-complete-use-separate-shell-p (not ipython-complete-use-separate-shell-p)) :help "If `ipython-complete' should use a separate shell. Thus prompt-counter is not incremented by completion. Use `M-x customize-variable' to set it permanently" :style toggle :selected ipython-complete-use-separate-shell-p] ["Set complete keymap " (setq py-set-complete-keymap-p (not py-set-complete-keymap-p)) :help "If `py-complete-initialize', which sets up enviroment for Pymacs based py-complete, should load it's keys into `python-mode-map' Default is nil. See also resp. edit `py-complete-set-keymap' Use `M-x customize-variable' to set it permanently" :style toggle :selected py-set-complete-keymap-p] ["No completion calls dabbrev expand " (setq py-no-completion-calls-dabbrev-expand-p (not py-no-completion-calls-dabbrev-expand-p)) :help "If completion function should call dabbrev-expand when no completion found. Default is `t' See also `py-indent-no-completion-p'Use `M-x customize-variable' to set it permanently" :style toggle :selected py-no-completion-calls-dabbrev-expand-p] ["Indent no completion " (setq py-indent-no-completion-p (not py-indent-no-completion-p)) :help "If completion function should indent when no completion found. Default is `t' See also `py-no-completion-calls-dabbrev-expand-p'Use `M-x customize-variable' to set it permanently" :style toggle :selected py-indent-no-completion-p] ["Company pycomplete " (setq py-company-pycomplete-p (not py-company-pycomplete-p)) :help "Load company-pycomplete stuff. Default is nilUse `M-x customize-variable' to set it permanently" :style toggle :selected py-company-pycomplete-p] ) ("Debug" ["Pdbtrack do tracking " (setq py-pdbtrack-do-tracking-p (not py-pdbtrack-do-tracking-p)) :help "Controls whether the pdbtrack feature is enabled or not. When non-nil, pdbtrack is enabled in all comint-based buffers, e.g. shell buffers and the \*Python\* buffer. When using pdb to debug a Python program, pdbtrack notices the pdb prompt and displays the source file and line that the program is stopped at, much the same way as gud-mode does for debugging C programs with gdb.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-pdbtrack-do-tracking-p] ["Jump on exception" (setq py-jump-on-exception (not py-jump-on-exception)) :help "Jump to innermost exception frame in Python output buffer. When this variable is non-nil and an exception occurs when running Python code synchronously in a subprocess, jump immediately to the source code of the innermost traceback frame. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-jump-on-exception] ["Highlight error in source " (setq py-highlight-error-source-p (not py-highlight-error-source-p )) :help "Use `M-x customize-variable' to set it permanently" :style toggle :selected py-highlight-error-source-p] ["Pylint offer current " (setq py-pylint-offer-current-p (not py-pylint-offer-current-p)) :help "If current buffers file should be offered for check. Default is non-nil. If nil, `py-pylint-run' offers filename from history Use `M-x customize-variable' to set it permanently" :style toggle :selected py-pylint-offer-current-p] ) ["Switch buffers on execute" (setq py-switch-buffers-on-execute-p (not py-switch-buffers-on-execute-p)) :help "When non-nil switch to the Python output buffer. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-switch-buffers-on-execute-p] ["Split windows on execute" (setq py-split-windows-on-execute-p (not py-split-windows-on-execute-p)) :help "When non-nil split windows. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-split-windows-on-execute-p] ("Other" ["Defun use top level " (setq py-defun-use-top-level-p (not py-defun-use-top-level-p)) :help "When non-nil, keys C-M-a, C-M-e address top-level form. Beginning- end-of-defun forms use commands `py-beginning-of-top-level', `py-end-of-top-level' mark-defun marks top-level form at point etc. " :style toggle :selected py-defun-use-top-level-p] ["Python mode v5 behavior" (setq python-mode-v5-behavior-p (not python-mode-v5-behavior-p)) :help "Execute region through `shell-command-on-region' as v5 did it - lp:990079. This might fail with certain chars - see UnicodeEncodeError lp:550661 Use `M-x customize-variable' to set it permanently" :style toggle :selected python-mode-v5-behavior-p] ["Load pymacs " (setq py-load-pymacs-p (not py-load-pymacs-p)) :help "If Pymacs related stuff should be loaded. Default is nil. Pymacs has been written by François Pinard and many others. See original source: http://pymacs.progiciels-bpi.caUse `M-x customize-variable' to set it permanently" :style toggle :selected py-load-pymacs-p] ["Verbose " (setq py-verbose-p (not py-verbose-p)) :help "If functions should report results. Default is nil. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-verbose-p] ["Edit only " (setq py-edit-only-p (not py-edit-only-p)) :help "When `t' `python-mode' will not take resort nor check for installed Python executables. Default is nil. See bug report at launchpad, lp:944093. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-edit-only-p] ["Imenu create index " (setq py-imenu-create-index-p (not py-imenu-create-index-p)) :help "Non-nil means Python mode creates and displays an index menu of functions and global variables. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-imenu-create-index-p] ["Imenu show method args " (setq py-imenu-show-method-args-p (not py-imenu-show-method-args-p)) :help "Controls echoing of arguments of functions & methods in the Imenu buffer. When non-nil, arguments are printed.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-imenu-show-method-args-p] ["Match paren mode" (setq py-match-paren-mode (not py-match-paren-mode)) :help "Non-nil means, cursor will jump to beginning or end of a block. This vice versa, to beginning first. Sets `py-match-paren-key' in python-mode-map. Customize `py-match-paren-key' which key to use. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-match-paren-mode] ["Close provides newline" (setq py-close-provides-newline (not py-close-provides-newline)) :help "If a newline is inserted, when line after block isn't empty. Default is non-nil. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-close-provides-newline] ["Block comment prefix " (setq py-block-comment-prefix-p (not py-block-comment-prefix-p)) :help "If py-comment inserts py-block-comment-prefix. Default is tUse `M-x customize-variable' to set it permanently" :style toggle :selected py-block-comment-prefix-p] ["Empty comment line separates paragraph " (setq empty-comment-line-separates-paragraph-p (not empty-comment-line-separates-paragraph-p)) :help "Consider paragraph start/end lines with nothing inside but comment sign. Default is non-nilUse `M-x customize-variable' to set it permanently" :style toggle :selected empty-comment-line-separates-paragraph-p] ["Org cycle " (setq py-org-cycle-p (not py-org-cycle-p)) :help "When non-nil, command `org-cycle' is available at shift-TAB, Default is nil. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-org-cycle-p] ("Underscore word syntax" :help "Toggle `py-underscore-word-syntax-p'" ["Toggle underscore word syntax" toggle-py-underscore-word-syntax-p :help " `toggle-py-underscore-word-syntax-p' If `py-underscore-word-syntax-p' should be on or off. Returns value of `py-underscore-word-syntax-p' switched to. . Use `M-x customize-variable' to set it permanently"] ["Underscore word syntax on" py-underscore-word-syntax-p-on :help " `py-underscore-word-syntax-p-on' Make sure, py-underscore-word-syntax-p' is on. Returns value of `py-underscore-word-syntax-p'. . Use `M-x customize-variable' to set it permanently"] ["Underscore word syntax off" py-underscore-word-syntax-p-off :help " `py-underscore-word-syntax-p-off' Make sure, `py-underscore-word-syntax-p' is off. Returns value of `py-underscore-word-syntax-p'. . Use `M-x customize-variable' to set it permanently"] ) ["Set pager cat" (setq py-set-pager-cat-p (not py-set-pager-cat-p)) :help "If the shell environment variable \$PAGER should set to `cat'. If `t', use `C-c C-r' to jump to beginning of output. Then scroll normally. Avoids lp:783828, \"Terminal not fully functional\", for help('COMMAND') in python-shell When non-nil, imports module `os' Use `M-x customize-variable' to set it permanently" :style toggle :selected py-set-pager-cat-p] ["Current defun show" (setq py-current-defun-show (not py-current-defun-show)) :help "If `py-current-defun' should jump to the definition, highlight it while waiting PY-WHICH-FUNC-DELAY seconds, before returning to previous position. Default is `t'.Use `M-x customize-variable' to set it permanently" :style toggle :selected py-current-defun-show] ("Autopair mode" :help "Toggle `autopair-mode'" ["Toggle autopair mode" toggle-py-autopair-mode :help " `toggle-autopair-mode' If `autopair-mode' should be on or off. Returns value of `autopair-mode ' switched to. "] ["Autopair mode on" py-autopair-mode-on :help " `autopair-mode on' Make sure, `autopair-mode' is on. Returns value of `autopair-mode'. "] ["Autopair mode off" py-autopair-mode-off :help " `autopair-mode' off Make sure, `autopair-mode' is off. Returns value of `autopair-mode'. "] ) ["Switch index-function" py-switch-imenu-index-function :help "`py-switch-imenu-index-function' Switch between `py-imenu-create-index' from 5.1 series and `py-imenu-create-index-new'."] ;; py-smart-operator-mode-p forms ("Smart operator mode" :help "Toggle `smart-operator-mode'" ["Toggle smart operator mode" toggle-py-smart-operator-mode-p :help " `toggle-smart-operator-mode' If `smart-operator-mode' should be on or off. Returns value of `smart-operator-mode ' switched to. "] ["Smart operator mode on" py-smart-operator-mode-p-on :help " `smart-operator-mode -on' Make sure, `smart-operator-mode' is on. Returns value of `smart-operator-mode'. "] ["Smart operator mode off" py-smart-operator-mode-p-off :help " `smart-operator-mode' off Make sure, `smart-operator-mode' is off. Returns value of `smart-operator-mode'. "] ) ) ) ) ("More... " ("Edit commands " ("Kill " ["Kill statement" py-kill-statement :help "`py-kill-statement' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Kill top level" py-kill-top-level :help " `py-kill-top-level' Delete top-level form at point. Stores data in kill ring. Might be yanked back using `C-y'. "] ["Kill clause" py-kill-clause :help "`py-kill-clause' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Kill block" py-kill-block :help "`py-kill-block' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Kill minor block" py-kill-minor-block :help " `py-kill-minor-block' Delete minor-block at point. Stores data in kill ring. Might be yanked back using `C-y'. "] ["Kill def-or-class" py-kill-def-or-class :help "`py-kill-def-or-class' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Kill expression" py-kill-expression :help "`py-kill-expression' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Kill partial-expression" py-kill-partial-expression :help "`py-kill-partial-expression' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Kill class" py-kill-class :help "`py-kill-class' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Kill def" py-kill-def :help "`py-kill-def' Delete innermost compound statement at point, store deleted string in kill-ring"]) ("Delete" ["Delete statement " py-delete-statement :help "`py-delete-statement' Delete STATEMENT at point, don't store in kill-ring. "] ["Delete top-level " py-delete-top-level :help "`py-delete-top-level' Delete TOP-LEVEL at point, don't store in kill-ring. "] ["Delete block " py-delete-block :help "`py-delete-block' Delete BLOCK at point, don't store in kill-ring. "] ["Delete block-or-clause " py-delete-block-or-clause :help "`py-delete-block-or-clause' Delete BLOCK-OR-CLAUSE at point, don't store in kill-ring. "] ["Delete def " py-delete-def :help "`py-delete-def' Delete DEF at point, don't store in kill-ring. "] ["Delete class " py-delete-class :help "`py-delete-class' Delete CLASS at point, don't store in kill-ring. "] ["Delete def-or-class " py-delete-def-or-class :help "`py-delete-def-or-class' Delete DEF-OR-CLASS at point, don't store in kill-ring. "] ["Delete expression " py-delete-expression :help "`py-delete-expression' Delete EXPRESSION at point, don't store in kill-ring. "] ["Delete partial-expression " py-delete-partial-expression :help "`py-delete-partial-expression' Delete PARTIAL-EXPRESSION at point, don't store in kill-ring. "] ["Delete minor-block " py-delete-minor-block :help "`py-delete-minor-block' Delete MINOR-BLOCK at point, don't store in kill-ring. A minor block is started by a `for', `if', `try' or `with'. "] ) "-" ("Shift right " ["Shift block right" py-shift-block-right :help "`py-shift-block-right' Shift block right. "] ["Shift clause right" py-shift-clause-right :help "`py-shift-clause-right' Shift clause right. "] ["Shift statement right" py-shift-statement-right :help "`py-shift-statement-right' Shift statement right. "] ["Shift minor block right" py-shift-minor-block-right :help " `py-shift-minor-block-right' Indent minor-block by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. "] ["Shift def-or-class right" py-shift-def-or-class-right :help "`py-shift-def-or-class-right' Shift def-or-class right. "] ["Shift class right" py-shift-class-right :help "`py-shift-class-right' Shift class right. "] ["Shift def right" py-shift-def-right :help "`py-shift-def-right' Shift def right. "] ["Shift block-or-clause right" py-shift-block-or-clause-right :help "`py-shift-block-or-clause-right' Shift block-or-clause right. "] ["Shift region left" py-shift-region-left :help " `py-shift-region-left' Dedent region according to `py-indent-offset' by COUNT times. If no region is active, current line is dedented. Returns indentation reached. "] ["Shift region right" py-shift-region-right :help " `py-shift-region-right' Indent region according to `py-indent-offset' by COUNT times. If no region is active, current line is indented. Returns indentation reached. "] ) ("Shift left " ["Shift block left" py-shift-block-left :help "`py-shift-block-left' Shift block left. "] ["Shift clause left" py-shift-clause-left :help "`py-shift-clause-left' Shift clause left. "] ["Shift statement left" py-shift-statement-left :help "`py-shift-statement-left' Shift statement left. "] ["Shift minor block left" py-shift-minor-block-left :help " `py-shift-minor-block-left' Dedent minor-block by COUNT spaces. COUNT defaults to `py-indent-offset', use \[universal-argument] to specify a different value. Returns outmost indentation reached. "] ["Shift def-or-class left" py-shift-def-or-class-left :help "`py-shift-def-or-class-left' Shift def-or-class left. "] ["Shift class left" py-shift-class-left :help "`py-shift-class-left' Shift class left. "] ["Shift def left" py-shift-def-left :help "`py-shift-def-left' Shift def left. "] ["Shift block-or-clause left" py-shift-block-or-clause-left :help "`py-shift-block-or-clause-left' Shift block-or-clause left. "] ) ("More" :help "extended edit commands'" ["Empty out list backward" py-empty-out-list-backward :help " `py-empty-out-list-backward' Deletes all elements from list before point. "] ["Revert boolean assignent" py-boolswitch :help " `py-boolswitch' Edit the assigment of a boolean variable, rever them. I.e. switch it from \"True\" to \"False\" and vice versa "] ["Remove overlays at point" py-remove-overlays-at-point :help " `py-remove-overlays-at-point' Remove overlays as set when `py-highlight-error-source-p' is non-nil. "] ) ) "-" ("Forms " ("Comment" ["Beginning of comment" py-beginning-of-comment :help " `py-beginning-of-comment' Go to beginning of comment at point. "] ["End of comment" py-end-of-comment :help " `py-end-of-comment' Go to end of comment at point. "] ) ("Block" ["Beginning of block" py-beginning-of-block :help "`py-beginning-of-block' Go to start of innermost compound statement at point"] ["End of block" py-end-of-block :help "`py-end-of-block' Go to end of innermost compound statement at point"] ["Down block" py-down-block :help "`py-down-block' Go to the beginning of next block below in buffer. Returns indentation if block found, nil otherwise. "] ["Up block" py-up-block :help "`py-up-block' Go upwards to the beginning of next block below in buffer. Returns indentation if block found, nil otherwise. "] ["Copy block" py-copy-block :help "`py-copy-block' Copy innermost compound statement at point"] ["Kill block" py-kill-block :help "`py-kill-block' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Delete block" py-delete-block :help "`py-delete-block' Delete innermost compound statement at point, don't store deleted string in kill-ring"] ["Shift block right" py-shift-block-right :help "`py-shift-block-right' Shift block right. "] ["Shift block left" py-shift-block-left :help "`py-shift-block-left' Shift block left. "] ["Comment block" py-comment-block :help " `py-comment-block' Comments block at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ) ("Top-level form" ["Beginning of top-level form" py-beginning-of-top-level :help "`py-beginning-of-top-level' Go to start of top-level form form at point"] ["End of top-level form" py-end-of-top-level :help "`py-end-of-top-level' Go to end of top-level form at point"] ["Down top-level form" py-down-top-level :help "`py-down-top-level' Go to the beginning of top-level form below in buffer. "] ["Up top-level form" py-up-top-level :help "`py-up-top-level' Go upwards to the beginning of next top-level form in buffer. "] ["Copy top-level form" py-copy-top-level :help "`py-copy-top-level' Copy innermost top-level form at point"] ["Kill top-level form" py-kill-top-level :help "`py-kill-top-level' Delete top-level form at point, store deleted string in kill-ring"] ["Delete top-level form" py-delete-top-level :help "`py-delete-top-level' Delete top-level form at point, don't store deleted string in kill-ring"] ["Comment top-level form" py-comment-top-level :help " `py-comment-top-level' Comments top-level form at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ) ("Minor-block" ["Beginning of minor-block" py-beginning-of-minor-block :help "`py-beginning-of-minor-block' Go to start of innermost minor-block at point"] ["End of minor-block" py-end-of-minor-block :help "`py-end-of-minor-block' Go to end of innermost minor-block at point"] ["Down minor-block" py-down-minor-block :help "`py-down-minor-block' Go to the beginning of next minor-block below in buffer. Returns indentation if minor-block found, nil otherwise. "] ["Up minor-block" py-up-minor-block :help "`py-up-minor-block' Go upwards to the beginning of next minor-block below in buffer. Returns indentation if minor-block found, nil otherwise. "] ["Copy minor-block" py-copy-minor-block :help "`py-copy-minor-block' Copy innermost minor-block at point"] ["Kill minor-block" py-kill-minor-block :help "`py-kill-minor-block' Delete innermost minor-block at point, store deleted string in kill-ring"] ["Delete minor-block" py-delete-minor-block :help "`py-delete-minor-block' Delete innermost minor-block at point, don't store deleted string in kill-ring"] ["Shift minor-block right" py-shift-minor-block-right :help "`py-shift-minor-block-right' Shift minor-block right. "] ["Shift minor-block left" py-shift-minor-block-left :help "`py-shift-minor-block-left' Shift minor-block left. "] ["Comment minor-block" py-comment-minor-block :help " `py-comment-minor-block' Comments minor-block at point. Uses double hash (`#') comment starter when `py-minor-block-comment-prefix-p' is `t', the default. "] ) ("Def-or-class " ["Beginning of Def-or-Class" py-beginning-of-def-or-class :help "`py-beginning-of-def-or-class' Go to start of innermost definition at point"] ["End of Def-or-Class" py-end-of-def-or-class :help "`py-end-of-def-or-class' Go to end of innermost function definition at point"] ["Down def-or-class" py-down-def-or-class :help "`py-down-def-or-class' Go to the beginning of next def-or-class below in buffer. Returns indentation if def-or-class found, nil otherwise. "] ["Up def-or-class" py-up-def-or-class :help "`py-up-def-or-class' Go upwards to the beginning of next def-or-class below in buffer. Returns indentation if def-or-class found, nil otherwise. "] ["Copy Def-or-Class" py-copy-def-or-class :help "`py-copy-def-or-class' Copy innermost definition at point"] ["Kill def-or-class" py-kill-def-or-class :help "`py-kill-def-or-class' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Delete def-or-class" py-delete-def-or-class :help "`py-delete-def-or-class' Delete def-or-class at point, don't store deleted string in kill-ring"] ["Shift def-or-class right" py-shift-def-or-class-right :help "`py-shift-def-or-class-right' Shift def-or-class right. "] ["Shift def-or-class left" py-shift-def-or-class-left :help "`py-shift-def-or-class-left' Shift def-or-class left. "] ["Comment def or class" py-comment-def-or-class :help " `py-comment-def-or-class' Comments def-or-class at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "]) ("Clause " ["Beginning of clause" py-beginning-of-clause :help "`py-beginning-of-clause' Go to start of innermost compound statement at point"] ["End of clause" py-end-of-clause :help "`py-end-of-clause' Go to end of innermost compound statement at point"] ["Down clause" py-down-clause :help "`py-down-clause' Go to the beginning of next clause below in buffer. Returns indentation if clause found, nil otherwise. "] ["Up clause" py-up-clause :help "`py-up-clause' Go upwards to the beginning of next clause below in buffer. Returns indentation if clause found, nil otherwise. "] ["Copy clause" py-copy-clause :help "`py-copy-clause' Copy innermost compound statement at point"] ["Kill clause" py-kill-clause :help "`py-kill-clause' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Delete clause" py-delete-clause :help "`py-delete-clause' Delete innermost compound statement at point, don't store deleted string in kill-ring"] ["Shift clause right" py-shift-clause-right :help "`py-shift-clause-right' Shift clause right. "] ["Shift clause left" py-shift-clause-left :help "`py-shift-clause-left' Shift clause left. "] ["Comment clause" py-comment-clause :help " `py-comment-clause' Comments clause at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "]) ("Statement " ["Beginning of Statement" py-beginning-of-statement :help "`py-beginning-of-statement' Go to start of innermost definition at point"] ["End of Statement" py-end-of-statement :help "`py-end-of-statement' Go to end of innermost function definition at point"] ["Copy statement" py-copy-statement :help "`py-copy-statement' Copy innermost definition at point"] ["Kill statement" py-kill-statement :help "`py-kill-statement' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Delete statement" py-delete-statement :help "`py-delete-statement' Delete statement at point, don't store deleted string in kill-ring"] ["Shift statement right" py-shift-statement-right :help "`py-shift-statement-right' Shift statement right. "] ["Shift statement left" py-shift-statement-left :help "`py-shift-statement-left' Shift statement left. "] ["Comment statement" py-comment-statement :help " `py-comment-statement' Comments statement at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "]) ("Expression" ["Beginning of expression" py-beginning-of-expression :help "Go to the beginning of a compound python expression. A a compound python expression might be concatenated by \".\" operator, thus composed by minor python expressions. Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference Operators however are left aside resp. limit py-expression designed for edit-purposes."] ["End of expression" py-end-of-expression :help "`py-end-of-expression' Go to the end of a compound python expression. A a compound python expression might be concatenated by \".\" operator, thus composed by minor python expressions. Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference Operators however are left aside resp. limit py-expression designed for edit-purposes."] ["Beginning of expression" py-beginning-of-expression :help "`py-beginning-of-expression' Go to start of a Python expression"] ["End of expression" py-end-of-expression :help "`py-end-of-expression' Go to end of a Python expression"] ["Copy expression" py-copy-expression :help "`py-copy-expression' Copy expression at point"] ["Kill expression" py-kill-expression :help "`py-kill-expression' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Delete expression" py-delete-expression :help "`py-delete-expression' Delete expression at point, don't store deleted string in kill-ring"]) ("Partial expression" ["Beginning of minor expression" py-beginning-of-partial-expression :help "`py-beginning-of-partial-expression' Go to start of an minor expression Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference Operators however are left aside resp. limit py-expression designed for edit-purposes."] ["End of partial-expression" py-end-of-partial-expression :help "`py-end-of-partial-expression' Go to end of an partial-expression Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference Operators however are left aside resp. limit py-expression designed for edit-purposes."] ["Copy partial expression" py-copy-partial-expression :help "`py-copy-partial-expression' \".\" operators delimit a partial-expression expression on it's level"] ["Kill partial-expression" py-kill-partial-expression :help "`py-kill-partial-expression' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Delete partial-expression" py-delete-partial-expression :help "`py-delete-partial-expression' Delete partial-expression at point, don't store deleted string in kill-ring"]) ("Class " ["Beginning of Class" py-beginning-of-class :help "`py-beginning-of-class' Go to start of innermost definition at point"] ["End of Class" py-end-of-class :help "`py-end-of-class' Go to end of innermost function definition at point"] ["Down class" py-down-class :help "`py-down-class' Go to the beginning of next class below in buffer. Returns indentation if class found, nil otherwise. "] ["Up class" py-up-class :help "`py-up-class' Go upwards to the beginning of next class below in buffer. Returns indentation if class found, nil otherwise. "] ["Copy class" py-copy-class :help "`py-copy-class' Copy innermost definition at point"] ["Kill class" py-kill-class :help "`py-kill-class' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Delete class" py-delete-class :help "`py-delete-class' Delete class at point, don't store deleted string in kill-ring"] ["Shift class right" py-shift-class-right :help "`py-shift-class-right' Shift class right. "] ["Shift class left" py-shift-class-left :help "`py-shift-class-left' Shift class left. "] ["Comment class" py-comment-class :help " `py-comment-class' Comments class at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "]) ("Def " ["Beginning of Def" py-beginning-of-def :help "`py-beginning-of-def' Go to start of innermost definition at point"] ["End of Def" py-end-of-def :help "`py-end-of-def' Go to end of innermost function definition at point"] ["Down def" py-down-def :help "`py-down-def' Go to the beginning of next def below in buffer. Returns indentation if def found, nil otherwise. "] ["Up def" py-up-def :help "`py-up-def' Go upwards to the beginning of next def below in buffer. Returns indentation if def found, nil otherwise. "] ["Copy def" py-copy-def :help "`py-copy-def' Copy innermost definition at point"] ["Kill def" py-kill-def :help "`py-kill-def' Delete innermost compound statement at point, store deleted string in kill-ring"] ["Delete def" py-delete-def :help "`py-delete-def' Delete def at point, don't store deleted string in kill-ring"] ["Shift def right" py-shift-def-right :help "`py-shift-def-right' Shift def right. "] ["Shift def left" py-shift-def-left :help "`py-shift-def-left' Shift def left. "] ["Comment def" py-comment-def :help " `py-comment-def' Comments def at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default. "] ) "-" ("Block bol " ["Beginning of block bol" py-beginning-of-block-bol :help "`py-beginning-of-block-bol' Go to beginning of line at beginning of block. Returns position reached, if successful, nil otherwise. "] ["End of block bol" py-end-of-block-bol :help "`py-end-of-block-bol' Go to beginning of line following end of block. Returns position reached, if successful, nil otherwise. "] ["Up block bol" py-up-block-bol :help "`py-up-block-bol' Go to next block upwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Down block bol" py-down-block-bol :help "`py-down-block-bol' Go to next block downwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Mark block bol" py-mark-block-bol :help "`py-mark-block-bol' Mark block at point. "] ["Copy block bol" py-copy-block-bol :help "`py-copy-block-bol' Copy block at point. "] ["Kill block bol" py-kill-block-bol :help "`py-kill-block-bol' Kill block at point. "] ["Delete block bol" py-delete-block-bol :help "`py-delete-block-bol' Delete block at point. "] ["Shift block right" py-shift-block-right :help "`py-shift-block-right' Shift block right. "] ["Shift block left" py-shift-block-left :help "`py-shift-block-left' Shift block left. "] ) ("Minor-block bol " ["Beginning of minor-block bol" py-beginning-of-minor-block-bol :help "`py-beginning-of-minor-block-bol' Go to beginning of line at beginning of minor-block. Returns position reached, if successful, nil otherwise. A minor block is started by a `for', `if', `try' or `with'. "] ["End of minor-block bol" py-end-of-minor-block-bol :help "`py-end-of-minor-block-bol' Go to beginning of line following end of minor-block. Returns position reached, if successful, nil otherwise. A minor block is started by a `for', `if', `try' or `with'. "] ["Up minor-block bol" py-up-minor-block-bol :help "`py-up-minor-block-bol' Go to next minor-block upwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. A minor block is started by a `for', `if', `try' or `with'. "] ["Down minor-block bol" py-down-minor-block-bol :help "`py-down-minor-block-bol' Go to next minor-block downwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. A minor block is started by a `for', `if', `try' or `with'. "] ["Mark minor-block bol" py-mark-minor-block-bol :help "`py-mark-minor-block-bol' Mark minor-block at point. A minor block is started by a `for', `if', `try' or `with'. "] ["Copy minor-block bol" py-copy-minor-block-bol :help "`py-copy-minor-block-bol' Copy minor-block at point. A minor block is started by a `for', `if', `try' or `with'. "] ["Kill minor-block bol" py-kill-minor-block-bol :help "`py-kill-minor-block-bol' Kill minor-block at point. A minor block is started by a `for', `if', `try' or `with'. "] ["Delete minor-block bol" py-delete-minor-block-bol :help "`py-delete-minor-block-bol' Delete minor-block at point. A minor block is started by a `for', `if', `try' or `with'. "] ["Shift minor-block right" py-shift-minor-block-right :help "`py-shift-minor-block-right' Shift minor-block right. A minor block is started by a `for', `if', `try' or `with'. "] ["Shift minor-block left" py-shift-minor-block-left :help "`py-shift-minor-block-left' Shift minor-block left. A minor block is started by a `for', `if', `try' or `with'. "] ) ("Clause bol " ["Beginning of clause bol" py-beginning-of-clause-bol :help "`py-beginning-of-clause-bol' Go to beginning of line at beginning of clause. Returns position reached, if successful, nil otherwise. "] ["End of clause bol" py-end-of-clause-bol :help "`py-end-of-clause-bol' Go to beginning of line following end of clause. Returns position reached, if successful, nil otherwise. "] ["Up clause bol" py-up-clause-bol :help "`py-up-clause-bol' Go to next clause upwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Down clause bol" py-down-clause-bol :help "`py-down-clause-bol' Go to next clause downwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Mark clause bol" py-mark-clause-bol :help "`py-mark-clause-bol' Mark clause at point. "] ["Copy clause bol" py-copy-clause-bol :help "`py-copy-clause-bol' Copy clause at point. "] ["Kill clause bol" py-kill-clause-bol :help "`py-kill-clause-bol' Kill clause at point. "] ["Delete clause bol" py-delete-clause-bol :help "`py-delete-clause-bol' Delete clause at point. "] ["Shift clause right" py-shift-clause-right :help "`py-shift-clause-right' Shift clause right. "] ["Shift clause left" py-shift-clause-left :help "`py-shift-clause-left' Shift clause left. "]) ("Block-Or-Clause bol " ["Beginning of block-or-clause bol" py-beginning-of-block-or-clause-bol :help "`py-beginning-of-block-or-clause-bol' Go to beginning of line at beginning of block-or-clause. Returns position reached, if successful, nil otherwise. "] ["End of block-or-clause bol" py-end-of-block-or-clause-bol :help "`py-end-of-block-or-clause-bol' Go to beginning of line following end of block-or-clause. Returns position reached, if successful, nil otherwise. "] ["Up block-or-clause bol" py-up-block-or-clause-bol :help "`py-up-block-or-clause-bol' Go to next block-or-clause upwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Down block-or-clause bol" py-down-block-or-clause-bol :help "`py-down-block-or-clause-bol' Go to next block-or-clause downwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Mark block-or-clause bol" py-mark-block-or-clause-bol :help "`py-mark-block-or-clause-bol' Mark block-or-clause at point. "] ["Copy block-or-clause bol" py-copy-block-or-clause-bol :help "`py-copy-block-or-clause-bol' Copy block-or-clause at point. "] ["Kill block-or-clause bol" py-kill-block-or-clause-bol :help "`py-kill-block-or-clause-bol' Kill block-or-clause at point. "] ["Delete block-or-clause bol" py-delete-block-or-clause-bol :help "`py-delete-block-or-clause-bol' Delete block-or-clause at point. "] ["Shift block-or-clause right" py-shift-block-or-clause-right :help "`py-shift-block-or-clause-right' Shift block-or-clause right. "] ["Shift block-or-clause left" py-shift-block-or-clause-left :help "`py-shift-block-or-clause-left' Shift block-or-clause left. "]) ("Def bol " ["Beginning of def bol" py-beginning-of-def-bol :help "`py-beginning-of-def-bol' Go to beginning of line at beginning of def. Returns position reached, if successful, nil otherwise. "] ["End of def bol" py-end-of-def-bol :help "`py-end-of-def-bol' Go to beginning of line following end of def. Returns position reached, if successful, nil otherwise. "] ["Up def bol" py-up-def-bol :help "`py-up-def-bol' Go to next def upwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Down def bol" py-down-def-bol :help "`py-down-def-bol' Go to next def downwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Mark def bol" py-mark-def-bol :help "`py-mark-def-bol' Mark def at point. "] ["Copy def bol" py-copy-def-bol :help "`py-copy-def-bol' Copy def at point. "] ["Kill def bol" py-kill-def-bol :help "`py-kill-def-bol' Kill def at point. "] ["Delete def bol" py-delete-def-bol :help "`py-delete-def-bol' Delete def at point. "] ["Shift def right" py-shift-def-right :help "`py-shift-def-right' Shift def right. "] ["Shift def left" py-shift-def-left :help "`py-shift-def-left' Shift def left. "]) ("Class bol " ["Beginning of class bol" py-beginning-of-class-bol :help "`py-beginning-of-class-bol' Go to beginning of line at beginning of class. Returns position reached, if successful, nil otherwise. "] ["End of class bol" py-end-of-class-bol :help "`py-end-of-class-bol' Go to beginning of line following end of class. Returns position reached, if successful, nil otherwise. "] ["Up class bol" py-up-class-bol :help "`py-up-class-bol' Go to next class upwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Down class bol" py-down-class-bol :help "`py-down-class-bol' Go to next class downwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Mark class bol" py-mark-class-bol :help "`py-mark-class-bol' Mark class at point. "] ["Copy class bol" py-copy-class-bol :help "`py-copy-class-bol' Copy class at point. "] ["Kill class bol" py-kill-class-bol :help "`py-kill-class-bol' Kill class at point. "] ["Delete class bol" py-delete-class-bol :help "`py-delete-class-bol' Delete class at point. "] ["Shift class right" py-shift-class-right :help "`py-shift-class-right' Shift class right. "] ["Shift class left" py-shift-class-left :help "`py-shift-class-left' Shift class left. "]) ("Def-Or-Class bol " ["Beginning of def-or-class bol" py-beginning-of-def-or-class-bol :help "`py-beginning-of-def-or-class-bol' Go to beginning of line at beginning of def-or-class. Returns position reached, if successful, nil otherwise. "] ["End of def-or-class bol" py-end-of-def-or-class-bol :help "`py-end-of-def-or-class-bol' Go to beginning of line following end of def-or-class. Returns position reached, if successful, nil otherwise. "] ["Up def-or-class bol" py-up-def-or-class-bol :help "`py-up-def-or-class-bol' Go to next def-or-class upwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Down def-or-class bol" py-down-def-or-class-bol :help "`py-down-def-or-class-bol' Go to next def-or-class downwards in buffer if any. Go to beginning of line. Returns position reached, if successful, nil otherwise. "] ["Mark def-or-class bol" py-mark-def-or-class-bol :help "`py-mark-def-or-class-bol' Mark def-or-class at point. "] ["Copy def-or-class bol" py-copy-def-or-class-bol :help "`py-copy-def-or-class-bol' Copy def-or-class at point. "] ["Kill def-or-class bol" py-kill-def-or-class-bol :help "`py-kill-def-or-class-bol' Kill def-or-class at point. "] ["Delete def-or-class bol" py-delete-def-or-class-bol :help "`py-delete-def-or-class-bol' Delete def-or-class at point. "] ["Shift def-or-class right" py-shift-def-or-class-right :help "`py-shift-def-or-class-right' Shift def-or-class right. "] ["Shift def-or-class left" py-shift-def-or-class-left :help "`py-shift-def-or-class-left' Shift def-or-class left. "] ) ("Statement bol " ["Beginning of statement bol" py-beginning-of-statement-bol :help "`py-beginning-of-statement-bol' Go to beginning of line at beginning of statement. Returns position reached, if successful, nil otherwise. "] ["End of statement bol" py-end-of-statement-bol :help "`py-end-of-statement-bol' Go to beginning of line following end of statement. Returns position reached, if successful, nil otherwise. "] ["Mark statement bol" py-mark-statement-bol :help "`py-mark-statement-bol' Mark statement at point. "] ["Copy statement bol" py-copy-statement-bol :help "`py-copy-statement-bol' Copy statement at point. "] ["Kill statement bol" py-kill-statement-bol :help "`py-kill-statement-bol' Kill statement at point. "] ["Delete statement bol" py-delete-statement-bol :help "`py-delete-statement-bol' Delete statement at point. "] ["Shift statement right" py-shift-statement-right :help "`py-shift-statement-right' Shift statement right. "] ["Shift statement left" py-shift-statement-left :help "`py-shift-statement-left' Shift statement left. "]) ) "-" ("Filling" :help "see also customizable `py-docstring-style'" ["Fill string" py-fill-string :help " `py-fill-string' Uses value of `py-docstring-style', if set. "] ["Fill paragraph" py-fill-paragraph :help " `py-fill-paragraph' Uses value of `py-docstring-style', if set. "] ["Fill comment" py-fill-comment :help " `py-fill-comment' Fill comment at point. "] ["Fill string django-style " py-fill-string-django :help " `py-fill-string-django' \"\"\" Process foo, return bar. \"\"\" \"\"\" Process foo, return bar. If processing fails throw ProcessingError. \"\"\" See available styles at `py-fill-paragraph' or var `py-docstring-style' "] ["py fill string onetwo" py-fill-string-onetwo :help " `py-fill-string-onetwo' One newline and start and Two at end style. \"\"\"Process foo, return bar.\"\"\" \"\"\" Process foo, return bar. If processing fails throw ProcessingError. \"\"\" See available styles at `py-fill-paragraph' or var `py-docstring-style'"] ["py fill string pep 257" py-fill-string-pep-257 :help " `py-fill-string-pep-257' PEP-257 with 2 newlines at end of string. \"\"\"Process foo, return bar.\"\"\" \"\"\"Process foo, return bar. If processing fails throw ProcessingError. \"\"\" See available styles at `py-fill-paragraph' or var `py-docstring-style'"] ["py fill string pep 257 nn" py-fill-string-pep-257-nn :help " `py-fill-string-pep-257-nn' PEP-257 with 1 newline at end of string. \"\"\"Process foo, return bar.\"\"\" \"\"\"Process foo, return bar. If processing fails throw ProcessingError. \"\"\" See available styles at `py-fill-paragraph' or var `py-docstring-style'"] ["py fill string symmetric" py-fill-string-symmetric :help " `py-fill-string-symmetric' Symmetric style. \"\"\"Process foo, return bar.\"\"\" \"\"\" Process foo, return bar. If processing fails throw ProcessingError. \"\"\" See available styles at `py-fill-paragraph' or var `py-docstring-style'"]) ("Electric " :help "electric commands'" ["Hungry delete backwards" py-hungry-delete-backwards :help " `py-hungry-delete-backwards' Delete the preceding character or all preceding whitespace back to the previous non-whitespace character. See also C-c . "] ["Hungry delete forward" py-hungry-delete-forward :help " `py-hungry-delete-forward' Delete the following character or all following whitespace up to the next non-whitespace character. See also C-c . "] ["Electric colon" py-electric-colon :help " `py-electric-colon' Insert a colon and indent accordingly. If a numeric argument ARG is provided, that many colons are inserted non-electrically. Electric behavior is inhibited inside a string or comment or by universal prefix C-u. Switched by `py-electric-colon-active-p', default is nil See also `py-electric-colon-greedy-p' "] ["Electric colon greedy " (setq py-electric-colon-greedy-p (not py-electric-colon-greedy-p)) :help "If py-electric-colon should indent to the outmost reasonable level. If nil, default, it will not move from at any reasonable level. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-electric-colon-greedy-p] ["Electric colon newline and indent " (setq py-electric-colon-newline-and-indent-p (not py-electric-colon-newline-and-indent-p)) :help "If non-nil, `py-electric-colon' will call `newline-and-indent'. Default is `nil'. Use `M-x customize-variable' to set it permanently" :style toggle :selected py-electric-colon-newline-and-indent-p] ["Electric delete" py-electric-delete :help " `py-electric-delete' Delete following character or levels of whitespace. With ARG do that ARG times. "] ["Electric backspace" py-electric-backspace :help " `py-electric-backspace' Delete preceding character or level of indentation. With ARG do that ARG times. Returns column reached. "] ["Electric comment" py-electric-comment :help " `py-electric-comment' Insert a comment. If starting a comment, indent accordingly. If a numeric argument ARG is provided, that many \"#\" are inserted non-electrically. With C-u \"#\" electric behavior is inhibited inside a string or comment. "] ["Electric left paren" py-complete-electric-lparen :help " `py-complete-electric-lparen' electricly insert '(', and try to get a signature for the stuff to the left.\n Needs Pymacs"] ["Complete electric comma" py-complete-electric-comma :help " `py-complete-electric-comma' electricly insert ',', and redisplay latest signature.\n Needs Pymacs"] ["Electric yank" py-electric-yank :help " `py-electric-yank' Perform command `yank' followed by an `indent-according-to-mode' . "]) ("Abbrevs" :help "see also `py-add-abbrev'" :filter (lambda (&rest junk) (abbrev-table-menu python-mode-abbrev-table))) ["add-abbrev" py-add-abbrev :help "Defines python-mode specific abbrev for last expressions before point. Argument is how many `py-partial-expression's form the expansion; or zero means the region is the expansion. "] ("Skeletons" :help "See also templates in YASnippet" ["if" py-if :help "Inserts if-statement"] ["py-else" py-else :help "Inserts else-statement"] ["py-while" py-while :help "Inserts while-statement"] ["py-for" py-for :help "Inserts for-statement"] ["py-try/finally" py-try/finally :help "Inserts py-try/finally-statement"] ["py-try/except" py-try/except :help "Inserts py-try/except-statement"] ) ("Completion" :help "Completion options" ["Complete symbol" py-shell-complete :help "`py-shell-complete' Complete (qualified) symbol before point"] ["Complete" py-complete :help " `py-complete' Complete symbol before point using Pymacs . "]) ["Find function" py-find-function :help "`py-find-function' Try to find source definition of function at point"] )))) map)) (defvaralias 'py-mode-map 'python-mode-map) (defun py-dump-help-string (str) (with-output-to-temp-buffer "*Help*" (let ((locals (buffer-local-variables)) funckind funcname func funcdoc (start 0) mstart end keys) (while (string-match "^%\\([vc]\\):\\(.+\\)\n" str start) (setq mstart (match-beginning 0) end (match-end 0) funckind (substring str (match-beginning 1) (match-end 1)) funcname (substring str (match-beginning 2) (match-end 2)) func (intern funcname)) (princ (substitute-command-keys (substring str start mstart))) (cond ((equal funckind "c") ; command (setq funcdoc (documentation func) keys (concat "Key(s): " (mapconcat 'key-description (where-is-internal func python-mode-map) ", ")))) ((equal funckind "v") ; variable (setq funcdoc (documentation-property func 'variable-documentation) keys (if (assq func locals) (concat "Local/Global values: " (prin1-to-string (symbol-value func)) " / " (prin1-to-string (default-value func))) (concat "Value: " (prin1-to-string (symbol-value func)))))) (t ; unexpected (error "Error in py-dump-help-string, tag `%s'" funckind))) (princ (format "\n-> %s:\t%s\t%s\n\n" (if (equal funckind "c") "Command" "Variable") funcname keys)) (princ funcdoc) (terpri) (setq start end)) (princ (substitute-command-keys (substring str start)))) (if (featurep 'xemacs) (print-help-return-message) (help-print-return-message)))) ;;; Abbrevs (defun py-edit-abbrevs () "Jumps to `python-mode-abbrev-table' in a buffer containing lists of abbrev definitions. You can edit them and type \\\\[edit-abbrevs-redefine] to redefine abbrevs according to your editing. Buffer contains a header line for each abbrev table, which is the abbrev table name in parentheses. This is followed by one line per abbrev in that table: NAME USECOUNT EXPANSION HOOK where NAME and EXPANSION are strings with quotes, USECOUNT is an integer, and HOOK is any valid function or may be omitted (it is usually omitted). " (interactive) (save-excursion (let ((mat (abbrev-table-name local-abbrev-table))) (prepare-abbrev-list-buffer) (set-buffer "*Abbrevs*") (switch-to-buffer (current-buffer)) (goto-char (point-min)) (search-forward (concat "(" (format "%s" mat)))))) (defun py-add-abbrev-propose (table type arg &optional dont-ask) (save-excursion (let ((orig (point)) proposal exp name) (while (< 0 arg) (py-beginning-of-partial-expression) (when (looking-at "[[:alpha:]]") (setq proposal (concat (downcase (match-string-no-properties 0)) proposal))) (setq arg (1- arg))) (setq exp (buffer-substring-no-properties (point) orig)) (setq name ;; ask only when interactive (if dont-ask proposal (read-string (format (if exp "%s abbrev for \"%s\": " "Undefine %s abbrev: ") type exp) proposal))) (set-text-properties 0 (length name) nil name) (when (or (null exp) (not (abbrev-expansion name table)) (y-or-n-p (format "%s expands to \"%s\"; redefine? " name (abbrev-expansion name table)))) (define-abbrev table (downcase name) exp))))) (defun py-add-abbrev (arg) "Defines python-mode specific abbrev for last expressions before point. Argument is how many `py-partial-expression's form the expansion; or zero means the region is the expansion. Reads the abbreviation in the minibuffer; with numeric arg it displays a proposal for an abbrev. Proposal is composed from the initial character(s) of the expansion. Don't use this function in a Lisp program; use `define-abbrev' instead." (interactive "p") (save-excursion (py-add-abbrev-propose (if only-global-abbrevs global-abbrev-table (or local-abbrev-table (error "No per-mode abbrev table"))) "Mode" arg))) ;;; (add-to-list 'hs-special-modes-alist (list 'python-mode ;; start regex (concat (if py-hide-show-hide-docstrings "^\\s-*\"\"\"\\|" "") (mapconcat 'identity (mapcar #'(lambda (x) (concat "^\\s-*" x "\\_>")) py-hide-show-keywords) "\\|")) ;; end regex nil ;; comment-start regex "#" ;; forward-sexp function (lambda (arg) (py-end-of-block-or-clause)) nil)) (setq imenu-generic-expression 'py-imenu-generic-regexp) (defadvice pdb (before gud-query-cmdline activate) "Provide a better default command line when called interactively." (interactive (list (gud-query-cmdline pdb-path (file-name-nondirectory buffer-file-name))))) (defalias 'py-hungry-delete-forward 'c-hungry-delete-forward) (defalias 'py-hungry-delete-backwards 'c-hungry-delete-backwards) (defun py-kill-emacs-hook () "Delete files in `py-file-queue'. These are Python temporary files awaiting execution." (mapc #'(lambda (filename) (ignore-errors (delete-file filename))) py-file-queue)) (defun py-python-version (&optional executable verbose) "Returns versions number of a Python EXECUTABLE, string. If no EXECUTABLE given, `py-shell-name' is used. Interactively output of `--version' is displayed. " (interactive) (let* ((executable (or executable py-shell-name)) (erg (string-strip (shell-command-to-string (concat executable " --version"))))) (when (interactive-p) (message "%s" erg)) (unless verbose (setq erg (cadr (split-string erg)))) erg)) (defun py-version () "Echo the current version of `python-mode' in the minibuffer." (interactive) (message "Using `python-mode' version %s" py-version) (py-keep-region-active)) (defun py-install-search-local () (interactive) (let ((erg (split-string (shell-command-to-string (concat "find " default-directory " -maxdepth 9 -type f -name \"*python\""))))))) ;; (defun py-install-local-epdfree () ;; (interactive) ;; (py-install-local-shells "MY-PATH/epdfree")) (defun py-install-local-shells (&optional local path-prefix) "Builds Python-shell commands from executable found in LOCAL. If LOCAL is empty, shell-command `find' searches beneath current directory. Eval resulting buffer to install it, see customizable `py-extensions'. " (interactive) (let* ((local-dir (if local (expand-file-name local) (read-from-minibuffer "Virtualenv directory: " default-directory))) (path-separator (if (string-match "/" local-dir) "/" "\\" t)) (shells (split-string (shell-command-to-string (concat "find " local-dir " -maxdepth 9 -type f -executable -name \"*python\"")))) erg newshell prefix akt end orig curexe aktpath) (set-buffer (get-buffer-create py-extensions)) (erase-buffer) (switch-to-buffer (current-buffer)) (dolist (elt shells) (setq prefix "") (setq curexe (substring elt (1+ (string-match "/[^/]+$" elt)))) (setq aktpath (substring elt 0 (1+ (string-match "/[^/]+$" elt)))) (dolist (prf (split-string aktpath (regexp-quote path-separator))) (unless (string= "" prf) (setq prefix (concat prefix (substring prf 0 1))))) (setq orig (point)) (insert py-shell-template) (setq end (point)) (goto-char orig) (when (re-search-forward "\\" end t 1) (replace-match (concat prefix "-" (substring elt (1+ (save-match-data (string-match "/[^/]+$" elt)))))t)) (goto-char orig) (while (search-forward "DOCNAME" end t 1) (replace-match (if (string= "ipython" curexe) "IPython" (capitalize curexe)) t)) (goto-char orig) (when (search-forward "FULLNAME" end t 1) (replace-match elt t)) (goto-char (point-max))) (emacs-lisp-mode) (if (file-readable-p (concat py-install-directory "/" py-extensions)) (find-file (concat py-install-directory "/" py-extensions))))) (defun py-input-filter (str) "`comint-input-filter' function for inferior Python. Don't save anything for STR matching `inferior-python-filter-regexp'." (not (string-match inferior-python-filter-regexp str))) ;; http://lists.gnu.org/archive/html/bug-gnu-emacs/2008-01/msg00076.html (defalias 'py-shell-redirect-send-command-to-process 'comint-redirect-send-command-to-process) (defalias 'py-shell-dynamic-simple-complete 'comint-dynamic-simple-complete) (defun py-restore-window-configuration () "Restore py-restore-window-configuration when completion is done resp. abandoned. " (and (setq val (get-register 313465889))(and (consp val) (window-configuration-p (car val))(markerp (cadr val)))(marker-buffer (cadr val)) (jump-to-register 313465889))) (defun py-shell-simple-send (proc string) (comint-simple-send proc string)) (defun py-shell-execute-string-now (string &optional shell buffer proc output-buffer) "Send to Python interpreter process PROC \"exec STRING in {}\". and return collected output" (let* (wait (procbuf (or buffer (process-buffer proc) (progn (setq wait py-new-shell-delay) (py-shell nil nil shell nil t)))) (proc (or proc (get-buffer-process procbuf))) (cmd (format "exec '''%s''' in {}" (mapconcat 'identity (split-string string "\n") "\\n"))) (outbuf (get-buffer-create (or output-buffer py-output-buffer)))) ;; wait is used only when a new py-shell buffer was connected (and wait (sit-for wait)) (unwind-protect (condition-case nil (progn (with-current-buffer outbuf (delete-region (point-min) (point-max))) (with-current-buffer procbuf ;; (sit-for 3) (comint-redirect-send-command-to-process cmd outbuf proc nil t) (accept-process-output proc 1 1)) (with-current-buffer outbuf (buffer-substring (point-min) (point-max)))) (quit (with-current-buffer procbuf (interrupt-process proc comint-ptyp) (while (not comint-redirect-completed) ; wait for output (accept-process-output proc 1))) (signal 'quit nil)))))) ;;; Completion ;; started from python.el (defalias 'py-script-complete 'py-shell-complete) (defun py-python-script-complete (&optional shell imports beg end word) "Complete word before point, if any. When `py-no-completion-calls-dabbrev-expand-p' is non-nil, try dabbrev-expand. Otherwise, when `py-indent-no-completion-p' is non-nil, call `tab-to-tab-stop'. " (interactive) (let* (py-split-windows-on-execute-p py-switch-buffers-on-execute-p (orig (point)) (shell (or shell py-local-versioned-command (py-choose-shell))) (beg (or beg (save-excursion (skip-chars-backward "a-zA-Z0-9_.") (point)))) (end (or end (point))) (word (or word (buffer-substring-no-properties beg end))) (imports (or imports (py-find-imports))) proc) (cond ((string= word "") (if py-indent-no-completion-p (tab-to-tab-stop) (message "%s" "Nothing to complete. "))) (t (or (setq proc (get-buffer-process (py-buffer-name-prepare))) (setq proc (get-buffer-process (py-shell nil nil shell)))) (if (processp proc) (progn ;; when completing instances, make them known (when (string-match "^\\(^[a-zA-Z0-9_]+\\)\\.\\([a-zA-Z0-9_]+\\)$" word) ;; (message "%s" (match-string 1 word)) (save-excursion (save-match-data (goto-char (point-min)) (when (re-search-forward (concat "^[ \t]*" (match-string-no-properties 1 word) "[ \t]*=[ \t]*[^ \n\r\f\t]+") nil t 1) (when py-verbose-p (message "%s" (match-string-no-properties 0))) (if imports (setq imports (concat imports (match-string-no-properties 0) ";")) (setq imports (match-string-no-properties 0))))))) (py-shell--do-completion-at-point proc imports word)) (error "No completion process at proc")))))) (defun py-python2-shell-complete (&optional shell) (interactive) (let* (py-split-windows-on-execute-p py-switch-buffers-on-execute-p (shell (or shell py-local-versioned-command)) (orig (point)) (beg (save-excursion (skip-chars-backward "a-zA-Z0-9_.") (point))) (end (point)) (word (buffer-substring-no-properties beg end)) proc) (cond ((string= word "") (message "%s" "Nothing to complete. ") (tab-to-tab-stop)) (t (or (setq proc (get-buffer-process shell)) (setq proc (get-buffer-process (py-shell nil nil shell t)))) (py-shell--do-completion-at-point proc nil word orig)))) nil) (defun py-python3-shell-complete (&optional shell) "Complete word before point, if any. Otherwise insert TAB. " (interactive) (let* ((shell (or shell py-local-versioned-command)) (orig (point)) (beg (save-excursion (skip-chars-backward "a-zA-Z0-9_.") (point))) (end (point)) (word (buffer-substring-no-properties beg end))) (cond ((string= word "") (tab-to-tab-stop)) (t (py-shell--do-completion-at-point (get-buffer-process (current-buffer)) nil word orig) nil)))) (defun py-comint--complete (shell pos beg end word imports debug) (let ((shell (or shell (py-report-executable (buffer-name (current-buffer))))) py-fontify-shell-buffer-p) (if (string-match "[iI][pP]ython" shell) (ipython-complete nil nil beg end word shell debug imports) (let ((proc (get-buffer-process (current-buffer)))) (cond ((string= word "") (tab-to-tab-stop)) (t ;; (string-match "[pP]ython3[^[:alpha:]]*$" shell) (py-shell--do-completion-at-point proc imports word pos)) ;; (t (py-shell-complete-intern word beg end shell imports proc)) ))))) (defun py-complete--base (shell pos beg end word imports debug) (let* (wait (shell (or shell (py-choose-shell))) (proc (or (get-process shell) (get-buffer-process (progn (setq wait py-new-shell-delay) (py-shell nil nil shell nil t)))))) (cond ((string= word "") (tab-to-tab-stop)) ((string-match "[iI][pP]ython" shell) (ipython-complete nil nil beg end word shell debug imports pos)) (t ;; (string-match "[pP]ython3[^[:alpha:]]*$" shell) (py-shell--do-completion-at-point proc imports word pos)) ;; (t (py-shell-complete-intern word beg end shell imports proc debug)) ))) (defun py-shell-complete (&optional shell debug beg end word) "Complete word before point, if any. Otherwise insert TAB. " (interactive) (setq py-completion-last-window-configuration (current-window-configuration)) (when debug (setq py-shell-complete-debug nil)) (let* ((oldbuf (current-buffer)) (pos (copy-marker (point))) (beg (or beg (save-excursion (skip-chars-backward "a-zA-Z0-9_.('") (point)))) (end (or end (point))) (word (or word (buffer-substring-no-properties beg end))) (imports (py-find-imports)) py-fontify-shell-buffer-p py-completion-buffer) ;; (and (string= "open('" word) ;; (comint-dynamic-complete-filename)) ;; (ignore-errors (comint-dynamic-complete)) (if (or (eq major-mode 'comint-mode)(eq major-mode 'inferior-python-mode)) (py-comint--complete shell pos beg end word imports debug) (py-complete--base shell pos beg end word imports debug)) ;; (goto-char pos) nil)) (defun py-after-change-function (beg end len) "Restore window-confiuration after completion. " (when (and (or (eq this-command 'completion-at-point) (eq this-command 'choose-completion) (eq this-command 'choose-completion) (eq this-command 'py-shell-complete) (and (or (eq last-command 'completion-at-point) (eq last-command 'choose-completion) (eq last-command 'choose-completion) (eq last-command 'py-shell-complete)) (eq this-command 'self-insert-command)))) (set-window-configuration py-completion-last-window-configuration)) (goto-char end)) (defun py-shell-complete-finally () (if (and completions (not (string= "" (car completions)))) (cond ((eq completions t) (when (buffer-live-p (get-buffer py-completion-buffer)) (kill-buffer (get-buffer py-python-completions))) (message "Can't find completion for \"%s\"" word) (ding) nil) ((< 1 (length completions)) (with-output-to-temp-buffer py-completion-buffer (display-completion-list completions word) nil)) ((not (string= word (car completions))) (sit-for 0.1) (completion-in-region beg end completions) (move-marker pos (point)) (when (buffer-live-p (get-buffer py-python-completions)) (kill-buffer (get-buffer py-python-completions))) nil)) (when py-no-completion-calls-dabbrev-expand-p (ignore-errors (dabbrev-expand nil))) (when py-indent-no-completion-p (tab-to-tab-stop) (when (buffer-live-p (get-buffer py-python-completions)) (kill-buffer (get-buffer py-python-completions))))) (progn (set-buffer oldbuf)(goto-char pos) ;; completion-at-point requires a list as return value, so givem nil)) (defun py-shell-complete-intern (word &optional beg end shell imports proc debug) (when imports (py-send-string-no-output imports proc)) (let ((py-completion-buffer py-python-completions) (result (py-shell-execute-string-now (format " def print_completions(namespace, text, prefix=''): for name in namespace: if name.startswith(text): print(prefix + name) def complete(text): import __builtin__ import __main__ if '.' in text: terms = text.split('.') try: if hasattr(__main__, terms[0]): obj = getattr(__main__, terms[0]) else: obj = getattr(__builtin__, terms[0]) for term in terms[1:-1]: obj = getattr(obj, term) print_completions(dir(obj), terms[-1], text[:text.rfind('.') + 1]) except AttributeError: pass else: import keyword print_completions(keyword.kwlist, text) print_completions(dir(__builtin__), text) print_completions(dir(__main__), text) complete('%s')" word) shell nil proc))) (if (or (eq result nil)(string= "" result)) (progn (if py-no-completion-calls-dabbrev-expand-p (or (ignore-errors (dabbrev-expand nil)) (message "Can't complete")) (message "No completion found"))) (setq result (replace-regexp-in-string comint-prompt-regexp "" result)) (let ((comint-completion-addsuffix nil) (completions (sort (delete-dups (if (split-string "\n" "\n") (split-string result "\n" t) ; XEmacs (split-string result "\n"))) #'string<))) (when debug (setq py-shell-complete-debug completions)) (py-shell-complete-finally))))) ;; ipython shell complete ;; see also ;; http://lists.gnu.org/archive/html/bug-gnu-emacs/2008-01/msg00076.html (defun ipython-complete (&optional done completion-command-string beg end word shell debug imports pos) "Complete the python symbol before point. If no completion available, insert a TAB. Returns the completed symbol, a string, if successful, nil otherwise. " (interactive "*") (setq py-completion-last-window-configuration (current-window-configuration)) (let* (py-fontify-shell-buffer-p (oldbuf (current-buffer)) (pos (or pos (copy-marker (point)))) (beg (or beg (save-excursion (skip-chars-backward "a-z0-9A-Z_." (point-at-bol)) (point)))) (end (or end (point))) (pattern (or word (buffer-substring-no-properties beg end))) (sep ";") (py-shell-name (or shell (py-choose-shell))) (processlist (process-list)) (imports (or imports (py-find-imports))) (py-completion-buffer py-ipython-completions) done (process (if ipython-complete-use-separate-shell-p (unless (and (buffer-live-p py-ipython-completions) (comint-check-proc (process-name (get-buffer-process py-ipython-completions)))) (get-buffer-process (py-shell nil nil py-shell-name py-ipython-completions t))) (progn (while (and processlist (not done)) (when (and (string= py-shell-name (process-name (car processlist))) (processp (car processlist)) (setq done (car processlist)))) (setq processlist (cdr processlist))) done))) (proc (or process (get-buffer-process (py-shell nil nil (if (string-match "[iI][pP]ython[^[:alpha:]]*$" py-shell-name) "ipython") nil t)))) (comint-output-filter-functions (delq 'py-comint-output-filter-function comint-output-filter-functions)) (comint-preoutput-filter-functions (append comint-preoutput-filter-functions '(ansi-color-filter-apply (lambda (string) (setq ugly-return (concat ugly-return string)) "")))) (ccs (or completion-command-string (if imports (concat imports (py-set-ipython-completion-command-string)) (py-set-ipython-completion-command-string)))) completion completions completion-table ugly-return) (if (string= pattern "") (tab-to-tab-stop) (process-send-string proc (format ccs pattern)) (accept-process-output proc 0.2) (if ugly-return (progn (setq completions (split-string (substring ugly-return 0 (position ?\n ugly-return)) sep)) (when debug (setq py-shell-complete-debug completions)) (py-shell-complete-finally)) (message "%s" "No response from Python process. Please check your configuration. If config is okay, please file a bug-regport at http://launchpad.net/python-mode"))))) ;;; Checker ;; flymake ;; (defun clear-flymake-allowed-file-name-masks (&optional suffix) ;; "Remove entries with SUFFIX from `flymake-allowed-file-name-masks'. ;; Default is \"\\.py\\'\" " ;; (interactive "P") ;; (let ((suffix (cond ((eq 4 (prefix-numeric-value suffix)) ;; (read-from-minibuffer "Suffix: " "\\\\.py\\\\'")) ;; (suffix suffix) ;; (t "\\\\.py\\\\'"))) ;; (erg flymake-allowed-file-name-masks) ;; (newlist '())) ;; (dolist (ele flymake-allowed-file-name-masks) ;; (unless ;; ;; (string-match "\\\\.py\\\\'" (car ele)) ;; (string-match suffix (car ele)) ;; (add-to-list 'newlist ele t))) ;; (setq flymake-allowed-file-name-masks newlist) ;; (when (and py-verbose-p (interactive-p)) (message "%s" flymake-allowed-file-name-masks)) ;; flymake-allowed-file-name-masks)) (defun py-toggle-flymake-intern (name command) ;; (clear-flymake-allowed-file-name-masks) (unless (string-match "pyflakespep8" name) (unless (executable-find name) (when py-verbose-p (message "Don't see %s. Use `easy_install' %s? " name name)))) (if (buffer-file-name) (let* ((temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace)) (local-file (file-relative-name temp-file (file-name-directory buffer-file-name)))) (add-to-list 'flymake-allowed-file-name-masks (car (read-from-string (concat "(\"\\.py\\'\" flymake-" name ")")))) (list command (list local-file))) (message "%s" "flymake needs a `buffer-file-name'. Please save before calling."))) (defun pylint-flymake-mode () "Toggle `pylint' `flymake-mode'. " (interactive) (if flymake-mode ;; switch off (flymake-mode 0) (py-toggle-flymake-intern "pylint" "pylint") (flymake-mode 1))) (defun pyflakes-flymake-mode () "Toggle `pyflakes' `flymake-mode'. " (interactive) (if flymake-mode ;; switch off (flymake-mode) (py-toggle-flymake-intern "pyflakes" "pyflakes") (flymake-mode))) (defun pychecker-flymake-mode () "Toggle `pychecker' `flymake-mode'. " (interactive) (if flymake-mode ;; switch off (flymake-mode) (py-toggle-flymake-intern "pychecker" "pychecker") (flymake-mode))) (defun pep8-flymake-mode () "Toggle `pep8' `flymake-mode'. " (interactive) (if flymake-mode ;; switch off (flymake-mode) (py-toggle-flymake-intern "pep8" "pep8") (flymake-mode))) (defun pyflakespep8-flymake-mode () "Toggle `pyflakespep8' `flymake-mode'. Joint call to pyflakes and pep8 as proposed by Keegan Carruthers-Smith " (interactive) (if flymake-mode ;; switch off (flymake-mode) (py-toggle-flymake-intern "pyflakespep8" "pyflakespep8") (flymake-mode))) ;; pep8 (defun py-pep8-run (command) "Run pep8, check formatting (default on the file currently visited). " (interactive (let ((default (if (buffer-file-name) (format "%s %s %s" py-pep8-command (mapconcat 'identity py-pep8-command-args " ") (buffer-file-name)) (format "%s %s" py-pep8-command (mapconcat 'identity py-pep8-command-args " ")))) (last (when py-pep8-history (let* ((lastcmd (car py-pep8-history)) (cmd (cdr (reverse (split-string lastcmd)))) (newcmd (reverse (cons (buffer-file-name) cmd)))) (mapconcat 'identity newcmd " "))))) (list (if (fboundp 'read-shell-command) (read-shell-command "Run pep8 like this: " (if last last default) 'py-pep8-history) (read-string "Run pep8 like this: " (if last last default) 'py-pep8-history))))) (save-some-buffers (not py-ask-about-save) nil) (if (fboundp 'compilation-start) ;; Emacs. (compilation-start command) ;; XEmacs. (when (featurep 'xemacs) (compile-internal command "No more errors")))) (defun py-pep8-help () "Display pep8 command line help messages. " (interactive) (set-buffer (get-buffer-create "*pep8-Help*")) (erase-buffer) (shell-command "pep8 --help" "*pep8-Help*")) ;; Pylint (defalias 'pylint 'py-pylint-run) (defun py-pylint-run (command) "Run pylint (default on the file currently visited). For help see M-x pylint-help resp. M-x pylint-long-help. Home-page: http://www.logilab.org/project/pylint " (interactive (let ((default (if (buffer-file-name) (format "%s %s %s" py-pylint-command (mapconcat 'identity py-pylint-command-args " ") (buffer-file-name)) (format "%s %s %s" py-pylint-command (mapconcat 'identity py-pylint-command-args " ") (buffer-name (current-buffer))))) (last (and py-pylint-history (car py-pylint-history))) erg) (list (if (fboundp 'read-shell-command) (read-shell-command "Run pylint like this: " (if py-pylint-offer-current-p (or default last) (or last default)) 'py-pylint-history) (read-string "Run pylint like this: " (if py-pylint-offer-current-p (or default last) (or last default)) 'py-pylint-history))))) (save-some-buffers (not py-ask-about-save)) (unless (file-readable-p buffer-file-name) (message "Warning: %s" "pylint needs a file")) (shell-command (concat command " " buffer-file-name))) (defalias 'pylint-help 'py-pylint-help) (defun py-pylint-help () "Display Pylint command line help messages. Let's have this until more Emacs-like help is prepared " (interactive) (set-buffer (get-buffer-create "*Pylint-Help*")) (erase-buffer) (shell-command "pylint --long-help" "*Pylint-Help*")) (defalias 'pylint-doku 'py-pylint-doku) (defun py-pylint-doku () "Display Pylint Documentation. Calls `pylint --full-documentation'" (interactive) (set-buffer (get-buffer-create "*Pylint-Documentation*")) (erase-buffer) (shell-command "pylint --full-documentation" "*Pylint-Documentation*")) ;; Pyflakes (defalias 'pyflakes 'py-pyflakes-run) (defun py-pyflakes-run (command) "Run pyflakes (default on the file currently visited). For help see M-x pyflakes-help resp. M-x pyflakes-long-help. Home-page: http://www.logilab.org/project/pyflakes " (interactive (let ((default (if (buffer-file-name) (format "%s %s %s" py-pyflakes-command (mapconcat 'identity py-pyflakes-command-args " ") (buffer-file-name)) (format "%s %s" py-pyflakes-command (mapconcat 'identity py-pyflakes-command-args " ")))) (last (when py-pyflakes-history (let* ((lastcmd (car py-pyflakes-history)) (cmd (cdr (reverse (split-string lastcmd)))) (newcmd (reverse (cons (buffer-file-name) cmd)))) (mapconcat 'identity newcmd " "))))) (list (if (fboundp 'read-shell-command) (read-shell-command "Run pyflakes like this: " (if last last default) 'py-pyflakes-history) (read-string "Run pyflakes like this: " (if last last default) 'py-pyflakes-history))))) (save-some-buffers (not py-ask-about-save) nil) (if (fboundp 'compilation-start) ;; Emacs. (compilation-start command) ;; XEmacs. (when (featurep 'xemacs) (compile-internal command "No more errors")))) (defalias 'pyflakes-help 'py-pyflakes-help) (defun py-pyflakes-help () "Display Pyflakes command line help messages. Let's have this until more Emacs-like help is prepared " (interactive) ;; (set-buffer (get-buffer-create "*Pyflakes-Help*")) ;; (erase-buffer) (with-help-window "*Pyflakes-Help*" (with-current-buffer standard-output (insert " pyflakes [file-or-directory ...] Pyflakes is a simple program which checks Python source files for errors. It is similar to PyChecker in scope, but differs in that it does not execute the modules to check them. This is both safer and faster, although it does not perform as many checks. Unlike PyLint, Pyflakes checks only for logical errors in programs; it does not perform any checks on style. All commandline arguments are checked, which have to be either regular files or directories. If a directory is given, every .py file within will be checked. When no commandline arguments are given, data will be read from standard input. The exit status is 0 when no warnings or errors are found. When errors are found the exit status is 2. When warnings (but no errors) are found the exit status is 1. Extracted from http://manpages.ubuntu.com/manpages/natty/man1/pyflakes.1.html ")))) ;; Pyflakes-pep8 (defalias 'pyflakespep8 'py-pyflakespep8-run) (defun py-pyflakespep8-run (command) "Run pyflakespep8, check formatting (default on the file currently visited). " (interactive (let ((default (if (buffer-file-name) (format "%s %s %s" py-pyflakespep8-command (mapconcat 'identity py-pyflakespep8-command-args " ") (buffer-file-name)) (format "%s %s" py-pyflakespep8-command (mapconcat 'identity py-pyflakespep8-command-args " ")))) (last (when py-pyflakespep8-history (let* ((lastcmd (car py-pyflakespep8-history)) (cmd (cdr (reverse (split-string lastcmd)))) (newcmd (reverse (cons (buffer-file-name) cmd)))) (mapconcat 'identity newcmd " "))))) (list (if (fboundp 'read-shell-command) (read-shell-command "Run pyflakespep8 like this: " (if last last default) 'py-pyflakespep8-history) (read-string "Run pyflakespep8 like this: " (if last last default) 'py-pyflakespep8-history))))) (save-some-buffers (not py-ask-about-save) nil) (if (fboundp 'compilation-start) ;; Emacs. (compilation-start command) ;; XEmacs. (when (featurep 'xemacs) (compile-internal command "No more errors")))) (defun py-pyflakespep8-help () "Display pyflakespep8 command line help messages. " (interactive) (set-buffer (get-buffer-create "*pyflakespep8-Help*")) (erase-buffer) (shell-command "pyflakespep8 --help" "*pyflakespep8-Help*")) ;; flake8 (defalias 'flake8 'py-flake8-run) (defun py-flake8-run (command) "Flake8 is a wrapper around these tools: - PyFlakes - pep8 - Ned Batchelder's McCabe script It also adds features: - files that contain this line are skipped:: # flake8: noqa - lines that contain a ``# noqa`` comment at the end will not issue warnings. - a Git and a Mercurial hook. - a McCabe complexity checker. - extendable through ``flake8.extension`` entry points. " (interactive (let* ((py-flake8-command (if (string= "" py-flake8-command) (or (executable-find "flake8") (error "Don't see \"flake8\" on your system. Consider \"pip install flake8\" resp. visit \"pypi.python.org\"")) py-flake8-command)) (default (if (buffer-file-name) (format "%s %s %s" py-flake8-command (mapconcat 'identity py-flake8-command-args " ") (buffer-file-name)) (format "%s %s" py-flake8-command (mapconcat 'identity py-flake8-command-args " ")))) (last (when py-flake8-history (let* ((lastcmd (car py-flake8-history)) (cmd (cdr (reverse (split-string lastcmd)))) (newcmd (reverse (cons (buffer-file-name) cmd)))) (mapconcat 'identity newcmd " "))))) (list (if (fboundp 'read-shell-command) (read-shell-command "Run flake8 like this: " ;; (if last ;; last default 'py-flake8-history1) (read-string "Run flake8 like this: " (if last last default) 'py-flake8-history))))) (save-some-buffers (not py-ask-about-save) nil) (if (fboundp 'compilation-start) ;; Emacs. (compilation-start command) ;; XEmacs. (when (featurep 'xemacs) (compile-internal command "No more errors")))) (defun py-flake8-help () "Display flake8 command line help messages. " (interactive) (set-buffer (get-buffer-create "*flake8-Help*")) (erase-buffer) (shell-command "flake8 --help" "*flake8-Help*")) ;; Pychecker (defun py-pychecker-run (command) "Run pychecker (default on the file currently visited)." (interactive (let ((default (if (buffer-file-name) (format "%s %s %s" py-pychecker-command (mapconcat 'identity py-pychecker-command-args " ") (buffer-file-name)) (format "%s %s" py-pychecker-command (mapconcat 'identity py-pychecker-command-args " ")))) (last (when py-pychecker-history (let* ((lastcmd (car py-pychecker-history)) (cmd (cdr (reverse (split-string lastcmd)))) (newcmd (reverse (cons (buffer-file-name) cmd)))) (mapconcat 'identity newcmd " "))))) (list (if (fboundp 'read-shell-command) (read-shell-command "Run pychecker like this: " (if last last default) 'py-pychecker-history) (read-string "Run pychecker like this: " (if last last default) 'py-pychecker-history))))) (save-some-buffers (not py-ask-about-save) nil) (if (fboundp 'compilation-start) ;; Emacs. (compilation-start command) ;; XEmacs. (when (featurep 'xemacs) (compile-internal command "No more errors")))) ;;; Skeletons ;; Derived from python.el, where it's instrumented as abbrev ;; Original code authored by Dave Love AFAIK (defun py-load-skeletons () "These skeletons are loaded by python-mode, if `py-load-skeletons-p' is non-nil. " (interactive) (define-skeleton py-else "Auxiliary skeleton." nil (unless (eq ?y (read-char "Add `else' clause? (y for yes or RET for no) ")) (signal 'quit t)) < "else:" \n) (define-skeleton py-if "If condition " "if " "if " str ":" \n _ \n ("other condition, %s: " < "elif " str ":" \n > _ \n nil) '(py-else) | ^) (define-skeleton py-else "Auxiliary skeleton." nil (unless (eq ?y (read-char "Add `else' clause? (y for yes or RET for no) ")) (signal 'quit t)) "else:" \n > _ \n) (define-skeleton py-while "Condition: " "while " "while " str ":" \n > -1 _ \n '(py-else) | ^) (define-skeleton py-for "Target, %s: " "for " "for " str " in " (skeleton-read "Expression, %s: ") ":" \n > -1 _ \n '(py-else) | ^) (define-skeleton py-try/except "Py-try/except skeleton " "try:" "try:" \n > -1 _ \n ("Exception, %s: " < "except " str '(python-target) ":" \n > _ \n nil) < "except:" \n > _ \n '(py-else) | ^) (define-skeleton py-target "Auxiliary skeleton." "Target, %s: " ", " str | -2) (define-skeleton py-try/finally "Py-try/finally skeleton " "try:" \n > -1 _ \n < "finally:" \n > _ \n) (define-skeleton py-def "Name: " "def " str " (" ("Parameter, %s: " (unless (equal ?\( (char-before)) ", ") str) "):" \n "\"\"\"" - "\"\"\"" \n ; Fixme: extra space inserted -- why?). > _ \n) (define-skeleton py-class "Name: " "class " str " (" ("Inheritance, %s: " (unless (equal ?\( (char-before)) ", ") str) & ")" | -2 ; close list or remove opening ":" \n "\"\"\"" - "\"\"\"" \n > _ \n) ) ;;; Virtualenv ;; Thanks Gabriele Lanaro and all working on that ;; The installation is fairly easy, you have the load option, put this ;; in your .emacs: ;; (load-file "/path/to/virtualenv.el") ;; ;; Otherwise you can do it with the load path: ;; (add-to-list 'load-path "Path/to/virtualenv.el/containing/directory/" ;; (require 'virtualenv) ;; The usage is very intuitive, to activate a virtualenv use ;; M-x virtualenv-activate ;; It will prompt you for the virtual environment path. ;; If you want to deactivate a virtual environment, use: ;; M-x virtualenv-deactivate (defvar virtualenv-workon-home nil) (defvar virtualenv-name nil) (if (getenv "WORKON_HOME") (setq virtualenv-workon-home (getenv "WORKON_HOME")) (setq virtualenv-workon-home "~/.virtualenvs")) (setq virtualenv-name nil) ;;TODO: Move to a generic UTILITY or TOOL package (defun virtualenv-filter (predicate sequence) "Apply to each element of SEQUENCE the PREDICATE, if FUNCTION returns non-nil append the element to the return value of virtualenv-filter: a list" (let ((retlist '())) (dolist (element sequence) (when (funcall predicate element) (push element retlist))) (nreverse retlist))) (defun virtualenv-append-path (dir var) "Append DIR to a path-like varibale VAR, for example: (virtualenv-append-path /usr/bin:/bin /home/test/bin) -> /home/test/bin:/usr/bin:/bin" (concat (expand-file-name dir) path-separator var)) (defun virtualenv-add-to-path (dir) "Add the specified path element to the Emacs PATH" (setenv "PATH" (virtualenv-append-path dir (getenv "PATH")))) (defun virtualenv-current () "Barfs the current activated virtualenv" (interactive) (message virtualenv-name)) (defun virtualenv-activate (dir) "Activate the virtualenv located in DIR" (interactive "DVirtualenv Directory: ") ;; Eventually deactivate previous virtualenv (when virtualenv-name (virtualenv-deactivate)) ;; Storing old variables (setq virtualenv-old-path (getenv "PATH")) (setq virtualenv-old-exec-path exec-path) (setenv "VIRTUAL_ENV" dir) (virtualenv-add-to-path (concat (py-normalize-directory dir) "bin")) (add-to-list 'exec-path (concat (py-normalize-directory dir) "bin")) (setq virtualenv-name dir) (message (concat "Virtualenv '" virtualenv-name "' activated."))) (defun virtualenv-deactivate () "Deactivate the current virtual enviroment" (interactive) ;; Restoring old variables (setenv "PATH" virtualenv-old-path) (setq exec-path virtualenv-old-exec-path) (message (concat "Virtualenv '" virtualenv-name "' deactivated.")) (setq virtualenv-name nil)) (defun virtualenv-p (dir) "Check if a directory is a virtualenv" (file-exists-p (concat dir "/bin/activate"))) (defun virtualenv-workon-complete () "return available completions for virtualenv-workon" (let ;;Varlist ((filelist (directory-files virtualenv-workon-home t))) ;; Get only the basename from the list of the virtual environments ;; paths (mapcar 'file-name-nondirectory ;; Filter the directories and then the virtual environments (virtualenv-filter 'virtualenv-p (virtualenv-filter 'file-directory-p filelist))))) (defun virtualenv-workon (name) "Issue a virtualenvwrapper-like virtualenv-workon command" (interactive (list (completing-read "Virtualenv: " (virtualenv-workon-complete)))) (if (getenv "WORKON_HOME") (virtualenv-activate (concat (py-normalize-directory (getenv "WORKON_HOME")) name)) (virtualenv-activate (concat (py-normalize-directory virtualenv-workon-home) name)))) ;;; Execute forms at point (defun py-execute-statement () "Send statement at point to a Python interpreter. " (interactive) (save-excursion (let ((beg (prog1 (or (py-beginning-of-statement-p) (py-beginning-of-statement)))) (end (py-end-of-statement))) (py-execute-region beg end)))) (defun py-execute-top-level () "Send top-level at point to a Python interpreter. " (interactive) (save-excursion (let ((beg (prog1 (or (py-beginning-of-top-level-p) (py-beginning-of-top-level)))) (end (py-end-of-top-level))) (py-execute-region beg end)))) (defun py-execute-block () "Send block at point to a Python interpreter. " (interactive) (save-excursion (let ((beg (prog1 (or (py-beginning-of-block-p) (py-beginning-of-block)))) (end (py-end-of-block))) (py-execute-region beg end)))) (defun py-execute-minor-block () "Send minor-block at point to a Python interpreter. A minor block is started by a `for', `if', `try' or `with'. " (interactive) (save-excursion (let ((beg (prog1 (or (py-beginning-of-minor-block-p) (py-beginning-of-minor-block)))) (end (py-end-of-minor-block))) (py-execute-region beg end)))) (defun py-execute-block-or-clause () "Send block-or-clause at point to a Python interpreter. " (interactive) (save-excursion (let ((beg (prog1 (or (py-beginning-of-block-or-clause-p) (py-beginning-of-block-or-clause)))) (end (py-end-of-block-or-clause))) (py-execute-region beg end)))) (defun py-execute-def () "Send def at point to a Python interpreter. " (interactive) (save-excursion (let ((beg (prog1 (or (py-beginning-of-def-p) (py-beginning-of-def)))) (end (py-end-of-def))) (py-execute-region beg end)))) (defun py-execute-class () "Send class at point to a Python interpreter. " (interactive) (save-excursion (let ((beg (prog1 (or (py-beginning-of-class-p) (py-beginning-of-class)))) (end (py-end-of-class))) (py-execute-region beg end)))) (defun py-execute-def-or-class () "Send def-or-class at point to a Python interpreter. " (interactive) (save-excursion (let ((beg (prog1 (or (py-beginning-of-def-or-class-p) (py-beginning-of-def-or-class)))) (end (py-end-of-def-or-class))) (py-execute-region beg end)))) (defun py-execute-expression () "Send expression at point to a Python interpreter. " (interactive) (save-excursion (let ((beg (prog1 (or (py-beginning-of-expression-p) (py-beginning-of-expression)))) (end (py-end-of-expression))) (py-execute-region beg end)))) (defun py-execute-partial-expression () "Send partial-expression at point to a Python interpreter. " (interactive) (save-excursion (let ((beg (prog1 (or (py-beginning-of-partial-expression-p) (py-beginning-of-partial-expression)))) (end (py-end-of-partial-expression))) (py-execute-region beg end)))) ;;; Execute line (defalias 'ipython-send-and-indent 'py-execute-line-ipython) (defalias 'py-execute-region-in-shell 'py-execute-region) (defalias 'py-shell-command-on-region 'py-execute-region) (defalias 'py-send-region-ipython 'py-execute-region-ipython) (defalias 'py-ipython-shell-command-on-region 'py-execute-region-ipython) ;;; Execute file commands (defun py-execute-file-python (&optional filename) "Send file to a Python interpreter." (interactive "fFile: ") (py-execute-prepare filename "python" nil nil nil nil t)) (defun py-execute-file-python-switch (&optional filename) "Send file to a Python interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "python" nil 'switch nil nil t)) (defun py-execute-file-python-no-switch (&optional filename) "Send file to a Python interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"nil\"" (interactive "fFile: ") (py-execute-prepare filename "python" nil 'no-switch nil nil t)) (defun py-execute-file-python-dedicated (&optional filename) "Send file to a Python interpreter. Uses a dedicated shell." (interactive "fFile: ") (py-execute-prepare filename "python" 'dedicated nil nil nil t)) (defun py-execute-file-python-dedicated-switch (&optional filename) "Send file to a Python interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "python" 'dedicated 'switch nil nil t)) (defun py-execute-file-ipython (&optional filename) "Send file to a Ipython interpreter." (interactive "fFile: ") (py-execute-prepare filename "ipython" nil nil nil nil t)) (defun py-execute-file-ipython-switch (&optional filename) "Send file to a Ipython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "ipython" nil 'switch nil nil t)) (defun py-execute-file-ipython-no-switch (&optional filename) "Send file to a Ipython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"nil\"" (interactive "fFile: ") (py-execute-prepare filename "ipython" nil 'no-switch nil nil t)) (defun py-execute-file-ipython-dedicated (&optional filename) "Send file to a Ipython interpreter. Uses a dedicated shell." (interactive "fFile: ") (py-execute-prepare filename "ipython" 'dedicated nil nil nil t)) (defun py-execute-file-ipython-dedicated-switch (&optional filename) "Send file to a Ipython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "ipython" 'dedicated 'switch nil nil t)) (defun py-execute-file-python3 (&optional filename) "Send file to a Python3 interpreter." (interactive "fFile: ") (py-execute-prepare filename "python3" nil nil nil nil t)) (defun py-execute-file-python3-switch (&optional filename) "Send file to a Python3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "python3" nil 'switch nil nil t)) (defun py-execute-file-python3-no-switch (&optional filename) "Send file to a Python3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"nil\"" (interactive "fFile: ") (py-execute-prepare filename "python3" nil 'no-switch nil nil t)) (defun py-execute-file-python3-dedicated (&optional filename) "Send file to a Python3 interpreter. Uses a dedicated shell." (interactive "fFile: ") (py-execute-prepare filename "python3" 'dedicated nil nil nil t)) (defun py-execute-file-python3-dedicated-switch (&optional filename) "Send file to a Python3 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "python3" 'dedicated 'switch nil nil t)) (defun py-execute-file-python2 (&optional filename) "Send file to a Python2 interpreter." (interactive "fFile: ") (py-execute-prepare filename "python2" nil nil nil nil t)) (defun py-execute-file-python2-switch (&optional filename) "Send file to a Python2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "python2" nil 'switch nil nil t)) (defun py-execute-file-python2-no-switch (&optional filename) "Send file to a Python2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"nil\"" (interactive "fFile: ") (py-execute-prepare filename "python2" nil 'no-switch nil nil t)) (defun py-execute-file-python2-dedicated (&optional filename) "Send file to a Python2 interpreter. Uses a dedicated shell." (interactive "fFile: ") (py-execute-prepare filename "python2" 'dedicated nil nil nil t)) (defun py-execute-file-python2-dedicated-switch (&optional filename) "Send file to a Python2 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "python2" 'dedicated 'switch nil nil t)) (defun py-execute-file-python2.7 (&optional filename) "Send file to a Python2.7 interpreter." (interactive "fFile: ") (py-execute-prepare filename "python2.7" nil nil nil nil t)) (defun py-execute-file-python2.7-switch (&optional filename) "Send file to a Python2.7 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "python2.7" nil 'switch nil nil t)) (defun py-execute-file-python2.7-no-switch (&optional filename) "Send file to a Python2.7 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"nil\"" (interactive "fFile: ") (py-execute-prepare filename "python2.7" nil 'no-switch nil nil t)) (defun py-execute-file-python2.7-dedicated (&optional filename) "Send file to a Python2.7 interpreter. Uses a dedicated shell." (interactive "fFile: ") (py-execute-prepare filename "python2.7" 'dedicated nil nil nil t)) (defun py-execute-file-python2.7-dedicated-switch (&optional filename) "Send file to a Python2.7 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "python2.7" 'dedicated 'switch nil nil t)) (defun py-execute-file-jython (&optional filename) "Send file to a Jython interpreter." (interactive "fFile: ") (py-execute-prepare filename "jython" nil nil nil nil t)) (defun py-execute-file-jython-switch (&optional filename) "Send file to a Jython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "jython" nil 'switch nil nil t)) (defun py-execute-file-jython-no-switch (&optional filename) "Send file to a Jython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"nil\"" (interactive "fFile: ") (py-execute-prepare filename "jython" nil 'no-switch nil nil t)) (defun py-execute-file-jython-dedicated (&optional filename) "Send file to a Jython interpreter. Uses a dedicated shell." (interactive "fFile: ") (py-execute-prepare filename "jython" 'dedicated nil nil nil t)) (defun py-execute-file-jython-dedicated-switch (&optional filename) "Send file to a Jython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "jython" 'dedicated 'switch nil nil t)) (defun py-execute-file-python3.2 (&optional filename) "Send file to a Python3.2 interpreter." (interactive "fFile: ") (py-execute-prepare filename "python3.2" nil nil nil nil t)) (defun py-execute-file-python3.2-switch (&optional filename) "Send file to a Python3.2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "python3.2" nil 'switch nil nil t)) (defun py-execute-file-python3.2-no-switch (&optional filename) "Send file to a Python3.2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"nil\"" (interactive "fFile: ") (py-execute-prepare filename "python3.2" nil 'no-switch nil nil t)) (defun py-execute-file-python3.2-dedicated (&optional filename) "Send file to a Python3.2 interpreter. Uses a dedicated shell." (interactive "fFile: ") (py-execute-prepare filename "python3.2" 'dedicated nil nil nil t)) (defun py-execute-file-python3.2-dedicated-switch (&optional filename) "Send file to a Python3.2 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "python3.2" 'dedicated 'switch nil nil t)) (defun py-execute-file-python3.3 (&optional filename) "Send file to a Python3.3 interpreter." (interactive "fFile: ") (py-execute-prepare filename "python3.3" nil nil nil nil t)) (defun py-execute-file-python3.3-switch (&optional filename) "Send file to a Python3.3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "python3.3" nil 'switch nil nil t)) (defun py-execute-file-python3.3-no-switch (&optional filename) "Send file to a Python3.3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"nil\"" (interactive "fFile: ") (py-execute-prepare filename "python3.3" nil 'no-switch nil nil t)) (defun py-execute-file-python3.3-dedicated (&optional filename) "Send file to a Python3.3 interpreter. Uses a dedicated shell." (interactive "fFile: ") (py-execute-prepare filename "python3.3" 'dedicated nil nil nil t)) (defun py-execute-file-python3.3-dedicated-switch (&optional filename) "Send file to a Python3.3 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "python3.3" 'dedicated 'switch nil nil t)) (defun py-execute-file-bpython (&optional filename) "Send file to a Bpython interpreter." (interactive "fFile: ") (py-execute-prepare filename "bpython" nil nil nil nil t)) (defun py-execute-file-bpython-switch (&optional filename) "Send file to a Bpython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "bpython" nil 'switch nil nil t)) (defun py-execute-file-bpython-no-switch (&optional filename) "Send file to a Bpython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"nil\"" (interactive "fFile: ") (py-execute-prepare filename "bpython" nil 'no-switch nil nil t)) (defun py-execute-file-bpython-dedicated (&optional filename) "Send file to a Bpython interpreter. Uses a dedicated shell." (interactive "fFile: ") (py-execute-prepare filename "bpython" 'dedicated nil nil nil t)) (defun py-execute-file-bpython-dedicated-switch (&optional filename) "Send file to a Bpython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value \"non-nil\"" (interactive "fFile: ") (py-execute-prepare filename "bpython" 'dedicated 'switch nil nil t)) ;;; Extended executes ;; created by `write-extended-execute-forms' (defun py-masterfile () "Internal use. Set master-file, if given. " (and (or py-master-file (py-fetch-py-master-file)) (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer)))) (defun py-execute-prepare (form &optional shell dedicated switch beg end file wholebuf) "Used by python-extended-executes ." (save-excursion (let ((beg (unless file (prog1 (or beg (funcall (intern-soft (concat "py-beginning-of-" form "-p"))) (funcall (intern-soft (concat "py-beginning-of-" form))) (push-mark))))) (end (unless file (or end (funcall (intern-soft (concat "py-end-of-" form)))))) (py-shell-name shell) (py-dedicated-process-p dedicated) (py-switch-buffers-on-execute-p (cond ((eq 'switch switch) t) ((eq 'no-switch switch) nil) (t py-switch-buffers-on-execute-p))) filename erg) (if file (progn (setq filename (expand-file-name form)) (if (file-readable-p filename) (setq erg (py-execute-file-base nil filename nil nil (or (and (boundp 'py-orig-buffer-or-file) py-orig-buffer-or-file) filename))) (message "%s not readable. %s" file "Do you have write permissions?"))) (py-execute-base beg end shell nil nil wholebuf))))) (defun py-execute-statement-python () "Send statement at point to Python interpreter. " (interactive) (py-execute-prepare "statement" "python" nil nil)) (defun py-execute-statement-python-switch () "Send statement at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "statement" "python" nil 'switch)) (defun py-execute-statement-python-no-switch () "Send statement at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "statement" "python" nil 'no-switch)) (defun py-execute-statement-python-dedicated () "Send statement at point to Python unique interpreter. " (interactive) (py-execute-prepare "statement" "python" t nil)) (defun py-execute-statement-python-dedicated-switch () "Send statement at point to Python unique interpreter and switch to result. " (interactive) (py-execute-prepare "statement" "python" t 'switch)) (defun py-execute-statement-ipython () "Send statement at point to IPython interpreter. " (interactive) (py-execute-prepare "statement" "ipython" nil nil)) (defun py-execute-statement-ipython-switch () "Send statement at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "statement" "ipython" nil 'switch)) (defun py-execute-statement-ipython-no-switch () "Send statement at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "statement" "ipython" nil 'no-switch)) (defun py-execute-statement-ipython-dedicated () "Send statement at point to IPython unique interpreter. " (interactive) (py-execute-prepare "statement" "ipython" t nil)) (defun py-execute-statement-ipython-dedicated-switch () "Send statement at point to IPython unique interpreter and switch to result. " (interactive) (py-execute-prepare "statement" "ipython" t 'switch)) (defun py-execute-statement-python3 () "Send statement at point to Python3 interpreter. " (interactive) (py-execute-prepare "statement" "python3" nil nil)) (defun py-execute-statement-python3-switch () "Send statement at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "statement" "python3" nil 'switch)) (defun py-execute-statement-python3-no-switch () "Send statement at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "statement" "python3" nil 'no-switch)) (defun py-execute-statement-python3-dedicated () "Send statement at point to Python3 unique interpreter. " (interactive) (py-execute-prepare "statement" "python3" t nil)) (defun py-execute-statement-python3-dedicated-switch () "Send statement at point to Python3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "statement" "python3" t 'switch)) (defun py-execute-statement-python2 () "Send statement at point to Python2 interpreter. " (interactive) (py-execute-prepare "statement" "python2" nil nil)) (defun py-execute-statement-python2-switch () "Send statement at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "statement" "python2" nil 'switch)) (defun py-execute-statement-python2-no-switch () "Send statement at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "statement" "python2" nil 'no-switch)) (defun py-execute-statement-python2-dedicated () "Send statement at point to Python2 unique interpreter. " (interactive) (py-execute-prepare "statement" "python2" t nil)) (defun py-execute-statement-python2-dedicated-switch () "Send statement at point to Python2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "statement" "python2" t 'switch)) (defun py-execute-statement-python2.7 () "Send statement at point to Python2.7 interpreter. " (interactive) (py-execute-prepare "statement" "python2.7" nil nil)) (defun py-execute-statement-python2.7-switch () "Send statement at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "statement" "python2.7" nil 'switch)) (defun py-execute-statement-python2.7-no-switch () "Send statement at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "statement" "python2.7" nil 'no-switch)) (defun py-execute-statement-python2.7-dedicated () "Send statement at point to Python2.7 unique interpreter. " (interactive) (py-execute-prepare "statement" "python2.7" t nil)) (defun py-execute-statement-python2.7-dedicated-switch () "Send statement at point to Python2.7 unique interpreter and switch to result. " (interactive) (py-execute-prepare "statement" "python2.7" t 'switch)) (defun py-execute-statement-jython () "Send statement at point to Jython interpreter. " (interactive) (py-execute-prepare "statement" "jython" nil nil)) (defun py-execute-statement-jython-switch () "Send statement at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "statement" "jython" nil 'switch)) (defun py-execute-statement-jython-no-switch () "Send statement at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "statement" "jython" nil 'no-switch)) (defun py-execute-statement-jython-dedicated () "Send statement at point to Jython unique interpreter. " (interactive) (py-execute-prepare "statement" "jython" t nil)) (defun py-execute-statement-jython-dedicated-switch () "Send statement at point to Jython unique interpreter and switch to result. " (interactive) (py-execute-prepare "statement" "jython" t 'switch)) (defun py-execute-statement-python3.2 () "Send statement at point to Python3.2 interpreter. " (interactive) (py-execute-prepare "statement" "python3.2" nil nil)) (defun py-execute-statement-python3.2-switch () "Send statement at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "statement" "python3.2" nil 'switch)) (defun py-execute-statement-python3.2-no-switch () "Send statement at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "statement" "python3.2" nil 'no-switch)) (defun py-execute-statement-python3.2-dedicated () "Send statement at point to Python3.2 unique interpreter. " (interactive) (py-execute-prepare "statement" "python3.2" t nil)) (defun py-execute-statement-python3.2-dedicated-switch () "Send statement at point to Python3.2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "statement" "python3.2" t 'switch)) (defun py-execute-statement-python3.3 () "Send statement at point to Python3.3 interpreter. " (interactive) (py-execute-prepare "statement" "python3.3" nil nil)) (defun py-execute-statement-python3.3-switch () "Send statement at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "statement" "python3.3" nil 'switch)) (defun py-execute-statement-python3.3-no-switch () "Send statement at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "statement" "python3.3" nil 'no-switch)) (defun py-execute-statement-python3.3-dedicated () "Send statement at point to Python3.3 unique interpreter. " (interactive) (py-execute-prepare "statement" "python3.3" t nil)) (defun py-execute-statement-python3.3-dedicated-switch () "Send statement at point to Python3.3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "statement" "python3.3" t 'switch)) (defun py-execute-statement-bpython () "Send statement at point to Bpython interpreter. " (interactive) (py-execute-prepare "statement" "bpython" nil nil)) (defun py-execute-statement-bpython-switch () "Send statement at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "statement" "bpython" nil 'switch)) (defun py-execute-statement-bpython-no-switch () "Send statement at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "statement" "bpython" nil 'no-switch)) (defun py-execute-statement-bpython-dedicated () "Send statement at point to Bpython unique interpreter. " (interactive) (py-execute-prepare "statement" "bpython" t nil)) (defun py-execute-statement-bpython-dedicated-switch () "Send statement at point to Bpython unique interpreter and switch to result. " (interactive) (py-execute-prepare "statement" "bpython" t 'switch)) (defun py-execute-block-python () "Send block at point to Python interpreter. " (interactive) (py-execute-prepare "block" "python" nil nil)) (defun py-execute-block-python-switch () "Send block at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block" "python" nil 'switch)) (defun py-execute-block-python-no-switch () "Send block at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block" "python" nil 'no-switch)) (defun py-execute-block-python-dedicated () "Send block at point to Python unique interpreter. " (interactive) (py-execute-prepare "block" "python" t nil)) (defun py-execute-block-python-dedicated-switch () "Send block at point to Python unique interpreter and switch to result. " (interactive) (py-execute-prepare "block" "python" t 'switch)) (defun py-execute-block-ipython () "Send block at point to IPython interpreter. " (interactive) (py-execute-prepare "block" "ipython" nil nil)) (defun py-execute-block-ipython-switch () "Send block at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block" "ipython" nil 'switch)) (defun py-execute-block-ipython-no-switch () "Send block at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block" "ipython" nil 'no-switch)) (defun py-execute-block-ipython-dedicated () "Send block at point to IPython unique interpreter. " (interactive) (py-execute-prepare "block" "ipython" t nil)) (defun py-execute-block-ipython-dedicated-switch () "Send block at point to IPython unique interpreter and switch to result. " (interactive) (py-execute-prepare "block" "ipython" t 'switch)) (defun py-execute-block-python3 () "Send block at point to Python3 interpreter. " (interactive) (py-execute-prepare "block" "python3" nil nil)) (defun py-execute-block-python3-switch () "Send block at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block" "python3" nil 'switch)) (defun py-execute-block-python3-no-switch () "Send block at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block" "python3" nil 'no-switch)) (defun py-execute-block-python3-dedicated () "Send block at point to Python3 unique interpreter. " (interactive) (py-execute-prepare "block" "python3" t nil)) (defun py-execute-block-python3-dedicated-switch () "Send block at point to Python3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "block" "python3" t 'switch)) (defun py-execute-block-python2 () "Send block at point to Python2 interpreter. " (interactive) (py-execute-prepare "block" "python2" nil nil)) (defun py-execute-block-python2-switch () "Send block at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block" "python2" nil 'switch)) (defun py-execute-block-python2-no-switch () "Send block at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block" "python2" nil 'no-switch)) (defun py-execute-block-python2-dedicated () "Send block at point to Python2 unique interpreter. " (interactive) (py-execute-prepare "block" "python2" t nil)) (defun py-execute-block-python2-dedicated-switch () "Send block at point to Python2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "block" "python2" t 'switch)) (defun py-execute-block-python2.7 () "Send block at point to Python2.7 interpreter. " (interactive) (py-execute-prepare "block" "python2.7" nil nil)) (defun py-execute-block-python2.7-switch () "Send block at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block" "python2.7" nil 'switch)) (defun py-execute-block-python2.7-no-switch () "Send block at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block" "python2.7" nil 'no-switch)) (defun py-execute-block-python2.7-dedicated () "Send block at point to Python2.7 unique interpreter. " (interactive) (py-execute-prepare "block" "python2.7" t nil)) (defun py-execute-block-python2.7-dedicated-switch () "Send block at point to Python2.7 unique interpreter and switch to result. " (interactive) (py-execute-prepare "block" "python2.7" t 'switch)) (defun py-execute-block-jython () "Send block at point to Jython interpreter. " (interactive) (py-execute-prepare "block" "jython" nil nil)) (defun py-execute-block-jython-switch () "Send block at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block" "jython" nil 'switch)) (defun py-execute-block-jython-no-switch () "Send block at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block" "jython" nil 'no-switch)) (defun py-execute-block-jython-dedicated () "Send block at point to Jython unique interpreter. " (interactive) (py-execute-prepare "block" "jython" t nil)) (defun py-execute-block-jython-dedicated-switch () "Send block at point to Jython unique interpreter and switch to result. " (interactive) (py-execute-prepare "block" "jython" t 'switch)) (defun py-execute-block-python3.2 () "Send block at point to Python3.2 interpreter. " (interactive) (py-execute-prepare "block" "python3.2" nil nil)) (defun py-execute-block-python3.2-switch () "Send block at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block" "python3.2" nil 'switch)) (defun py-execute-block-python3.2-no-switch () "Send block at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block" "python3.2" nil 'no-switch)) (defun py-execute-block-python3.2-dedicated () "Send block at point to Python3.2 unique interpreter. " (interactive) (py-execute-prepare "block" "python3.2" t nil)) (defun py-execute-block-python3.2-dedicated-switch () "Send block at point to Python3.2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "block" "python3.2" t 'switch)) (defun py-execute-block-python3.3 () "Send block at point to Python3.3 interpreter. " (interactive) (py-execute-prepare "block" "python3.3" nil nil)) (defun py-execute-block-python3.3-switch () "Send block at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block" "python3.3" nil 'switch)) (defun py-execute-block-python3.3-no-switch () "Send block at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block" "python3.3" nil 'no-switch)) (defun py-execute-block-python3.3-dedicated () "Send block at point to Python3.3 unique interpreter. " (interactive) (py-execute-prepare "block" "python3.3" t nil)) (defun py-execute-block-python3.3-dedicated-switch () "Send block at point to Python3.3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "block" "python3.3" t 'switch)) (defun py-execute-block-bpython () "Send block at point to Bpython interpreter. " (interactive) (py-execute-prepare "block" "bpython" nil nil)) (defun py-execute-block-bpython-switch () "Send block at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block" "bpython" nil 'switch)) (defun py-execute-block-bpython-no-switch () "Send block at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block" "bpython" nil 'no-switch)) (defun py-execute-block-bpython-dedicated () "Send block at point to Bpython unique interpreter. " (interactive) (py-execute-prepare "block" "bpython" t nil)) (defun py-execute-block-bpython-dedicated-switch () "Send block at point to Bpython unique interpreter and switch to result. " (interactive) (py-execute-prepare "block" "bpython" t 'switch)) (defun py-execute-clause-python () "Send clause at point to Python interpreter. " (interactive) (py-execute-prepare "clause" "python" nil nil)) (defun py-execute-clause-python-switch () "Send clause at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "clause" "python" nil 'switch)) (defun py-execute-clause-python-no-switch () "Send clause at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "clause" "python" nil 'no-switch)) (defun py-execute-clause-python-dedicated () "Send clause at point to Python unique interpreter. " (interactive) (py-execute-prepare "clause" "python" t nil)) (defun py-execute-clause-python-dedicated-switch () "Send clause at point to Python unique interpreter and switch to result. " (interactive) (py-execute-prepare "clause" "python" t 'switch)) (defun py-execute-clause-ipython () "Send clause at point to IPython interpreter. " (interactive) (py-execute-prepare "clause" "ipython" nil nil)) (defun py-execute-clause-ipython-switch () "Send clause at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "clause" "ipython" nil 'switch)) (defun py-execute-clause-ipython-no-switch () "Send clause at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "clause" "ipython" nil 'no-switch)) (defun py-execute-clause-ipython-dedicated () "Send clause at point to IPython unique interpreter. " (interactive) (py-execute-prepare "clause" "ipython" t nil)) (defun py-execute-clause-ipython-dedicated-switch () "Send clause at point to IPython unique interpreter and switch to result. " (interactive) (py-execute-prepare "clause" "ipython" t 'switch)) (defun py-execute-clause-python3 () "Send clause at point to Python3 interpreter. " (interactive) (py-execute-prepare "clause" "python3" nil nil)) (defun py-execute-clause-python3-switch () "Send clause at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "clause" "python3" nil 'switch)) (defun py-execute-clause-python3-no-switch () "Send clause at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "clause" "python3" nil 'no-switch)) (defun py-execute-clause-python3-dedicated () "Send clause at point to Python3 unique interpreter. " (interactive) (py-execute-prepare "clause" "python3" t nil)) (defun py-execute-clause-python3-dedicated-switch () "Send clause at point to Python3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "clause" "python3" t 'switch)) (defun py-execute-clause-python2 () "Send clause at point to Python2 interpreter. " (interactive) (py-execute-prepare "clause" "python2" nil nil)) (defun py-execute-clause-python2-switch () "Send clause at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "clause" "python2" nil 'switch)) (defun py-execute-clause-python2-no-switch () "Send clause at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "clause" "python2" nil 'no-switch)) (defun py-execute-clause-python2-dedicated () "Send clause at point to Python2 unique interpreter. " (interactive) (py-execute-prepare "clause" "python2" t nil)) (defun py-execute-clause-python2-dedicated-switch () "Send clause at point to Python2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "clause" "python2" t 'switch)) (defun py-execute-clause-python2.7 () "Send clause at point to Python2.7 interpreter. " (interactive) (py-execute-prepare "clause" "python2.7" nil nil)) (defun py-execute-clause-python2.7-switch () "Send clause at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "clause" "python2.7" nil 'switch)) (defun py-execute-clause-python2.7-no-switch () "Send clause at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "clause" "python2.7" nil 'no-switch)) (defun py-execute-clause-python2.7-dedicated () "Send clause at point to Python2.7 unique interpreter. " (interactive) (py-execute-prepare "clause" "python2.7" t nil)) (defun py-execute-clause-python2.7-dedicated-switch () "Send clause at point to Python2.7 unique interpreter and switch to result. " (interactive) (py-execute-prepare "clause" "python2.7" t 'switch)) (defun py-execute-clause-jython () "Send clause at point to Jython interpreter. " (interactive) (py-execute-prepare "clause" "jython" nil nil)) (defun py-execute-clause-jython-switch () "Send clause at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "clause" "jython" nil 'switch)) (defun py-execute-clause-jython-no-switch () "Send clause at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "clause" "jython" nil 'no-switch)) (defun py-execute-clause-jython-dedicated () "Send clause at point to Jython unique interpreter. " (interactive) (py-execute-prepare "clause" "jython" t nil)) (defun py-execute-clause-jython-dedicated-switch () "Send clause at point to Jython unique interpreter and switch to result. " (interactive) (py-execute-prepare "clause" "jython" t 'switch)) (defun py-execute-clause-python3.2 () "Send clause at point to Python3.2 interpreter. " (interactive) (py-execute-prepare "clause" "python3.2" nil nil)) (defun py-execute-clause-python3.2-switch () "Send clause at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "clause" "python3.2" nil 'switch)) (defun py-execute-clause-python3.2-no-switch () "Send clause at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "clause" "python3.2" nil 'no-switch)) (defun py-execute-clause-python3.2-dedicated () "Send clause at point to Python3.2 unique interpreter. " (interactive) (py-execute-prepare "clause" "python3.2" t nil)) (defun py-execute-clause-python3.2-dedicated-switch () "Send clause at point to Python3.2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "clause" "python3.2" t 'switch)) (defun py-execute-clause-python3.3 () "Send clause at point to Python3.3 interpreter. " (interactive) (py-execute-prepare "clause" "python3.3" nil nil)) (defun py-execute-clause-python3.3-switch () "Send clause at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "clause" "python3.3" nil 'switch)) (defun py-execute-clause-python3.3-no-switch () "Send clause at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "clause" "python3.3" nil 'no-switch)) (defun py-execute-clause-python3.3-dedicated () "Send clause at point to Python3.3 unique interpreter. " (interactive) (py-execute-prepare "clause" "python3.3" t nil)) (defun py-execute-clause-python3.3-dedicated-switch () "Send clause at point to Python3.3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "clause" "python3.3" t 'switch)) (defun py-execute-clause-bpython () "Send clause at point to Bpython interpreter. " (interactive) (py-execute-prepare "clause" "bpython" nil nil)) (defun py-execute-clause-bpython-switch () "Send clause at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "clause" "bpython" nil 'switch)) (defun py-execute-clause-bpython-no-switch () "Send clause at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "clause" "bpython" nil 'no-switch)) (defun py-execute-clause-bpython-dedicated () "Send clause at point to Bpython unique interpreter. " (interactive) (py-execute-prepare "clause" "bpython" t nil)) (defun py-execute-clause-bpython-dedicated-switch () "Send clause at point to Bpython unique interpreter and switch to result. " (interactive) (py-execute-prepare "clause" "bpython" t 'switch)) (defun py-execute-block-or-clause-python () "Send block-or-clause at point to Python interpreter. " (interactive) (py-execute-prepare "block-or-clause" "python" nil nil)) (defun py-execute-block-or-clause-python-switch () "Send block-or-clause at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block-or-clause" "python" nil 'switch)) (defun py-execute-block-or-clause-python-no-switch () "Send block-or-clause at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block-or-clause" "python" nil 'no-switch)) (defun py-execute-block-or-clause-python-dedicated () "Send block-or-clause at point to Python unique interpreter. " (interactive) (py-execute-prepare "block-or-clause" "python" t nil)) (defun py-execute-block-or-clause-python-dedicated-switch () "Send block-or-clause at point to Python unique interpreter and switch to result. " (interactive) (py-execute-prepare "block-or-clause" "python" t 'switch)) (defun py-execute-block-or-clause-ipython () "Send block-or-clause at point to IPython interpreter. " (interactive) (py-execute-prepare "block-or-clause" "ipython" nil nil)) (defun py-execute-block-or-clause-ipython-switch () "Send block-or-clause at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block-or-clause" "ipython" nil 'switch)) (defun py-execute-block-or-clause-ipython-no-switch () "Send block-or-clause at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block-or-clause" "ipython" nil 'no-switch)) (defun py-execute-block-or-clause-ipython-dedicated () "Send block-or-clause at point to IPython unique interpreter. " (interactive) (py-execute-prepare "block-or-clause" "ipython" t nil)) (defun py-execute-block-or-clause-ipython-dedicated-switch () "Send block-or-clause at point to IPython unique interpreter and switch to result. " (interactive) (py-execute-prepare "block-or-clause" "ipython" t 'switch)) (defun py-execute-block-or-clause-python3 () "Send block-or-clause at point to Python3 interpreter. " (interactive) (py-execute-prepare "block-or-clause" "python3" nil nil)) (defun py-execute-block-or-clause-python3-switch () "Send block-or-clause at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block-or-clause" "python3" nil 'switch)) (defun py-execute-block-or-clause-python3-no-switch () "Send block-or-clause at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block-or-clause" "python3" nil 'no-switch)) (defun py-execute-block-or-clause-python3-dedicated () "Send block-or-clause at point to Python3 unique interpreter. " (interactive) (py-execute-prepare "block-or-clause" "python3" t nil)) (defun py-execute-block-or-clause-python3-dedicated-switch () "Send block-or-clause at point to Python3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "block-or-clause" "python3" t 'switch)) (defun py-execute-block-or-clause-python2 () "Send block-or-clause at point to Python2 interpreter. " (interactive) (py-execute-prepare "block-or-clause" "python2" nil nil)) (defun py-execute-block-or-clause-python2-switch () "Send block-or-clause at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block-or-clause" "python2" nil 'switch)) (defun py-execute-block-or-clause-python2-no-switch () "Send block-or-clause at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block-or-clause" "python2" nil 'no-switch)) (defun py-execute-block-or-clause-python2-dedicated () "Send block-or-clause at point to Python2 unique interpreter. " (interactive) (py-execute-prepare "block-or-clause" "python2" t nil)) (defun py-execute-block-or-clause-python2-dedicated-switch () "Send block-or-clause at point to Python2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "block-or-clause" "python2" t 'switch)) (defun py-execute-block-or-clause-python2.7 () "Send block-or-clause at point to Python2.7 interpreter. " (interactive) (py-execute-prepare "block-or-clause" "python2.7" nil nil)) (defun py-execute-block-or-clause-python2.7-switch () "Send block-or-clause at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block-or-clause" "python2.7" nil 'switch)) (defun py-execute-block-or-clause-python2.7-no-switch () "Send block-or-clause at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block-or-clause" "python2.7" nil 'no-switch)) (defun py-execute-block-or-clause-python2.7-dedicated () "Send block-or-clause at point to Python2.7 unique interpreter. " (interactive) (py-execute-prepare "block-or-clause" "python2.7" t nil)) (defun py-execute-block-or-clause-python2.7-dedicated-switch () "Send block-or-clause at point to Python2.7 unique interpreter and switch to result. " (interactive) (py-execute-prepare "block-or-clause" "python2.7" t 'switch)) (defun py-execute-block-or-clause-jython () "Send block-or-clause at point to Jython interpreter. " (interactive) (py-execute-prepare "block-or-clause" "jython" nil nil)) (defun py-execute-block-or-clause-jython-switch () "Send block-or-clause at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block-or-clause" "jython" nil 'switch)) (defun py-execute-block-or-clause-jython-no-switch () "Send block-or-clause at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block-or-clause" "jython" nil 'no-switch)) (defun py-execute-block-or-clause-jython-dedicated () "Send block-or-clause at point to Jython unique interpreter. " (interactive) (py-execute-prepare "block-or-clause" "jython" t nil)) (defun py-execute-block-or-clause-jython-dedicated-switch () "Send block-or-clause at point to Jython unique interpreter and switch to result. " (interactive) (py-execute-prepare "block-or-clause" "jython" t 'switch)) (defun py-execute-block-or-clause-python3.2 () "Send block-or-clause at point to Python3.2 interpreter. " (interactive) (py-execute-prepare "block-or-clause" "python3.2" nil nil)) (defun py-execute-block-or-clause-python3.2-switch () "Send block-or-clause at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block-or-clause" "python3.2" nil 'switch)) (defun py-execute-block-or-clause-python3.2-no-switch () "Send block-or-clause at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block-or-clause" "python3.2" nil 'no-switch)) (defun py-execute-block-or-clause-python3.2-dedicated () "Send block-or-clause at point to Python3.2 unique interpreter. " (interactive) (py-execute-prepare "block-or-clause" "python3.2" t nil)) (defun py-execute-block-or-clause-python3.2-dedicated-switch () "Send block-or-clause at point to Python3.2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "block-or-clause" "python3.2" t 'switch)) (defun py-execute-block-or-clause-python3.3 () "Send block-or-clause at point to Python3.3 interpreter. " (interactive) (py-execute-prepare "block-or-clause" "python3.3" nil nil)) (defun py-execute-block-or-clause-python3.3-switch () "Send block-or-clause at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block-or-clause" "python3.3" nil 'switch)) (defun py-execute-block-or-clause-python3.3-no-switch () "Send block-or-clause at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block-or-clause" "python3.3" nil 'no-switch)) (defun py-execute-block-or-clause-python3.3-dedicated () "Send block-or-clause at point to Python3.3 unique interpreter. " (interactive) (py-execute-prepare "block-or-clause" "python3.3" t nil)) (defun py-execute-block-or-clause-python3.3-dedicated-switch () "Send block-or-clause at point to Python3.3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "block-or-clause" "python3.3" t 'switch)) (defun py-execute-block-or-clause-bpython () "Send block-or-clause at point to Bpython interpreter. " (interactive) (py-execute-prepare "block-or-clause" "bpython" nil nil)) (defun py-execute-block-or-clause-bpython-switch () "Send block-or-clause at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "block-or-clause" "bpython" nil 'switch)) (defun py-execute-block-or-clause-bpython-no-switch () "Send block-or-clause at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "block-or-clause" "bpython" nil 'no-switch)) (defun py-execute-block-or-clause-bpython-dedicated () "Send block-or-clause at point to Bpython unique interpreter. " (interactive) (py-execute-prepare "block-or-clause" "bpython" t nil)) (defun py-execute-block-or-clause-bpython-dedicated-switch () "Send block-or-clause at point to Bpython unique interpreter and switch to result. " (interactive) (py-execute-prepare "block-or-clause" "bpython" t 'switch)) (defun py-execute-def-python () "Send def at point to Python interpreter. " (interactive) (py-execute-prepare "def" "python" nil nil)) (defun py-execute-def-python-switch () "Send def at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "def" "python" nil 'switch)) (defun py-execute-def-python-no-switch () "Send def at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "def" "python" nil 'no-switch)) (defun py-execute-def-python-dedicated () "Send def at point to Python unique interpreter. " (interactive) (py-execute-prepare "def" "python" t nil)) (defun py-execute-def-python-dedicated-switch () "Send def at point to Python unique interpreter and switch to result. " (interactive) (py-execute-prepare "def" "python" t 'switch)) (defun py-execute-def-ipython () "Send def at point to IPython interpreter. " (interactive) (py-execute-prepare "def" "ipython" nil nil)) (defun py-execute-def-ipython-switch () "Send def at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "def" "ipython" nil 'switch)) (defun py-execute-def-ipython-no-switch () "Send def at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "def" "ipython" nil 'no-switch)) (defun py-execute-def-ipython-dedicated () "Send def at point to IPython unique interpreter. " (interactive) (py-execute-prepare "def" "ipython" t nil)) (defun py-execute-def-ipython-dedicated-switch () "Send def at point to IPython unique interpreter and switch to result. " (interactive) (py-execute-prepare "def" "ipython" t 'switch)) (defun py-execute-def-python3 () "Send def at point to Python3 interpreter. " (interactive) (py-execute-prepare "def" "python3" nil nil)) (defun py-execute-def-python3-switch () "Send def at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "def" "python3" nil 'switch)) (defun py-execute-def-python3-no-switch () "Send def at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "def" "python3" nil 'no-switch)) (defun py-execute-def-python3-dedicated () "Send def at point to Python3 unique interpreter. " (interactive) (py-execute-prepare "def" "python3" t nil)) (defun py-execute-def-python3-dedicated-switch () "Send def at point to Python3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "def" "python3" t 'switch)) (defun py-execute-def-python2 () "Send def at point to Python2 interpreter. " (interactive) (py-execute-prepare "def" "python2" nil nil)) (defun py-execute-def-python2-switch () "Send def at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "def" "python2" nil 'switch)) (defun py-execute-def-python2-no-switch () "Send def at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "def" "python2" nil 'no-switch)) (defun py-execute-def-python2-dedicated () "Send def at point to Python2 unique interpreter. " (interactive) (py-execute-prepare "def" "python2" t nil)) (defun py-execute-def-python2-dedicated-switch () "Send def at point to Python2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "def" "python2" t 'switch)) (defun py-execute-def-python2.7 () "Send def at point to Python2.7 interpreter. " (interactive) (py-execute-prepare "def" "python2.7" nil nil)) (defun py-execute-def-python2.7-switch () "Send def at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "def" "python2.7" nil 'switch)) (defun py-execute-def-python2.7-no-switch () "Send def at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "def" "python2.7" nil 'no-switch)) (defun py-execute-def-python2.7-dedicated () "Send def at point to Python2.7 unique interpreter. " (interactive) (py-execute-prepare "def" "python2.7" t nil)) (defun py-execute-def-python2.7-dedicated-switch () "Send def at point to Python2.7 unique interpreter and switch to result. " (interactive) (py-execute-prepare "def" "python2.7" t 'switch)) (defun py-execute-def-jython () "Send def at point to Jython interpreter. " (interactive) (py-execute-prepare "def" "jython" nil nil)) (defun py-execute-def-jython-switch () "Send def at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "def" "jython" nil 'switch)) (defun py-execute-def-jython-no-switch () "Send def at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "def" "jython" nil 'no-switch)) (defun py-execute-def-jython-dedicated () "Send def at point to Jython unique interpreter. " (interactive) (py-execute-prepare "def" "jython" t nil)) (defun py-execute-def-jython-dedicated-switch () "Send def at point to Jython unique interpreter and switch to result. " (interactive) (py-execute-prepare "def" "jython" t 'switch)) (defun py-execute-def-python3.2 () "Send def at point to Python3.2 interpreter. " (interactive) (py-execute-prepare "def" "python3.2" nil nil)) (defun py-execute-def-python3.2-switch () "Send def at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "def" "python3.2" nil 'switch)) (defun py-execute-def-python3.2-no-switch () "Send def at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "def" "python3.2" nil 'no-switch)) (defun py-execute-def-python3.2-dedicated () "Send def at point to Python3.2 unique interpreter. " (interactive) (py-execute-prepare "def" "python3.2" t nil)) (defun py-execute-def-python3.2-dedicated-switch () "Send def at point to Python3.2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "def" "python3.2" t 'switch)) (defun py-execute-def-python3.3 () "Send def at point to Python3.3 interpreter. " (interactive) (py-execute-prepare "def" "python3.3" nil nil)) (defun py-execute-def-python3.3-switch () "Send def at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "def" "python3.3" nil 'switch)) (defun py-execute-def-python3.3-no-switch () "Send def at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "def" "python3.3" nil 'no-switch)) (defun py-execute-def-python3.3-dedicated () "Send def at point to Python3.3 unique interpreter. " (interactive) (py-execute-prepare "def" "python3.3" t nil)) (defun py-execute-def-python3.3-dedicated-switch () "Send def at point to Python3.3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "def" "python3.3" t 'switch)) (defun py-execute-def-bpython () "Send def at point to Bpython interpreter. " (interactive) (py-execute-prepare "def" "bpython" nil nil)) (defun py-execute-def-bpython-switch () "Send def at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "def" "bpython" nil 'switch)) (defun py-execute-def-bpython-no-switch () "Send def at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "def" "bpython" nil 'no-switch)) (defun py-execute-def-bpython-dedicated () "Send def at point to Bpython unique interpreter. " (interactive) (py-execute-prepare "def" "bpython" t nil)) (defun py-execute-def-bpython-dedicated-switch () "Send def at point to Bpython unique interpreter and switch to result. " (interactive) (py-execute-prepare "def" "bpython" t 'switch)) (defun py-execute-class-python () "Send class at point to Python interpreter. " (interactive) (py-execute-prepare "class" "python" nil nil)) (defun py-execute-class-python-switch () "Send class at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "class" "python" nil 'switch)) (defun py-execute-class-python-no-switch () "Send class at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "class" "python" nil 'no-switch)) (defun py-execute-class-python-dedicated () "Send class at point to Python unique interpreter. " (interactive) (py-execute-prepare "class" "python" t nil)) (defun py-execute-class-python-dedicated-switch () "Send class at point to Python unique interpreter and switch to result. " (interactive) (py-execute-prepare "class" "python" t 'switch)) (defun py-execute-class-ipython () "Send class at point to IPython interpreter. " (interactive) (py-execute-prepare "class" "ipython" nil nil)) (defun py-execute-class-ipython-switch () "Send class at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "class" "ipython" nil 'switch)) (defun py-execute-class-ipython-no-switch () "Send class at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "class" "ipython" nil 'no-switch)) (defun py-execute-class-ipython-dedicated () "Send class at point to IPython unique interpreter. " (interactive) (py-execute-prepare "class" "ipython" t nil)) (defun py-execute-class-ipython-dedicated-switch () "Send class at point to IPython unique interpreter and switch to result. " (interactive) (py-execute-prepare "class" "ipython" t 'switch)) (defun py-execute-class-python3 () "Send class at point to Python3 interpreter. " (interactive) (py-execute-prepare "class" "python3" nil nil)) (defun py-execute-class-python3-switch () "Send class at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "class" "python3" nil 'switch)) (defun py-execute-class-python3-no-switch () "Send class at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "class" "python3" nil 'no-switch)) (defun py-execute-class-python3-dedicated () "Send class at point to Python3 unique interpreter. " (interactive) (py-execute-prepare "class" "python3" t nil)) (defun py-execute-class-python3-dedicated-switch () "Send class at point to Python3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "class" "python3" t 'switch)) (defun py-execute-class-python2 () "Send class at point to Python2 interpreter. " (interactive) (py-execute-prepare "class" "python2" nil nil)) (defun py-execute-class-python2-switch () "Send class at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "class" "python2" nil 'switch)) (defun py-execute-class-python2-no-switch () "Send class at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "class" "python2" nil 'no-switch)) (defun py-execute-class-python2-dedicated () "Send class at point to Python2 unique interpreter. " (interactive) (py-execute-prepare "class" "python2" t nil)) (defun py-execute-class-python2-dedicated-switch () "Send class at point to Python2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "class" "python2" t 'switch)) (defun py-execute-class-python2.7 () "Send class at point to Python2.7 interpreter. " (interactive) (py-execute-prepare "class" "python2.7" nil nil)) (defun py-execute-class-python2.7-switch () "Send class at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "class" "python2.7" nil 'switch)) (defun py-execute-class-python2.7-no-switch () "Send class at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "class" "python2.7" nil 'no-switch)) (defun py-execute-class-python2.7-dedicated () "Send class at point to Python2.7 unique interpreter. " (interactive) (py-execute-prepare "class" "python2.7" t nil)) (defun py-execute-class-python2.7-dedicated-switch () "Send class at point to Python2.7 unique interpreter and switch to result. " (interactive) (py-execute-prepare "class" "python2.7" t 'switch)) (defun py-execute-class-jython () "Send class at point to Jython interpreter. " (interactive) (py-execute-prepare "class" "jython" nil nil)) (defun py-execute-class-jython-switch () "Send class at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "class" "jython" nil 'switch)) (defun py-execute-class-jython-no-switch () "Send class at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "class" "jython" nil 'no-switch)) (defun py-execute-class-jython-dedicated () "Send class at point to Jython unique interpreter. " (interactive) (py-execute-prepare "class" "jython" t nil)) (defun py-execute-class-jython-dedicated-switch () "Send class at point to Jython unique interpreter and switch to result. " (interactive) (py-execute-prepare "class" "jython" t 'switch)) (defun py-execute-class-python3.2 () "Send class at point to Python3.2 interpreter. " (interactive) (py-execute-prepare "class" "python3.2" nil nil)) (defun py-execute-class-python3.2-switch () "Send class at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "class" "python3.2" nil 'switch)) (defun py-execute-class-python3.2-no-switch () "Send class at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "class" "python3.2" nil 'no-switch)) (defun py-execute-class-python3.2-dedicated () "Send class at point to Python3.2 unique interpreter. " (interactive) (py-execute-prepare "class" "python3.2" t nil)) (defun py-execute-class-python3.2-dedicated-switch () "Send class at point to Python3.2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "class" "python3.2" t 'switch)) (defun py-execute-class-python3.3 () "Send class at point to Python3.3 interpreter. " (interactive) (py-execute-prepare "class" "python3.3" nil nil)) (defun py-execute-class-python3.3-switch () "Send class at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "class" "python3.3" nil 'switch)) (defun py-execute-class-python3.3-no-switch () "Send class at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "class" "python3.3" nil 'no-switch)) (defun py-execute-class-python3.3-dedicated () "Send class at point to Python3.3 unique interpreter. " (interactive) (py-execute-prepare "class" "python3.3" t nil)) (defun py-execute-class-python3.3-dedicated-switch () "Send class at point to Python3.3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "class" "python3.3" t 'switch)) (defun py-execute-class-bpython () "Send class at point to Bpython interpreter. " (interactive) (py-execute-prepare "class" "bpython" nil nil)) (defun py-execute-class-bpython-switch () "Send class at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "class" "bpython" nil 'switch)) (defun py-execute-class-bpython-no-switch () "Send class at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "class" "bpython" nil 'no-switch)) (defun py-execute-class-bpython-dedicated () "Send class at point to Bpython unique interpreter. " (interactive) (py-execute-prepare "class" "bpython" t nil)) (defun py-execute-class-bpython-dedicated-switch () "Send class at point to Bpython unique interpreter and switch to result. " (interactive) (py-execute-prepare "class" "bpython" t 'switch)) (defun py-execute-region-python (beg end) "Send region at point to Python interpreter. " (interactive "r") (py-execute-prepare "region" "python" nil nil beg end)) (defun py-execute-region-python-switch (beg end) "Send region at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive "r") (py-execute-prepare "region" "python" nil 'switch beg end)) (defun py-execute-region-python-no-switch (beg end) "Send region at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive "r") (py-execute-prepare "region" "python" nil 'no-switch beg end)) (defun py-execute-region-python-dedicated (beg end) "Send region at point to Python unique interpreter. " (interactive "r") (py-execute-prepare "region" "python" t nil beg end)) (defun py-execute-region-python-dedicated-switch (beg end) "Send region at point to Python unique interpreter and switch to result. " (interactive "r") (py-execute-prepare "region" "python" t 'switch beg end)) (defun py-execute-region-ipython (beg end) "Send region at point to IPython interpreter. " (interactive "r") (py-execute-prepare "region" "ipython" nil nil beg end)) (defun py-execute-region-ipython-switch (beg end) "Send region at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive "r") (py-execute-prepare "region" "ipython" nil 'switch beg end)) (defun py-execute-region-ipython-no-switch (beg end) "Send region at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive "r") (py-execute-prepare "region" "ipython" nil 'no-switch beg end)) (defun py-execute-region-ipython-dedicated (beg end) "Send region at point to IPython unique interpreter. " (interactive "r") (py-execute-prepare "region" "ipython" t nil beg end)) (defun py-execute-region-ipython-dedicated-switch (beg end) "Send region at point to IPython unique interpreter and switch to result. " (interactive "r") (py-execute-prepare "region" "ipython" t 'switch beg end)) (defun py-execute-region-python3 (beg end) "Send region at point to Python3 interpreter. " (interactive "r") (py-execute-prepare "region" "python3" nil nil beg end)) (defun py-execute-region-python3-switch (beg end) "Send region at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive "r") (py-execute-prepare "region" "python3" nil 'switch beg end)) (defun py-execute-region-python3-no-switch (beg end) "Send region at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive "r") (py-execute-prepare "region" "python3" nil 'no-switch beg end)) (defun py-execute-region-python3-dedicated (beg end) "Send region at point to Python3 unique interpreter. " (interactive "r") (py-execute-prepare "region" "python3" t nil beg end)) (defun py-execute-region-python3-dedicated-switch (beg end) "Send region at point to Python3 unique interpreter and switch to result. " (interactive "r") (py-execute-prepare "region" "python3" t 'switch beg end)) (defun py-execute-region-python2 (beg end) "Send region at point to Python2 interpreter. " (interactive "r") (py-execute-prepare "region" "python2" nil nil beg end)) (defun py-execute-region-python2-switch (beg end) "Send region at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive "r") (py-execute-prepare "region" "python2" nil 'switch beg end)) (defun py-execute-region-python2-no-switch (beg end) "Send region at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive "r") (py-execute-prepare "region" "python2" nil 'no-switch beg end)) (defun py-execute-region-python2-dedicated (beg end) "Send region at point to Python2 unique interpreter. " (interactive "r") (py-execute-prepare "region" "python2" t nil beg end)) (defun py-execute-region-python2-dedicated-switch (beg end) "Send region at point to Python2 unique interpreter and switch to result. " (interactive "r") (py-execute-prepare "region" "python2" t 'switch beg end)) (defun py-execute-region-python2.7 (beg end) "Send region at point to Python2.7 interpreter. " (interactive "r") (py-execute-prepare "region" "python2.7" nil nil beg end)) (defun py-execute-region-python2.7-switch (beg end) "Send region at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive "r") (py-execute-prepare "region" "python2.7" nil 'switch beg end)) (defun py-execute-region-python2.7-no-switch (beg end) "Send region at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive "r") (py-execute-prepare "region" "python2.7" nil 'no-switch beg end)) (defun py-execute-region-python2.7-dedicated (beg end) "Send region at point to Python2.7 unique interpreter. " (interactive "r") (py-execute-prepare "region" "python2.7" t nil beg end)) (defun py-execute-region-python2.7-dedicated-switch (beg end) "Send region at point to Python2.7 unique interpreter and switch to result. " (interactive "r") (py-execute-prepare "region" "python2.7" t 'switch beg end)) (defun py-execute-region-jython (beg end) "Send region at point to Jython interpreter. " (interactive "r") (py-execute-prepare "region" "jython" nil nil beg end)) (defun py-execute-region-jython-switch (beg end) "Send region at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive "r") (py-execute-prepare "region" "jython" nil 'switch beg end)) (defun py-execute-region-jython-no-switch (beg end) "Send region at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive "r") (py-execute-prepare "region" "jython" nil 'no-switch beg end)) (defun py-execute-region-jython-dedicated (beg end) "Send region at point to Jython unique interpreter. " (interactive "r") (py-execute-prepare "region" "jython" t nil beg end)) (defun py-execute-region-jython-dedicated-switch (beg end) "Send region at point to Jython unique interpreter and switch to result. " (interactive "r") (py-execute-prepare "region" "jython" t 'switch beg end)) (defun py-execute-region-python3.2 (beg end) "Send region at point to Python3.2 interpreter. " (interactive "r") (py-execute-prepare "region" "python3.2" nil nil beg end)) (defun py-execute-region-python3.2-switch (beg end) "Send region at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive "r") (py-execute-prepare "region" "python3.2" nil 'switch beg end)) (defun py-execute-region-python3.2-no-switch (beg end) "Send region at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive "r") (py-execute-prepare "region" "python3.2" nil 'no-switch beg end)) (defun py-execute-region-python3.2-dedicated (beg end) "Send region at point to Python3.2 unique interpreter. " (interactive "r") (py-execute-prepare "region" "python3.2" t nil beg end)) (defun py-execute-region-python3.2-dedicated-switch (beg end) "Send region at point to Python3.2 unique interpreter and switch to result. " (interactive "r") (py-execute-prepare "region" "python3.2" t 'switch beg end)) (defun py-execute-region-python3.3 (beg end) "Send region at point to Python3.3 interpreter. " (interactive "r") (py-execute-prepare "region" "python3.3" nil nil beg end)) (defun py-execute-region-python3.3-switch (beg end) "Send region at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive "r") (py-execute-prepare "region" "python3.3" nil 'switch beg end)) (defun py-execute-region-python3.3-no-switch (beg end) "Send region at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive "r") (py-execute-prepare "region" "python3.3" nil 'no-switch beg end)) (defun py-execute-region-python3.3-dedicated (beg end) "Send region at point to Python3.3 unique interpreter. " (interactive "r") (py-execute-prepare "region" "python3.3" t nil beg end)) (defun py-execute-region-python3.3-dedicated-switch (beg end) "Send region at point to Python3.3 unique interpreter and switch to result. " (interactive "r") (py-execute-prepare "region" "python3.3" t 'switch beg end)) (defun py-execute-region-bpython (beg end) "Send region at point to Bpython interpreter. " (interactive "r") (py-execute-prepare "region" "bpython" nil nil beg end)) (defun py-execute-region-bpython-switch (beg end) "Send region at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive "r") (py-execute-prepare "region" "bpython" nil 'switch beg end)) (defun py-execute-region-bpython-no-switch (beg end) "Send region at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive "r") (py-execute-prepare "region" "bpython" nil 'no-switch beg end)) (defun py-execute-region-bpython-dedicated (beg end) "Send region at point to Bpython unique interpreter. " (interactive "r") (py-execute-prepare "region" "bpython" t nil beg end)) (defun py-execute-region-bpython-dedicated-switch (beg end) "Send region at point to Bpython unique interpreter and switch to result. " (interactive "r") (py-execute-prepare "region" "bpython" t 'switch beg end)) (defun py-execute-buffer-python () "Send buffer at point to Python interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python" nil nil (point-min) (point-max))))) (defun py-execute-buffer-python-switch () "Send buffer at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python" nil 'switch (point-min) (point-max))))) (defun py-execute-buffer-python-no-switch () "Send buffer at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python" nil 'no-switch (point-min) (point-max))))) (defun py-execute-buffer-python-dedicated () "Send buffer at point to Python unique interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python" t nil (point-min) (point-max))))) (defun py-execute-buffer-python-dedicated-switch () "Send buffer at point to Python unique interpreter and switch to result. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python" t 'switch (point-min) (point-max))))) (defun py-execute-buffer-ipython () "Send buffer at point to IPython interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "ipython" nil nil (point-min) (point-max))))) (defun py-execute-buffer-ipython-switch () "Send buffer at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "ipython" nil 'switch (point-min) (point-max))))) (defun py-execute-buffer-ipython-no-switch () "Send buffer at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "ipython" nil 'no-switch (point-min) (point-max))))) (defun py-execute-buffer-ipython-dedicated () "Send buffer at point to IPython unique interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "ipython" t nil (point-min) (point-max))))) (defun py-execute-buffer-ipython-dedicated-switch () "Send buffer at point to IPython unique interpreter and switch to result. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "ipython" t 'switch (point-min) (point-max))))) (defun py-execute-buffer-python3 () "Send buffer at point to Python3 interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python3" nil nil (point-min) (point-max))))) (defun py-execute-buffer-python3-switch () "Send buffer at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python3" nil 'switch (point-min) (point-max))))) (defun py-execute-buffer-python3-no-switch () "Send buffer at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python3" nil 'no-switch (point-min) (point-max))))) (defun py-execute-buffer-python3-dedicated () "Send buffer at point to Python3 unique interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python3" t nil (point-min) (point-max))))) (defun py-execute-buffer-python3-dedicated-switch () "Send buffer at point to Python3 unique interpreter and switch to result. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python3" t 'switch (point-min) (point-max))))) (defun py-execute-buffer-python2 () "Send buffer at point to Python2 interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python2" nil nil (point-min) (point-max))))) (defun py-execute-buffer-python2-switch () "Send buffer at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python2" nil 'switch (point-min) (point-max))))) (defun py-execute-buffer-python2-no-switch () "Send buffer at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python2" nil 'no-switch (point-min) (point-max))))) (defun py-execute-buffer-python2-dedicated () "Send buffer at point to Python2 unique interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python2" t nil (point-min) (point-max))))) (defun py-execute-buffer-python2-dedicated-switch () "Send buffer at point to Python2 unique interpreter and switch to result. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python2" t 'switch (point-min) (point-max))))) (defun py-execute-buffer-python2.7 () "Send buffer at point to Python2.7 interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python2.7" nil nil (point-min) (point-max))))) (defun py-execute-buffer-python2.7-switch () "Send buffer at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python2.7" nil 'switch (point-min) (point-max))))) (defun py-execute-buffer-python2.7-no-switch () "Send buffer at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python2.7" nil 'no-switch (point-min) (point-max))))) (defun py-execute-buffer-python2.7-dedicated () "Send buffer at point to Python2.7 unique interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python2.7" t nil (point-min) (point-max))))) (defun py-execute-buffer-python2.7-dedicated-switch () "Send buffer at point to Python2.7 unique interpreter and switch to result. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python2.7" t 'switch (point-min) (point-max))))) (defun py-execute-buffer-jython () "Send buffer at point to Jython interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "jython" nil nil (point-min) (point-max))))) (defun py-execute-buffer-jython-switch () "Send buffer at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "jython" nil 'switch (point-min) (point-max))))) (defun py-execute-buffer-jython-no-switch () "Send buffer at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "jython" nil 'no-switch (point-min) (point-max))))) (defun py-execute-buffer-jython-dedicated () "Send buffer at point to Jython unique interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "jython" t nil (point-min) (point-max))))) (defun py-execute-buffer-jython-dedicated-switch () "Send buffer at point to Jython unique interpreter and switch to result. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "jython" t 'switch (point-min) (point-max))))) (defun py-execute-buffer-python3.2 () "Send buffer at point to Python3.2 interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python3.2" nil nil (point-min) (point-max))))) (defun py-execute-buffer-python3.2-switch () "Send buffer at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python3.2" nil 'switch (point-min) (point-max))))) (defun py-execute-buffer-python3.2-no-switch () "Send buffer at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python3.2" nil 'no-switch (point-min) (point-max))))) (defun py-execute-buffer-python3.2-dedicated () "Send buffer at point to Python3.2 unique interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python3.2" t nil (point-min) (point-max))))) (defun py-execute-buffer-python3.2-dedicated-switch () "Send buffer at point to Python3.2 unique interpreter and switch to result. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python3.2" t 'switch (point-min) (point-max))))) (defun py-execute-buffer-python3.3 () "Send buffer at point to Python3.3 interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python3.3" nil nil (point-min) (point-max))))) (defun py-execute-buffer-python3.3-switch () "Send buffer at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python3.3" nil 'switch (point-min) (point-max))))) (defun py-execute-buffer-python3.3-no-switch () "Send buffer at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python3.3" nil 'no-switch (point-min) (point-max))))) (defun py-execute-buffer-python3.3-dedicated () "Send buffer at point to Python3.3 unique interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python3.3" t nil (point-min) (point-max))))) (defun py-execute-buffer-python3.3-dedicated-switch () "Send buffer at point to Python3.3 unique interpreter and switch to result. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "python3.3" t 'switch (point-min) (point-max))))) (defun py-execute-buffer-bpython () "Send buffer at point to Bpython interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "bpython" nil nil (point-min) (point-max))))) (defun py-execute-buffer-bpython-switch () "Send buffer at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "bpython" nil 'switch (point-min) (point-max))))) (defun py-execute-buffer-bpython-no-switch () "Send buffer at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "bpython" nil 'no-switch (point-min) (point-max))))) (defun py-execute-buffer-bpython-dedicated () "Send buffer at point to Bpython unique interpreter. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "bpython" t nil (point-min) (point-max))))) (defun py-execute-buffer-bpython-dedicated-switch () "Send buffer at point to Bpython unique interpreter and switch to result. " (interactive) (save-excursion (let ((wholebuf t) (py-master-file (or py-master-file (py-fetch-py-master-file))) beg end) (when py-master-file (let* ((filename (expand-file-name py-master-file)) (buffer (or (get-file-buffer filename) (find-file-noselect filename)))) (set-buffer buffer))) (py-execute-prepare "buffer" "bpython" t 'switch (point-min) (point-max))))) (defun py-execute-expression-python () "Send expression at point to Python interpreter. " (interactive) (py-execute-prepare "expression" "python" nil nil)) (defun py-execute-expression-python-switch () "Send expression at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "expression" "python" nil 'switch)) (defun py-execute-expression-python-no-switch () "Send expression at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "expression" "python" nil 'no-switch)) (defun py-execute-expression-python-dedicated () "Send expression at point to Python unique interpreter. " (interactive) (py-execute-prepare "expression" "python" t nil)) (defun py-execute-expression-python-dedicated-switch () "Send expression at point to Python unique interpreter and switch to result. " (interactive) (py-execute-prepare "expression" "python" t 'switch)) (defun py-execute-expression-ipython () "Send expression at point to IPython interpreter. " (interactive) (py-execute-prepare "expression" "ipython" nil nil)) (defun py-execute-expression-ipython-switch () "Send expression at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "expression" "ipython" nil 'switch)) (defun py-execute-expression-ipython-no-switch () "Send expression at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "expression" "ipython" nil 'no-switch)) (defun py-execute-expression-ipython-dedicated () "Send expression at point to IPython unique interpreter. " (interactive) (py-execute-prepare "expression" "ipython" t nil)) (defun py-execute-expression-ipython-dedicated-switch () "Send expression at point to IPython unique interpreter and switch to result. " (interactive) (py-execute-prepare "expression" "ipython" t 'switch)) (defun py-execute-expression-python3 () "Send expression at point to Python3 interpreter. " (interactive) (py-execute-prepare "expression" "python3" nil nil)) (defun py-execute-expression-python3-switch () "Send expression at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "expression" "python3" nil 'switch)) (defun py-execute-expression-python3-no-switch () "Send expression at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "expression" "python3" nil 'no-switch)) (defun py-execute-expression-python3-dedicated () "Send expression at point to Python3 unique interpreter. " (interactive) (py-execute-prepare "expression" "python3" t nil)) (defun py-execute-expression-python3-dedicated-switch () "Send expression at point to Python3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "expression" "python3" t 'switch)) (defun py-execute-expression-python2 () "Send expression at point to Python2 interpreter. " (interactive) (py-execute-prepare "expression" "python2" nil nil)) (defun py-execute-expression-python2-switch () "Send expression at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "expression" "python2" nil 'switch)) (defun py-execute-expression-python2-no-switch () "Send expression at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "expression" "python2" nil 'no-switch)) (defun py-execute-expression-python2-dedicated () "Send expression at point to Python2 unique interpreter. " (interactive) (py-execute-prepare "expression" "python2" t nil)) (defun py-execute-expression-python2-dedicated-switch () "Send expression at point to Python2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "expression" "python2" t 'switch)) (defun py-execute-expression-python2.7 () "Send expression at point to Python2.7 interpreter. " (interactive) (py-execute-prepare "expression" "python2.7" nil nil)) (defun py-execute-expression-python2.7-switch () "Send expression at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "expression" "python2.7" nil 'switch)) (defun py-execute-expression-python2.7-no-switch () "Send expression at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "expression" "python2.7" nil 'no-switch)) (defun py-execute-expression-python2.7-dedicated () "Send expression at point to Python2.7 unique interpreter. " (interactive) (py-execute-prepare "expression" "python2.7" t nil)) (defun py-execute-expression-python2.7-dedicated-switch () "Send expression at point to Python2.7 unique interpreter and switch to result. " (interactive) (py-execute-prepare "expression" "python2.7" t 'switch)) (defun py-execute-expression-jython () "Send expression at point to Jython interpreter. " (interactive) (py-execute-prepare "expression" "jython" nil nil)) (defun py-execute-expression-jython-switch () "Send expression at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "expression" "jython" nil 'switch)) (defun py-execute-expression-jython-no-switch () "Send expression at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "expression" "jython" nil 'no-switch)) (defun py-execute-expression-jython-dedicated () "Send expression at point to Jython unique interpreter. " (interactive) (py-execute-prepare "expression" "jython" t nil)) (defun py-execute-expression-jython-dedicated-switch () "Send expression at point to Jython unique interpreter and switch to result. " (interactive) (py-execute-prepare "expression" "jython" t 'switch)) (defun py-execute-expression-python3.2 () "Send expression at point to Python3.2 interpreter. " (interactive) (py-execute-prepare "expression" "python3.2" nil nil)) (defun py-execute-expression-python3.2-switch () "Send expression at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "expression" "python3.2" nil 'switch)) (defun py-execute-expression-python3.2-no-switch () "Send expression at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "expression" "python3.2" nil 'no-switch)) (defun py-execute-expression-python3.2-dedicated () "Send expression at point to Python3.2 unique interpreter. " (interactive) (py-execute-prepare "expression" "python3.2" t nil)) (defun py-execute-expression-python3.2-dedicated-switch () "Send expression at point to Python3.2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "expression" "python3.2" t 'switch)) (defun py-execute-expression-python3.3 () "Send expression at point to Python3.3 interpreter. " (interactive) (py-execute-prepare "expression" "python3.3" nil nil)) (defun py-execute-expression-python3.3-switch () "Send expression at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "expression" "python3.3" nil 'switch)) (defun py-execute-expression-python3.3-no-switch () "Send expression at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "expression" "python3.3" nil 'no-switch)) (defun py-execute-expression-python3.3-dedicated () "Send expression at point to Python3.3 unique interpreter. " (interactive) (py-execute-prepare "expression" "python3.3" t nil)) (defun py-execute-expression-python3.3-dedicated-switch () "Send expression at point to Python3.3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "expression" "python3.3" t 'switch)) (defun py-execute-expression-bpython () "Send expression at point to Bpython interpreter. " (interactive) (py-execute-prepare "expression" "bpython" nil nil)) (defun py-execute-expression-bpython-switch () "Send expression at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "expression" "bpython" nil 'switch)) (defun py-execute-expression-bpython-no-switch () "Send expression at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "expression" "bpython" nil 'no-switch)) (defun py-execute-expression-bpython-dedicated () "Send expression at point to Bpython unique interpreter. " (interactive) (py-execute-prepare "expression" "bpython" t nil)) (defun py-execute-expression-bpython-dedicated-switch () "Send expression at point to Bpython unique interpreter and switch to result. " (interactive) (py-execute-prepare "expression" "bpython" t 'switch)) (defun py-execute-partial-expression-python () "Send partial-expression at point to Python interpreter. " (interactive) (py-execute-prepare "partial-expression" "python" nil nil)) (defun py-execute-partial-expression-python-switch () "Send partial-expression at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "partial-expression" "python" nil 'switch)) (defun py-execute-partial-expression-python-no-switch () "Send partial-expression at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "partial-expression" "python" nil 'no-switch)) (defun py-execute-partial-expression-python-dedicated () "Send partial-expression at point to Python unique interpreter. " (interactive) (py-execute-prepare "partial-expression" "python" t nil)) (defun py-execute-partial-expression-python-dedicated-switch () "Send partial-expression at point to Python unique interpreter and switch to result. " (interactive) (py-execute-prepare "partial-expression" "python" t 'switch)) (defun py-execute-partial-expression-ipython () "Send partial-expression at point to IPython interpreter. " (interactive) (py-execute-prepare "partial-expression" "ipython" nil nil)) (defun py-execute-partial-expression-ipython-switch () "Send partial-expression at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "partial-expression" "ipython" nil 'switch)) (defun py-execute-partial-expression-ipython-no-switch () "Send partial-expression at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "partial-expression" "ipython" nil 'no-switch)) (defun py-execute-partial-expression-ipython-dedicated () "Send partial-expression at point to IPython unique interpreter. " (interactive) (py-execute-prepare "partial-expression" "ipython" t nil)) (defun py-execute-partial-expression-ipython-dedicated-switch () "Send partial-expression at point to IPython unique interpreter and switch to result. " (interactive) (py-execute-prepare "partial-expression" "ipython" t 'switch)) (defun py-execute-partial-expression-python3 () "Send partial-expression at point to Python3 interpreter. " (interactive) (py-execute-prepare "partial-expression" "python3" nil nil)) (defun py-execute-partial-expression-python3-switch () "Send partial-expression at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "partial-expression" "python3" nil 'switch)) (defun py-execute-partial-expression-python3-no-switch () "Send partial-expression at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "partial-expression" "python3" nil 'no-switch)) (defun py-execute-partial-expression-python3-dedicated () "Send partial-expression at point to Python3 unique interpreter. " (interactive) (py-execute-prepare "partial-expression" "python3" t nil)) (defun py-execute-partial-expression-python3-dedicated-switch () "Send partial-expression at point to Python3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "partial-expression" "python3" t 'switch)) (defun py-execute-partial-expression-python2 () "Send partial-expression at point to Python2 interpreter. " (interactive) (py-execute-prepare "partial-expression" "python2" nil nil)) (defun py-execute-partial-expression-python2-switch () "Send partial-expression at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "partial-expression" "python2" nil 'switch)) (defun py-execute-partial-expression-python2-no-switch () "Send partial-expression at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "partial-expression" "python2" nil 'no-switch)) (defun py-execute-partial-expression-python2-dedicated () "Send partial-expression at point to Python2 unique interpreter. " (interactive) (py-execute-prepare "partial-expression" "python2" t nil)) (defun py-execute-partial-expression-python2-dedicated-switch () "Send partial-expression at point to Python2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "partial-expression" "python2" t 'switch)) (defun py-execute-partial-expression-python2.7 () "Send partial-expression at point to Python2.7 interpreter. " (interactive) (py-execute-prepare "partial-expression" "python2.7" nil nil)) (defun py-execute-partial-expression-python2.7-switch () "Send partial-expression at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "partial-expression" "python2.7" nil 'switch)) (defun py-execute-partial-expression-python2.7-no-switch () "Send partial-expression at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "partial-expression" "python2.7" nil 'no-switch)) (defun py-execute-partial-expression-python2.7-dedicated () "Send partial-expression at point to Python2.7 unique interpreter. " (interactive) (py-execute-prepare "partial-expression" "python2.7" t nil)) (defun py-execute-partial-expression-python2.7-dedicated-switch () "Send partial-expression at point to Python2.7 unique interpreter and switch to result. " (interactive) (py-execute-prepare "partial-expression" "python2.7" t 'switch)) (defun py-execute-partial-expression-jython () "Send partial-expression at point to Jython interpreter. " (interactive) (py-execute-prepare "partial-expression" "jython" nil nil)) (defun py-execute-partial-expression-jython-switch () "Send partial-expression at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "partial-expression" "jython" nil 'switch)) (defun py-execute-partial-expression-jython-no-switch () "Send partial-expression at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "partial-expression" "jython" nil 'no-switch)) (defun py-execute-partial-expression-jython-dedicated () "Send partial-expression at point to Jython unique interpreter. " (interactive) (py-execute-prepare "partial-expression" "jython" t nil)) (defun py-execute-partial-expression-jython-dedicated-switch () "Send partial-expression at point to Jython unique interpreter and switch to result. " (interactive) (py-execute-prepare "partial-expression" "jython" t 'switch)) (defun py-execute-partial-expression-python3.2 () "Send partial-expression at point to Python3.2 interpreter. " (interactive) (py-execute-prepare "partial-expression" "python3.2" nil nil)) (defun py-execute-partial-expression-python3.2-switch () "Send partial-expression at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "partial-expression" "python3.2" nil 'switch)) (defun py-execute-partial-expression-python3.2-no-switch () "Send partial-expression at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "partial-expression" "python3.2" nil 'no-switch)) (defun py-execute-partial-expression-python3.2-dedicated () "Send partial-expression at point to Python3.2 unique interpreter. " (interactive) (py-execute-prepare "partial-expression" "python3.2" t nil)) (defun py-execute-partial-expression-python3.2-dedicated-switch () "Send partial-expression at point to Python3.2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "partial-expression" "python3.2" t 'switch)) (defun py-execute-partial-expression-python3.3 () "Send partial-expression at point to Python3.3 interpreter. " (interactive) (py-execute-prepare "partial-expression" "python3.3" nil nil)) (defun py-execute-partial-expression-python3.3-switch () "Send partial-expression at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "partial-expression" "python3.3" nil 'switch)) (defun py-execute-partial-expression-python3.3-no-switch () "Send partial-expression at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "partial-expression" "python3.3" nil 'no-switch)) (defun py-execute-partial-expression-python3.3-dedicated () "Send partial-expression at point to Python3.3 unique interpreter. " (interactive) (py-execute-prepare "partial-expression" "python3.3" t nil)) (defun py-execute-partial-expression-python3.3-dedicated-switch () "Send partial-expression at point to Python3.3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "partial-expression" "python3.3" t 'switch)) (defun py-execute-partial-expression-bpython () "Send partial-expression at point to Bpython interpreter. " (interactive) (py-execute-prepare "partial-expression" "bpython" nil nil)) (defun py-execute-partial-expression-bpython-switch () "Send partial-expression at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "partial-expression" "bpython" nil 'switch)) (defun py-execute-partial-expression-bpython-no-switch () "Send partial-expression at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "partial-expression" "bpython" nil 'no-switch)) (defun py-execute-partial-expression-bpython-dedicated () "Send partial-expression at point to Bpython unique interpreter. " (interactive) (py-execute-prepare "partial-expression" "bpython" t nil)) (defun py-execute-partial-expression-bpython-dedicated-switch () "Send partial-expression at point to Bpython unique interpreter and switch to result. " (interactive) (py-execute-prepare "partial-expression" "bpython" t 'switch)) (defun py-execute-line-python () "Send line at point to Python interpreter. " (interactive) (py-execute-prepare "line" "python" nil nil)) (defun py-execute-line-python-switch () "Send line at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "line" "python" nil 'switch)) (defun py-execute-line-python-no-switch () "Send line at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "line" "python" nil 'no-switch)) (defun py-execute-line-python-dedicated () "Send line at point to Python unique interpreter. " (interactive) (py-execute-prepare "line" "python" t nil)) (defun py-execute-line-python-dedicated-switch () "Send line at point to Python unique interpreter and switch to result. " (interactive) (py-execute-prepare "line" "python" t 'switch)) (defun py-execute-line-ipython () "Send line at point to IPython interpreter. " (interactive) (py-execute-prepare "line" "ipython" nil nil)) (defun py-execute-line-ipython-switch () "Send line at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "line" "ipython" nil 'switch)) (defun py-execute-line-ipython-no-switch () "Send line at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "line" "ipython" nil 'no-switch)) (defun py-execute-line-ipython-dedicated () "Send line at point to IPython unique interpreter. " (interactive) (py-execute-prepare "line" "ipython" t nil)) (defun py-execute-line-ipython-dedicated-switch () "Send line at point to IPython unique interpreter and switch to result. " (interactive) (py-execute-prepare "line" "ipython" t 'switch)) (defun py-execute-line-python3 () "Send line at point to Python3 interpreter. " (interactive) (py-execute-prepare "line" "python3" nil nil)) (defun py-execute-line-python3-switch () "Send line at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "line" "python3" nil 'switch)) (defun py-execute-line-python3-no-switch () "Send line at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "line" "python3" nil 'no-switch)) (defun py-execute-line-python3-dedicated () "Send line at point to Python3 unique interpreter. " (interactive) (py-execute-prepare "line" "python3" t nil)) (defun py-execute-line-python3-dedicated-switch () "Send line at point to Python3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "line" "python3" t 'switch)) (defun py-execute-line-python2 () "Send line at point to Python2 interpreter. " (interactive) (py-execute-prepare "line" "python2" nil nil)) (defun py-execute-line-python2-switch () "Send line at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "line" "python2" nil 'switch)) (defun py-execute-line-python2-no-switch () "Send line at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "line" "python2" nil 'no-switch)) (defun py-execute-line-python2-dedicated () "Send line at point to Python2 unique interpreter. " (interactive) (py-execute-prepare "line" "python2" t nil)) (defun py-execute-line-python2-dedicated-switch () "Send line at point to Python2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "line" "python2" t 'switch)) (defun py-execute-line-python2.7 () "Send line at point to Python2.7 interpreter. " (interactive) (py-execute-prepare "line" "python2.7" nil nil)) (defun py-execute-line-python2.7-switch () "Send line at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "line" "python2.7" nil 'switch)) (defun py-execute-line-python2.7-no-switch () "Send line at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "line" "python2.7" nil 'no-switch)) (defun py-execute-line-python2.7-dedicated () "Send line at point to Python2.7 unique interpreter. " (interactive) (py-execute-prepare "line" "python2.7" t nil)) (defun py-execute-line-python2.7-dedicated-switch () "Send line at point to Python2.7 unique interpreter and switch to result. " (interactive) (py-execute-prepare "line" "python2.7" t 'switch)) (defun py-execute-line-jython () "Send line at point to Jython interpreter. " (interactive) (py-execute-prepare "line" "jython" nil nil)) (defun py-execute-line-jython-switch () "Send line at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "line" "jython" nil 'switch)) (defun py-execute-line-jython-no-switch () "Send line at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "line" "jython" nil 'no-switch)) (defun py-execute-line-jython-dedicated () "Send line at point to Jython unique interpreter. " (interactive) (py-execute-prepare "line" "jython" t nil)) (defun py-execute-line-jython-dedicated-switch () "Send line at point to Jython unique interpreter and switch to result. " (interactive) (py-execute-prepare "line" "jython" t 'switch)) (defun py-execute-line-python3.2 () "Send line at point to Python3.2 interpreter. " (interactive) (py-execute-prepare "line" "python3.2" nil nil)) (defun py-execute-line-python3.2-switch () "Send line at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "line" "python3.2" nil 'switch)) (defun py-execute-line-python3.2-no-switch () "Send line at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "line" "python3.2" nil 'no-switch)) (defun py-execute-line-python3.2-dedicated () "Send line at point to Python3.2 unique interpreter. " (interactive) (py-execute-prepare "line" "python3.2" t nil)) (defun py-execute-line-python3.2-dedicated-switch () "Send line at point to Python3.2 unique interpreter and switch to result. " (interactive) (py-execute-prepare "line" "python3.2" t 'switch)) (defun py-execute-line-python3.3 () "Send line at point to Python3.3 interpreter. " (interactive) (py-execute-prepare "line" "python3.3" nil nil)) (defun py-execute-line-python3.3-switch () "Send line at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "line" "python3.3" nil 'switch)) (defun py-execute-line-python3.3-no-switch () "Send line at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "line" "python3.3" nil 'no-switch)) (defun py-execute-line-python3.3-dedicated () "Send line at point to Python3.3 unique interpreter. " (interactive) (py-execute-prepare "line" "python3.3" t nil)) (defun py-execute-line-python3.3-dedicated-switch () "Send line at point to Python3.3 unique interpreter and switch to result. " (interactive) (py-execute-prepare "line" "python3.3" t 'switch)) (defun py-execute-line-bpython () "Send line at point to Bpython interpreter. " (interactive) (py-execute-prepare "line" "bpython" nil nil)) (defun py-execute-line-bpython-switch () "Send line at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. " (interactive) (py-execute-prepare "line" "bpython" nil 'switch)) (defun py-execute-line-bpython-no-switch () "Send line at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' " (interactive) (py-execute-prepare "line" "bpython" nil 'no-switch)) (defun py-execute-line-bpython-dedicated () "Send line at point to Bpython unique interpreter. " (interactive) (py-execute-prepare "line" "bpython" t nil)) (defun py-execute-line-bpython-dedicated-switch () "Send line at point to Bpython unique interpreter and switch to result. " (interactive) (py-execute-prepare "line" "bpython" t 'switch)) ;;; Subprocess utilities and filters (defun py-postprocess-output-buffer (buf) "Highlight exceptions found in BUF. If an exception occurred return error-string, otherwise return nil. BUF must exist. Indicate LINE if code wasn't run from a file, thus remember line of source buffer " (set-buffer buf) ;; (sit-for 0.1) (let ((pmx (copy-marker (point-max))) file bol err-p estring ecode limit) (unless (looking-back py-pdbtrack-input-prompt) (save-excursion (forward-line -1) (end-of-line) (when (or (re-search-backward py-shell-prompt-regexp nil t 1) ;; (and (string= "ipython" (process-name proc)) (re-search-backward ipython-de-input-prompt-regexp nil t 1)) ;; not a useful message, delete it - please tell when thinking otherwise (and (re-search-forward "File \"\", line 1,.*\n" nil t) (replace-match "")) ;; File "/tmp/ipython-3984xMQ.py", line 1 ;; print(3*5f) (when (and (re-search-forward py-traceback-line-re limit t) (match-string-no-properties 0) (or (match-string 1) (match-string 3))) (when (match-string-no-properties 1) (replace-match (buffer-name py-exception-buffer) nil nil nil 1) (setq file py-exception-buffer) (and origline (replace-match (number-to-string origline) nil nil nil 2)) (goto-char (match-beginning 0)) ;; if no buffer-file exists, signal "Buffer", not "File" (save-match-data (and (not (buffer-file-name (or (get-buffer py-exception-buffer) (get-buffer (file-name-nondirectory py-exception-buffer))))) (string-match "^[ \t]*File" (buffer-substring-no-properties (match-beginning 0) (match-end 0))) (looking-at "[ \t]*File") (replace-match " Buffer"))) (add-to-list 'err-p origline) (add-to-list 'err-p file) (overlay-put (make-overlay (match-beginning 0) (match-end 0)) 'face 'highlight)) ;; If not file exists, just a buffer, correct message (forward-line 1) (when (looking-at "[ \t]*\\([^\t\n\r\f]+\\)[ \t]*$") (setq estring (match-string-no-properties 1)) (add-to-list 'err-p estring t) (setq ecode (buffer-substring-no-properties (line-end-position) (progn (re-search-forward comint-prompt-regexp nil t 1)(match-beginning 0)))) (setq ecode (replace-regexp-in-string "[ \n\t\f\r^]+" " " ecode)) (add-to-list 'err-p ecode t)))))) err-p)) (defun py-remove-overlays-at-point () "Remove overlays as set when `py-highlight-error-source-p' is non-nil. " (interactive "*") (delete-overlay (car (overlays-at (point))))) (defun py-jump-to-exception-intern (action exception-buffer) (let (erg) (set-buffer exception-buffer) ;; (message "%s" (current-buffer)) (goto-char (point-min)) (forward-line (1- origline)) (switch-to-buffer (current-buffer)) (push-mark) (and (search-forward action (line-end-position) t) (and py-verbose-p (message "Exception in file %s on line %d" py-exception-buffer origline)) (and py-highlight-error-source-p (setq erg (make-overlay (match-beginning 0) (match-end 0))) (overlay-put erg 'face 'highlight)) ;; (remove-overlays (match-beginning 0) (match-end 0) 'face 'highlight) ))) (defun py-jump-to-exception (err-p &optional file) "Jump to the Python code in FILE at LINE." (let ( ;; (inhibit-point-motion-hooks t) (file (or file (car err-p))) (line (cadr err-p)) (action (nth 2 err-p)) (errm (nth 3 err-p))) (cond ((and py-exception-buffer (buffer-live-p py-exception-buffer)) ;; (pop-to-buffer procbuf) (py-jump-to-exception-intern action py-exception-buffer)) ((ignore-errors (file-readable-p file)) (find-file file) (py-jump-to-exception-intern action (get-buffer (file-name-nondirectory file)))) ((buffer-live-p (get-buffer file)) (set-buffer file) (switch-to-buffer (current-buffer)) (py-jump-to-exception-intern action file)) (t (setq file (find-file (read-file-name "Exception file: " nil file t))) (py-jump-to-exception-intern action file))))) (defun py-down-exception (&optional bottom) "Go to the next line down in the traceback. With \\[universal-argument] (programmatically, optional argument BOTTOM), jump to the bottom (innermost) exception in the exception stack." (interactive "P") (py-find-next-exception-prepare 'down (when (eq 4 (prefix-numeric-value bottom)) "BOTTOM"))) (defun py-up-exception (&optional top) "Go to the previous line up in the traceback. With \\[universal-argument] (programmatically, optional argument TOP) jump to the top (outermost) exception in the exception stack." (interactive "P") (unless py-last-exeption-buffer (setq py-last-exeption-buffer (current-buffer))) (py-find-next-exception-prepare 'up (when (eq 4 (prefix-numeric-value top)) "TOP"))) (defun py-find-next-exception-prepare (direction start) "Setup exception regexps depending from kind of Python shell. " (let* ((name (get-process (substring (buffer-name (current-buffer)) 1 -1))) (buffer (cond (name (buffer-name (current-buffer))) ((buffer-live-p (get-buffer py-output-buffer)) py-output-buffer) (py-last-exeption-buffer (buffer-name py-last-exeption-buffer)) (t (error "Don't see exeption buffer"))))) (when buffer (set-buffer (get-buffer buffer))) (switch-to-buffer (current-buffer)) (if (eq direction 'up) (if (string= start "TOP") (py-find-next-exception 'bob buffer 're-search-forward "Top") (py-find-next-exception 'bol buffer 're-search-backward "Top")) (if (string= start "BOTTOM") (py-find-next-exception 'eob buffer 're-search-backward "Bottom") (py-find-next-exception 'eol buffer 're-search-forward "Bottom"))))) (defun py-find-next-exception (start buffer searchdir errwhere) "Find the next Python exception and jump to the code that caused it. START is the buffer position in BUFFER from which to begin searching for an exception. SEARCHDIR is a function, either `re-search-backward' or `re-search-forward' indicating the direction to search. ERRWHERE is used in an error message if the limit (top or bottom) of the trackback stack is encountered." (let (file line) (save-excursion (set-buffer buffer) (goto-char (py-point start)) (if (funcall searchdir py-traceback-line-re nil t) (setq file (match-string 1) line (string-to-number (match-string 2))))) (if (and file line) (py-goto-exception file line) (error "%s of traceback" errwhere)))) (defun py-mouseto-exception (event) "Jump to the code which caused the Python exception at EVENT. EVENT is usually a mouse click." (interactive "e") (cond ((fboundp 'event-point) ;; XEmacs (let* ((point (event-point event)) (buffer (event-buffer event)) (e (and point buffer (extent-at point buffer 'py-exc-info))) (info (and e (extent-property e 'py-exc-info)))) (message "Event point: %d, info: %s" point info) (and info (py-jump-to-exception (car info) (cdr info))))))) (defun py-goto-exception (&optional file line) "Go to the line indicated by the traceback." (interactive) (let ((file file) (line line)) (unless (and file line) (save-excursion (beginning-of-line) (if (looking-at py-traceback-line-re) (setq file (substring-no-properties (match-string 1)) line (string-to-number (match-string 2)))))) (if (not file) (error "Not on a traceback line")) (find-file file) (goto-char (point-min)) (forward-line (1- line)))) ;; python-mode-send.el (defun py-output-buffer-filter (&optional beg end) "Clear output buffer from py-shell-input prompt etc. " (interactive "*") (let ((beg (cond (beg) ((region-active-p) (region-beginning)) (t (point-min)))) (end (cond (end (copy-marker end)) ((region-active-p) (copy-marker (region-end))) (t (copy-marker (point-max)))))) (goto-char beg) (while (re-search-forward (concat "\\(" py-shell-input-prompt-1-regexp "\\|" py-shell-input-prompt-2-regexp "\\|" "^In \\[[0-9]+\\]: *" "\\)") nil (quote move) 1) (replace-match "")) (goto-char beg))) (defun py-send-string (string &optional process) "Evaluate STRING in inferior Python process." (interactive "sPython command: ") (let ((proc (or process (py-shell)))) (comint-send-string proc string) (unless (string-match "\n\\'" string) ;; Make sure the text is properly LF-terminated. (comint-send-string proc "\n")) (when (string-match "\n[ \t].*\n?\\'" string) ;; If the string contains a final indented line, add a second newline so ;; as to make sure we terminate the multiline instruction. (comint-send-string proc "\n")))) (defun py-send-file (file-name &optional process temp-file-name) "Send FILE-NAME to inferior Python PROCESS. If TEMP-FILE-NAME is passed then that file is used for processing instead, while internally the shell will continue to use FILE-NAME." (interactive "fFile to send: ") (let* ((process (or process (get-buffer-process (py-shell)))) (temp-file-name (when temp-file-name (expand-file-name temp-file-name))) (file-name (or (expand-file-name file-name) temp-file-name)) py-python-command-args) (when (not file-name) (error "If FILE-NAME is nil then TEMP-FILE-NAME must be non-nil")) (py-shell-send-string (format (concat "__pyfile = open('''%s''');" "exec(compile(__pyfile.read(), '''%s''', 'exec'));" "__pyfile.close()") ;; (or (file-remote-p temp-file-name 'localname) file-name) file-name) (or (file-remote-p temp-file-name 'localname) file-name) "Fehlerdatei") process))) ;;; ;; Pymacs ;; (defun py-load-pymacs () ;; "Load Pymacs as delivered with python-mode.el. ;; ;; Pymacs has been written by François Pinard and many others. ;; See original source: http://pymacs.progiciels-bpi.ca" ;; (interactive) ;; (let* ((pyshell (py-choose-shell)) ;; (path (getenv "PYTHONPATH")) ;; (py-install-directory (cond ((string= "" py-install-directory) ;; (py-guess-py-install-directory)) ;; (t (py-normalize-directory py-install-directory)))) ;; (pymacs-installed-p ;; (ignore-errors (string-match (expand-file-name (concat py-install-directory "Pymacs")) path)))) ;; ;; Python side ;; (unless pymacs-installed-p ;; (setenv "PYTHONPATH" (concat ;; (expand-file-name py-install-directory) ;; path-separator ;; (expand-file-name py-install-directory) "completion" ;; (if path (concat path-separator path))))) ;; ;; (if (py-install-directory-check) ;; (progn ;; ;; don't interfere with already installed Pymacs ;; (unless (featurep 'pymacs) ;; (load (concat py-install-directory "pymacs.el") nil t)) ;; (setenv "PYMACS_PYTHON" (if (string-match "IP" pyshell) ;; "python" ;; pyshell)) ;; (autoload 'pymacs-apply "pymacs") ;; (autoload 'pymacs-call "pymacs") ;; (autoload 'pymacs-eval "pymacs") ;; (autoload 'pymacs-exec "pymacs") ;; (autoload 'pymacs-load "pymacs") ;; (require 'pymacs) ;; (load (concat py-install-directory "completion/pycomplete.el") nil t) ;; (add-hook 'python-mode-hook 'py-complete-initialize)) ;; (error "`py-install-directory' not set, see INSTALL")))) ;; ;; (when py-load-pymacs-p (py-load-pymacs)) (when (or py-load-pymacs-p (featurep 'pymacs)) (defun py-load-pycomplete () "Load Pymacs based pycomplete." (interactive) (let* ((path (getenv "PYTHONPATH")) (py-install-directory (cond ((string= "" py-install-directory) (py-guess-py-install-directory)) (t (py-normalize-directory py-install-directory)))) (pycomplete-directory (concat (expand-file-name py-install-directory) "completion"))) (if (py-install-directory-check) (progn ;; If the Pymacs process is already running, augment its path. (when (and (get-process "pymacs") (fboundp 'pymacs-exec)) (pymacs-exec (concat "sys.path.insert(0, '" pycomplete-directory "')"))) (require 'pymacs) (setenv "PYTHONPATH" (concat pycomplete-directory (if path (concat path-separator path)))) (add-to-list 'load-path pycomplete-directory) (require 'pycomplete) (add-hook 'python-mode-hook 'py-complete-initialize)) (error "`py-install-directory' not set, see INSTALL"))))) (and (or (eq py-complete-function 'py-complete-completion-at-point) py-load-pymacs-p (featurep 'pymacs)) (py-load-pycomplete)) ;; Hooks (add-hook 'comint-output-filter-functions 'py-pdbtrack-track-stack-file) ;; arrange to kill temp files when Emacs exists (add-hook 'kill-emacs-hook 'py-kill-emacs-hook) (add-hook 'comint-output-filter-functions 'py-pdbtrack-track-stack-file) (add-hook 'inferior-python-mode-hook 'py-send-shell-setup-code) (remove-hook 'python-mode-hook 'python-setup-brm) ;; (add-hook 'python-mode-hook ;; #'(lambda () ;; (when py-smart-indentation ;; (if (bobp) ;; (save-excursion ;; (save-restriction ;; (widen) ;; (while (and (not (eobp)) ;; (or ;; (let ((erg (syntax-ppss))) ;; (or (nth 1 erg) (nth 8 erg))) ;; (eq 0 (current-indentation)))) ;; (forward-line 1)) ;; (back-to-indentation) ;; (py-guess-indent-offset))) ;; (py-guess-indent-offset))))) ;; (add-hook 'comint-output-filter-functions ;; 'py-comint-output-filter-function) (when py-warn-tmp-files-left-p (add-hook 'python-mode-hook 'py-warn-tmp-files-left)) ;; FixMe: for unknown reasons this is not done by mode (if (file-readable-p abbrev-file-name) (add-hook 'python-mode-hook (lambda () (setq py-this-abbrevs-changed abbrevs-changed) (load abbrev-file-name nil t) (setq abbrevs-changed py-this-abbrevs-changed))) (message "Warning: %s" "no abbrev-file found, customize `abbrev-file-name' in order to make mode-specific abbrevs work. ")) (when py-sexp-function (add-hook 'python-mode-hook (lambda () (set (make-local-variable 'forward-sexp-function) py-sexp-function)))) (add-hook 'python-mode-hook (lambda () (setq indent-tabs-mode py-indent-tabs-mode) (set (make-local-variable 'beginning-of-defun-function) 'py-beginning-of-def-or-class) (set (make-local-variable 'end-of-defun-function) 'py-end-of-def-or-class) ;; (orgstruct-mode 1) )) ;; (add-hook 'python-mode-hook ;; (lambda () ;; (when py-load-highlight-indentation-p ;; (unless (featurep 'highlight-indentation) ;; (load (concat (py-normalize-directory py-install-directory) "extensions" py-separator-char "highlight-indentation.el")))))) (add-to-list 'same-window-buffer-names (purecopy "*Python*")) (add-to-list 'same-window-buffer-names (purecopy "*IPython*")) ;; interpreter-mode-alist ;; It's handy to add recognition of Python files to the ;; interpreter-mode-alist and to auto-mode-alist. With the former, we ;; can specify different `derived-modes' based on the #! line, but ;; with the latter, we can't. So we just won't add them if they're ;; already added. (let ((modes '(("ipython" . python-mode) ("ipython2" . python-mode) ("ipython3" . python-mode) ("jython" . jython-mode) ("python" . python-mode) ("python2" . python-mode) ("python2.4" . python-mode) ("python2.5" . python-mode) ("python2.6" . python-mode) ("python2.7" . python-mode) ("python3" . python-mode) ("python3.0" . python-mode) ("python3.1" . python-mode) ("python3.2" . python-mode) ("python3.3" . python-mode) ("python3.4" . python-mode) ))) (while modes (when (not (assoc (car modes) interpreter-mode-alist)) (push (car modes) interpreter-mode-alist)) (setq modes (cdr modes)))) (when (not (or (rassq 'python-mode auto-mode-alist) (rassq 'jython-mode auto-mode-alist))) (push '("\\.py$" . python-mode) auto-mode-alist)) ;; (add-to-list 'auto-mode-alist (cons (purecopy "\\.py\\'") 'python-mode)) ;; (add-to-list 'interpreter-mode-alist (cons (purecopy "python") 'python-mode)) ;; (add-to-list 'interpreter-mode-alist (cons (purecopy "jython") 'jython-mode)) (defun py-set-auto-fill-values () "Internal use by `py-run-auto-fill-timer'" (let ((pps (syntax-ppss))) (cond ((and (nth 4 pps)(numberp py-comment-fill-column)) (set (make-local-variable 'fill-column) py-comment-fill-column)) ((and (nth 3 pps)(numberp py-docstring-fill-column)) (set (make-local-variable 'fill-column) py-docstring-fill-column)) (t (set (make-local-variable 'fill-column) py-fill-column-orig))))) (defun py-run-auto-fill-timer () "Set fill-column to values of `py-docstring-fill-column' resp. to `py-comment-fill-column' according to environment. " (when py-set-fill-column-p (unless py-autofill-timer (setq py-autofill-timer (run-with-idle-timer py-autofill-timer-delay t 'py-set-auto-fill-values))))) ;;; (define-derived-mode inferior-python-mode comint-mode "Inferior Python" "Major mode for interacting with an inferior Python process. A Python process can be started with \\[py-shell]. Hooks `comint-mode-hook' and `inferior-python-mode-hook' are run in that order. You can send text to the inferior Python process from other buffers containing Python source. * \\[py-execute-region] sends the current region to the Python process. \\{inferior-python-mode-map}" :group 'python (require 'ansi-color) ; for ipython (setq mode-line-process '(":%s")) (set (make-local-variable 'comint-input-filter) 'py-input-filter) (add-hook 'comint-preoutput-filter-functions #'py-preoutput-filter nil t) (set (make-local-variable 'compilation-error-regexp-alist) python-compilation-regexp-alist) (set (make-local-variable 'comint-prompt-regexp) (cond ((string-match "[iI][pP]ython[[:alnum:]*-]*$" py-buffer-name) (concat "\\(" (mapconcat 'identity (delq nil (list py-shell-input-prompt-1-regexp py-shell-input-prompt-2-regexp ipython-de-input-prompt-regexp ipython-de-output-prompt-regexp py-pdbtrack-input-prompt py-pydbtrack-input-prompt)) "\\|") "\\)")) (t (concat "\\(" (mapconcat 'identity (delq nil (list py-shell-input-prompt-1-regexp py-shell-input-prompt-2-regexp py-pdbtrack-input-prompt py-pydbtrack-input-prompt)) "\\|") "\\)")))) (if py-complete-function (add-hook 'completion-at-point-functions py-complete-function nil 'local) (add-hook 'completion-at-point-functions 'py-shell-complete nil 'local)) (compilation-shell-minor-mode 1)) (define-derived-mode python-mode fundamental-mode python-mode-modeline-display "Major mode for editing Python files. To submit a problem report, enter `\\[py-submit-bug-report]' from a `python-mode' buffer. Do `\\[py-describe-mode]' for detailed documentation. To see what version of `python-mode' you are running, enter `\\[py-version]'. This mode knows about Python indentation, tokens, comments and continuation lines. Paragraphs are separated by blank lines only. COMMANDS `py-shell'\tStart an interactive Python interpreter in another window `py-execute-statement'\tSend statement at point to a Python interpreter `py-beginning-of-statement'\tGo to the initial line of a simple statement etc. See available commands listed in files commands-python-mode at directory doc VARIABLES `py-indent-offset' indentation increment `py-shell-name' shell command to invoke Python interpreter `py-split-windows-on-execute-p' When non-nil split windows `py-switch-buffers-on-execute-p' When non-nil switch to the Python output buffer See available customizations listed in files variables-python-mode at directory doc \\{python-mode-map}" :group 'python-mode ;; Local vars (set (make-local-variable 'outline-regexp) (concat (mapconcat 'identity (mapcar #'(lambda (x) (concat "^\\s-*" x "\\_>")) py-outline-mode-keywords) "\\|"))) (if py-use-font-lock-doc-face-p (set (make-local-variable 'font-lock-defaults) '(py-font-lock-keywords nil nil nil nil (font-lock-syntactic-keywords . py-font-lock-syntactic-keywords) (font-lock-syntactic-face-function . py-font-lock-syntactic-face-function))) (set (make-local-variable 'font-lock-defaults) '(py-font-lock-keywords nil nil nil nil (font-lock-syntactic-keywords . py-font-lock-syntactic-keywords)))) (set (make-local-variable 'which-func-functions) 'py-which-def-or-class) (set (make-local-variable 'parse-sexp-lookup-properties) t) (set (make-local-variable 'parse-sexp-ignore-comments) t) (set (make-local-variable 'comment-use-syntax) t) (set (make-local-variable 'comment-start) "#") (if empty-comment-line-separates-paragraph-p (progn (set (make-local-variable 'paragraph-separate) "\f\\|^[ \t]*$\\|^[ \t]*#[ \t]*$\\|^[ \t\f]*:[[:alpha:]]+ [[:alpha:]]+:.+$") (set (make-local-variable 'paragraph-start) "\f\\|^[ \t]*$\\|^[ \t]*#[ \t]*$\\|^[ \t\f]*:[[:alpha:]]+ [[:alpha:]]+:.+$")) (set (make-local-variable 'paragraph-separate) "\f\\|^[ \t]*$\\|^[ \t]*#[ \t]*$\\|^[ \t\f]*:[[:alpha:]]+ [[:alpha:]]+:.+$") (set (make-local-variable 'paragraph-start) "\f\\|^[ \t]*$\\|^[ \t]*#[ \t]*$\\|^[ \t\f]*:[[:alpha:]]+ [[:alpha:]]+:.+$")) (set (make-local-variable 'comment-start-skip) "^[ \t]*#+ *") (set (make-local-variable 'comment-column) 40) (set (make-local-variable 'comment-indent-function) #'py-comment-indent-function) (set (make-local-variable 'indent-region-function) 'py-indent-region) (set (make-local-variable 'indent-line-function) 'py-indent-line) (set (make-local-variable 'hs-hide-comments-when-hiding-all) 'py-hide-comments-when-hiding-all) (set (make-local-variable 'outline-heading-end-regexp) ":\\s-*\n") (set (make-local-variable 'open-paren-in-column-0-is-defun-start) nil) (set (make-local-variable 'add-log-current-defun-function) 'py-current-defun) (set (make-local-variable 'fill-paragraph-function) 'py-fill-paragraph) (set (make-local-variable 'require-final-newline) mode-require-final-newline) (set (make-local-variable 'tab-width) py-indent-offset) (set (make-local-variable 'eldoc-documentation-function) #'py-eldoc-function) (and py-load-skeletons-p (py-load-skeletons) (set (make-local-variable 'skeleton-further-elements) '((< '(backward-delete-char-untabify (min py-indent-offset (current-column)))) (^ '(- (1+ (current-indentation))))))) (set (make-local-variable 'imenu-create-index-function) 'py-imenu-create-index-function) (and py-guess-py-install-directory-p (py-set-load-path)) ;; (add-to-list 'load-path py-install-directory) ;; (add-to-list 'load-path (concat py-install-directory "extensions")) (and py-autopair-mode ;; (py-autopair-check) (load-library "autopair") (add-hook 'python-mode-hook #'(lambda () (setq autopair-handle-action-fns (list #'autopair-default-handle-action #'autopair-python-triple-quote-action)))) (py-autopair-mode-on)) (when py-trailing-whitespace-smart-delete-p (add-hook 'before-save-hook 'delete-trailing-whitespace nil 'local)) (cond (py-complete-function (add-hook 'completion-at-point-functions py-complete-function nil 'local)) (py-load-pymacs-p (add-hook 'completion-at-point-functions 'py-complete-completion-at-point nil 'local)) (t (add-hook 'completion-at-point-functions 'py-shell-complete nil 'local))) (if py-set-fill-column-p (add-hook 'python-mode-hook 'py-run-auto-fill-timer) (remove-hook 'python-mode-hook 'py-run-auto-fill-timer)) (add-hook 'after-change-functions 'py-after-change-function nil t) ;; (add-hook 'post-command-hook 'py-after-change-function nil t) (when (and py-imenu-create-index-p (fboundp 'imenu-add-to-menubar) (ignore-errors (require 'imenu))) (imenu-add-to-menubar "PyIndex")) ;; add the menu (when py-menu (easy-menu-add py-menu)) (when py-hide-show-minor-mode-p (hs-minor-mode 1)) (when py-start-run-py-shell ;; py-shell may split window, provide restore (window-configuration-to-register 213465879) (unless (get-process (py-process-name py-shell-name)) (let ((oldbuf (current-buffer))) (save-excursion (py-shell) (set-buffer py-exception-buffer)))) ;; (jump-to-register 213465879) ) ;; (run-mode-hooks 'python-mode-hook) (when py-outline-minor-mode-p (outline-minor-mode 1)) (when (interactive-p) (message "python-mode loaded from: %s" python-mode-message-string))) (define-derived-mode python2-mode python-mode "Python2" "Edit and run code used by Python version 2 series. " :group 'Python :abbrev nil (set (make-local-variable 'py-exec-command) '(format "execfile(r'%s') # PYTHON-MODE\n" filename)) (set (make-local-variable 'py-exec-string-command) '(format "exec(r'%s') # PYTHON-MODE\n" string)) (py-toggle-shell "python2")) (define-derived-mode python3-mode python-mode "Python3" "Edit and run code used by Python version 3 series. " :group 'Python :abbrev nil (set (make-local-variable 'py-exec-command) '(format "exec(compile(open('%s').read(), '%s', 'exec')) # PYTHON-MODE\n" file file)) (set (make-local-variable 'py-exec-string-command) '(format "exec(r'(%s)') # PYTHON-MODE\n" string)) (py-toggle-shell "python3")) (make-obsolete 'jpython-mode 'jython-mode nil) (define-derived-mode jython-mode python-mode "Jython" "Major mode for editing Jython files. Like `python-mode', but sets up parameters for Jython subprocesses. Runs `jython-mode-hook' after `python-mode-hook'." :group 'python-mode (py-toggle-shell "jython")) (provide 'python-mode) ;; python-mode.el ends here python-mode.el-6.1.3/PKG-INFO0000644000000000000000000000060112271450615015416 0ustar rootroot00000000000000Metadata-Version: 1.1 Name: python-mode.el Version: 6.1.3 Summary: Major mode for editing Python programs Home-page: http://launchpad.net/python-mode Author: Andreas Roehler Author-email: andreas.roehler@online.de License: GNU GPLv3, Python License Download-URL: http://launchpad.net/python-mode/trunk/6.1.3/+download/python-mode.el-6.1.3.tar.gz Description: UNKNOWN Platform: UNKNOWN python-mode.el-6.1.3/setup.py0000600000000000000000000000074412271450574016037 0ustar rootroot00000000000000#! /usr/bin/env python # -*- coding: utf-8 -*- from distutils.core import setup setup(name='python-mode.el', version='6.1.3', url='http://launchpad.net/python-mode', maintainer_email='andreas.roehler@online.de', maintainer='Andreas Roehler', description='Major mode for editing Python programs', download_url='http://launchpad.net/python-mode/trunk/6.1.3/+download/python-mode.el-6.1.3.tar.gz', license='GNU GPLv3, Python License', ) python-mode.el-6.1.3/README0000600000000000000000000001207712271450574015207 0ustar rootroot00000000000000Put the following into your initialization file: (setq py-install-directory "PATH/TO/PYTHON-MODE/") (add-to-list 'load-path py-install-directory) (require 'python-mode) Unless other libraries depend on python.el, unloading 'python is recommended, as it seems to destroy python-mode user defined abbreviations: (when (featurep 'python) (unload-feature 'python t)) ;;;;;;;;; Customize default Python shell as `py-shell-name' `py-shell-name' might be an installed executable as shell command `type' would display, but also a PATH/TO/(I)PYTHON, of a virtualenv for example To change the Python default shell see also INSTALL Most python-mode.el commands start with prefix `py-' `M-x py- TAB' displays a list of them in completion-buffer. See also commands list delivered in directory doc. List virtualenv related `M-x virtualenv- TAB' resp. Pymacs commands `M-x pymacs-' Commands related to a specific shell start with it's name as `ipython-complete'. Open an installed shell by M-x SHELL With prefix C-u user is prompted to specify a PATH-TO-LOCAL-SHELL Also evaluating (py-shell nil DEDICATED PATH-TO-LOCAL-SHELL) if DEDICATED is set to `t', shell will get an unique name. Install a local shell by evaluating (defun MY-LOCAL-SHELL () (interactive) (py-shell nil DEDICATED PATH-TO-LOCAL-SHELL)) ;;;;;;;;; When code is executed from current buffer, either - python-mode-v5-behavior, a quite simple and effective way. Setting `python-mode-v5-behavior-p' to `t' makes it the default. - if a buffer-file exists and buffer is unchanged, it's file is executed as is. - in all other cases a temporary file is created. Setback: in case of error, returned error code points here, i.e. indicated error-line-numbers are not that of orginal buffer. ;;;;;;;;; To enable code auto-completion: (setq py-load-pymacs-p t) To use auto-complete, just prepend the following lines: (require 'auto-complete-config) (ac-config-default) or for company: (autoload 'company-mode "company" nil t) If you do not use one of those visual completion interfaces, key bindings exist: - C-tab complete symbol - f1 show help - S-f1 show signature - f2 go to If `py-complete-function' is set, it takes precedence ;;;;;;;;; smart-operator minor mode for example with key "+" inserts " + " smart-operator extended by augmented-assigments C-u + inserts " += " customizable boolean `py-smart-operator-mode-p' ;;;;;;;;; Beside common moves like `defun', `statement' specific Python-mode edits are delivered: `py-expression' and `py-partial-expression'. Statement below is considered composed of two `py-expression' a = ['spam', 'eggs', 100, 1234] |_| |_________________________| Assigment operator and all inside comments is ignored. `py-partial-expression' would match six sections a = ['spam', 'eggs', 100, 1234] |_| |_____| |____| |__| |__| |_________________________| When traversing code, `py-partial-expression' climbs down and up all levels encountered, i.e. at opening `[' `py-expression' would return ['spam', 'eggs', 100, 1234], while one char behind at `'' it yields `'spam',' - py-sexp-function, When set, it's value is called instead of `forward-sexp', `backward-sexp Choices are py-partial-expression, py-expression, default nil ;;;;;;;;; Moving, copying, deleting When moving over or mark code, commands with suffix "-bol" take the correspond beginning of line as start resp. end. Commands without that suffix take the indentation at the beginning resp. the last printable character the end - see in menu PyEdit whats implemented. While commands "py-beginning..." resp. "py-end..." compute the context, selecting the corresponding beginning or end new "py-up...", "py-down..." jump regexp-based to the next element in buffer. Listed in PyMenu. ;;;;;;;;; Customize boolean `py-set-fill-column-p' If `t', enables use Python specific `fill-column' according to `py-docstring-fill-column', default is 72 and `py-comment-fill-column, default is 79 Comment- and docstring settings might be disabled by any non-integer value, which means: do not use a different value of `fill-column' than emacs-wide ;;;;;;;;; - customizable `py-output-buffer'. `py-execute-...'-commands arrive in buffer created by `py-shell'. It's name is composed WRT to Python version used, it's path etc. If boolean `py-enforce-output-buffer-p' is non-nil, value of `py-output-buffer' is taken instead. ;;;;;;;;; Python and IPython Start IPython shell after loading python-mode via M-x ipython, not from plain shell. Executing code through IPython should work as with regular Python, also getting completions from. However, with IPython, it feels a demi-second slower. Also when starting a session, first completion might fail, while succeeding afterwards. Any bug reports, which might help truck down the issue, are highly appreciated. ;;;;;;;;; Troubleshooting Start with Emacs -Q from the directory where python-mode.el lives. Open python-mode.el and evaluate it. Open a file with ending ".py". M-x python RET a regular Python-shell should appear M-x IPython RET an IPython-shell should be opened python-mode.el-6.1.3/extensions/0000755000000000000000000000000012271450615016523 5ustar rootroot00000000000000python-mode.el-6.1.3/extensions/highlight-indentation.el0000644000000000000000000001005112271450574023327 0ustar rootroot00000000000000;;; highlight-indentation.el --- Function for highlighting indentation ;; Original Author: Anton Johansson - http://antonj.se ;; Created: Dec 15 23:42:04 2010 ;; URL: https://github.com/antonj/Highlight-Indentation-for-Emacs ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as ;; published by the Free Software Foundation; either version 2 of ;; the License, or (at your option) any later version. ;; ;; This program is distributed in the hope that it will be ;; useful, but WITHOUT ANY WARRANTY; without even the implied ;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ;; PURPOSE. See the GNU General Public License for more details. ;; ;;; Commentary: ;; Customize `highlight-indent-face' to suit your theme. ;;; Code: (defcustom highlight-indentation nil "If level of indentation should be displayed at start. Toggle buffer local status via `M-x highlight-indentation' during session. " :type 'boolean :group 'python) (make-variable-buffer-local 'highlight-indentation) (defvar highlight-indent-active nil) (make-variable-buffer-local 'highlight-indent-active) (defface highlight-indent-face '((((class color) (background dark)) (:background "grey33")) (((class color) (background light)) (:background "grey"))) "Basic face for highlighting indentation guides.") (setq-default highlight-indent-offset 4) (defvar ruby-indent-level nil) ;; lp:1067928 ;; (defvar nxml-child-indent nil) (defun highlight-indentation-on () "Make sure `highlight-indentation' is on. " (interactive) (set (make-local-variable 'highlight-indent-active) nil) (highlight-indentation) (when (called-interactively-p 'any) (message "highlight-indentation ON"))) (defun highlight-indentation-off () "Make sure `highlight-indentation' is off. " (interactive) (set (make-local-variable 'highlight-indent-active) t) (highlight-indentation) (when (called-interactively-p 'any) (message "highlight-indentation OFF"))) (defun highlight-indentation (&optional indent-width) "Toggle highlight indentation. Optional argument INDENT-WIDTH specifies which indentation level (spaces only) should be highlighted, if omitted indent-width will be guessed from current major-mode" (interactive "P") (let ((re (format "\\( \\) \\{%s\\}" (- highlight-indent-offset 1)))) (if (not highlight-indent-active) (progn ;; Toggle on (set (make-local-variable 'highlight-indent-offset) (if indent-width indent-width ;; Set indentation offset according to major mode (cond ((and (eq major-mode 'python-mode)(boundp 'py-indent-offset)) py-indent-offset) ;; support both python.el ((or (eq major-mode 'python-mode)(eq major-mode 'python)) python-indent) ((eq major-mode 'ruby-mode) ruby-indent-level) ((eq major-mode 'nxml-mode) nxml-child-indent) ((local-variable-p 'c-basic-offset) c-basic-offset) (t (default-value 'highlight-indent-offset))))) (set (make-local-variable 'highlight-indent-active) t) (if (featurep 'xemacs) (font-lock-add-keywords nil `((,re (1 'paren-face-match)))) (font-lock-add-keywords nil `((,re (1 'highlight-indent-face))))) (message (format "highlight-indentation with indent-width %s" highlight-indent-offset))) ;; Toggle off (set (make-local-variable 'highlight-indent-active) nil) (if (featurep 'xemacs) (font-lock-remove-keywords nil `((,re (1 'paren-face-match)))) (font-lock-remove-keywords nil `((,re (1 'highlight-indent-face))))) (message "highlight-indentation OFF")) (font-lock-fontify-buffer))) (provide 'highlight-indentation) ;;; highlight-indentation.el ends here python-mode.el-6.1.3/extensions/column-marker.el0000644000000000000000000002477112271450574021640 0ustar rootroot00000000000000;;; column-marker.el --- Highlight certain character columns ;; ;; Filename: column-marker.el ;; Description: Highlight certain character columns ;; Author: Rick Bielawski ;; Maintainer: Rick Bielawski ;; Created: Tue Nov 22 10:26:03 2005 ;; Version: ;; Last-Updated: Fri Jan 22 11:28:48 2010 (-0800) ;; By: dradams ;; Update #: 312 ;; Keywords: tools convenience highlight ;; Compatibility: GNU Emacs 21, GNU Emacs 22, GNU Emacs 23 ;; ;; Features that might be required by this library: ;; ;; None ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;; Commentary: ;; ;; Highlights the background at a given character column. ;; ;; Commands `column-marker-1', `column-marker-2', and ;; `column-marker-3' each highlight a given column (using different ;; background colors, by default). ;; ;; - With no prefix argument, each highlights the current column ;; (where the cursor is). ;; ;; - With a non-negative numeric prefix argument, each highlights that ;; column. ;; ;; - With plain `C-u' (no number), each turns off its highlighting. ;; ;; - With `C-u C-u', each turns off all column highlighting. ;; ;; If two commands highlight the same column, the last-issued ;; highlighting command shadows the other - only the last-issued ;; highlighting is seen. If that "topmost" highlighting is then ;; turned off, the other highlighting for that column then shows ;; through. ;; ;; Examples: ;; ;; M-x column-marker-1 highlights the column where the cursor is, in ;; face `column-marker-1'. ;; ;; C-u 70 M-x column-marker-2 highlights column 70 in face ;; `column-marker-2'. ;; ;; C-u 70 M-x column-marker-3 highlights column 70 in face ;; `column-marker-3'. The face `column-marker-2' highlighting no ;; longer shows. ;; ;; C-u M-x column-marker-3 turns off highlighting for column-marker-3, ;; so face `column-marker-2' highlighting shows again for column 70. ;; ;; C-u C-u M-x column-marker-1 (or -2 or -3) erases all column ;; highlighting. ;; ;; These commands use `font-lock-fontify-buffer', so syntax ;; highlighting (`font-lock-mode') must be turned on. There might be ;; a performance impact during refontification. ;; ;; ;; Installation: Place this file on your load path, and put this in ;; your init file (`.emacs'): ;; ;; (require 'column-marker) ;; ;; Other init file suggestions (examples): ;; ;; ;; Highlight column 80 in foo mode. ;; (add-hook 'foo-mode-hook (lambda () (interactive) (column-marker-1 80))) ;; ;; ;; Use `C-c m' interactively to highlight with face `column-marker-1'. ;; (global-set-key [?\C-c ?m] 'column-marker-1) ;; ;; ;; Please report any bugs! ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;; Change log: ;; ;; 2009/12/10 dadams ;; column-marker-internal: Quote the face. Thx to Johan Bockgård. ;; 2009/12/09 dadams ;; column-marker-find: fset a symbol to the function, and return the symbol. ;; 2008/01/21 dadams ;; Renamed faces by dropping suffix "-face". ;; 2006/08/18 dadams ;; column-marker-create: Add newlines to doc-string sentences. ;; 2005/12/31 dadams ;; column-marker-create: Add marker to column-marker-vars inside the defun, ;; so it is done in the right buffer, updating column-marker-vars buffer-locally. ;; column-marker-find: Corrected comment. Changed or to progn for clarity. ;; 2005/12/29 dadams ;; Updated wrt new version of column-marker.el (multi-column characters). ;; Corrected stray occurrences of column-marker-here to column-marker-1. ;; column-marker-vars: Added make-local-variable. ;; column-marker-create: Changed positive to non-negative. ;; column-marker-internal: Turn off marker when col is negative, not < 1. ;; 2005-12-29 RGB ;; column-marker.el now supports multi-column characters. ;; 2005/11/21 dadams ;; Combined static and dynamic. ;; Use separate faces for each marker. Different interactive spec. ;; 2005/10/19 RGB ;; Initial release of column-marker.el. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth ;; Floor, Boston, MA 02110-1301, USA. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;; Code: ;;;;;;;;;;;;;;;;;;;;;; (defface column-marker-1 '((t (:background "gray"))) "Face used for a column marker. Usually a background color." :group 'faces) (defvar column-marker-1-face 'column-marker-1 "Face used for a column marker. Usually a background color. Changing this directly affects only new markers.") (defface column-marker-2 '((t (:background "cyan3"))) "Face used for a column marker. Usually a background color." :group 'faces) (defvar column-marker-2-face 'column-marker-2 "Face used for a column marker. Usually a background color. Changing this directly affects only new markers." ) (defface column-marker-3 '((t (:background "orchid3"))) "Face used for a column marker. Usually a background color." :group 'faces) (defvar column-marker-3-face 'column-marker-3 "Face used for a column marker. Usually a background color. Changing this directly affects only new markers." ) (defvar column-marker-vars () "List of all internal column-marker variables") (make-variable-buffer-local 'column-marker-vars) ; Buffer local in all buffers. (defmacro column-marker-create (var &optional face) "Define a column marker named VAR. FACE is the face to use. If nil, then face `column-marker-1' is used." (setq face (or face 'column-marker-1)) `(progn ;; define context variable ,VAR so marker can be removed if desired (defvar ,var () "Buffer local. Used internally to store column marker spec.") ;; context must be buffer local since font-lock is (make-variable-buffer-local ',var) ;; Define wrapper function named ,VAR to call `column-marker-internal' (defun ,var (arg) ,(concat "Highlight column with face `" (symbol-name face) "'.\nWith no prefix argument, highlight current column.\n" "With non-negative numeric prefix arg, highlight that column number.\n" "With plain `C-u' (no number), turn off this column marker.\n" "With `C-u C-u' or negative prefix arg, turn off all column-marker highlighting.") (interactive "P") (unless (memq ',var column-marker-vars) (push ',var column-marker-vars)) (cond ((null arg) ; Default: highlight current column. (column-marker-internal ',var (1+ (current-column)) ,face)) ((consp arg) (if (= 4 (car arg)) (column-marker-internal ',var nil) ; `C-u': Remove this column highlighting. (dolist (var column-marker-vars) (column-marker-internal var nil)))) ; `C-u C-u': Remove all column highlighting. ((and (integerp arg) (>= arg 0)) ; `C-u 70': Highlight that column. (column-marker-internal ',var (1+ (prefix-numeric-value arg)) ,face)) (t ; `C-u -40': Remove all column highlighting. (dolist (var column-marker-vars) (column-marker-internal var nil))))))) (defun column-marker-find (col) "Defines a function to locate a character in column COL. Returns the function symbol, named `column-marker-move-to-COL'." (let ((fn-symb (intern (format "column-marker-move-to-%d" col)))) (fset `,fn-symb `(lambda (end) (let ((start (point))) (when (> end (point-max)) (setq end (point-max))) ;; Try to keep `move-to-column' from going backward, though it still can. (unless (< (current-column) ,col) (forward-line 1)) ;; Again, don't go backward. Try to move to correct column. (when (< (current-column) ,col) (move-to-column ,col)) ;; If not at target column, try to move to it. (while (and (< (current-column) ,col) (< (point) end) (= 0 (+ (forward-line 1) (current-column)))) ; Should be bol. (move-to-column ,col)) ;; If at target column, not past end, and not prior to start, ;; then set match data and return t. Otherwise go to start ;; and return nil. (if (and (= ,col (current-column)) (<= (point) end) (> (point) start)) (progn (set-match-data (list (1- (point)) (point))) t) ; Return t. (goto-char start) nil)))) ; Return nil. fn-symb)) (defun column-marker-internal (sym col &optional face) "SYM is the symbol for holding the column marker context. COL is the column in which a marker should be set. Supplying nil or 0 for COL turns off the marker. FACE is the face to use. If nil, then face `column-marker-1' is used." (setq face (or face 'column-marker-1)) (when (symbol-value sym) ; Remove any previously set column marker (font-lock-remove-keywords nil (symbol-value sym)) (set sym nil)) (when (or (listp col) (< col 0)) (setq col nil)) ; Allow nonsense stuff to turn off the marker (when col ; Generate a new column marker (set sym `((,(column-marker-find col) (0 ',face prepend t)))) (font-lock-add-keywords nil (symbol-value sym) t)) (font-lock-fontify-buffer)) ;; If you need more markers you can create your own similarly. ;; All markers can be in use at once, and each is buffer-local, ;; so there is no good reason to define more unless you need more ;; markers in a single buffer. (column-marker-create column-marker-1 column-marker-1-face) (column-marker-create column-marker-2 column-marker-2-face) (column-marker-create column-marker-3 column-marker-3-face) ;;;###autoload (autoload 'column-marker-1 "column-marker" "Highlight a column." t) ;;;;;;;;;;;;;;;;;; (provide 'column-marker) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; column-marker.el ends here python-mode.el-6.1.3/doc/0000755000000000000000000000000012271450615015071 5ustar rootroot00000000000000python-mode.el-6.1.3/doc/variables-python-mode.rst0000644000000000000000000007022212271450574022043 0ustar rootroot00000000000000python-mode.el variables ==================== python-mode-modeline-display ---------------------------- String to display in Emacs modeline py-indent-offset ---------------- Amount of offset per level of indentation. `M-x py-guess-indent-offset' can usually guess a good value when you're editing someone else's Python code. py-backslashed-lines-indent-offset ---------------------------------- Amount of offset per level of indentation of backslashed. No semantic indent, which diff to `py-indent-offset' indicates pdb-path -------- Where to find pdb.py. Edit this according to your system. If you ignore the location `M-x py-guess-pdb-path' might display it py-verbose-p ------------ If indenting functions should report reached indent level. Default is nil. py-store-result-p ----------------- When non-nil, put resulting string of `py-execute-...' into kill-ring, so it might be yanked. Default is nil py-load-skeletons-p ------------------- If skeleton definitions should be loaded, default is nil. py-load-pymacs-p ---------------- If Pymacs related stuff should be loaded. Default is nil. Pymacs has been written by François Pinard and many others. See original source: http://pymacs.progiciels-bpi.ca py-smart-operator-mode-p ------------------------ If python-mode calls (smart-operator-mode-on) Default is non-nil. py-sexp-function ---------------- When set, it's value is called instead of `forward-sexp', `backward-sexp' Default is nil. py-autopair-mode ---------------- If python-mode calls (autopair-mode-on) Default is nil Load `autopair-mode' written by Joao Tavora URL: http://autopair.googlecode.com py-no-completion-calls-dabbrev-expand-p --------------------------------------- If completion function should call dabbrev-expand when no completion found. Default is `t' See also `py-indent-no-completion-p' py-indent-no-completion-p ------------------------- If completion function should insert a TAB when no completion found. Default is `t' See also `py-no-completion-calls-dabbrev-expand-p' py-set-fill-column-p -------------------- If python-mode should set fill-column according values in `py-comment-fill-column' and `py-docstring-fill-column'. Default is nil py-autofill-timer-delay ----------------------- Delay when idle before functions ajusting `py-docstring-fill-column' resp. `py-comment-fill-column' are called. py-docstring-fill-column ------------------------ Value of `fill-column' to use when filling a docstring. Any non-integer value means do not use a different value of `fill-column' when filling docstrings. py-comment-fill-column ---------------------- Value of `fill-column' to use when filling a comment. Any non-integer value means do not use a different value of `fill-column' when filling docstrings. py-fontify-shell-buffer-p ------------------------- If code in Python shell should be highlighted as in script buffer. Default is nil. If `t', related vars like `comment-start' will be set too. Seems convenient when playing with stuff in IPython shell Might not be TRT when a lot of output arrives py-modeline-display-full-path-p ------------------------------- If the full PATH/TO/PYTHON should be displayed in shell modeline. Default is nil. Note: when `py-shell-name' is specified with path, it's shown as an acronym in buffer-name already. py-modeline-acronym-display-home-p ---------------------------------- If the modeline acronym should contain chars indicating the home-directory. Default is nil py-install-directory -------------------- Directory where python-mode.el and it's subdirectories should be installed. Needed for completion and other environment stuff only. py-guess-py-install-directory-p ------------------------------- If in cases, `py-install-directory' isn't set, `py-set-load-path'should guess it from `buffer-file-name'. py-extensions ------------- File where extensions to python-mode.el should be installed. Used by virtualenv support. py-pylint-offer-current-p ------------------------- If current buffers file should be offered for check. Default is non-nil. If nil, `py-pylint-run' offers filename from history py-hide-show-minor-mode-p ------------------------- If hide-show minor-mode should be on, default is nil. empty-comment-line-separates-paragraph-p ---------------------------------------- Consider paragraph start/end lines with nothing inside but comment sign. Default is non-nil py-if-name-main-permission-p ---------------------------- Allow execution of code inside blocks started by "if __name__== '__main__':". Default is non-nil py-use-font-lock-doc-face-p --------------------------- If documention string inside of def or class get `font-lock-doc-face'. `font-lock-doc-face' inherits `font-lock-string-face'. Call M-x `customize-face' in order to have a visible effect. py-defun-use-top-level-p ------------------------ When non-nil, keys C-M-a, C-M-e address top-level form. Default is nil. Beginning- end-of-defun forms use commands `py-beginning-of-top-level', `py-end-of-top-level' mark-defun marks top-level form at point etc. py-tab-shifts-region-p ---------------------- If `t', TAB will indent/cycle the region, not just the current line. Default is nil py-tab-indents-region-p ----------------------- When `t' and first TAB doesn't shift, indent-region is called. Default is nil py-block-comment-prefix-p ------------------------- If py-comment inserts py-block-comment-prefix. Default is t py-org-cycle-p -------------- When non-nil, command `org-cycle' is available at shift-TAB, Default is nil. ipython-complete-use-separate-shell-p ------------------------------------- If `ipython-complete' should use a separate shell. Thus prompt-counter is not incremented by completion. py-outline-minor-mode-p ----------------------- If outline minor-mode should be on, default is `t'. py-outline-mode-keywords ------------------------ Keywords composing visible heads. py-start-run-py-shell --------------------- If `python-mode' should start a python-shell, `py-shell'. Default is `nil'. py-start-run-ipython-shell -------------------------- If `python-mode' should start an ipython-shell. Default is `nil'. py-close-provides-newline ------------------------- If a newline is inserted, when line after block isn't empty. Default is non-nil. py-dedent-keep-relative-column ------------------------------ If point should follow dedent or kind of electric move to end of line. Default is t - keep relative position. py-indent-honors-multiline-listing ---------------------------------- If `t', indents to 1+ column of opening delimiter. If `nil', indent adds one level to the beginning of statement. Default is `nil'. py-indent-paren-spanned-multilines-p ------------------------------------ If non-nil, indents elements of list a value of `py-indent-offset' to first element: def foo(): if (foo && baz): bar() Default lines up with first element: def foo(): if (foo && baz): bar() py-indent-honors-inline-comment ------------------------------- If non-nil, indents to column of inlined comment start. Default is nil. py-closing-list-dedents-bos --------------------------- When non-nil, indent list's closing delimiter like start-column. It will be lined up under the first character of the line that starts the multi-line construct, as in: my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', ) Default is nil, i.e. my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', ) Examples from PEP8 py-closing-list-space --------------------- Number of chars, closing parenthesis outdent from opening, default is 1 py-closing-list-keeps-space --------------------------- If non-nil, closing parenthesis dedents onto column of opening plus `py-closing-list-space', default is nil py-electric-kill-backward-p --------------------------- Affects `py-electric-backspace'. Default is nil. If behind a delimited form of braces, brackets or parentheses, backspace will kill it's contents With when cursor after my_string[0:1] --------------^ ==> my_string[] ----------^ In result cursor is insided emptied delimited form. py-electric-colon-active-p -------------------------- `py-electric-colon' feature. Default is `nil'. See lp:837065 for discussions. See also `py-electric-colon-bobl-only' py-electric-colon-bobl-only --------------------------- When inserting a colon, do not indent lines unless at beginning of block See lp:1207405 resp. `py-electric-colon-active-p' py-electric-colon-greedy-p -------------------------- If py-electric-colon should indent to the outmost reasonable level. If nil, default, it will not move from at any reasonable level. py-electric-colon-newline-and-indent-p -------------------------------------- If non-nil, `py-electric-colon' will call `newline-and-indent'. Default is `nil'. py-electric-comment-p --------------------- If "#" should call `py-electric-comment'. Default is `nil'. py-electric-comment-add-space-p ------------------------------- If py-electric-comment should add a space. Default is `nil'. py-mark-decorators ------------------ If py-mark-def-or-class functions should mark decorators too. Default is `nil'. py-tab-indent ------------- Non-nil means TAB in Python mode calls `py-indent-line'. py-return-key ------------- Which command should call. py-complete-function -------------------- When set, enforces function todo completion, default is nil. Normally python-mode, resp. inferior-python-mode know best which function to use. ipython-complete-function ------------------------- Function used for completion in IPython shell buffers. py-encoding-string ------------------ Default string specifying encoding of a Python file. py-shebang-startstring ---------------------- Detecting the shell in head of file. py-python-command-args ---------------------- List of string arguments to be used when starting a Python shell. py-jython-command-args ---------------------- List of string arguments to be used when starting a Jython shell. py-cleanup-temporary -------------------- If temporary buffers and files used by functions executing region should be deleted afterwards. py-execute-no-temp-p -------------------- Seems Emacs-24.3 provided a way executing stuff without temporary files. py-lhs-inbound-indent --------------------- When line starts a multiline-assignment: How many colums indent should be more than opening bracket, brace or parenthesis. py-continuation-offset ---------------------- Additional amount of offset to give for some continuation lines. Continuation lines are those that immediately follow a backslash terminated line. py-indent-tabs-mode ------------------- Python-mode starts `indent-tabs-mode' with the value specified here, default is nil. py-smart-indentation -------------------- Should `python-mode' try to automagically set some indentation variables? When this variable is non-nil, two things happen when a buffer is set to `python-mode': 1. `py-indent-offset' is guessed from existing code in the buffer. Only guessed values between 2 and 8 are considered. If a valid guess can't be made (perhaps because you are visiting a new file), then the value in `py-indent-offset' is used. 2. `indent-tabs-mode' is turned off if `py-indent-offset' does not equal `tab-width' (`indent-tabs-mode' is never turned on by Python mode). This means that for newly written code, tabs are only inserted in indentation if one tab is one indentation level, otherwise only spaces are used. Note that both these settings occur *after* `python-mode-hook' is run, so if you want to defeat the automagic configuration, you must also set `py-smart-indentation' to nil in your `python-mode-hook'. py-block-comment-prefix ----------------------- String used by M-x comment-region to comment out a block of code. This should follow the convention for non-indenting comment lines so that the indentation commands won't get confused (i.e., the string should be of the form `#x...' where `x' is not a blank or a tab, and `...' is arbitrary). However, this string should not end in whitespace. py-indent-comments ------------------ When t, comment lines are indented. py-uncomment-indents-p ---------------------- When non-nil, after uncomment indent lines. py-separator-char ----------------- Values set by defcustom only will not be seen in batch-mode. py-custom-temp-directory ------------------------ If set, will take precedence over guessed values from `py-temp-directory'. Default is the empty string. When set, make sure the directory exists. py-beep-if-tab-change --------------------- Ring the bell if `tab-width' is changed. If a comment of the form # vi:set tabsize=: is found before the first code line when the file is entered, and the current value of (the general Emacs variable) `tab-width' does not equal , `tab-width' is set to , a message saying so is displayed in the echo area, and if `py-beep-if-tab-change' is non-nil the Emacs bell is also rung as a warning. py-jump-on-exception -------------------- Jump to innermost exception frame in *Python Output* buffer. When this variable is non-nil and an exception occurs when running Python code synchronously in a subprocess, jump immediately to the source code of the innermost traceback frame. py-ask-about-save ----------------- If not nil, ask about which buffers to save before executing some code. Otherwise, all modified buffers are saved without asking. py-backspace-function --------------------- Function called by `py-electric-backspace' when deleting backwards. py-delete-function ------------------ Function called by `py-electric-delete' when deleting forwards. py-pdbtrack-do-tracking-p ------------------------- Controls whether the pdbtrack feature is enabled or not. When non-nil, pdbtrack is enabled in all comint-based buffers, e.g. shell buffers and the *Python* buffer. When using pdb to debug a Python program, pdbtrack notices the pdb prompt and displays the source file and line that the program is stopped at, much the same way as gud-mode does for debugging C programs with gdb. py-pdbtrack-filename-mapping ---------------------------- Supports mapping file paths when opening file buffers in pdbtrack. When non-nil this is an alist mapping paths in the Python interpreter to paths in Emacs. py-pdbtrack-minor-mode-string ----------------------------- String to use in the minor mode list when pdbtrack is enabled. py-import-check-point-max ------------------------- Maximum number of characters to search for a Java-ish import statement. When `python-mode' tries to calculate the shell to use (either a CPython or a Jython shell), it looks at the so-called `shebang' line -- i.e. #! line. If that's not available, it looks at some of the file heading imports to see if they look Java-like. py-jython-packages ------------------ Imported packages that imply `jython-mode'. py-current-defun-show --------------------- If `py-current-defun' should jump to the definition, highlight it while waiting PY-WHICH-FUNC-DELAY seconds, before returning to previous position. Default is `t'. py-current-defun-delay ---------------------- When called interactively, `py-current-defun' should wait PY-WHICH-FUNC-DELAY seconds at the definition name found, before returning to previous position. py-send-receive-delay --------------------- Seconds to wait for output, used by `py-send-receive'. py-honor-IPYTHONDIR-p --------------------- When non-nil ipython-history file is constructed by $IPYTHONDIR followed by "/history". Default is nil. Otherwise value of py-ipython-history is used. py-ipython-history ------------------ ipython-history default file. Used when py-honor-IPYTHONDIR-p is nil (default) py-honor-PYTHONHISTORY-p ------------------------ When non-nil python-history file is set by $PYTHONHISTORY Default is nil. Otherwise value of py-python-history is used. py-python-history ----------------- python-history default file. Used when py-honor-PYTHONHISTORY-p is nil (default) py-master-file -------------- If non-nil, M-x py-execute-buffer executes the named master file instead of the buffer's file. If the file name has a relative path, the value of variable `default-directory' for the buffer is prepended to come up with a file name. Beside you may set this variable in the file's local variable section, e.g.: # Local Variables: # py-master-file: "master.py" # End: py-pychecker-command -------------------- Shell command used to run Pychecker. py-pychecker-command-args ------------------------- List of string arguments to be passed to pychecker. py-pep8-command --------------- Shell command used to run pep8. py-pep8-command-args -------------------- List of string arguments to be passed to pylint. Default is "" py-pyflakespep8-command ----------------------- Shell command used to run `pyflakespep8'. py-pyflakespep8-command-args ---------------------------- List of string arguments to be passed to pyflakespep8. Default is "" py-pyflakes-command ------------------- Shell command used to run Pyflakes. py-pyflakes-command-args ------------------------ List of string arguments to be passed to pyflakes. Default is "" py-pylint-command ----------------- Shell command used to run Pylint. py-pylint-command-args ---------------------- List of string arguments to be passed to pylint. Default is "--errors-only" py-shell-input-prompt-1-regexp ------------------------------ A regular expression to match the input prompt of the shell. py-shell-input-prompt-2-regexp ------------------------------ A regular expression to match the input prompt of the shell after the first line of input. py-shell-prompt-read-only ------------------------- If non-nil, the python prompt is read only. Setting this variable will only effect new shells. py-fileless-buffer-use-default-directory-p ------------------------------------------ When `py-use-current-dir-when-execute-p' is non-nil and no buffer-file exists, value of `default-directory' sets current working directory of Python output shell py-keep-shell-dir-when-execute-p -------------------------------- Don't change Python shell's current working directory when sending code. See also `py-execute-directory' py-switch-buffers-on-execute-p ------------------------------ When non-nil switch to the Python output buffer. py-split-windows-on-execute-p ----------------------------- When non-nil split windows. py-max-split-windows -------------------- When split windows is enabled the maximum windows to allow before reusing other windows. py-split-windows-on-execute-function ------------------------------------ How window should get splitted to display results of py-execute-... functions. py-hide-show-keywords --------------------- Keywords composing visible heads. Also used by (minor-)outline-mode py-hide-show-hide-docstrings ---------------------------- Controls if doc strings can be hidden by hide-show py-paragraph-fill-docstring-p ----------------------------- If `py-fill-paragraph', when inside a docstring, should fill the complete string. Default is nil. Convenient use of `M-q' inside docstrings See also `py-docstring-style' python-mode-hook ---------------- Hook run after entering python-mode-modeline-display mode. No problems result if this variable is not bound. `add-hook' automatically binds it. (This is true for all hook variables.) py-imenu-create-index-p ----------------------- Non-nil means Python mode creates and displays an index menu of functions and global variables. py-imenu-create-index-function ------------------------------ Switch between `py-imenu-create-index-new', which also lists modules variables, and series 5. index-machine py-shell-name ------------- A PATH/TO/EXECUTABLE or default value `py-shell' may look for, if no shell is specified by command. py-shell-toggle-1 ----------------- A PATH/TO/EXECUTABLE or default value used by `py-toggle-shell'. py-shell-toggle-2 ----------------- A PATH/TO/EXECUTABLE or default value used by `py-toggle-shell'. py-match-paren-mode ------------------- Non-nil means, cursor will jump to beginning or end of a block. This vice versa, to beginning first. Sets `py-match-paren-key' in python-mode-map. Customize `py-match-paren-key' which key to use. py-match-paren-key ------------------ String used by M-x comment-region to comment out a block of code. This should follow the convention for non-indenting comment lines so that the indentation commands won't get confused (i.e., the string should be of the form `#x...' where `x' is not a blank or a tab, and `...' is arbitrary). However, this string should not end in whitespace. py-kill-empty-line ------------------ If t, py-indent-forward-line kills empty lines. py-remove-cwd-from-path ----------------------- Whether to allow loading of Python modules from the current directory. If this is non-nil, Emacs removes '' from sys.path when starting an inferior Python process. This is the default, for security reasons, as it is easy for the Python process to be started without the user's realization (e.g. to perform completion). py-imenu-show-method-args-p --------------------------- Controls echoing of arguments of functions & methods in the Imenu buffer. When non-nil, arguments are printed. py-history-filter-regexp ------------------------ Input matching this regexp is not saved on the history list. Default ignores all inputs of 0, 1, or 2 non-blank characters. inferior-python-filter-regexp ----------------------------- Input matching this regexp is not saved on the history list. Default ignores all inputs of 0, 1, or 2 non-blank characters. py-set-complete-keymap-p ------------------------ If `py-complete-initialize', which sets up enviroment for Pymacs based py-complete, should load it's keys into `python-mode-map' Default is nil. See also resp. edit `py-complete-set-keymap' py-use-local-default -------------------- If `t', py-shell will use `py-shell-local-path' instead of default Python. Making switch between several virtualenv's easier, `python-mode' should deliver an installer, so named-shells pointing to virtualenv's will be available. py-highlight-error-source-p --------------------------- When py-execute-... commands raise an error, respective code in source-buffer will be highlighted. Default is nil. M-x `py-remove-overlays-at-point' removes that highlighting. py-set-pager-cat-p ------------------ If the shell environment variable $PAGER should set to `cat'. If `t', use `C-c C-r' to jump to beginning of output. Then scroll normally. Avoids lp:783828, "Terminal not fully functional", for help('COMMAND') in python-shell When non-nil, imports module `os' py-prompt-on-changed-p ---------------------- When called interactively, ask for save before a changed buffer is sent to interpreter. Default is `t' py-dedicated-process-p ---------------------- If commands executing code use a dedicated shell. Default is nil py-shell-local-path ------------------- If `py-use-local-default' is non-nil, `py-shell' will use EXECUTABLE indicated here incl. path. py-edit-only-p -------------- When `t' `python-mode' will not take resort nor check for installed Python executables. Default is nil. See bug report at launchpad, lp:944093. py-force-py-shell-name-p ------------------------ When `t', execution with kind of Python specified in `py-shell-name' is enforced, possibly shebang doesn't take precedence. python-mode-v5-behavior-p ------------------------- Execute region through `shell-command-on-region' as v5 did it - lp:990079. This might fail with certain chars - see UnicodeEncodeError lp:550661 py-trailing-whitespace-smart-delete-p ------------------------------------- Default is nil. When t, python-mode calls (add-hook 'before-save-hook 'delete-trailing-whitespace nil 'local) Also commands may delete trailing whitespace by the way. When editing other peoples code, this may produce a larger diff than expected py-newline-delete-trailing-whitespace-p --------------------------------------- Delete trailing whitespace maybe left by `py-newline-and-indent'. Default is `t'. See lp:1100892 py-warn-tmp-files-left-p ------------------------ Messages a warning, when `py-temp-directory' contains files susceptible being left by previous Python-mode sessions. See also lp:987534 py-ipython-execute-delay ------------------------ Delay needed by execute functions when no IPython shell is running. python-shell-buffer-name ------------------------ Default buffer name for Python interpreter. python-shell-interpreter ------------------------ Default Python interpreter for shell. python-shell-prompt-regexp -------------------------- Regular Expression matching top-level input prompt of python shell. It should not contain a caret (^) at the beginning. py-ffap-p --------- Select python-modes way to find file at point. Default is nil python-ffap-setup-code ---------------------- Python code to get a module path. py-ffap-string-code ------------------- Python code used to get a string with the path of a module. py-eldoc-setup-code ------------------- Python code to setup documentation retrieval. py-setup-codes -------------- List of code run by `py-shell-send-setup-codes'. py-shell-prompt-regexp ---------------------- Regular Expression matching top-level input prompt of python shell. It should not contain a caret (^) at the beginning. python-shell-completion-setup-code ---------------------------------- Code used to setup completion in inferior Python processes. python-shell-module-completion-string-code ------------------------------------------ Python code used to get completions separated by semicolons for imports. For IPython v0.11, add the following line to `python-shell-completion-setup-code': from IPython.core.completerlib import module_completion and use the following as the value of this variable: ';'.join(module_completion('''%s''')) strip-chars-before ------------------ Regexp indicating which chars shall be stripped before STRING - which is defined by `string-chars-preserve'. strip-chars-after ----------------- Regexp indicating which chars shall be stripped after STRING - which is defined by `string-chars-preserve'. py-docstring-style ------------------ Implemented styles are DJANGO, ONETWO, PEP-257, PEP-257-NN, SYMMETRIC, and NIL. A value of NIL won't care about quotes position and will treat docstrings a normal string, any other value may result in one of the following docstring styles: DJANGO: """ Process foo, return bar. """ """ Process foo, return bar. If processing fails throw ProcessingError. """ ONETWO: """Process foo, return bar.""" """ Process foo, return bar. If processing fails throw ProcessingError. """ PEP-257: """Process foo, return bar.""" """Process foo, return bar. If processing fails throw ProcessingError. """ PEP-257-NN: """Process foo, return bar.""" """Process foo, return bar. If processing fails throw ProcessingError. """ SYMMETRIC: """Process foo, return bar.""" """ Process foo, return bar. If processing fails throw ProcessingError. """ py-execute-directory -------------------- When set, stores the file's default directory-name py-execute-... functions act upon. Used by Python-shell for output of `py-execute-buffer' and related commands. See also `py-use-current-dir-when-execute-p' py-use-current-dir-when-execute-p --------------------------------- When `t', current directory is used by Python-shell for output of `py-execute-buffer' and related commands. See also `py-execute-directory' py-shell-prompt-output-regexp ----------------------------- Regular Expression matching output prompt of python shell. It should not contain a caret (^) at the beginning. py-output-buffer ---------------- When `py-enforce-output-buffer-p' is non-nil, provides the default for output-buffer. py-enforce-output-buffer-p -------------------------- When non-nil, current value of `py-output-buffer' is used for output, regardless of environment. Default is nil py-underscore-word-syntax-p --------------------------- If underscore chars should be of syntax-class `word', not of `symbol'. Underscores in word-class makes `forward-word' etc. travel the indentifiers. Default is `t'. See bug report at launchpad, lp:940812 python-mode.el-6.1.3/doc/commands-python-mode.org0000644000000000000000000045536312271450574021670 0ustar rootroot00000000000000python-mode.el commands ** py-smart-operator-check Check, if smart-operator-mode is loaded resp. available. Give some hints, if not. ** py-autopair-check Check, if autopair-mode is available. Give some hints, if not. ** (defun p * Toggle ** toggle-py-nil-docstring-style If nil docstring-style should be on or off. Returns value of `py-docstring-style' switched to. To set permanently, customize this variable ** py-nil-docstring-style-on Make sure, nil docstring-style' is on. Returns value of `py-docstring-style'. To set permanently, customize this variable ** py-nil-docstring-style-off Make sure, nil docstring-style is off. Returns value of `py-docstring-style'. To set permanently, customize this variable ** toggle-py-onetwo-docstring-style If onetwo docstring-style should be on or off. Returns value of `py-docstring-style' switched to. To set permanently, customize this variable ** py-onetwo-docstring-style-on Make sure, onetwo docstring-style' is on. Returns value of `py-docstring-style'. To set permanently, customize this variable ** py-onetwo-docstring-style-off Make sure, onetwo docstring-style is off. Returns value of `py-docstring-style'. To set permanently, customize this variable ** toggle-py-pep-257-docstring-style If pep-257 docstring-style should be on or off. Returns value of `py-pep-257-docstring-style' switched to. ** py-pep-257-docstring-style-on Make sure, pep-257 docstring-style' is on. Returns value of `py-pep-257-docstring-style'. ** py-pep-257-docstring-style-off Make sure, pep-257 docstring-style is off. Returns value of `py-pep-257-docstring-style'. ** toggle-py-pep-257-nn-docstring-style If pep-257-nn docstring-style should be on or off. Returns value of `py-pep-257-nn-docstring-style' switched to. ** py-pep-257-nn-docstring-style-on Make sure, pep-257-nn docstring-style' is on. Returns value of `py-docstring-style'. To set permanently, customize this variable ** py-pep-257-nn-docstring-style-off Make sure, pep-257-nn docstring-style is off. Returns value of `py-docstring-style'. To set permanently, customize this variable ** toggle-py-symmetric-docstring-style If symmetric docstring-style should be on or off. Returns value of `py-docstring-style' switched to. To set permanently, customize this variable ** py-symmetric-docstring-style-on Make sure, symmetric docstring-style' is on. Returns value of `py-docstring-style'. To set permanently, customize this variable ** py-symmetric-docstring-style-off Make sure, symmetric docstring-style is off. Returns value of `py-docstring-style'. To set permanently, customize this variable ** toggle-py-django-docstring-style If django docstring-style should be on or off. Returns value of `py-docstring-style' switched to. To set permanently, customize this variable ** py-django-docstring-style-on Make sure, django docstring-style' is on. Returns value of `py-docstring-style'. To set permanently, customize this variable ** py-django-docstring-style-off Make sure, django docstring-style is off. Returns value of `py-docstring-style'. To set permanently, customize this variable ** toggle-py-underscore-word-syntax-p If `py-underscore-word-syntax-p' should be on or off. Returns value of `py-underscore-word-syntax-p' switched to. ** py-underscore-word-syntax-p-on Make sure, py-underscore-word-syntax-p' is on. Returns value of `py-underscore-word-syntax-p'. ** py-underscore-word-syntax-p-off Make sure, `py-underscore-word-syntax-p' is off. Returns value of `py-underscore-word-syntax-p'. ** toggle-py-electric-comment-p If `py-electric-comment-p' should be on or off. Returns value of `py-electric-comment-p' switched to. ** py-electric-comment-p-on Make sure, py-electric-comment-p' is on. Returns value of `py-electric-comment-p'. ** py-electric-comment-p-off Make sure, `py-electric-comment-p' is off. Returns value of `py-electric-comment-p'. ** toggle-force-local-shell If locally indicated Python shell should be taken and enforced upon sessions execute commands. Toggles boolean `py-force-local-shell-p' along with `py-force-py-shell-name-p' Returns value of `toggle-force-local-shell' switched to. When on, kind of an option 'follow', local shell sets `py-shell-name', enforces its use afterwards. See also commands `py-force-local-shell-on' `py-force-local-shell-off' ** py-force-local-shell-on Make sure, `py-py-force-local-shell-p' is on. Returns value of `py-force-local-shell-p'. Kind of an option 'follow', local shell sets `py-shell-name', enforces its use afterwards ** py-force-local-shell-off Restore `py-shell-name' default value and `behaviour'. ** toggle-force-py-shell-name-p If customized default `py-shell-name' should be enforced upon execution. If `py-force-py-shell-name-p' should be on or off. Returns value of `py-force-py-shell-name-p' switched to. See also commands force-py-shell-name-p-on force-py-shell-name-p-off Caveat: Completion might not work that way. ** force-py-shell-name-p-on Switches `py-force-py-shell-name-p' on. Customized default `py-shell-name' will be enforced upon execution. Returns value of `py-force-py-shell-name-p'. Caveat: Completion might not work that way. ** force-py-shell-name-p-off Make sure, `py-force-py-shell-name-p' is off. Function to use by executes will be guessed from environment. Returns value of `py-force-py-shell-name-p'. ** py-toggle-indent-tabs-mode Toggle `indent-tabs-mode'. Returns value of `indent-tabs-mode' switched to. ** py-indent-tabs-mode-on Switch `indent-tabs-mode' on. ** py-indent-tabs-mode-off Switch `indent-tabs-mode' on. ** toggle-py-jump-on-exception If `py-jump-on-exception' should be on or off. Returns value of `py-jump-on-exception' switched to. ** py-jump-on-exception-on Make sure, py-jump-on-exception' is on. Returns value of `py-jump-on-exception'. ** py-jump-on-exception-off Make sure, `py-jump-on-exception' is off. Returns value of `py-jump-on-exception'. ** toggle-python-mode-v5-behavior-p If `python-mode-v5-behavior-p' should be on or off. Returns value of `python-mode-v5-behavior-p' switched to. ** python-mode-v5-behavior-p-on Make sure, `python-mode-v5-behavior-p' is on. Returns value of `python-mode-v5-behavior-p'. ** python-mode-v5-behavior-p-off Make sure, `python-mode-v5-behavior-p' is off. Returns value of `python-mode-v5-behavior-p'. ** py-toggle-shell-switch-buffers-on-execute If `py-switch-buffers-on-execute-p' should be on or off. Returns value of `py-switch-buffers-on-execute-p' switched to. ** py-shell-switch-buffers-on-execute-on Make sure, `py-switch-buffers-on-execute-p' is on. Returns value of `py-switch-buffers-on-execute-p'. ** py-shell-switch-buffers-on-execute-off Make sure, `py-switch-buffers-on-execute-p' is off. Returns value of `py-switch-buffers-on-execute-p'. ** py-toggle-split-windows-on-execute If `py-split-windows-on-execute-p' should be on or off. Returns value of `py-split-windows-on-execute-p' switched to. ** py-split-windows-on-execute-on Make sure, `py-split-windows-on-execute-p' is on. Returns value of `py-split-windows-on-execute-p'. ** py-split-windows-on-execute-off Make sure, `py-split-windows-on-execute-p' is off. Returns value of `py-split-windows-on-execute-p'. ** py-toggle-highlight-indentation If `highlight-indentation-p' should be on or off. ** py-highlight-indentation-off If `highlight-indentation-p' should be on or off. ** py-highlight-indentation-on If `highlight-indentation-p' should be on or off. ** py-toggle-smart-indentation If `py-smart-indentation' should be on or off. Returns value of `py-smart-indentation' switched to. ** py-smart-indentation-on Make sure, `py-smart-indentation' is on. Returns value of `py-smart-indentation'. ** py-smart-indentation-off Make sure, `py-smart-indentation' is off. Returns value of `py-smart-indentation'. ** toggle-py-smart-operator-mode-p If `py-smart-operator-mode-p' should be on or off. Returns value of `py-smart-operator-mode-p' switched to. ** py-smart-operator-mode-p-on Make sure, py-smart-operator-mode-p' is on. Returns value of `py-smart-operator-mode-p'. ** py-smart-operator-mode-p-off Make sure, py-smart-operator-mode-p' is off. Returns value of `py-smart-operator-mode-p'. ** toggle-py-use-current-dir-when-execute-p If `py-use-current-dir-when-execute-p' should be on or off. Returns value of `py-use-current-dir-when-execute-p' switched to. ** py-use-current-dir-when-execute-p-on Make sure, py-use-current-dir-when-execute-p' is on. Returns value of `py-use-current-dir-when-execute-p'. ** py-use-current-dir-when-execute-p-off Make sure, `py-use-current-dir-when-execute-p' is off. Returns value of `py-use-current-dir-when-execute-p'. ** py-toggle-autopair-mode If `py-autopair-mode' should be on or off. Returns value of `py-autopair-mode' switched to. ** py-autopair-mode-on Make sure, py-autopair-mode' is on. Returns value of `py-autopair-mode'. ** py-autopair-mode-off Make sure, py-autopair-mode' is off. Returns value of `py-autopair-mode'. ** toggle-py-switch-buffers-on-execute-p If `py-switch-buffers-on-execute-p' should be on or off. Returns value of `py-switch-buffers-on-execute-p' switched to. ** py-switch-buffers-on-execute-p-on Make sure, `py-py-switch-buffers-on-execute-p' is on. Returns value of `py-switch-buffers-on-execute-p'. ** py-switch-buffers-on-execute-p-off Make sure, `py-switch-buffers-on-execute-p' is off. Returns value of `py-switch-buffers-on-execute-p'. ** toggle-py-split-windows-on-execute-p If `py-split-windows-on-execute-p' should be on or off. Returns value of `py-split-windows-on-execute-p' switched to. ** py-split-windows-on-execute-p-on Make sure, `py-py-split-windows-on-execute-p' is on. Returns value of `py-split-windows-on-execute-p'. ** py-split-windows-on-execute-p-off Make sure, `py-split-windows-on-execute-p' is off. Returns value of `py-split-windows-on-execute-p'. ** py-toggle-sexp-function Opens customization ** py-shell-get-process Get appropriate Python process for current buffer and return it. ** py-shell-send-string Send STRING to inferior Python PROCESS. When `py-verbose-p' and MSG is non-nil messages the first line of STRING. ** py-shell-send-file Send FILE-NAME to inferior Python PROCESS. If TEMP-FILE-NAME is passed then that file is used for processing instead, while internally the shell will continue to use FILE-NAME. ** py-switch-to-shell Switch to inferior Python process buffer. ** python-shell-completion-complete-or-indent Complete or indent depending on the context. If content before pointer is all whitespace indent. If not try to complete. * Helper commands ** py-guess-pdb-path If py-pdb-path isn't set, find location of pdb.py. ** (defun s ** py-forward-line Goes to end of line after forward move. Travels right-margin comments. ** py-go-to-beginning-of-comment Go to the beginning of current line's comment, if any. From a programm use `py-beginning-of-comment' instead ** py-leave-comment-or-string-backward If inside a comment or string, leave it backward. ** py-beginning-of-list-pps Go to the beginning of a list. Optional ARG indicates a start-position for `parse-partial-sexp'. Return beginning position, nil if not inside. ** empty-line-p Returns t if cursor is at an line with nothing but whitespace-characters, nil otherwise. ** py-count-lines Count lines in accessible part until current line. See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7115 ** py-send-region Send the region to the inferior Python process. ** py-send-region-and-go Send the region to the inferior Python process. Then switch to the process buffer. ** python-send-string Evaluate STRING in inferior Python process. ** py-switch-to-python Switch to the Python process buffer, maybe starting new process. With prefix arg, position cursor at end of buffer. ** py-proc Return the current Python process. Start a new process if necessary. * Keymap and syntax ** py-insert-default-shebang Insert in buffer shebang of installed default Python. ** py-electric-comment Insert a comment. If starting a comment, indent accordingly. If a numeric argument ARG is provided, that many "#" are inserted non-electrically. With C-u "#" electric behavior is inhibited inside a string or comment. ** py-electric-colon Insert a colon and indent accordingly. If a numeric argument ARG is provided, that many colons are inserted non-electrically. Electric behavior is inhibited inside a string or comment or by universal prefix C-u. Switched by `py-electric-colon-active-p', default is nil See also `py-electric-colon-greedy-p' ** py-empty-out-list-backward Deletes all elements from list before point. ** py-electric-backspace Delete preceding character or level of indentation. With ARG do that ARG times. Returns column reached. ** py-electric-delete Delete following character or levels of whitespace. With ARG do that ARG times. ** py-indent-line-outmost Indent the current line to the outmost reasonable indent. With optional C-u an indent with length `py-indent-offset' is inserted unconditionally ** py-indent-line Indent the current line according to Python rules. When called interactivly with C-u, ignore dedenting rules for block closing statements (e.g. return, raise, break, continue, pass) An optional C-u followed by a numeric argument neither 1 nor 4 will switch off `py-smart-indentation' for this execution. This permits to correct allowed but unwanted indents. Similar to `toggle-py-smart-indentation' resp. `py-smart-indentation-off' followed by TAB. This function is normally used by `indent-line-function' resp. TAB. Returns current indentation When `py-tab-shifts-region-p' is `t', not just the current line, but the region is shiftet that way. If `py-tab-indents-region-p' is `t' and first TAB doesn't shift --as indent is at outmost reasonable--, indent-region is called. ** py-newline-and-indent Add a newline and indent to outmost reasonable indent. When indent is set back manually, this is honoured in following lines. ** py-newline-and-dedent Add a newline and indent to one level below current. Returns column. ** py-indent-tabs-mode With positive ARG switch `indent-tabs-mode' on. With negative ARG switch `indent-tabs-mode' off. Returns value of `indent-tabs-mode' switched to. ** py-guess-indent-forward Called when moving to end of a form and `py-smart-indentation' is on. ** py-guess-indent-offset Guess `py-indent-offset'. Set local value of `py-indent-offset', return it Might change local value of `py-indent-offset' only when called downwards from beginning of block followed by a statement. Otherwise default-value is returned. ** py-narrow-to-defun Make text outside current def or class invisible. The defun visible is the one that contains point or follows point. * Shifting ** py-shift-left Dedent region according to `py-indent-offset' by COUNT times. If no region is active, current line is dedented. Returns indentation reached. ** py-shift-right Indent region according to `py-indent-offset' by COUNT times. If no region is active, current line is indented. Returns indentation reached. ** py-shift-paragraph-right Indent paragraph by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-shift-paragraph-left Dedent paragraph by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-shift-block-right Indent block by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-shift-block-left Dedent block by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-shift-minor-block-left Dedent minor-block by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. A minor block is started by a `for', `if', `try' or `with'. ** py-shift-minor-block-right Indent minor-block by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. A minor block is started by a `for', `if', `try' or `with'. ** py-shift-clause-right Indent clause by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-shift-clause-left Dedent clause by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-shift-block-or-clause-right Indent block-or-clause by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-shift-block-or-clause-left Dedent block-or-clause by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-shift-def-right Indent def by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-shift-def-left Dedent def by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-shift-class-right Indent class by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-shift-class-left Dedent class by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-shift-def-or-class-right Indent def-or-class by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-shift-def-or-class-left Dedent def-or-class by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-shift-line-right Indent line by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-shift-line-left Dedent line by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-shift-statement-right Indent statement by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-shift-statement-left Dedent statement by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. ** py-indent-and-forward Indent current line according to mode, move one line forward. ** py-indent-region Reindent a region of Python code. With optional INDENT-OFFSET specify a different value than `py-indent-offset' at place. Guesses the outmost reasonable indent Returns and keeps relative position * Positions ** py-beginning-of-paragraph-position Returns beginning of paragraph position. ** py-end-of-paragraph-position Returns end of paragraph position. ** py-beginning-of-block-position Returns beginning of block position. ** py-end-of-block-position Returns end of block position. ** py-beginning-of-minor-block-position Returns beginning of minor-block position. ** py-end-of-minor-block-position Returns end of minor-block position. ** py-beginning-of-clause-position Returns beginning of clause position. ** py-end-of-clause-position Returns end of clause position. ** py-beginning-of-block-or-clause-position Returns beginning of block-or-clause position. ** py-end-of-block-or-clause-position Returns end of block-or-clause position. ** py-beginning-of-def-position Returns beginning of def position. ** py-end-of-def-position Returns end of def position. ** py-beginning-of-class-position Returns beginning of class position. ** py-end-of-class-position Returns end of class position. ** py-beginning-of-def-or-class-position Returns beginning of def-or-class position. ** py-end-of-def-or-class-position Returns end of def-or-class position. ** py-beginning-of-line-position Returns beginning of line position. ** py-end-of-line-position Returns end of line position. ** py-beginning-of-statement-position Returns beginning of statement position. ** py-end-of-statement-position Returns end of statement position. ** py-beginning-of-comment-position Returns beginning of comment position. ** py-end-of-comment-position Returns end of comment position. ** py-beginning-of-top-level-position Returns beginning of top-level position. ** py-end-of-top-level-position Returns end of top-level position. ** py-beginning-of-partial-expression-position Returns beginning of partial-expression position. ** py-end-of-partial-expression-position Returns end of partial-expression position. ** py-beginning-of-expression-position Returns beginning of expression position. ** py-end-of-expression-position Returns end of expression position. * some more Positions not generated by ** py-list-beginning-position Return lists beginning position, nil if not inside. Optional ARG indicates a start-position for `parse-partial-sexp'. ** py-end-of-list-position Return end position, nil if not inside. Optional ARG indicates a start-position for `parse-partial-sexp'. ** py-in-triplequoted-string-p Returns character address of start tqs-string, nil if not inside. ** py-in-string-p Returns character address of start of string, nil if not inside. ** py-in-statement-p Returns list of beginning and end-position if inside. Result is useful for booleans too: (when (py-in-statement-p)...) will work. * Bounds ** py-bounds-of-statement Returns bounds of statement at point. With optional POSITION, a number, report bounds of statement at POSITION. Returns a list, whose car is beg, cdr - end. ** py-bounds-of-statements Bounds of consecutive multitude of statements around point. Indented same level, which don't open blocks. ** py-bounds-of-block Returns bounds of block at point. With optional POSITION, a number, report bounds of block at POSITION. Returns a list, whose car is beg, cdr - end. ** py-bounds-of-clause Returns bounds of clause at point. With optional POSITION, a number, report bounds of clause at POSITION. Returns a list, whose car is beg, cdr - end. ** py-bounds-of-block-or-clause Returns bounds of block-or-clause at point. With optional POSITION, a number, report bounds of block-or-clause at POSITION. Returns a list, whose car is beg, cdr - end. ** py-bounds-of-def Returns bounds of def at point. With optional POSITION, a number, report bounds of def at POSITION. Returns a list, whose car is beg, cdr - end. ** py-bounds-of-class Returns bounds of class at point. With optional POSITION, a number, report bounds of class at POSITION. Returns a list, whose car is beg, cdr - end. ** py-bounds-of-region Returns bounds of region at point. Returns a list, whose car is beg, cdr - end. ** py-bounds-of-buffer Returns bounds of buffer at point. With optional POSITION, a number, report bounds of buffer at POSITION. Returns a list, whose car is beg, cdr - end. ** py-bounds-of-expression Returns bounds of expression at point. With optional POSITION, a number, report bounds of expression at POSITION. Returns a list, whose car is beg, cdr - end. ** py-bounds-of-partial-expression Returns bounds of partial-expression at point. With optional POSITION, a number, report bounds of partial-expression at POSITION. Returns a list, whose car is beg, cdr - end. ** py-bounds-of-declarations Bounds of consecutive multitude of assigments resp. statements around point. Indented same level, which don't open blocks. Typically declarations resp. initialisations of variables following a class or function definition. See also py-bounds-of-statements * Comments, Filling ** py-beginning-of-comment Go to the beginning of current line's comment, if any. Returns position if succesful. ** py-end-of-comment Go to the end of comment at point. Returns position, nil if not in comment. * Comment forms ** py-comment-region Like `comment-region' but uses double hash (`#') comment starter. ** py-comment-block Comments block at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default ** py-comment-minor-block Comments minor-block at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default ** py-comment-top-level Comments top-level form at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default ** py-comment-clause Comments clause at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default ** py-comment-block-or-clause Comments block-or-clause at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default ** py-comment-def Comments def at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default ** py-comment-class Comments class at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default ** py-comment-def-or-class Comments def-or-class at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default ** py-comment-statement Comments statement at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default ** py-uncomment Uncomment commented lines at point. If region is active, restrict uncommenting at region ** py-delete-comments-in-def-or-class Delete all commented lines in def-or-class at point ** py-delete-comments-in-class Delete all commented lines in class at point ** py-delete-comments-in-block Delete all commented lines in block at point ** py-delete-comments-in-region Delete all commented lines in region. ** py-fill-comment Fill the comment paragraph at point ** py-end-of-string Go to end of string at point, return position. Takes the result of (syntax-ppss) ** py-fill-this-paragraph Fill just the paragraph at point. ** py-fill-paragraph `fill-paragraph-function' If `py-paragraph-fill-docstring-p' and inside a docstring, the whole docstring is formatted. See also `py-fill-string' ** py-fill-labelled-string Fill string or paragraph containing lines starting with label See lp:1066489 ** py-fill-string String fill function for `py-fill-paragraph'. JUSTIFY should be used (if applicable) as in `fill-paragraph'. DOCSTRING is either a boolean or 'no If `py-paragraph-fill-docstring-p' is `t', `M-q` fills the complete docstring according to setting of `py-docstring-style' ** py-fill-string-django Fill docstring according to Django's coding standards style. """ Process foo, return bar. """ """ Process foo, return bar. If processing fails throw ProcessingError. """ See available styles at `py-fill-paragraph' or var `py-docstring-style' ** py-fill-string-onetwo One newline and start and Two at end style. """Process foo, return bar.""" """ Process foo, return bar. If processing fails throw ProcessingError. """ See available styles at `py-fill-paragraph' or var `py-docstring-style' ** py-fill-string-pep-257 PEP-257 with 2 newlines at end of string. """Process foo, return bar.""" """Process foo, return bar. If processing fails throw ProcessingError. """ See available styles at `py-fill-paragraph' or var `py-docstring-style' ** py-fill-string-pep-257-nn PEP-257 with 1 newline at end of string. """Process foo, return bar.""" """Process foo, return bar. If processing fails throw ProcessingError. """ See available styles at `py-fill-paragraph' or var `py-docstring-style' ** py-fill-string-symmetric Symmetric style. """Process foo, return bar.""" """ Process foo, return bar. If processing fails throw ProcessingError. """ See available styles at `py-fill-paragraph' or var `py-docstring-style' ** py-beginning-of-top-level-p Returns position, if cursor is at the beginning of a top-level, nil otherwise. * Opens-p ** py-statement-opens-block-p Return position if the current statement opens a block in stricter or wider sense. For stricter sense specify regexp. ** py-statement-opens-clause-p Return position if the current statement opens block or clause. ** py-statement-opens-block-or-clause-p Return position if the current statement opens block or clause. ** py-statement-opens-class-p Return `t' if the statement opens a functions or class definition, nil otherwise. ** py-statement-opens-def-p Return `t' if the statement opens a functions or class definition, nil otherwise. ** py-statement-opens-def-or-class-p Return `t' if the statement opens a functions or class definition, nil otherwise. ** py-look-downward-for-clause If beginning of other clause exists downward in current block. If succesful return position. ** py-current-defun Go to the outermost method or class definition in current scope. Python value for `add-log-current-defun-function'. This tells add-log.el how to find the current function/method/variable. Returns name of class or methods definition, if found, nil otherwise. See customizable variables `py-current-defun-show' and `py-current-defun-delay'. ** py-sort-imports Sort multiline imports. Put point inside the parentheses of a multiline import and hit M-x py-sort-imports to sort the imports lexicographically ** py-which-def-or-class Returns concatenated `def' and `class' names in hierarchical order, if cursor is inside. Returns "???" otherwise Used by variable `which-func-functions' ** py-which-function Return the name of the function or class, if curser is in, return nil otherwise. * Beginning/End ** py-beginning-of-statements Got to the beginning of statements in current level which don't open blocks. ** py-end-of-statements Got to the end of statements in current level which don't open blocks. ** py-beginning-of-expression Go to the beginning of a compound python expression. With numeric ARG do it that many times. A a compound python expression might be concatenated by "." operator, thus composed by minor python expressions. If already at the beginning or before a expression, go to next expression in buffer upwards Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference Operators however are left aside resp. limit py-expression designed for edit-purposes. ** py-end-of-expression Go to the end of a compound python expression. With numeric ARG do it that many times. A a compound python expression might be concatenated by "." operator, thus composed by minor python expressions. Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference Operators however are left aside resp. limit py-expression designed for edit-purposes. ** py-beginning-of-partial-expression ** py-end-of-partial-expression ** py-beginning-of-line Go to beginning-of-line, return position. If already at beginning-of-line and not at BOB, go to beginning of previous line. ** py-end-of-line Go to end-of-line, return position. If already at end-of-line and not at EOB, go to end of next line. ** py-beginning-of-statement Go to the initial line of a simple statement. For beginning of compound statement use py-beginning-of-block. For beginning of clause py-beginning-of-clause. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-declarations Got to the beginning of assigments resp. statements in current level which don't open blocks. ** py-end-of-declarations Got to the end of assigments resp. statements in current level which don't open blocks. * Beginning of forms ** py-beginning-of-form-intern Go to beginning of FORM. With INDENT, go to beginning one level above. Whit IACT, print result in message buffer. Returns beginning of FORM if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-block Go to beginning block, skip whitespace at BOL. Returns beginning of block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-clause Go to beginning clause, skip whitespace at BOL. Returns beginning of clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-block-or-clause Go to beginning block-or-clause, skip whitespace at BOL. Returns beginning of block-or-clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-def Go to beginning def, skip whitespace at BOL. Returns beginning of def if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-class Go to beginning class, skip whitespace at BOL. Returns beginning of class if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-def-or-class Go to beginning def-or-class, skip whitespace at BOL. Returns beginning of def-or-class if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-if-block Go to beginning if-block, skip whitespace at BOL. Returns beginning of if-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-try-block Go to beginning try-block, skip whitespace at BOL. Returns beginning of try-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-minor-block Go to beginning minor-block, skip whitespace at BOL. Returns beginning of minor-block if successful, nil otherwise A minor block is started by a `for', `if', `try' or `with'. ** py-beginning-of-block-lc Go to beginning block, go to BOL. Returns beginning of block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-clause-lc Go to beginning clause, go to BOL. Returns beginning of clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-block-or-clause-lc Go to beginning block-or-clause, go to BOL. Returns beginning of block-or-clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-def-lc Go to beginning def, go to BOL. Returns beginning of def if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-class-lc Go to beginning class, go to BOL. Returns beginning of class if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-def-or-class-lc Go to beginning def-or-class, go to BOL. Returns beginning of def-or-class if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-if-block-lc Go to beginning if-block, go to BOL. Returns beginning of if-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-try-block-lc Go to beginning try-block, go to BOL. Returns beginning of try-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-minor-block-lc Go to beginning minor-block, go to BOL. Returns beginning of minor-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning-of-top-level Go up to beginning of statments until level of indentation is null. Returns position if successful, nil otherwise ** py-end-of-top-level Go to end of top-level form at point. Returns position if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-beginning Go to beginning of compound statement or definition at point. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-end Go to end of of compound statement or definition at point. Returns position block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-up Go up or to beginning of form if inside. If inside a delimited form --string or list-- go to it's beginning. If not at beginning of a statement or block, go to it's beginning. If at beginning of a statement or block, go to beginning one level above of compound statement or definition at point. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-down Go to beginning one level below of compound statement or definition at point. If no statement or block below, but a delimited form --string or list-- go to it's beginning. Repeated call from there will behave like down-list. Returns position if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-end-of-block Go to end of block. Returns end of block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-end-of-clause Go to end of clause. Returns end of clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-end-of-block-or-clause Go to end of block-or-clause. Returns end of block-or-clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-end-of-def Go to end of def. Returns end of def if successful, nil otherwise With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-end-of-class Go to end of class. Returns end of class if successful, nil otherwise With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-end-of-def-or-class Go to end of def-or-class. Returns end of def-or-class if successful, nil otherwise With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-end-of-if-block Go to end of if-block. Returns end of if-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-end-of-try-block Go to end of try-block. Returns end of try-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html ** py-end-of-minor-block Go to end of minor-block. Returns end of minor-block if successful, nil otherwise A minor block is started by a `for', `if', `try' or `with'. * Forms ** py-declarations Copy and mark assigments resp. statements in current level which don't open blocks or start with a keyword. See also `py-statements', which is more general, taking also simple statements starting with a keyword. ** py-statements Copy and mark simple statements in current level which don't open blocks. More general than py-declarations, which would stop at keywords like a print-statement. ** py-end-of-statement Go to the last char of current statement. To go just beyond the final line of the current statement, use `py-down-statement-bol'. ** py-goto-statement-below Goto beginning of next statement. ** py-beginning-of-decorator Go to the beginning of a decorator. Returns position if succesful ** py-end-of-decorator Go to the end of a decorator. Returns position if succesful * Mark ** py-mark-paragraph Mark paragraph at point. Returns beginning and end positions of marked area, a cons. ** py-mark-block Mark block at point. Returns beginning and end positions of marked area, a cons. ** py-mark-minor-block Mark minor-block at point. Returns beginning and end positions of marked area, a cons. ** py-mark-clause Mark clause at point. Returns beginning and end positions of marked area, a cons. ** py-mark-block-or-clause Mark block-or-clause at point. Returns beginning and end positions of marked area, a cons. ** py-mark-def Mark def at point. With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of marked area, a cons. ** py-mark-class Mark class at point. With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of marked area, a cons. ** py-mark-def-or-class Mark def-or-class at point. With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of marked area, a cons. ** py-mark-line Mark line at point. Returns beginning and end positions of marked area, a cons. ** py-mark-statement Mark statement at point. Returns beginning and end positions of marked area, a cons. ** py-mark-top-level Mark top-level form at point. Returns beginning and end positions of marked area, a cons. ** py-mark-expression Mark expression at point. Returns beginning and end positions of marked area, a cons. ** py-mark-partial-expression Mark partial-expression at point. Returns beginning and end positions of marked area, a cons. * Copy ** py-copy-statement Copy statement at point. Store data in kill ring, so it might yanked back. ** py-copy-top-level Copy top-level at point. Store data in kill ring, so it might yanked back. ** py-copy-block Copy block at point. Store data in kill ring, so it might yanked back. ** py-copy-clause Copy clause at point. Store data in kill ring, so it might yanked back. ** py-copy-block-or-clause Copy block-or-clause at point. Store data in kill ring, so it might yanked back. ** py-copy-def Copy def at point. Store data in kill ring, so it might yanked back. ** py-copy-class Copy class at point. Store data in kill ring, so it might yanked back. ** py-copy-def-or-class Copy def-or-class at point. Store data in kill ring, so it might yanked back. ** py-copy-expression Copy expression at point. Store data in kill ring, so it might yanked back. ** py-copy-partial-expression Copy partial-expression at point. Store data in kill ring, so it might yanked back. ** py-copy-minor-block Copy minor-block at point. Store data in kill ring, so it might yanked back. * Delete ** py-delete-statement Delete STATEMENT at point. Don't store data in kill ring. ** py-delete-top-level Delete TOP-LEVEL at point. Don't store data in kill ring. ** py-delete-block Delete BLOCK at point. Don't store data in kill ring. ** py-delete-block-or-clause Delete BLOCK-OR-CLAUSE at point. Don't store data in kill ring. ** py-delete-def Delete DEF at point. Don't store data in kill ring. ** py-delete-class Delete CLASS at point. Don't store data in kill ring. ** py-delete-def-or-class Delete DEF-OR-CLASS at point. Don't store data in kill ring. ** py-delete-expression Delete EXPRESSION at point. Don't store data in kill ring. ** py-delete-partial-expression Delete PARTIAL-EXPRESSION at point. Don't store data in kill ring. ** py-delete-minor-block Delete MINOR-BLOCK at point. Don't store data in kill ring. A minor block is started by a `for', `if', `try' or `with'. * Kill ** py-kill-statements Delete statements declared in current level. Store deleted statements in kill-ring ** py-kill-declarations Delete variables declared in current level. Store deleted variables in kill-ring ** py-kill-expression Delete expression at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-kill-partial-expression Delete partial-expression at point. Stores data in kill ring. Might be yanked back using `C-y'. "." operators delimit a partial-expression expression on it's level, that's the difference to compound expressions. ** py-kill-statement Delete statement at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-kill-top-level Delete top-level form at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-kill-block Delete block at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-kill-minor-block Delete minor-block at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-kill-block-or-clause Delete block-or-clause at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-kill-def-or-class Delete def-or-class at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-kill-class Delete class at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-kill-def Delete def at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-kill-clause Delete clause at point. Stores data in kill ring. Might be yanked back using `C-y'. * Beginning of line forms ** py-beginning-of-block-bol-p Returns position, if cursor is at the beginning of block, at beginning of line, nil otherwise. ** py-end-of-block-bol Goto beginning of line following end of block. Returns position reached, if successful, nil otherwise. See also `py-down-block': down from current definition to next beginning of block below. ** py-mark-block-bol Mark block, take beginning of line positions. Returns beginning and end positions of region, a cons. ** py-copy-block-bol Delete block bol at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-kill-block-bol Delete block bol at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-delete-block-bol Delete block bol at point. Don't store data in kill ring. ** py-beginning-of-clause-bol-p Returns position, if cursor is at the beginning of clause, at beginning of line, nil otherwise. ** py-end-of-clause-bol Goto beginning of line following end of clause. Returns position reached, if successful, nil otherwise. See also `py-down-clause': down from current definition to next beginning of clause below. ** py-mark-clause-bol Mark clause, take beginning of line positions. Returns beginning and end positions of region, a cons. ** py-copy-clause-bol Delete clause bol at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-kill-clause-bol Delete clause bol at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-delete-clause-bol Delete clause bol at point. Don't store data in kill ring. ** py-beginning-of-block-or-clause-bol-p Returns position, if cursor is at the beginning of block-or-clause, at beginning of line, nil otherwise. ** py-end-of-block-or-clause-bol Goto beginning of line following end of block-or-clause. Returns position reached, if successful, nil otherwise. See also `py-down-block-or-clause': down from current definition to next beginning of block-or-clause below. ** py-mark-block-or-clause-bol Mark block-or-clause, take beginning of line positions. Returns beginning and end positions of region, a cons. ** py-copy-block-or-clause-bol Delete block-or-clause bol at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-kill-block-or-clause-bol Delete block-or-clause bol at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-delete-block-or-clause-bol Delete block-or-clause bol at point. Don't store data in kill ring. ** py-beginning-of-def-bol-p Returns position, if cursor is at the beginning of def, at beginning of line, nil otherwise. ** py-end-of-def-bol Goto beginning of line following end of def. Returns position reached, if successful, nil otherwise. See also `py-down-def': down from current definition to next beginning of def below. ** py-mark-def-bol Mark def, take beginning of line positions. With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of region, a cons. ** py-copy-def-bol Delete def bol at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-kill-def-bol Delete def bol at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-delete-def-bol Delete def bol at point. Don't store data in kill ring. ** py-beginning-of-class-bol-p Returns position, if cursor is at the beginning of class, at beginning of line, nil otherwise. ** py-end-of-class-bol Goto beginning of line following end of class. Returns position reached, if successful, nil otherwise. See also `py-down-class': down from current definition to next beginning of class below. ** py-mark-class-bol Mark class, take beginning of line positions. With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of region, a cons. ** py-copy-class-bol Delete class bol at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-kill-class-bol Delete class bol at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-delete-class-bol Delete class bol at point. Don't store data in kill ring. ** py-beginning-of-def-or-class-bol-p Returns position, if cursor is at the beginning of def-or-class, at beginning of line, nil otherwise. ** py-end-of-def-or-class-bol Goto beginning of line following end of def-or-class. Returns position reached, if successful, nil otherwise. See also `py-down-def-or-class': down from current definition to next beginning of def-or-class below. ** py-mark-def-or-class-bol Mark def-or-class, take beginning of line positions. With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of region, a cons. ** py-copy-def-or-class-bol Delete def-or-class bol at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-kill-def-or-class-bol Delete def-or-class bol at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-delete-def-or-class-bol Delete def-or-class bol at point. Don't store data in kill ring. ** py-beginning-of-statement-bol-p Returns position, if cursor is at the beginning of statement, at beginning of line, nil otherwise. ** py-beginning-of-statement-bol Goto beginning of line where statement starts. Returns position reached, if successful, nil otherwise. See also `py-up-statement': up from current definition to next beginning of statement above. ** py-end-of-statement-bol Goto beginning of line following end of statement. Returns position reached, if successful, nil otherwise. See also `py-down-statement': down from current definition to next beginning of statement below. ** py-mark-statement-bol Mark statement, take beginning of line positions. Returns beginning and end positions of region, a cons. ** py-copy-statement-bol Delete statement bol at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-kill-statement-bol Delete statement bol at point. Stores data in kill ring. Might be yanked back using `C-y'. ** py-delete-statement-bol Delete statement bol at point. Don't store data in kill ring. * Up/Down ** py-up-statement Go to the beginning of next statement upwards in buffer. Return position if statement found, nil otherwise. ** py-down-statement Go to the beginning of next statement downwards in buffer. Return position if statement found, nil otherwise. ** py-up-block Go to the beginning of next block upwards in buffer. Return position if block found, nil otherwise. ** py-up-minor-block Go to the beginning of next minor-block upwards in buffer. Return position if minor-block found, nil otherwise. ** py-up-clause Go to the beginning of next clause upwards in buffer. Return position if clause found, nil otherwise. ** py-up-block-or-clause Go to the beginning of next block-or-clause upwards in buffer. Return position if block-or-clause found, nil otherwise. ** py-up-def Go to the beginning of next def upwards in buffer. Return position if def found, nil otherwise. ** py-up-class Go to the beginning of next class upwards in buffer. Return position if class found, nil otherwise. ** py-up-def-or-class Go to the beginning of next def-or-class upwards in buffer. Return position if def-or-class found, nil otherwise. ** py-down-block Go to the beginning of next block below in buffer. Return position if block found, nil otherwise. ** py-down-minor-block Go to the beginning of next minor-block below in buffer. Return position if minor-block found, nil otherwise. ** py-down-clause Go to the beginning of next clause below in buffer. Return position if clause found, nil otherwise. ** py-down-block-or-clause Go to the beginning of next block-or-clause below in buffer. Return position if block-or-clause found, nil otherwise. ** py-down-def Go to the beginning of next def below in buffer. Return position if def found, nil otherwise. ** py-down-class Go to the beginning of next class below in buffer. Return position if class found, nil otherwise. ** py-down-def-or-class Go to the beginning of next def-or-class below in buffer. Return position if def-or-class found, nil otherwise. ** py-up-block-bol Go to the beginning of next block upwards in buffer. Go to beginning of line. Return position if block found, nil otherwise. ** py-up-minor-block-bol Go to the beginning of next minor-block upwards in buffer. Go to beginning of line. Return position if minor-block found, nil otherwise. ** py-up-clause-bol Go to the beginning of next clause upwards in buffer. Go to beginning of line. Return position if clause found, nil otherwise. ** py-up-block-or-clause-bol Go to the beginning of next block-or-clause upwards in buffer. Go to beginning of line. Return position if block-or-clause found, nil otherwise. ** py-up-def-bol Go to the beginning of next def upwards in buffer. Go to beginning of line. Return position if def found, nil otherwise. ** py-up-class-bol Go to the beginning of next class upwards in buffer. Go to beginning of line. Return position if class found, nil otherwise. ** py-up-def-or-class-bol Go to the beginning of next def-or-class upwards in buffer. Go to beginning of line. Return position if def-or-class found, nil otherwise. ** py-down-block-bol Go to the beginning of next block below in buffer. Go to beginning of line Return position if block found, nil otherwise ** py-down-minor-block-bol Go to the beginning of next minor-block below in buffer. Go to beginning of line Return position if minor-block found, nil otherwise ** py-down-clause-bol Go to the beginning of next clause below in buffer. Go to beginning of line Return position if clause found, nil otherwise ** py-down-block-or-clause-bol Go to the beginning of next block-or-clause below in buffer. Go to beginning of line Return position if block-or-clause found, nil otherwise ** py-down-def-bol Go to the beginning of next def below in buffer. Go to beginning of line Return position if def found, nil otherwise ** py-down-class-bol Go to the beginning of next class below in buffer. Go to beginning of line Return position if class found, nil otherwise ** py-down-def-or-class-bol Go to the beginning of next def-or-class below in buffer. Go to beginning of line Return position if def-or-class found, nil otherwise ** py-forward-into-nomenclature Move forward to end of a nomenclature section or word. With C-u (programmatically, optional argument ARG), do it that many times. A `nomenclature' is a fancy way of saying AWordWithMixedCaseNotUnderscores. ** py-backward-into-nomenclature Move backward to beginning of a nomenclature section or word. With optional ARG, move that many times. If ARG is negative, move forward. A `nomenclature' is a fancy way of saying AWordWithMixedCaseNotUnderscores. ** match-paren Go to the matching brace, bracket or parenthesis if on its counterpart. Otherwise insert the character, the key is assigned to, here `%'. With universal arg  insert a `%'. * Python named shells ** python Start an Python interpreter. Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'. ** ipython Start an IPython interpreter. Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'. ** python3 Start an Python3 interpreter. Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'. ** python2 Start an Python2 interpreter. Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'. ** python2\.7 Start an Python2.7 interpreter. Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'. ** jython Start an Jython interpreter. Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'. ** python3\.2 Start an Python3.2 interpreter. Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'. ** python3\.3 Start an Python3.3 interpreter. Optional C-u prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'. ** python3\.4 Start an Python3.3 interpreter. Optional C-u prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'. ** bpython Start an Bpython interpreter. Optional C-u prompts for options to pass to the Bpython interpreter. See `py-python-command-args'. ** python-dedicated Start an unique Python interpreter in another window. Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'. ** ipython-dedicated Start an unique IPython interpreter in another window. Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'. ** python3-dedicated Start an unique Python3 interpreter in another window. Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'. ** python2-dedicated Start an unique Python2 interpreter in another window. Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'. ** python2\.7-dedicated Start an unique Python2.7 interpreter in another window. Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'. ** jython-dedicated Start an unique Jython interpreter in another window. Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'. ** python3\.2-dedicated Start an unique Python3.2 interpreter in another window. Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'. ** python3\.3-dedicated Start an unique Python3.3 interpreter in another window. Optional C-u prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'. ** bpython-dedicated Start an unique Bpython interpreter in another window. Optional C-u prompts for options to pass to the Bpython interpreter. See `py-python-command-args'. ** python-switch Switch to Python interpreter in another window. Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'. ** ipython-switch Switch to IPython interpreter in another window. Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'. ** python3-switch Switch to Python3 interpreter in another window. Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'. ** python2-switch Switch to Python2 interpreter in another window. Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'. ** python2\.7-switch Switch to Python2.7 interpreter in another window. Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'. ** jython-switch Switch to Jython interpreter in another window. Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'. ** python3\.2-switch Switch to Python3.2 interpreter in another window. Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'. ** python3\.3-switch Switch to Python3.3 interpreter in another window. Optional C-u prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'. ** bpython-switch Switch to Bpython interpreter in another window. Optional C-u prompts for options to pass to the Bpython interpreter. See `py-python-command-args'. ** python-no-switch Open an Python interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'. ** ipython-no-switch Open an IPython interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'. ** python3-no-switch Open an Python3 interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'. ** python2-no-switch Open an Python2 interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'. ** python2\.7-no-switch Open an Python2.7 interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'. ** jython-no-switch Open an Jython interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'. ** python3\.2-no-switch Open an Python3.2 interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'. ** python3\.3-no-switch Open an Python3.3 interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'. ** bpython-no-switch Open an Bpython interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the Bpython interpreter. See `py-python-command-args'. ** python-switch-dedicated Switch to an unique Python interpreter in another window. Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'. ** ipython-switch-dedicated Switch to an unique IPython interpreter in another window. Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'. ** python3-switch-dedicated Switch to an unique Python3 interpreter in another window. Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'. ** python2-switch-dedicated Switch to an unique Python2 interpreter in another window. Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'. ** python2\.7-switch-dedicated Switch to an unique Python2.7 interpreter in another window. Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'. ** jython-switch-dedicated Switch to an unique Jython interpreter in another window. Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'. ** python3\.2-switch-dedicated Switch to an unique Python3.2 interpreter in another window. Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'. ** python3\.3-switch-dedicated Switch to an unique Python3.3 interpreter in another window. Optional C-u prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'. ** bpython-switch-dedicated Switch to an unique Bpython interpreter in another window. Optional C-u prompts for options to pass to the Bpython interpreter. See `py-python-command-args'. ** py-which-execute-file-command Return the command appropriate to Python version. Per default it's "(format "execfile(r'%s') # PYTHON-MODE\n" filename)" for Python 2 series. ** py-execute-region-no-switch Send the region to a Python interpreter. Ignores setting of `py-switch-buffers-on-execute-p', buffer with region stays current. ** py-execute-region-switch Send the region to a Python interpreter. Ignores setting of `py-switch-buffers-on-execute-p', output-buffer will being switched to. ** py-execute-region Send the region to a Python interpreter. When called with C-u, execution through `default-value' of `py-shell-name' is forced. When called with C-u followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment. When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument. Optional DEDICATED (boolean) ** py-execute-region-default Send the region to the systems default Python interpreter. ** py-execute-region-dedicated Get the region processed by an unique Python interpreter. When called with C-u, execution through `default-value' of `py-shell-name' is forced. When called with C-u followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment. When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument. ** py-execute-region-default-dedicated Send the region to an unique shell of systems default Python. ** py-execute-python-mode-v5 ** py-execute-string Send the argument STRING to a Python interpreter. See also `py-execute-region'. ** py-execute-string-dedicated Send the argument STRING to an unique Python interpreter. See also `py-execute-region'. ** py-fetch-py-master-file Lookup if a `py-master-file' is specified. See also doku of variable `py-master-file' ** py-execute-import-or-reload Import the current buffer's file in a Python interpreter. If the file has already been imported, then do reload instead to get the latest version. If the file's name does not end in ".py", then do execfile instead. If the current buffer is not visiting a file, do `py-execute-buffer' instead. If the file local variable `py-master-file' is non-nil, import or reload the named file instead of the buffer's file. The file may be saved based on the value of `py-execute-import-or-reload-save-p'. See also `M-x py-execute-region'. This may be preferable to `M-x py-execute-buffer' because: - Definitions stay in their module rather than appearing at top level, where they would clutter the global namespace and not affect uses of qualified names (MODULE.NAME). - The Python debugger gets line number information about the functions. ** py-execute-buffer-dedicated Send the contents of the buffer to a unique Python interpreter. ** py-execute-buffer-switch Send the contents of the buffer to a Python interpreter and switches to output. ** py-execute-buffer-dedicated-switch Send the contents of the buffer to an unique Python interpreter. Ignores setting of `py-switch-buffers-on-execute-p'. ** py-execute-buffer Send the contents of the buffer to a Python interpreter. ** py-execute-buffer-no-switch Send the contents of the buffer to a Python interpreter but don't switch to output. ** py-execute-defun Send the current defun (class or method) to the inferior Python process. ** py-process-file Process "python filename". Optional OUTPUT-BUFFER and ERROR-BUFFER might be given. ** py-execute-line Send current line from beginning of indent to Python interpreter. ** py-output-filter Clear output buffer from py-shell-input prompt etc. ** py-execute-file When called interactively, user is prompted for filename. * Pdb ** py-pdbtrack-toggle-stack-tracking Set variable `py-pdbtrack-do-tracking-p'. ** turn-on-pdbtrack ** turn-off-pdbtrack * Documentation ** py-documentation Launch PyDOC on the Word at Point ** py-fetch-docu Lookup in current buffer for the doku for the symbol at point. Useful for newly defined symbol, not known to python yet. ** py-find-imports Find top-level imports. Returns imports ** py-eldoc-function Print help on symbol at point. ** py-describe-symbol Print help on symbol at point. If symbol is defined in current buffer, jump to it's definition Optional C-u used for debugging, will prevent deletion of temp file. ** py-describe-mode Dump long form of `python-mode' docs. ** py-load-file Load a Python file FILE-NAME into the inferior Python process. If the file has extension `.py' import or reload it as a module. Treating it as a module keeps the global namespace clean, provides function location information for debugging, and supports users of module-qualified names. ** py-find-definition Find source of definition of SYMBOL. Interactively, prompt for SYMBOL. * Miscellanus ** py-insert-super Insert a function "super()" from current environment. As example given in Python v3.1 documentation » The Python Standard Library » class C(B): def method(self, arg): super().method(arg) # This does the same thing as: # super(C, self).method(arg) Returns the string inserted. ** py-nesting-level Accepts the output of `parse-partial-sexp'. ** py-beginning-of-commented-section Leave upwards comments and/or empty lines. ** py-continuation-offset With numeric ARG different from 1 py-continuation-offset is set to that value; returns py-continuation-offset. ** py-compute-indentation Compute Python indentation. When HONOR-BLOCK-CLOSE-P is non-nil, statements such as `return', `raise', `break', `continue', and `pass' force one level of dedenting. Optional arguments are flags resp. values set and used by `py-compute-indentation' internally ** py-indentation-of-statement Returns the indenation of the statement at point. ** py-guess-default-python Defaults to "python", if guessing didn't succeed. ** py-set-ipython-completion-command-string Set and return `ipython-completion-command-string'. ** py-shell-dedicated Start an interactive Python interpreter in another window. With optional C-u user is prompted by `py-choose-shell' for command and options to pass to the Python interpreter. ** py-shell Start an interactive Python interpreter in another window. Interactively, C-u 4 prompts for a buffer. C-u 2 prompts for `py-python-command-args'. If `default-directory' is a remote file name, it is also prompted to change if called with a prefix arg. Returns py-shell's buffer-name. Optional string PYSHELLNAME overrides default `py-shell-name'. BUFFER allows specifying a name, the Python process is connected to When DONE is `t', `py-shell-manage-windows' is omitted ** py-indent-forward-line Indent and move one line forward to next indentation. Returns column of line reached. If `py-kill-empty-line' is non-nil, delete an empty line. When closing a form, use py-close-block et al, which will move and indent likewise. With M-x universal argument just indent. ** py-dedent-forward-line Dedent line and move one line forward. ** py-dedent Dedent line according to `py-indent-offset'. With arg, do it that many times. If point is between indent levels, dedent to next level. Return indentation reached, if dedent done, nil otherwise. Affected by `py-dedent-keep-relative-column'. ** py-close-def Set indent level to that of beginning of function definition. If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline. ** py-close-class Set indent level to that of beginning of class definition. If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline. ** py-close-clause Set indent level to that of beginning of clause definition. If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline. ** py-close-block Set indent level to that of beginning of block definition. If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline. ** py-class-at-point Return class definition as string. With interactive call, send it to the message buffer too. ** py-line-at-point Return line as string. With interactive call, send it to the message buffer too. ** py-looking-at-keywords-p If looking at a python keyword. Returns t or nil. ** py-match-paren-mode py-match-paren-mode nil oder t ** py-match-paren Goto to the opening or closing of block before or after point. With arg, do it that many times. Closes unclosed block if jumping from beginning. ** py-printform-insert Inserts a print statement out of current `(car kill-ring)' by default, inserts ARG instead if delivered. ** eva Put "eval(...)" forms around strings at point. ** pst-here Kill previous "pdb.set_trace()" and insert it at point. ** py-line-to-printform-python2 Transforms the item on current in a print statement. * Imenu ** py-switch-imenu-index-function Switch between series 5. index machine `py-imenu-create-index' and `py-imenu-create-index-new', which also lists modules variables ** py-toggle-local-default-use ** py-choose-shell-by-path Select Python executable according to version desplayed in path, current buffer-file is selected from. Returns versioned string, nil if nothing appropriate found ** py-choose-shell-by-shebang Choose shell by looking at #! on the first line. Returns the specified Python resp. Jython shell command name. ** py-which-python Returns version of Python of current environment, a number. ** py-python-current-environment Returns path of current Python installation. ** py-switch-shell Toggles between the interpreter customized in `py-shell-toggle-1' resp. `py-shell-toggle-2'. Was hard-coded CPython and Jython in earlier versions, now starts with Python2 and Python3 by default. ARG might be a python-version string to set to. C-u `py-toggle-shell' prompts to specify a reachable Python command. C-u followed by numerical arg 2 or 3, `py-toggle-shell' opens a respective Python shell. C-u followed by numerical arg 5 opens a Jython shell. Should you need more shells to select, extend this command by adding inside the first cond: ((eq NUMBER (prefix-numeric-value arg)) "MY-PATH-TO-SHELL") ** py-choose-shell Return an appropriate executable as a string. Returns nil, if no executable found. This does the following: - look for an interpreter with `py-choose-shell-by-shebang' - examine imports using `py-choose-shell-by-import' - look if Path/To/File indicates a Python version - if not successful, return default value of `py-shell-name' When interactivly called, messages the shell name, Emacs would in the given circtumstances. With C-u 4 is called `py-switch-shell' see docu there. ** py-install-directory-check Do some sanity check for `py-install-directory'. Returns `t' if successful. ** py-guess-py-install-directory Takes value of user directory aka $HOME if `(locate-library "python-mode")' is not succesful. Used only, if `py-install-directory' is empty. ** py-set-load-path Include needed subdirs of python-mode directory. * Abbrevs ** py-edit-abbrevs Jumps to `python-mode-abbrev-table' in a buffer containing lists of abbrev definitions. You can edit them and type C-c C-c to redefine abbrevs according to your editing. Buffer contains a header line for each abbrev table, which is the abbrev table name in parentheses. This is followed by one line per abbrev in that table: NAME USECOUNT EXPANSION HOOK where NAME and EXPANSION are strings with quotes, USECOUNT is an integer, and HOOK is any valid function or may be omitted (it is usually omitted). ** py-add-abbrev Defines python-mode specific abbrev for last expressions before point. Argument is how many `py-partial-expression's form the expansion; or zero means the region is the expansion. Reads the abbreviation in the minibuffer; with numeric arg it displays a proposal for an abbrev. Proposal is composed from the initial character(s) of the expansion. Don't use this function in a Lisp program; use `define-abbrev' instead. ** py-python-version Returns versions number of a Python EXECUTABLE, string. If no EXECUTABLE given, `py-shell-name' is used. Interactively output of `--version' is displayed. ** py-version Echo the current version of `python-mode' in the minibuffer. ** py-install-search-local ** py-install-local-shells Builds Python-shell commands from executable found in LOCAL. If LOCAL is empty, shell-command `find' searches beneath current directory. Eval resulting buffer to install it, see customizable `py-extensions'. * Completion ** py-python-script-complete Complete word before point, if any. When `py-no-completion-calls-dabbrev-expand-p' is non-nil, try dabbrev-expand. Otherwise, when `py-indent-no-completion-p' is non-nil, call `tab-to-tab-stop'. ** py-python2-shell-complete ** py-python3-shell-complete Complete word before point, if any. Otherwise insert TAB. ** py-shell-complete Complete word before point, if any. Otherwise insert TAB. ** ipython-complete Complete the python symbol before point. If no completion available, insert a TAB. Returns the completed symbol, a string, if successful, nil otherwise. * Checker ** pylint-flymake-mode Toggle `pylint' `flymake-mode'. ** pyflakes-flymake-mode Toggle `pyflakes' `flymake-mode'. ** pychecker-flymake-mode Toggle `pychecker' `flymake-mode'. ** pep8-flymake-mode Toggle `pep8' `flymake-mode'. ** pyflakespep8-flymake-mode Toggle `pyflakespep8' `flymake-mode'. Joint call to pyflakes and pep8 as proposed by Keegan Carruthers-Smith ** py-pep8-run Run pep8, check formatting (default on the file currently visited). ** py-pep8-help Display pep8 command line help messages. ** py-pylint-run Run pylint (default on the file currently visited). For help see M-x pylint-help resp. M-x pylint-long-help. Home-page: http://www.logilab.org/project/pylint ** py-pylint-help Display Pylint command line help messages. Let's have this until more Emacs-like help is prepared ** py-pylint-doku Display Pylint Documentation. Calls `pylint --full-documentation' ** py-pyflakes-run Run pyflakes (default on the file currently visited). For help see M-x pyflakes-help resp. M-x pyflakes-long-help. Home-page: http://www.logilab.org/project/pyflakes ** py-pyflakes-help Display Pyflakes command line help messages. Let's have this until more Emacs-like help is prepared ** py-pyflakespep8-run Run pyflakespep8, check formatting (default on the file currently visited). ** py-pyflakespep8-help Display pyflakespep8 command line help messages. ** py-flake8-run Run flake8, check formatting (default on the file currently visited). ** py-flake8-help Display flake8 command line help messages. ** py-pychecker-run Run pychecker (default on the file currently visited). * Skeletons ** py-load-skeletons These skeletons are loaded by python-mode, if `py-load-skeletons-p' is non-nil. * Virtualenv ** (defun v ** virtualenv-current Barfs the current activated virtualenv ** virtualenv-activate Activate the virtualenv located in DIR ** virtualenv-deactivate Deactivate the current virtual enviroment ** virtualenv-workon Issue a virtualenvwrapper-like virtualenv-workon command * Execute forms at point ** py-execute-statement Send statement at point to a Python interpreter. ** py-execute-top-level Send top-level at point to a Python interpreter. ** py-execute-block Send block at point to a Python interpreter. ** py-execute-minor-block Send minor-block at point to a Python interpreter. A minor block is started by a `for', `if', `try' or `with'. ** py-execute-block-or-clause Send block-or-clause at point to a Python interpreter. ** py-execute-def Send def at point to a Python interpreter. ** py-execute-class Send class at point to a Python interpreter. ** py-execute-def-or-class Send def-or-class at point to a Python interpreter. ** py-execute-expression Send expression at point to a Python interpreter. ** py-execute-partial-expression Send partial-expression at point to a Python interpreter. * Execute line * Execute file commands ** py-execute-file-python Send file to a Python interpreter. ** py-execute-file-python-switch Send file to a Python interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ** py-execute-file-python-no-switch Send file to a Python interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" ** py-execute-file-python-dedicated Send file to a Python interpreter. Uses a dedicated shell. ** py-execute-file-python-dedicated-switch Send file to a Python interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ** py-execute-file-ipython Send file to a Ipython interpreter. ** py-execute-file-ipython-switch Send file to a Ipython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ** py-execute-file-ipython-no-switch Send file to a Ipython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" ** py-execute-file-ipython-dedicated Send file to a Ipython interpreter. Uses a dedicated shell. ** py-execute-file-ipython-dedicated-switch Send file to a Ipython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ** py-execute-file-python3 Send file to a Python3 interpreter. ** py-execute-file-python3-switch Send file to a Python3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ** py-execute-file-python3-no-switch Send file to a Python3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" ** py-execute-file-python3-dedicated Send file to a Python3 interpreter. Uses a dedicated shell. ** py-execute-file-python3-dedicated-switch Send file to a Python3 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ** py-execute-file-python2 Send file to a Python2 interpreter. ** py-execute-file-python2-switch Send file to a Python2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ** py-execute-file-python2-no-switch Send file to a Python2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" ** py-execute-file-python2-dedicated Send file to a Python2 interpreter. Uses a dedicated shell. ** py-execute-file-python2-dedicated-switch Send file to a Python2 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ** py-execute-file-python2\.7 Send file to a Python2.7 interpreter. ** py-execute-file-python2\.7-switch Send file to a Python2.7 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ** py-execute-file-python2\.7-no-switch Send file to a Python2.7 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" ** py-execute-file-python2\.7-dedicated Send file to a Python2.7 interpreter. Uses a dedicated shell. ** py-execute-file-python2\.7-dedicated-switch Send file to a Python2.7 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ** py-execute-file-jython Send file to a Jython interpreter. ** py-execute-file-jython-switch Send file to a Jython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ** py-execute-file-jython-no-switch Send file to a Jython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" ** py-execute-file-jython-dedicated Send file to a Jython interpreter. Uses a dedicated shell. ** py-execute-file-jython-dedicated-switch Send file to a Jython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ** py-execute-file-python3\.2 Send file to a Python3.2 interpreter. ** py-execute-file-python3\.2-switch Send file to a Python3.2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ** py-execute-file-python3\.2-no-switch Send file to a Python3.2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" ** py-execute-file-python3\.2-dedicated Send file to a Python3.2 interpreter. Uses a dedicated shell. ** py-execute-file-python3\.2-dedicated-switch Send file to a Python3.2 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ** py-execute-file-python3\.3 Send file to a Python3.3 interpreter. ** py-execute-file-python3\.3-switch Send file to a Python3.3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ** py-execute-file-python3\.3-no-switch Send file to a Python3.3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" ** py-execute-file-python3\.3-dedicated Send file to a Python3.3 interpreter. Uses a dedicated shell. ** py-execute-file-python3\.3-dedicated-switch Send file to a Python3.3 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ** py-execute-file-bpython Send file to a Bpython interpreter. ** py-execute-file-bpython-switch Send file to a Bpython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ** py-execute-file-bpython-no-switch Send file to a Bpython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" ** py-execute-file-bpython-dedicated Send file to a Bpython interpreter. Uses a dedicated shell. ** py-execute-file-bpython-dedicated-switch Send file to a Bpython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" * Extended executes ** py-execute-statement-python Send statement at point to Python interpreter. ** py-execute-statement-python-switch Send statement at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-statement-python-no-switch Send statement at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-statement-python-dedicated Send statement at point to Python unique interpreter. ** py-execute-statement-python-dedicated-switch Send statement at point to Python unique interpreter and switch to result. ** py-execute-statement-ipython Send statement at point to IPython interpreter. ** py-execute-statement-ipython-switch Send statement at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-statement-ipython-no-switch Send statement at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-statement-ipython-dedicated Send statement at point to IPython unique interpreter. ** py-execute-statement-ipython-dedicated-switch Send statement at point to IPython unique interpreter and switch to result. ** py-execute-statement-python3 Send statement at point to Python3 interpreter. ** py-execute-statement-python3-switch Send statement at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-statement-python3-no-switch Send statement at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-statement-python3-dedicated Send statement at point to Python3 unique interpreter. ** py-execute-statement-python3-dedicated-switch Send statement at point to Python3 unique interpreter and switch to result. ** py-execute-statement-python2 Send statement at point to Python2 interpreter. ** py-execute-statement-python2-switch Send statement at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-statement-python2-no-switch Send statement at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-statement-python2-dedicated Send statement at point to Python2 unique interpreter. ** py-execute-statement-python2-dedicated-switch Send statement at point to Python2 unique interpreter and switch to result. ** py-execute-statement-python2\.7 Send statement at point to Python2.7 interpreter. ** py-execute-statement-python2\.7-switch Send statement at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-statement-python2\.7-no-switch Send statement at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-statement-python2\.7-dedicated Send statement at point to Python2.7 unique interpreter. ** py-execute-statement-python2\.7-dedicated-switch Send statement at point to Python2.7 unique interpreter and switch to result. ** py-execute-statement-jython Send statement at point to Jython interpreter. ** py-execute-statement-jython-switch Send statement at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-statement-jython-no-switch Send statement at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-statement-jython-dedicated Send statement at point to Jython unique interpreter. ** py-execute-statement-jython-dedicated-switch Send statement at point to Jython unique interpreter and switch to result. ** py-execute-statement-python3\.2 Send statement at point to Python3.2 interpreter. ** py-execute-statement-python3\.2-switch Send statement at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-statement-python3\.2-no-switch Send statement at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-statement-python3\.2-dedicated Send statement at point to Python3.2 unique interpreter. ** py-execute-statement-python3\.2-dedicated-switch Send statement at point to Python3.2 unique interpreter and switch to result. ** py-execute-statement-python3\.3 Send statement at point to Python3.3 interpreter. ** py-execute-statement-python3\.3-switch Send statement at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-statement-python3\.3-no-switch Send statement at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-statement-python3\.3-dedicated Send statement at point to Python3.3 unique interpreter. ** py-execute-statement-python3\.3-dedicated-switch Send statement at point to Python3.3 unique interpreter and switch to result. ** py-execute-statement-bpython Send statement at point to Bpython interpreter. ** py-execute-statement-bpython-switch Send statement at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-statement-bpython-no-switch Send statement at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-statement-bpython-dedicated Send statement at point to Bpython unique interpreter. ** py-execute-statement-bpython-dedicated-switch Send statement at point to Bpython unique interpreter and switch to result. ** py-execute-block-python Send block at point to Python interpreter. ** py-execute-block-python-switch Send block at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-python-no-switch Send block at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-python-dedicated Send block at point to Python unique interpreter. ** py-execute-block-python-dedicated-switch Send block at point to Python unique interpreter and switch to result. ** py-execute-block-ipython Send block at point to IPython interpreter. ** py-execute-block-ipython-switch Send block at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-ipython-no-switch Send block at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-ipython-dedicated Send block at point to IPython unique interpreter. ** py-execute-block-ipython-dedicated-switch Send block at point to IPython unique interpreter and switch to result. ** py-execute-block-python3 Send block at point to Python3 interpreter. ** py-execute-block-python3-switch Send block at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-python3-no-switch Send block at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-python3-dedicated Send block at point to Python3 unique interpreter. ** py-execute-block-python3-dedicated-switch Send block at point to Python3 unique interpreter and switch to result. ** py-execute-block-python2 Send block at point to Python2 interpreter. ** py-execute-block-python2-switch Send block at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-python2-no-switch Send block at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-python2-dedicated Send block at point to Python2 unique interpreter. ** py-execute-block-python2-dedicated-switch Send block at point to Python2 unique interpreter and switch to result. ** py-execute-block-python2\.7 Send block at point to Python2.7 interpreter. ** py-execute-block-python2\.7-switch Send block at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-python2\.7-no-switch Send block at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-python2\.7-dedicated Send block at point to Python2.7 unique interpreter. ** py-execute-block-python2\.7-dedicated-switch Send block at point to Python2.7 unique interpreter and switch to result. ** py-execute-block-jython Send block at point to Jython interpreter. ** py-execute-block-jython-switch Send block at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-jython-no-switch Send block at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-jython-dedicated Send block at point to Jython unique interpreter. ** py-execute-block-jython-dedicated-switch Send block at point to Jython unique interpreter and switch to result. ** py-execute-block-python3\.2 Send block at point to Python3.2 interpreter. ** py-execute-block-python3\.2-switch Send block at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-python3\.2-no-switch Send block at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-python3\.2-dedicated Send block at point to Python3.2 unique interpreter. ** py-execute-block-python3\.2-dedicated-switch Send block at point to Python3.2 unique interpreter and switch to result. ** py-execute-block-python3\.3 Send block at point to Python3.3 interpreter. ** py-execute-block-python3\.3-switch Send block at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-python3\.3-no-switch Send block at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-python3\.3-dedicated Send block at point to Python3.3 unique interpreter. ** py-execute-block-python3\.3-dedicated-switch Send block at point to Python3.3 unique interpreter and switch to result. ** py-execute-block-bpython Send block at point to Bpython interpreter. ** py-execute-block-bpython-switch Send block at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-bpython-no-switch Send block at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-bpython-dedicated Send block at point to Bpython unique interpreter. ** py-execute-block-bpython-dedicated-switch Send block at point to Bpython unique interpreter and switch to result. ** py-execute-clause-python Send clause at point to Python interpreter. ** py-execute-clause-python-switch Send clause at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-clause-python-no-switch Send clause at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-clause-python-dedicated Send clause at point to Python unique interpreter. ** py-execute-clause-python-dedicated-switch Send clause at point to Python unique interpreter and switch to result. ** py-execute-clause-ipython Send clause at point to IPython interpreter. ** py-execute-clause-ipython-switch Send clause at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-clause-ipython-no-switch Send clause at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-clause-ipython-dedicated Send clause at point to IPython unique interpreter. ** py-execute-clause-ipython-dedicated-switch Send clause at point to IPython unique interpreter and switch to result. ** py-execute-clause-python3 Send clause at point to Python3 interpreter. ** py-execute-clause-python3-switch Send clause at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-clause-python3-no-switch Send clause at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-clause-python3-dedicated Send clause at point to Python3 unique interpreter. ** py-execute-clause-python3-dedicated-switch Send clause at point to Python3 unique interpreter and switch to result. ** py-execute-clause-python2 Send clause at point to Python2 interpreter. ** py-execute-clause-python2-switch Send clause at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-clause-python2-no-switch Send clause at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-clause-python2-dedicated Send clause at point to Python2 unique interpreter. ** py-execute-clause-python2-dedicated-switch Send clause at point to Python2 unique interpreter and switch to result. ** py-execute-clause-python2\.7 Send clause at point to Python2.7 interpreter. ** py-execute-clause-python2\.7-switch Send clause at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-clause-python2\.7-no-switch Send clause at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-clause-python2\.7-dedicated Send clause at point to Python2.7 unique interpreter. ** py-execute-clause-python2\.7-dedicated-switch Send clause at point to Python2.7 unique interpreter and switch to result. ** py-execute-clause-jython Send clause at point to Jython interpreter. ** py-execute-clause-jython-switch Send clause at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-clause-jython-no-switch Send clause at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-clause-jython-dedicated Send clause at point to Jython unique interpreter. ** py-execute-clause-jython-dedicated-switch Send clause at point to Jython unique interpreter and switch to result. ** py-execute-clause-python3\.2 Send clause at point to Python3.2 interpreter. ** py-execute-clause-python3\.2-switch Send clause at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-clause-python3\.2-no-switch Send clause at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-clause-python3\.2-dedicated Send clause at point to Python3.2 unique interpreter. ** py-execute-clause-python3\.2-dedicated-switch Send clause at point to Python3.2 unique interpreter and switch to result. ** py-execute-clause-python3\.3 Send clause at point to Python3.3 interpreter. ** py-execute-clause-python3\.3-switch Send clause at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-clause-python3\.3-no-switch Send clause at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-clause-python3\.3-dedicated Send clause at point to Python3.3 unique interpreter. ** py-execute-clause-python3\.3-dedicated-switch Send clause at point to Python3.3 unique interpreter and switch to result. ** py-execute-clause-bpython Send clause at point to Bpython interpreter. ** py-execute-clause-bpython-switch Send clause at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-clause-bpython-no-switch Send clause at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-clause-bpython-dedicated Send clause at point to Bpython unique interpreter. ** py-execute-clause-bpython-dedicated-switch Send clause at point to Bpython unique interpreter and switch to result. ** py-execute-block-or-clause-python Send block-or-clause at point to Python interpreter. ** py-execute-block-or-clause-python-switch Send block-or-clause at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-or-clause-python-no-switch Send block-or-clause at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-or-clause-python-dedicated Send block-or-clause at point to Python unique interpreter. ** py-execute-block-or-clause-python-dedicated-switch Send block-or-clause at point to Python unique interpreter and switch to result. ** py-execute-block-or-clause-ipython Send block-or-clause at point to IPython interpreter. ** py-execute-block-or-clause-ipython-switch Send block-or-clause at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-or-clause-ipython-no-switch Send block-or-clause at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-or-clause-ipython-dedicated Send block-or-clause at point to IPython unique interpreter. ** py-execute-block-or-clause-ipython-dedicated-switch Send block-or-clause at point to IPython unique interpreter and switch to result. ** py-execute-block-or-clause-python3 Send block-or-clause at point to Python3 interpreter. ** py-execute-block-or-clause-python3-switch Send block-or-clause at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-or-clause-python3-no-switch Send block-or-clause at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-or-clause-python3-dedicated Send block-or-clause at point to Python3 unique interpreter. ** py-execute-block-or-clause-python3-dedicated-switch Send block-or-clause at point to Python3 unique interpreter and switch to result. ** py-execute-block-or-clause-python2 Send block-or-clause at point to Python2 interpreter. ** py-execute-block-or-clause-python2-switch Send block-or-clause at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-or-clause-python2-no-switch Send block-or-clause at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-or-clause-python2-dedicated Send block-or-clause at point to Python2 unique interpreter. ** py-execute-block-or-clause-python2-dedicated-switch Send block-or-clause at point to Python2 unique interpreter and switch to result. ** py-execute-block-or-clause-python2\.7 Send block-or-clause at point to Python2.7 interpreter. ** py-execute-block-or-clause-python2\.7-switch Send block-or-clause at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-or-clause-python2\.7-no-switch Send block-or-clause at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-or-clause-python2\.7-dedicated Send block-or-clause at point to Python2.7 unique interpreter. ** py-execute-block-or-clause-python2\.7-dedicated-switch Send block-or-clause at point to Python2.7 unique interpreter and switch to result. ** py-execute-block-or-clause-jython Send block-or-clause at point to Jython interpreter. ** py-execute-block-or-clause-jython-switch Send block-or-clause at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-or-clause-jython-no-switch Send block-or-clause at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-or-clause-jython-dedicated Send block-or-clause at point to Jython unique interpreter. ** py-execute-block-or-clause-jython-dedicated-switch Send block-or-clause at point to Jython unique interpreter and switch to result. ** py-execute-block-or-clause-python3\.2 Send block-or-clause at point to Python3.2 interpreter. ** py-execute-block-or-clause-python3\.2-switch Send block-or-clause at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-or-clause-python3\.2-no-switch Send block-or-clause at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-or-clause-python3\.2-dedicated Send block-or-clause at point to Python3.2 unique interpreter. ** py-execute-block-or-clause-python3\.2-dedicated-switch Send block-or-clause at point to Python3.2 unique interpreter and switch to result. ** py-execute-block-or-clause-python3\.3 Send block-or-clause at point to Python3.3 interpreter. ** py-execute-block-or-clause-python3\.3-switch Send block-or-clause at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-or-clause-python3\.3-no-switch Send block-or-clause at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-or-clause-python3\.3-dedicated Send block-or-clause at point to Python3.3 unique interpreter. ** py-execute-block-or-clause-python3\.3-dedicated-switch Send block-or-clause at point to Python3.3 unique interpreter and switch to result. ** py-execute-block-or-clause-bpython Send block-or-clause at point to Bpython interpreter. ** py-execute-block-or-clause-bpython-switch Send block-or-clause at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-block-or-clause-bpython-no-switch Send block-or-clause at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-block-or-clause-bpython-dedicated Send block-or-clause at point to Bpython unique interpreter. ** py-execute-block-or-clause-bpython-dedicated-switch Send block-or-clause at point to Bpython unique interpreter and switch to result. ** py-execute-def-python Send def at point to Python interpreter. ** py-execute-def-python-switch Send def at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-def-python-no-switch Send def at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-def-python-dedicated Send def at point to Python unique interpreter. ** py-execute-def-python-dedicated-switch Send def at point to Python unique interpreter and switch to result. ** py-execute-def-ipython Send def at point to IPython interpreter. ** py-execute-def-ipython-switch Send def at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-def-ipython-no-switch Send def at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-def-ipython-dedicated Send def at point to IPython unique interpreter. ** py-execute-def-ipython-dedicated-switch Send def at point to IPython unique interpreter and switch to result. ** py-execute-def-python3 Send def at point to Python3 interpreter. ** py-execute-def-python3-switch Send def at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-def-python3-no-switch Send def at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-def-python3-dedicated Send def at point to Python3 unique interpreter. ** py-execute-def-python3-dedicated-switch Send def at point to Python3 unique interpreter and switch to result. ** py-execute-def-python2 Send def at point to Python2 interpreter. ** py-execute-def-python2-switch Send def at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-def-python2-no-switch Send def at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-def-python2-dedicated Send def at point to Python2 unique interpreter. ** py-execute-def-python2-dedicated-switch Send def at point to Python2 unique interpreter and switch to result. ** py-execute-def-python2\.7 Send def at point to Python2.7 interpreter. ** py-execute-def-python2\.7-switch Send def at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-def-python2\.7-no-switch Send def at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-def-python2\.7-dedicated Send def at point to Python2.7 unique interpreter. ** py-execute-def-python2\.7-dedicated-switch Send def at point to Python2.7 unique interpreter and switch to result. ** py-execute-def-jython Send def at point to Jython interpreter. ** py-execute-def-jython-switch Send def at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-def-jython-no-switch Send def at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-def-jython-dedicated Send def at point to Jython unique interpreter. ** py-execute-def-jython-dedicated-switch Send def at point to Jython unique interpreter and switch to result. ** py-execute-def-python3\.2 Send def at point to Python3.2 interpreter. ** py-execute-def-python3\.2-switch Send def at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-def-python3\.2-no-switch Send def at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-def-python3\.2-dedicated Send def at point to Python3.2 unique interpreter. ** py-execute-def-python3\.2-dedicated-switch Send def at point to Python3.2 unique interpreter and switch to result. ** py-execute-def-python3\.3 Send def at point to Python3.3 interpreter. ** py-execute-def-python3\.3-switch Send def at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-def-python3\.3-no-switch Send def at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-def-python3\.3-dedicated Send def at point to Python3.3 unique interpreter. ** py-execute-def-python3\.3-dedicated-switch Send def at point to Python3.3 unique interpreter and switch to result. ** py-execute-def-bpython Send def at point to Bpython interpreter. ** py-execute-def-bpython-switch Send def at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-def-bpython-no-switch Send def at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-def-bpython-dedicated Send def at point to Bpython unique interpreter. ** py-execute-def-bpython-dedicated-switch Send def at point to Bpython unique interpreter and switch to result. ** py-execute-class-python Send class at point to Python interpreter. ** py-execute-class-python-switch Send class at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-class-python-no-switch Send class at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-class-python-dedicated Send class at point to Python unique interpreter. ** py-execute-class-python-dedicated-switch Send class at point to Python unique interpreter and switch to result. ** py-execute-class-ipython Send class at point to IPython interpreter. ** py-execute-class-ipython-switch Send class at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-class-ipython-no-switch Send class at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-class-ipython-dedicated Send class at point to IPython unique interpreter. ** py-execute-class-ipython-dedicated-switch Send class at point to IPython unique interpreter and switch to result. ** py-execute-class-python3 Send class at point to Python3 interpreter. ** py-execute-class-python3-switch Send class at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-class-python3-no-switch Send class at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-class-python3-dedicated Send class at point to Python3 unique interpreter. ** py-execute-class-python3-dedicated-switch Send class at point to Python3 unique interpreter and switch to result. ** py-execute-class-python2 Send class at point to Python2 interpreter. ** py-execute-class-python2-switch Send class at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-class-python2-no-switch Send class at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-class-python2-dedicated Send class at point to Python2 unique interpreter. ** py-execute-class-python2-dedicated-switch Send class at point to Python2 unique interpreter and switch to result. ** py-execute-class-python2\.7 Send class at point to Python2.7 interpreter. ** py-execute-class-python2\.7-switch Send class at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-class-python2\.7-no-switch Send class at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-class-python2\.7-dedicated Send class at point to Python2.7 unique interpreter. ** py-execute-class-python2\.7-dedicated-switch Send class at point to Python2.7 unique interpreter and switch to result. ** py-execute-class-jython Send class at point to Jython interpreter. ** py-execute-class-jython-switch Send class at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-class-jython-no-switch Send class at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-class-jython-dedicated Send class at point to Jython unique interpreter. ** py-execute-class-jython-dedicated-switch Send class at point to Jython unique interpreter and switch to result. ** py-execute-class-python3\.2 Send class at point to Python3.2 interpreter. ** py-execute-class-python3\.2-switch Send class at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-class-python3\.2-no-switch Send class at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-class-python3\.2-dedicated Send class at point to Python3.2 unique interpreter. ** py-execute-class-python3\.2-dedicated-switch Send class at point to Python3.2 unique interpreter and switch to result. ** py-execute-class-python3\.3 Send class at point to Python3.3 interpreter. ** py-execute-class-python3\.3-switch Send class at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-class-python3\.3-no-switch Send class at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-class-python3\.3-dedicated Send class at point to Python3.3 unique interpreter. ** py-execute-class-python3\.3-dedicated-switch Send class at point to Python3.3 unique interpreter and switch to result. ** py-execute-class-bpython Send class at point to Bpython interpreter. ** py-execute-class-bpython-switch Send class at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-class-bpython-no-switch Send class at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-class-bpython-dedicated Send class at point to Bpython unique interpreter. ** py-execute-class-bpython-dedicated-switch Send class at point to Bpython unique interpreter and switch to result. ** py-execute-region-python Send region at point to Python interpreter. ** py-execute-region-python-switch Send region at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-region-python-no-switch Send region at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-region-python-dedicated Send region at point to Python unique interpreter. ** py-execute-region-python-dedicated-switch Send region at point to Python unique interpreter and switch to result. ** py-execute-region-ipython Send region at point to IPython interpreter. ** py-execute-region-ipython-switch Send region at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-region-ipython-no-switch Send region at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-region-ipython-dedicated Send region at point to IPython unique interpreter. ** py-execute-region-ipython-dedicated-switch Send region at point to IPython unique interpreter and switch to result. ** py-execute-region-python3 Send region at point to Python3 interpreter. ** py-execute-region-python3-switch Send region at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-region-python3-no-switch Send region at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-region-python3-dedicated Send region at point to Python3 unique interpreter. ** py-execute-region-python3-dedicated-switch Send region at point to Python3 unique interpreter and switch to result. ** py-execute-region-python2 Send region at point to Python2 interpreter. ** py-execute-region-python2-switch Send region at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-region-python2-no-switch Send region at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-region-python2-dedicated Send region at point to Python2 unique interpreter. ** py-execute-region-python2-dedicated-switch Send region at point to Python2 unique interpreter and switch to result. ** py-execute-region-python2\.7 Send region at point to Python2.7 interpreter. ** py-execute-region-python2\.7-switch Send region at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-region-python2\.7-no-switch Send region at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-region-python2\.7-dedicated Send region at point to Python2.7 unique interpreter. ** py-execute-region-python2\.7-dedicated-switch Send region at point to Python2.7 unique interpreter and switch to result. ** py-execute-region-jython Send region at point to Jython interpreter. ** py-execute-region-jython-switch Send region at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-region-jython-no-switch Send region at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-region-jython-dedicated Send region at point to Jython unique interpreter. ** py-execute-region-jython-dedicated-switch Send region at point to Jython unique interpreter and switch to result. ** py-execute-region-python3\.2 Send region at point to Python3.2 interpreter. ** py-execute-region-python3\.2-switch Send region at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-region-python3\.2-no-switch Send region at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-region-python3\.2-dedicated Send region at point to Python3.2 unique interpreter. ** py-execute-region-python3\.2-dedicated-switch Send region at point to Python3.2 unique interpreter and switch to result. ** py-execute-region-python3\.3 Send region at point to Python3.3 interpreter. ** py-execute-region-python3\.3-switch Send region at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-region-python3\.3-no-switch Send region at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-region-python3\.3-dedicated Send region at point to Python3.3 unique interpreter. ** py-execute-region-python3\.3-dedicated-switch Send region at point to Python3.3 unique interpreter and switch to result. ** py-execute-region-bpython Send region at point to Bpython interpreter. ** py-execute-region-bpython-switch Send region at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-region-bpython-no-switch Send region at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-region-bpython-dedicated Send region at point to Bpython unique interpreter. ** py-execute-region-bpython-dedicated-switch Send region at point to Bpython unique interpreter and switch to result. ** py-execute-buffer-python Send buffer at point to Python interpreter. ** py-execute-buffer-python-switch Send buffer at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-buffer-python-no-switch Send buffer at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-buffer-python-dedicated Send buffer at point to Python unique interpreter. ** py-execute-buffer-python-dedicated-switch Send buffer at point to Python unique interpreter and switch to result. ** py-execute-buffer-ipython Send buffer at point to IPython interpreter. ** py-execute-buffer-ipython-switch Send buffer at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-buffer-ipython-no-switch Send buffer at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-buffer-ipython-dedicated Send buffer at point to IPython unique interpreter. ** py-execute-buffer-ipython-dedicated-switch Send buffer at point to IPython unique interpreter and switch to result. ** py-execute-buffer-python3 Send buffer at point to Python3 interpreter. ** py-execute-buffer-python3-switch Send buffer at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-buffer-python3-no-switch Send buffer at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-buffer-python3-dedicated Send buffer at point to Python3 unique interpreter. ** py-execute-buffer-python3-dedicated-switch Send buffer at point to Python3 unique interpreter and switch to result. ** py-execute-buffer-python2 Send buffer at point to Python2 interpreter. ** py-execute-buffer-python2-switch Send buffer at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-buffer-python2-no-switch Send buffer at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-buffer-python2-dedicated Send buffer at point to Python2 unique interpreter. ** py-execute-buffer-python2-dedicated-switch Send buffer at point to Python2 unique interpreter and switch to result. ** py-execute-buffer-python2\.7 Send buffer at point to Python2.7 interpreter. ** py-execute-buffer-python2\.7-switch Send buffer at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-buffer-python2\.7-no-switch Send buffer at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-buffer-python2\.7-dedicated Send buffer at point to Python2.7 unique interpreter. ** py-execute-buffer-python2\.7-dedicated-switch Send buffer at point to Python2.7 unique interpreter and switch to result. ** py-execute-buffer-jython Send buffer at point to Jython interpreter. ** py-execute-buffer-jython-switch Send buffer at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-buffer-jython-no-switch Send buffer at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-buffer-jython-dedicated Send buffer at point to Jython unique interpreter. ** py-execute-buffer-jython-dedicated-switch Send buffer at point to Jython unique interpreter and switch to result. ** py-execute-buffer-python3\.2 Send buffer at point to Python3.2 interpreter. ** py-execute-buffer-python3\.2-switch Send buffer at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-buffer-python3\.2-no-switch Send buffer at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-buffer-python3\.2-dedicated Send buffer at point to Python3.2 unique interpreter. ** py-execute-buffer-python3\.2-dedicated-switch Send buffer at point to Python3.2 unique interpreter and switch to result. ** py-execute-buffer-python3\.3 Send buffer at point to Python3.3 interpreter. ** py-execute-buffer-python3\.3-switch Send buffer at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-buffer-python3\.3-no-switch Send buffer at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-buffer-python3\.3-dedicated Send buffer at point to Python3.3 unique interpreter. ** py-execute-buffer-python3\.3-dedicated-switch Send buffer at point to Python3.3 unique interpreter and switch to result. ** py-execute-buffer-bpython Send buffer at point to Bpython interpreter. ** py-execute-buffer-bpython-switch Send buffer at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-buffer-bpython-no-switch Send buffer at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-buffer-bpython-dedicated Send buffer at point to Bpython unique interpreter. ** py-execute-buffer-bpython-dedicated-switch Send buffer at point to Bpython unique interpreter and switch to result. ** py-execute-expression-python Send expression at point to Python interpreter. ** py-execute-expression-python-switch Send expression at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-expression-python-no-switch Send expression at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-expression-python-dedicated Send expression at point to Python unique interpreter. ** py-execute-expression-python-dedicated-switch Send expression at point to Python unique interpreter and switch to result. ** py-execute-expression-ipython Send expression at point to IPython interpreter. ** py-execute-expression-ipython-switch Send expression at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-expression-ipython-no-switch Send expression at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-expression-ipython-dedicated Send expression at point to IPython unique interpreter. ** py-execute-expression-ipython-dedicated-switch Send expression at point to IPython unique interpreter and switch to result. ** py-execute-expression-python3 Send expression at point to Python3 interpreter. ** py-execute-expression-python3-switch Send expression at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-expression-python3-no-switch Send expression at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-expression-python3-dedicated Send expression at point to Python3 unique interpreter. ** py-execute-expression-python3-dedicated-switch Send expression at point to Python3 unique interpreter and switch to result. ** py-execute-expression-python2 Send expression at point to Python2 interpreter. ** py-execute-expression-python2-switch Send expression at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-expression-python2-no-switch Send expression at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-expression-python2-dedicated Send expression at point to Python2 unique interpreter. ** py-execute-expression-python2-dedicated-switch Send expression at point to Python2 unique interpreter and switch to result. ** py-execute-expression-python2\.7 Send expression at point to Python2.7 interpreter. ** py-execute-expression-python2\.7-switch Send expression at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-expression-python2\.7-no-switch Send expression at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-expression-python2\.7-dedicated Send expression at point to Python2.7 unique interpreter. ** py-execute-expression-python2\.7-dedicated-switch Send expression at point to Python2.7 unique interpreter and switch to result. ** py-execute-expression-jython Send expression at point to Jython interpreter. ** py-execute-expression-jython-switch Send expression at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-expression-jython-no-switch Send expression at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-expression-jython-dedicated Send expression at point to Jython unique interpreter. ** py-execute-expression-jython-dedicated-switch Send expression at point to Jython unique interpreter and switch to result. ** py-execute-expression-python3\.2 Send expression at point to Python3.2 interpreter. ** py-execute-expression-python3\.2-switch Send expression at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-expression-python3\.2-no-switch Send expression at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-expression-python3\.2-dedicated Send expression at point to Python3.2 unique interpreter. ** py-execute-expression-python3\.2-dedicated-switch Send expression at point to Python3.2 unique interpreter and switch to result. ** py-execute-expression-python3\.3 Send expression at point to Python3.3 interpreter. ** py-execute-expression-python3\.3-switch Send expression at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-expression-python3\.3-no-switch Send expression at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-expression-python3\.3-dedicated Send expression at point to Python3.3 unique interpreter. ** py-execute-expression-python3\.3-dedicated-switch Send expression at point to Python3.3 unique interpreter and switch to result. ** py-execute-expression-bpython Send expression at point to Bpython interpreter. ** py-execute-expression-bpython-switch Send expression at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-expression-bpython-no-switch Send expression at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-expression-bpython-dedicated Send expression at point to Bpython unique interpreter. ** py-execute-expression-bpython-dedicated-switch Send expression at point to Bpython unique interpreter and switch to result. ** py-execute-partial-expression-python Send partial-expression at point to Python interpreter. ** py-execute-partial-expression-python-switch Send partial-expression at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-partial-expression-python-no-switch Send partial-expression at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-partial-expression-python-dedicated Send partial-expression at point to Python unique interpreter. ** py-execute-partial-expression-python-dedicated-switch Send partial-expression at point to Python unique interpreter and switch to result. ** py-execute-partial-expression-ipython Send partial-expression at point to IPython interpreter. ** py-execute-partial-expression-ipython-switch Send partial-expression at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-partial-expression-ipython-no-switch Send partial-expression at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-partial-expression-ipython-dedicated Send partial-expression at point to IPython unique interpreter. ** py-execute-partial-expression-ipython-dedicated-switch Send partial-expression at point to IPython unique interpreter and switch to result. ** py-execute-partial-expression-python3 Send partial-expression at point to Python3 interpreter. ** py-execute-partial-expression-python3-switch Send partial-expression at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-partial-expression-python3-no-switch Send partial-expression at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-partial-expression-python3-dedicated Send partial-expression at point to Python3 unique interpreter. ** py-execute-partial-expression-python3-dedicated-switch Send partial-expression at point to Python3 unique interpreter and switch to result. ** py-execute-partial-expression-python2 Send partial-expression at point to Python2 interpreter. ** py-execute-partial-expression-python2-switch Send partial-expression at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-partial-expression-python2-no-switch Send partial-expression at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-partial-expression-python2-dedicated Send partial-expression at point to Python2 unique interpreter. ** py-execute-partial-expression-python2-dedicated-switch Send partial-expression at point to Python2 unique interpreter and switch to result. ** py-execute-partial-expression-python2\.7 Send partial-expression at point to Python2.7 interpreter. ** py-execute-partial-expression-python2\.7-switch Send partial-expression at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-partial-expression-python2\.7-no-switch Send partial-expression at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-partial-expression-python2\.7-dedicated Send partial-expression at point to Python2.7 unique interpreter. ** py-execute-partial-expression-python2\.7-dedicated-switch Send partial-expression at point to Python2.7 unique interpreter and switch to result. ** py-execute-partial-expression-jython Send partial-expression at point to Jython interpreter. ** py-execute-partial-expression-jython-switch Send partial-expression at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-partial-expression-jython-no-switch Send partial-expression at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-partial-expression-jython-dedicated Send partial-expression at point to Jython unique interpreter. ** py-execute-partial-expression-jython-dedicated-switch Send partial-expression at point to Jython unique interpreter and switch to result. ** py-execute-partial-expression-python3\.2 Send partial-expression at point to Python3.2 interpreter. ** py-execute-partial-expression-python3\.2-switch Send partial-expression at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-partial-expression-python3\.2-no-switch Send partial-expression at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-partial-expression-python3\.2-dedicated Send partial-expression at point to Python3.2 unique interpreter. ** py-execute-partial-expression-python3\.2-dedicated-switch Send partial-expression at point to Python3.2 unique interpreter and switch to result. ** py-execute-partial-expression-python3\.3 Send partial-expression at point to Python3.3 interpreter. ** py-execute-partial-expression-python3\.3-switch Send partial-expression at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-partial-expression-python3\.3-no-switch Send partial-expression at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-partial-expression-python3\.3-dedicated Send partial-expression at point to Python3.3 unique interpreter. ** py-execute-partial-expression-python3\.3-dedicated-switch Send partial-expression at point to Python3.3 unique interpreter and switch to result. ** py-execute-partial-expression-bpython Send partial-expression at point to Bpython interpreter. ** py-execute-partial-expression-bpython-switch Send partial-expression at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-partial-expression-bpython-no-switch Send partial-expression at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-partial-expression-bpython-dedicated Send partial-expression at point to Bpython unique interpreter. ** py-execute-partial-expression-bpython-dedicated-switch Send partial-expression at point to Bpython unique interpreter and switch to result. ** py-execute-line-python Send line at point to Python interpreter. ** py-execute-line-python-switch Send line at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-line-python-no-switch Send line at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-line-python-dedicated Send line at point to Python unique interpreter. ** py-execute-line-python-dedicated-switch Send line at point to Python unique interpreter and switch to result. ** py-execute-line-ipython Send line at point to IPython interpreter. ** py-execute-line-ipython-switch Send line at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-line-ipython-no-switch Send line at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-line-ipython-dedicated Send line at point to IPython unique interpreter. ** py-execute-line-ipython-dedicated-switch Send line at point to IPython unique interpreter and switch to result. ** py-execute-line-python3 Send line at point to Python3 interpreter. ** py-execute-line-python3-switch Send line at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-line-python3-no-switch Send line at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-line-python3-dedicated Send line at point to Python3 unique interpreter. ** py-execute-line-python3-dedicated-switch Send line at point to Python3 unique interpreter and switch to result. ** py-execute-line-python2 Send line at point to Python2 interpreter. ** py-execute-line-python2-switch Send line at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-line-python2-no-switch Send line at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-line-python2-dedicated Send line at point to Python2 unique interpreter. ** py-execute-line-python2-dedicated-switch Send line at point to Python2 unique interpreter and switch to result. ** py-execute-line-python2\.7 Send line at point to Python2.7 interpreter. ** py-execute-line-python2\.7-switch Send line at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-line-python2\.7-no-switch Send line at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-line-python2\.7-dedicated Send line at point to Python2.7 unique interpreter. ** py-execute-line-python2\.7-dedicated-switch Send line at point to Python2.7 unique interpreter and switch to result. ** py-execute-line-jython Send line at point to Jython interpreter. ** py-execute-line-jython-switch Send line at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-line-jython-no-switch Send line at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-line-jython-dedicated Send line at point to Jython unique interpreter. ** py-execute-line-jython-dedicated-switch Send line at point to Jython unique interpreter and switch to result. ** py-execute-line-python3\.2 Send line at point to Python3.2 interpreter. ** py-execute-line-python3\.2-switch Send line at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-line-python3\.2-no-switch Send line at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-line-python3\.2-dedicated Send line at point to Python3.2 unique interpreter. ** py-execute-line-python3\.2-dedicated-switch Send line at point to Python3.2 unique interpreter and switch to result. ** py-execute-line-python3\.3 Send line at point to Python3.3 interpreter. ** py-execute-line-python3\.3-switch Send line at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-line-python3\.3-no-switch Send line at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-line-python3\.3-dedicated Send line at point to Python3.3 unique interpreter. ** py-execute-line-python3\.3-dedicated-switch Send line at point to Python3.3 unique interpreter and switch to result. ** py-execute-line-bpython Send line at point to Bpython interpreter. ** py-execute-line-bpython-switch Send line at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. ** py-execute-line-bpython-no-switch Send line at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' ** py-execute-line-bpython-dedicated Send line at point to Bpython unique interpreter. ** py-execute-line-bpython-dedicated-switch Send line at point to Bpython unique interpreter and switch to result. * Subprocess utilities and filters ** py-remove-overlays-at-point Remove overlays as set when `py-highlight-error-source-p' is non-nil. ** py-down-exception Go to the next line down in the traceback. With C-u (programmatically, optional argument BOTTOM), jump to the bottom (innermost) exception in the exception stack. ** py-up-exception Go to the previous line up in the traceback. With C-u (programmatically, optional argument TOP) jump to the top (outermost) exception in the exception stack. ** py-mouseto-exception Jump to the code which caused the Python exception at EVENT. EVENT is usually a mouse click. ** py-goto-exception Go to the line indicated by the traceback. ** py-output-buffer-filter Clear output buffer from py-shell-input prompt etc. ** py-send-string Evaluate STRING in inferior Python process. ** py-send-file Send FILE-NAME to inferior Python PROCESS. If TEMP-FILE-NAME is passed then that file is used for processing instead, while internally the shell will continue to use FILE-NAME. python-mode.el-6.1.3/doc/commands-python-mode.rst0000644000000000000000000054200012271450574021672 0ustar rootroot00000000000000Python-mode commands ==================== ;;; Commentary: --------------- ;;; Code -------- ;;; Customization ----------------- py-smart-operator-check ----------------------- Check, if smart-operator-mode is loaded resp. available. Give some hints, if not. py-autopair-check ----------------- Check, if autopair-mode is available. Give some hints, if not. (defun p -------- ;;; Constants ------------- ;;; Macro definitions --------------------- ;;; Toggle ---------- toggle-py-nil-docstring-style ----------------------------- If nil docstring-style should be on or off. Returns value of `py-docstring-style' switched to. To set permanently, customize this variable py-nil-docstring-style-on ------------------------- Make sure, nil docstring-style' is on. Returns value of `py-docstring-style'. To set permanently, customize this variable py-nil-docstring-style-off -------------------------- Make sure, nil docstring-style is off. Returns value of `py-docstring-style'. To set permanently, customize this variable toggle-py-onetwo-docstring-style -------------------------------- If onetwo docstring-style should be on or off. Returns value of `py-docstring-style' switched to. To set permanently, customize this variable py-onetwo-docstring-style-on ---------------------------- Make sure, onetwo docstring-style' is on. Returns value of `py-docstring-style'. To set permanently, customize this variable py-onetwo-docstring-style-off ----------------------------- Make sure, onetwo docstring-style is off. Returns value of `py-docstring-style'. To set permanently, customize this variable toggle-py-pep-257-docstring-style --------------------------------- If pep-257 docstring-style should be on or off. Returns value of `py-pep-257-docstring-style' switched to. py-pep-257-docstring-style-on ----------------------------- Make sure, pep-257 docstring-style' is on. Returns value of `py-pep-257-docstring-style'. py-pep-257-docstring-style-off ------------------------------ Make sure, pep-257 docstring-style is off. Returns value of `py-pep-257-docstring-style'. toggle-py-pep-257-nn-docstring-style ------------------------------------ If pep-257-nn docstring-style should be on or off. Returns value of `py-pep-257-nn-docstring-style' switched to. py-pep-257-nn-docstring-style-on -------------------------------- Make sure, pep-257-nn docstring-style' is on. Returns value of `py-docstring-style'. To set permanently, customize this variable py-pep-257-nn-docstring-style-off --------------------------------- Make sure, pep-257-nn docstring-style is off. Returns value of `py-docstring-style'. To set permanently, customize this variable toggle-py-symmetric-docstring-style ----------------------------------- If symmetric docstring-style should be on or off. Returns value of `py-docstring-style' switched to. To set permanently, customize this variable py-symmetric-docstring-style-on ------------------------------- Make sure, symmetric docstring-style' is on. Returns value of `py-docstring-style'. To set permanently, customize this variable py-symmetric-docstring-style-off -------------------------------- Make sure, symmetric docstring-style is off. Returns value of `py-docstring-style'. To set permanently, customize this variable toggle-py-django-docstring-style -------------------------------- If django docstring-style should be on or off. Returns value of `py-docstring-style' switched to. To set permanently, customize this variable py-django-docstring-style-on ---------------------------- Make sure, django docstring-style' is on. Returns value of `py-docstring-style'. To set permanently, customize this variable py-django-docstring-style-off ----------------------------- Make sure, django docstring-style is off. Returns value of `py-docstring-style'. To set permanently, customize this variable toggle-py-underscore-word-syntax-p ---------------------------------- If `py-underscore-word-syntax-p' should be on or off. Returns value of `py-underscore-word-syntax-p' switched to. py-underscore-word-syntax-p-on ------------------------------ Make sure, py-underscore-word-syntax-p' is on. Returns value of `py-underscore-word-syntax-p'. py-underscore-word-syntax-p-off ------------------------------- Make sure, `py-underscore-word-syntax-p' is off. Returns value of `py-underscore-word-syntax-p'. toggle-py-electric-comment-p ---------------------------- If `py-electric-comment-p' should be on or off. Returns value of `py-electric-comment-p' switched to. py-electric-comment-p-on ------------------------ Make sure, py-electric-comment-p' is on. Returns value of `py-electric-comment-p'. py-electric-comment-p-off ------------------------- Make sure, `py-electric-comment-p' is off. Returns value of `py-electric-comment-p'. toggle-force-local-shell ------------------------ If locally indicated Python shell should be taken and enforced upon sessions execute commands. Toggles boolean `py-force-local-shell-p' along with `py-force-py-shell-name-p' Returns value of `toggle-force-local-shell' switched to. When on, kind of an option 'follow', local shell sets `py-shell-name', enforces its use afterwards. See also commands `py-force-local-shell-on' `py-force-local-shell-off' py-force-local-shell-on ----------------------- Make sure, `py-py-force-local-shell-p' is on. Returns value of `py-force-local-shell-p'. Kind of an option 'follow', local shell sets `py-shell-name', enforces its use afterwards py-force-local-shell-off ------------------------ Restore `py-shell-name' default value and `behaviour'. toggle-force-py-shell-name-p ---------------------------- If customized default `py-shell-name' should be enforced upon execution. If `py-force-py-shell-name-p' should be on or off. Returns value of `py-force-py-shell-name-p' switched to. See also commands force-py-shell-name-p-on force-py-shell-name-p-off Caveat: Completion might not work that way. force-py-shell-name-p-on ------------------------ Switches `py-force-py-shell-name-p' on. Customized default `py-shell-name' will be enforced upon execution. Returns value of `py-force-py-shell-name-p'. Caveat: Completion might not work that way. force-py-shell-name-p-off ------------------------- Make sure, `py-force-py-shell-name-p' is off. Function to use by executes will be guessed from environment. Returns value of `py-force-py-shell-name-p'. py-toggle-indent-tabs-mode -------------------------- Toggle `indent-tabs-mode'. Returns value of `indent-tabs-mode' switched to. py-indent-tabs-mode-on ---------------------- Switch `indent-tabs-mode' on. py-indent-tabs-mode-off ----------------------- Switch `indent-tabs-mode' on. toggle-py-jump-on-exception --------------------------- If `py-jump-on-exception' should be on or off. Returns value of `py-jump-on-exception' switched to. py-jump-on-exception-on ----------------------- Make sure, py-jump-on-exception' is on. Returns value of `py-jump-on-exception'. py-jump-on-exception-off ------------------------ Make sure, `py-jump-on-exception' is off. Returns value of `py-jump-on-exception'. toggle-python-mode-v5-behavior-p -------------------------------- If `python-mode-v5-behavior-p' should be on or off. Returns value of `python-mode-v5-behavior-p' switched to. python-mode-v5-behavior-p-on ---------------------------- Make sure, `python-mode-v5-behavior-p' is on. Returns value of `python-mode-v5-behavior-p'. python-mode-v5-behavior-p-off ----------------------------- Make sure, `python-mode-v5-behavior-p' is off. Returns value of `python-mode-v5-behavior-p'. py-toggle-shell-switch-buffers-on-execute ----------------------------------------- If `py-switch-buffers-on-execute-p' should be on or off. Returns value of `py-switch-buffers-on-execute-p' switched to. py-shell-switch-buffers-on-execute-on ------------------------------------- Make sure, `py-switch-buffers-on-execute-p' is on. Returns value of `py-switch-buffers-on-execute-p'. py-shell-switch-buffers-on-execute-off -------------------------------------- Make sure, `py-switch-buffers-on-execute-p' is off. Returns value of `py-switch-buffers-on-execute-p'. py-toggle-split-windows-on-execute ---------------------------------- If `py-split-windows-on-execute-p' should be on or off. Returns value of `py-split-windows-on-execute-p' switched to. py-split-windows-on-execute-on ------------------------------ Make sure, `py-split-windows-on-execute-p' is on. Returns value of `py-split-windows-on-execute-p'. py-split-windows-on-execute-off ------------------------------- Make sure, `py-split-windows-on-execute-p' is off. Returns value of `py-split-windows-on-execute-p'. py-toggle-highlight-indentation ------------------------------- If `highlight-indentation-p' should be on or off. py-highlight-indentation-off ---------------------------- If `highlight-indentation-p' should be on or off. py-highlight-indentation-on --------------------------- If `highlight-indentation-p' should be on or off. py-toggle-smart-indentation --------------------------- If `py-smart-indentation' should be on or off. Returns value of `py-smart-indentation' switched to. py-smart-indentation-on ----------------------- Make sure, `py-smart-indentation' is on. Returns value of `py-smart-indentation'. py-smart-indentation-off ------------------------ Make sure, `py-smart-indentation' is off. Returns value of `py-smart-indentation'. toggle-py-smart-operator-mode-p ------------------------------- If `py-smart-operator-mode-p' should be on or off. Returns value of `py-smart-operator-mode-p' switched to. py-smart-operator-mode-p-on --------------------------- Make sure, py-smart-operator-mode-p' is on. Returns value of `py-smart-operator-mode-p'. py-smart-operator-mode-p-off ---------------------------- Make sure, py-smart-operator-mode-p' is off. Returns value of `py-smart-operator-mode-p'. toggle-py-use-current-dir-when-execute-p ---------------------------------------- If `py-use-current-dir-when-execute-p' should be on or off. Returns value of `py-use-current-dir-when-execute-p' switched to. py-use-current-dir-when-execute-p-on ------------------------------------ Make sure, py-use-current-dir-when-execute-p' is on. Returns value of `py-use-current-dir-when-execute-p'. py-use-current-dir-when-execute-p-off ------------------------------------- Make sure, `py-use-current-dir-when-execute-p' is off. Returns value of `py-use-current-dir-when-execute-p'. py-toggle-autopair-mode ----------------------- If `py-autopair-mode' should be on or off. Returns value of `py-autopair-mode' switched to. py-autopair-mode-on ------------------- Make sure, py-autopair-mode' is on. Returns value of `py-autopair-mode'. py-autopair-mode-off -------------------- Make sure, py-autopair-mode' is off. Returns value of `py-autopair-mode'. toggle-py-switch-buffers-on-execute-p ------------------------------------- If `py-switch-buffers-on-execute-p' should be on or off. Returns value of `py-switch-buffers-on-execute-p' switched to. py-switch-buffers-on-execute-p-on --------------------------------- Make sure, `py-py-switch-buffers-on-execute-p' is on. Returns value of `py-switch-buffers-on-execute-p'. py-switch-buffers-on-execute-p-off ---------------------------------- Make sure, `py-switch-buffers-on-execute-p' is off. Returns value of `py-switch-buffers-on-execute-p'. toggle-py-split-windows-on-execute-p ------------------------------------ If `py-split-windows-on-execute-p' should be on or off. Returns value of `py-split-windows-on-execute-p' switched to. py-split-windows-on-execute-p-on -------------------------------- Make sure, `py-py-split-windows-on-execute-p' is on. Returns value of `py-split-windows-on-execute-p'. py-split-windows-on-execute-p-off --------------------------------- Make sure, `py-split-windows-on-execute-p' is off. Returns value of `py-split-windows-on-execute-p'. py-toggle-sexp-function ----------------------- Opens customization py-shell-get-process -------------------- Get appropriate Python process for current buffer and return it. py-shell-send-string -------------------- Send STRING to inferior Python PROCESS. When `py-verbose-p' and MSG is non-nil messages the first line of STRING. py-shell-send-file ------------------ Send FILE-NAME to inferior Python PROCESS. If TEMP-FILE-NAME is passed then that file is used for processing instead, while internally the shell will continue to use FILE-NAME. py-switch-to-shell ------------------ Switch to inferior Python process buffer. python-shell-completion-complete-or-indent ------------------------------------------ Complete or indent depending on the context. If content before pointer is all whitespace indent. If not try to complete. ;;; Helper commands ------------------- py-guess-pdb-path ----------------- If py-pdb-path isn't set, find location of pdb.py. (defun s -------- py-forward-line --------------- Goes to end of line after forward move. Travels right-margin comments. py-go-to-beginning-of-comment ----------------------------- Go to the beginning of current line's comment, if any. From a programm use `py-beginning-of-comment' instead py-leave-comment-or-string-backward ----------------------------------- If inside a comment or string, leave it backward. py-beginning-of-list-pps ------------------------ Go to the beginning of a list. Optional ARG indicates a start-position for `parse-partial-sexp'. Return beginning position, nil if not inside. empty-line-p ------------ Returns t if cursor is at an line with nothing but whitespace-characters, nil otherwise. py-count-lines -------------- Count lines in accessible part until current line. See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7115 py-send-region -------------- Send the region to the inferior Python process. py-send-region-and-go --------------------- Send the region to the inferior Python process. Then switch to the process buffer. python-send-string ------------------ Evaluate STRING in inferior Python process. py-switch-to-python ------------------- Switch to the Python process buffer, maybe starting new process. With prefix arg, position cursor at end of buffer. py-proc ------- Return the current Python process. Start a new process if necessary. ;;; Keymap and syntax --------------------- py-insert-default-shebang ------------------------- Insert in buffer shebang of installed default Python. py-electric-comment ------------------- Insert a comment. If starting a comment, indent accordingly. If a numeric argument ARG is provided, that many "#" are inserted non-electrically. With C-u "#" electric behavior is inhibited inside a string or comment. py-electric-colon ----------------- Insert a colon and indent accordingly. If a numeric argument ARG is provided, that many colons are inserted non-electrically. Electric behavior is inhibited inside a string or comment or by universal prefix C-u. Switched by `py-electric-colon-active-p', default is nil See also `py-electric-colon-greedy-p' py-empty-out-list-backward -------------------------- Deletes all elements from list before point. py-electric-backspace --------------------- Delete preceding character or level of indentation. With ARG do that ARG times. Returns column reached. py-electric-delete ------------------ Delete following character or levels of whitespace. With ARG do that ARG times. py-indent-line-outmost ---------------------- Indent the current line to the outmost reasonable indent. With optional C-u an indent with length `py-indent-offset' is inserted unconditionally py-indent-line -------------- Indent the current line according to Python rules. When called interactivly with C-u, ignore dedenting rules for block closing statements (e.g. return, raise, break, continue, pass) An optional C-u followed by a numeric argument neither 1 nor 4 will switch off `py-smart-indentation' for this execution. This permits to correct allowed but unwanted indents. Similar to `toggle-py-smart-indentation' resp. `py-smart-indentation-off' followed by TAB. This function is normally used by `indent-line-function' resp. TAB. Returns current indentation When `py-tab-shifts-region-p' is `t', not just the current line, but the region is shiftet that way. If `py-tab-indents-region-p' is `t' and first TAB doesn't shift --as indent is at outmost reasonable--, indent-region is called. py-newline-and-indent --------------------- Add a newline and indent to outmost reasonable indent. When indent is set back manually, this is honoured in following lines. py-newline-and-dedent --------------------- Add a newline and indent to one level below current. Returns column. py-indent-tabs-mode ------------------- With positive ARG switch `indent-tabs-mode' on. With negative ARG switch `indent-tabs-mode' off. Returns value of `indent-tabs-mode' switched to. py-guess-indent-forward ----------------------- Called when moving to end of a form and `py-smart-indentation' is on. py-guess-indent-offset ---------------------- Guess `py-indent-offset'. Set local value of `py-indent-offset', return it Might change local value of `py-indent-offset' only when called downwards from beginning of block followed by a statement. Otherwise default-value is returned. py-narrow-to-defun ------------------ Make text outside current def or class invisible. The defun visible is the one that contains point or follows point. ;;; Shifting ------------ py-shift-left ------------- Dedent region according to `py-indent-offset' by COUNT times. If no region is active, current line is dedented. Returns indentation reached. py-shift-right -------------- Indent region according to `py-indent-offset' by COUNT times. If no region is active, current line is indented. Returns indentation reached. py-shift-paragraph-right ------------------------ Indent paragraph by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-shift-paragraph-left ----------------------- Dedent paragraph by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-shift-block-right -------------------- Indent block by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-shift-block-left ------------------- Dedent block by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-shift-minor-block-left ------------------------- Dedent minor-block by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. A minor block is started by a `for', `if', `try' or `with'. py-shift-minor-block-right -------------------------- Indent minor-block by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. A minor block is started by a `for', `if', `try' or `with'. py-shift-clause-right --------------------- Indent clause by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-shift-clause-left -------------------- Dedent clause by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-shift-block-or-clause-right ------------------------------ Indent block-or-clause by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-shift-block-or-clause-left ----------------------------- Dedent block-or-clause by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-shift-def-right ------------------ Indent def by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-shift-def-left ----------------- Dedent def by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-shift-class-right -------------------- Indent class by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-shift-class-left ------------------- Dedent class by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-shift-def-or-class-right --------------------------- Indent def-or-class by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-shift-def-or-class-left -------------------------- Dedent def-or-class by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-shift-line-right ------------------- Indent line by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-shift-line-left ------------------ Dedent line by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-shift-statement-right ------------------------ Indent statement by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-shift-statement-left ----------------------- Dedent statement by COUNT spaces. COUNT defaults to `py-indent-offset', use [universal-argument] to specify a different value. Returns outmost indentation reached. py-indent-and-forward --------------------- Indent current line according to mode, move one line forward. py-indent-region ---------------- Reindent a region of Python code. With optional INDENT-OFFSET specify a different value than `py-indent-offset' at place. Guesses the outmost reasonable indent Returns and keeps relative position ;;; Positions ------------- py-beginning-of-paragraph-position ---------------------------------- Returns beginning of paragraph position. py-end-of-paragraph-position ---------------------------- Returns end of paragraph position. py-beginning-of-block-position ------------------------------ Returns beginning of block position. py-end-of-block-position ------------------------ Returns end of block position. py-beginning-of-minor-block-position ------------------------------------ Returns beginning of minor-block position. py-end-of-minor-block-position ------------------------------ Returns end of minor-block position. py-beginning-of-clause-position ------------------------------- Returns beginning of clause position. py-end-of-clause-position ------------------------- Returns end of clause position. py-beginning-of-block-or-clause-position ---------------------------------------- Returns beginning of block-or-clause position. py-end-of-block-or-clause-position ---------------------------------- Returns end of block-or-clause position. py-beginning-of-def-position ---------------------------- Returns beginning of def position. py-end-of-def-position ---------------------- Returns end of def position. py-beginning-of-class-position ------------------------------ Returns beginning of class position. py-end-of-class-position ------------------------ Returns end of class position. py-beginning-of-def-or-class-position ------------------------------------- Returns beginning of def-or-class position. py-end-of-def-or-class-position ------------------------------- Returns end of def-or-class position. py-beginning-of-line-position ----------------------------- Returns beginning of line position. py-end-of-line-position ----------------------- Returns end of line position. py-beginning-of-statement-position ---------------------------------- Returns beginning of statement position. py-end-of-statement-position ---------------------------- Returns end of statement position. py-beginning-of-comment-position -------------------------------- Returns beginning of comment position. py-end-of-comment-position -------------------------- Returns end of comment position. py-beginning-of-top-level-position ---------------------------------- Returns beginning of top-level position. py-end-of-top-level-position ---------------------------- Returns end of top-level position. py-beginning-of-partial-expression-position ------------------------------------------- Returns beginning of partial-expression position. py-end-of-partial-expression-position ------------------------------------- Returns end of partial-expression position. py-beginning-of-expression-position ----------------------------------- Returns beginning of expression position. py-end-of-expression-position ----------------------------- Returns end of expression position. ;;; some more Positions not generated by ---------------------------------------- py-list-beginning-position -------------------------- Return lists beginning position, nil if not inside. Optional ARG indicates a start-position for `parse-partial-sexp'. py-end-of-list-position ----------------------- Return end position, nil if not inside. Optional ARG indicates a start-position for `parse-partial-sexp'. py-in-triplequoted-string-p --------------------------- Returns character address of start tqs-string, nil if not inside. py-in-string-p -------------- Returns character address of start of string, nil if not inside. py-in-statement-p ----------------- Returns list of beginning and end-position if inside. Result is useful for booleans too: (when (py-in-statement-p)...) will work. ;;; Bounds ---------- py-bounds-of-statement ---------------------- Returns bounds of statement at point. With optional POSITION, a number, report bounds of statement at POSITION. Returns a list, whose car is beg, cdr - end. py-bounds-of-statements ----------------------- Bounds of consecutive multitude of statements around point. Indented same level, which don't open blocks. py-bounds-of-block ------------------ Returns bounds of block at point. With optional POSITION, a number, report bounds of block at POSITION. Returns a list, whose car is beg, cdr - end. py-bounds-of-clause ------------------- Returns bounds of clause at point. With optional POSITION, a number, report bounds of clause at POSITION. Returns a list, whose car is beg, cdr - end. py-bounds-of-block-or-clause ---------------------------- Returns bounds of block-or-clause at point. With optional POSITION, a number, report bounds of block-or-clause at POSITION. Returns a list, whose car is beg, cdr - end. py-bounds-of-def ---------------- Returns bounds of def at point. With optional POSITION, a number, report bounds of def at POSITION. Returns a list, whose car is beg, cdr - end. py-bounds-of-class ------------------ Returns bounds of class at point. With optional POSITION, a number, report bounds of class at POSITION. Returns a list, whose car is beg, cdr - end. py-bounds-of-region ------------------- Returns bounds of region at point. Returns a list, whose car is beg, cdr - end. py-bounds-of-buffer ------------------- Returns bounds of buffer at point. With optional POSITION, a number, report bounds of buffer at POSITION. Returns a list, whose car is beg, cdr - end. py-bounds-of-expression ----------------------- Returns bounds of expression at point. With optional POSITION, a number, report bounds of expression at POSITION. Returns a list, whose car is beg, cdr - end. py-bounds-of-partial-expression ------------------------------- Returns bounds of partial-expression at point. With optional POSITION, a number, report bounds of partial-expression at POSITION. Returns a list, whose car is beg, cdr - end. py-bounds-of-declarations ------------------------- Bounds of consecutive multitude of assigments resp. statements around point. Indented same level, which don't open blocks. Typically declarations resp. initialisations of variables following a class or function definition. See also py-bounds-of-statements ;;; Comments, Filling --------------------- py-beginning-of-comment ----------------------- Go to the beginning of current line's comment, if any. Returns position if succesful. py-end-of-comment ----------------- Go to the end of comment at point. Returns position, nil if not in comment. ;;; Comment forms ----------------- py-comment-region ----------------- Like `comment-region' but uses double hash (`#') comment starter. py-comment-block ---------------- Comments block at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default py-comment-minor-block ---------------------- Comments minor-block at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default py-comment-top-level -------------------- Comments top-level form at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default py-comment-clause ----------------- Comments clause at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default py-comment-block-or-clause -------------------------- Comments block-or-clause at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default py-comment-def -------------- Comments def at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default py-comment-class ---------------- Comments class at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default py-comment-def-or-class ----------------------- Comments def-or-class at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default py-comment-statement -------------------- Comments statement at point. Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t', the default py-uncomment ------------ Uncomment commented lines at point. If region is active, restrict uncommenting at region py-delete-comments-in-def-or-class ---------------------------------- Delete all commented lines in def-or-class at point py-delete-comments-in-class --------------------------- Delete all commented lines in class at point py-delete-comments-in-block --------------------------- Delete all commented lines in block at point py-delete-comments-in-region ---------------------------- Delete all commented lines in region. py-fill-comment --------------- Fill the comment paragraph at point py-end-of-string ---------------- Go to end of string at point, return position. Takes the result of (syntax-ppss) py-fill-this-paragraph ---------------------- Fill just the paragraph at point. py-fill-paragraph ----------------- `fill-paragraph-function' If `py-paragraph-fill-docstring-p' and inside a docstring, the whole docstring is formatted. See also `py-fill-string' py-fill-labelled-string ----------------------- Fill string or paragraph containing lines starting with label See lp:1066489 py-fill-string -------------- String fill function for `py-fill-paragraph'. JUSTIFY should be used (if applicable) as in `fill-paragraph'. DOCSTRING is either a boolean or 'no If `py-paragraph-fill-docstring-p' is `t', `M-q` fills the complete docstring according to setting of `py-docstring-style' py-fill-string-django --------------------- Fill docstring according to Django's coding standards style. """ Process foo, return bar. """ """ Process foo, return bar. If processing fails throw ProcessingError. """ See available styles at `py-fill-paragraph' or var `py-docstring-style' py-fill-string-onetwo --------------------- One newline and start and Two at end style. """Process foo, return bar.""" """ Process foo, return bar. If processing fails throw ProcessingError. """ See available styles at `py-fill-paragraph' or var `py-docstring-style' py-fill-string-pep-257 ---------------------- PEP-257 with 2 newlines at end of string. """Process foo, return bar.""" """Process foo, return bar. If processing fails throw ProcessingError. """ See available styles at `py-fill-paragraph' or var `py-docstring-style' py-fill-string-pep-257-nn ------------------------- PEP-257 with 1 newline at end of string. """Process foo, return bar.""" """Process foo, return bar. If processing fails throw ProcessingError. """ See available styles at `py-fill-paragraph' or var `py-docstring-style' py-fill-string-symmetric ------------------------ Symmetric style. """Process foo, return bar.""" """ Process foo, return bar. If processing fails throw ProcessingError. """ See available styles at `py-fill-paragraph' or var `py-docstring-style' py-beginning-of-top-level-p --------------------------- Returns position, if cursor is at the beginning of a top-level, nil otherwise. ;;; Opens-p ----------- py-statement-opens-block-p -------------------------- Return position if the current statement opens a block in stricter or wider sense. For stricter sense specify regexp. py-statement-opens-clause-p --------------------------- Return position if the current statement opens block or clause. py-statement-opens-block-or-clause-p ------------------------------------ Return position if the current statement opens block or clause. py-statement-opens-class-p -------------------------- Return `t' if the statement opens a functions or class definition, nil otherwise. py-statement-opens-def-p ------------------------ Return `t' if the statement opens a functions or class definition, nil otherwise. py-statement-opens-def-or-class-p --------------------------------- Return `t' if the statement opens a functions or class definition, nil otherwise. py-look-downward-for-clause --------------------------- If beginning of other clause exists downward in current block. If succesful return position. py-current-defun ---------------- Go to the outermost method or class definition in current scope. Python value for `add-log-current-defun-function'. This tells add-log.el how to find the current function/method/variable. Returns name of class or methods definition, if found, nil otherwise. See customizable variables `py-current-defun-show' and `py-current-defun-delay'. py-sort-imports --------------- Sort multiline imports. Put point inside the parentheses of a multiline import and hit M-x py-sort-imports to sort the imports lexicographically py-which-def-or-class --------------------- Returns concatenated `def' and `class' names in hierarchical order, if cursor is inside. Returns "???" otherwise Used by variable `which-func-functions' py-which-function ----------------- Return the name of the function or class, if curser is in, return nil otherwise. ;;; Beginning/End ----------------- py-beginning-of-statements -------------------------- Got to the beginning of statements in current level which don't open blocks. py-end-of-statements -------------------- Got to the end of statements in current level which don't open blocks. py-beginning-of-expression -------------------------- Go to the beginning of a compound python expression. With numeric ARG do it that many times. A a compound python expression might be concatenated by "." operator, thus composed by minor python expressions. If already at the beginning or before a expression, go to next expression in buffer upwards Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference Operators however are left aside resp. limit py-expression designed for edit-purposes. py-end-of-expression -------------------- Go to the end of a compound python expression. With numeric ARG do it that many times. A a compound python expression might be concatenated by "." operator, thus composed by minor python expressions. Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference Operators however are left aside resp. limit py-expression designed for edit-purposes. py-beginning-of-partial-expression ---------------------------------- py-end-of-partial-expression ---------------------------- py-beginning-of-line -------------------- Go to beginning-of-line, return position. If already at beginning-of-line and not at BOB, go to beginning of previous line. py-end-of-line -------------- Go to end-of-line, return position. If already at end-of-line and not at EOB, go to end of next line. py-beginning-of-statement ------------------------- Go to the initial line of a simple statement. For beginning of compound statement use py-beginning-of-block. For beginning of clause py-beginning-of-clause. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-declarations ---------------------------- Got to the beginning of assigments resp. statements in current level which don't open blocks. py-end-of-declarations ---------------------- Got to the end of assigments resp. statements in current level which don't open blocks. ;;; Beginning of forms ---------------------- py-beginning-of-form-intern --------------------------- Go to beginning of FORM. With INDENT, go to beginning one level above. Whit IACT, print result in message buffer. Returns beginning of FORM if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-block --------------------- Go to beginning block, skip whitespace at BOL. Returns beginning of block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-clause ---------------------- Go to beginning clause, skip whitespace at BOL. Returns beginning of clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-block-or-clause ------------------------------- Go to beginning block-or-clause, skip whitespace at BOL. Returns beginning of block-or-clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-def ------------------- Go to beginning def, skip whitespace at BOL. Returns beginning of def if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-class --------------------- Go to beginning class, skip whitespace at BOL. Returns beginning of class if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-def-or-class ---------------------------- Go to beginning def-or-class, skip whitespace at BOL. Returns beginning of def-or-class if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-if-block ------------------------ Go to beginning if-block, skip whitespace at BOL. Returns beginning of if-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-try-block ------------------------- Go to beginning try-block, skip whitespace at BOL. Returns beginning of try-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-minor-block --------------------------- Go to beginning minor-block, skip whitespace at BOL. Returns beginning of minor-block if successful, nil otherwise A minor block is started by a `for', `if', `try' or `with'. py-beginning-of-block-lc ------------------------ Go to beginning block, go to BOL. Returns beginning of block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-clause-lc ------------------------- Go to beginning clause, go to BOL. Returns beginning of clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-block-or-clause-lc ---------------------------------- Go to beginning block-or-clause, go to BOL. Returns beginning of block-or-clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-def-lc ---------------------- Go to beginning def, go to BOL. Returns beginning of def if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-class-lc ------------------------ Go to beginning class, go to BOL. Returns beginning of class if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-def-or-class-lc ------------------------------- Go to beginning def-or-class, go to BOL. Returns beginning of def-or-class if successful, nil otherwise When `py-mark-decorators' is non-nil, decorators are considered too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-if-block-lc --------------------------- Go to beginning if-block, go to BOL. Returns beginning of if-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-try-block-lc ---------------------------- Go to beginning try-block, go to BOL. Returns beginning of try-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-minor-block-lc ------------------------------ Go to beginning minor-block, go to BOL. Returns beginning of minor-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning-of-top-level ------------------------- Go up to beginning of statments until level of indentation is null. Returns position if successful, nil otherwise py-end-of-top-level ------------------- Go to end of top-level form at point. Returns position if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-beginning ------------ Go to beginning of compound statement or definition at point. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-end ------ Go to end of of compound statement or definition at point. Returns position block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-up ----- Go up or to beginning of form if inside. If inside a delimited form --string or list-- go to it's beginning. If not at beginning of a statement or block, go to it's beginning. If at beginning of a statement or block, go to beginning one level above of compound statement or definition at point. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-down ------- Go to beginning one level below of compound statement or definition at point. If no statement or block below, but a delimited form --string or list-- go to it's beginning. Repeated call from there will behave like down-list. Returns position if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-end-of-block --------------- Go to end of block. Returns end of block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-end-of-clause ---------------- Go to end of clause. Returns end of clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-end-of-block-or-clause ------------------------- Go to end of block-or-clause. Returns end of block-or-clause if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-end-of-def ------------- Go to end of def. Returns end of def if successful, nil otherwise With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-end-of-class --------------- Go to end of class. Returns end of class if successful, nil otherwise With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-end-of-def-or-class ---------------------- Go to end of def-or-class. Returns end of def-or-class if successful, nil otherwise With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-end-of-if-block ------------------ Go to end of if-block. Returns end of if-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-end-of-try-block ------------------- Go to end of try-block. Returns end of try-block if successful, nil otherwise Referring python program structures see for example: http://docs.python.org/reference/compound_stmts.html py-end-of-minor-block --------------------- Go to end of minor-block. Returns end of minor-block if successful, nil otherwise A minor block is started by a `for', `if', `try' or `with'. ;;; Forms --------- py-declarations --------------- Copy and mark assigments resp. statements in current level which don't open blocks or start with a keyword. See also `py-statements', which is more general, taking also simple statements starting with a keyword. py-statements ------------- Copy and mark simple statements in current level which don't open blocks. More general than py-declarations, which would stop at keywords like a print-statement. py-end-of-statement ------------------- Go to the last char of current statement. To go just beyond the final line of the current statement, use `py-down-statement-bol'. py-goto-statement-below ----------------------- Goto beginning of next statement. py-beginning-of-decorator ------------------------- Go to the beginning of a decorator. Returns position if succesful py-end-of-decorator ------------------- Go to the end of a decorator. Returns position if succesful ;;; Mark -------- py-mark-paragraph ----------------- Mark paragraph at point. Returns beginning and end positions of marked area, a cons. py-mark-block ------------- Mark block at point. Returns beginning and end positions of marked area, a cons. py-mark-minor-block ------------------- Mark minor-block at point. Returns beginning and end positions of marked area, a cons. py-mark-clause -------------- Mark clause at point. Returns beginning and end positions of marked area, a cons. py-mark-block-or-clause ----------------------- Mark block-or-clause at point. Returns beginning and end positions of marked area, a cons. py-mark-def ----------- Mark def at point. With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of marked area, a cons. py-mark-class ------------- Mark class at point. With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of marked area, a cons. py-mark-def-or-class -------------------- Mark def-or-class at point. With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of marked area, a cons. py-mark-line ------------ Mark line at point. Returns beginning and end positions of marked area, a cons. py-mark-statement ----------------- Mark statement at point. Returns beginning and end positions of marked area, a cons. py-mark-top-level ----------------- Mark top-level form at point. Returns beginning and end positions of marked area, a cons. py-mark-expression ------------------ Mark expression at point. Returns beginning and end positions of marked area, a cons. py-mark-partial-expression -------------------------- Mark partial-expression at point. Returns beginning and end positions of marked area, a cons. ;;; Copy -------- py-copy-statement ----------------- Copy statement at point. Store data in kill ring, so it might yanked back. py-copy-top-level ----------------- Copy top-level at point. Store data in kill ring, so it might yanked back. py-copy-block ------------- Copy block at point. Store data in kill ring, so it might yanked back. py-copy-clause -------------- Copy clause at point. Store data in kill ring, so it might yanked back. py-copy-block-or-clause ----------------------- Copy block-or-clause at point. Store data in kill ring, so it might yanked back. py-copy-def ----------- Copy def at point. Store data in kill ring, so it might yanked back. py-copy-class ------------- Copy class at point. Store data in kill ring, so it might yanked back. py-copy-def-or-class -------------------- Copy def-or-class at point. Store data in kill ring, so it might yanked back. py-copy-expression ------------------ Copy expression at point. Store data in kill ring, so it might yanked back. py-copy-partial-expression -------------------------- Copy partial-expression at point. Store data in kill ring, so it might yanked back. py-copy-minor-block ------------------- Copy minor-block at point. Store data in kill ring, so it might yanked back. ;;; Delete ---------- py-delete-statement ------------------- Delete STATEMENT at point. Don't store data in kill ring. py-delete-top-level ------------------- Delete TOP-LEVEL at point. Don't store data in kill ring. py-delete-block --------------- Delete BLOCK at point. Don't store data in kill ring. py-delete-block-or-clause ------------------------- Delete BLOCK-OR-CLAUSE at point. Don't store data in kill ring. py-delete-def ------------- Delete DEF at point. Don't store data in kill ring. py-delete-class --------------- Delete CLASS at point. Don't store data in kill ring. py-delete-def-or-class ---------------------- Delete DEF-OR-CLASS at point. Don't store data in kill ring. py-delete-expression -------------------- Delete EXPRESSION at point. Don't store data in kill ring. py-delete-partial-expression ---------------------------- Delete PARTIAL-EXPRESSION at point. Don't store data in kill ring. py-delete-minor-block --------------------- Delete MINOR-BLOCK at point. Don't store data in kill ring. A minor block is started by a `for', `if', `try' or `with'. ;;; Kill -------- py-kill-statements ------------------ Delete statements declared in current level. Store deleted statements in kill-ring py-kill-declarations -------------------- Delete variables declared in current level. Store deleted variables in kill-ring py-kill-expression ------------------ Delete expression at point. Stores data in kill ring. Might be yanked back using `C-y'. py-kill-partial-expression -------------------------- Delete partial-expression at point. Stores data in kill ring. Might be yanked back using `C-y'. "." operators delimit a partial-expression expression on it's level, that's the difference to compound expressions. py-kill-statement ----------------- Delete statement at point. Stores data in kill ring. Might be yanked back using `C-y'. py-kill-top-level ----------------- Delete top-level form at point. Stores data in kill ring. Might be yanked back using `C-y'. py-kill-block ------------- Delete block at point. Stores data in kill ring. Might be yanked back using `C-y'. py-kill-minor-block ------------------- Delete minor-block at point. Stores data in kill ring. Might be yanked back using `C-y'. py-kill-block-or-clause ----------------------- Delete block-or-clause at point. Stores data in kill ring. Might be yanked back using `C-y'. py-kill-def-or-class -------------------- Delete def-or-class at point. Stores data in kill ring. Might be yanked back using `C-y'. py-kill-class ------------- Delete class at point. Stores data in kill ring. Might be yanked back using `C-y'. py-kill-def ----------- Delete def at point. Stores data in kill ring. Might be yanked back using `C-y'. py-kill-clause -------------- Delete clause at point. Stores data in kill ring. Might be yanked back using `C-y'. ;;; Beginning of line forms --------------------------- py-beginning-of-block-bol-p --------------------------- Returns position, if cursor is at the beginning of block, at beginning of line, nil otherwise. py-end-of-block-bol ------------------- Goto beginning of line following end of block. Returns position reached, if successful, nil otherwise. See also `py-down-block': down from current definition to next beginning of block below. py-mark-block-bol ----------------- Mark block, take beginning of line positions. Returns beginning and end positions of region, a cons. py-copy-block-bol ----------------- Delete block bol at point. Stores data in kill ring. Might be yanked back using `C-y'. py-kill-block-bol ----------------- Delete block bol at point. Stores data in kill ring. Might be yanked back using `C-y'. py-delete-block-bol ------------------- Delete block bol at point. Don't store data in kill ring. py-beginning-of-clause-bol-p ---------------------------- Returns position, if cursor is at the beginning of clause, at beginning of line, nil otherwise. py-end-of-clause-bol -------------------- Goto beginning of line following end of clause. Returns position reached, if successful, nil otherwise. See also `py-down-clause': down from current definition to next beginning of clause below. py-mark-clause-bol ------------------ Mark clause, take beginning of line positions. Returns beginning and end positions of region, a cons. py-copy-clause-bol ------------------ Delete clause bol at point. Stores data in kill ring. Might be yanked back using `C-y'. py-kill-clause-bol ------------------ Delete clause bol at point. Stores data in kill ring. Might be yanked back using `C-y'. py-delete-clause-bol -------------------- Delete clause bol at point. Don't store data in kill ring. py-beginning-of-block-or-clause-bol-p ------------------------------------- Returns position, if cursor is at the beginning of block-or-clause, at beginning of line, nil otherwise. py-end-of-block-or-clause-bol ----------------------------- Goto beginning of line following end of block-or-clause. Returns position reached, if successful, nil otherwise. See also `py-down-block-or-clause': down from current definition to next beginning of block-or-clause below. py-mark-block-or-clause-bol --------------------------- Mark block-or-clause, take beginning of line positions. Returns beginning and end positions of region, a cons. py-copy-block-or-clause-bol --------------------------- Delete block-or-clause bol at point. Stores data in kill ring. Might be yanked back using `C-y'. py-kill-block-or-clause-bol --------------------------- Delete block-or-clause bol at point. Stores data in kill ring. Might be yanked back using `C-y'. py-delete-block-or-clause-bol ----------------------------- Delete block-or-clause bol at point. Don't store data in kill ring. py-beginning-of-def-bol-p ------------------------- Returns position, if cursor is at the beginning of def, at beginning of line, nil otherwise. py-end-of-def-bol ----------------- Goto beginning of line following end of def. Returns position reached, if successful, nil otherwise. See also `py-down-def': down from current definition to next beginning of def below. py-mark-def-bol --------------- Mark def, take beginning of line positions. With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of region, a cons. py-copy-def-bol --------------- Delete def bol at point. Stores data in kill ring. Might be yanked back using `C-y'. py-kill-def-bol --------------- Delete def bol at point. Stores data in kill ring. Might be yanked back using `C-y'. py-delete-def-bol ----------------- Delete def bol at point. Don't store data in kill ring. py-beginning-of-class-bol-p --------------------------- Returns position, if cursor is at the beginning of class, at beginning of line, nil otherwise. py-end-of-class-bol ------------------- Goto beginning of line following end of class. Returns position reached, if successful, nil otherwise. See also `py-down-class': down from current definition to next beginning of class below. py-mark-class-bol ----------------- Mark class, take beginning of line positions. With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of region, a cons. py-copy-class-bol ----------------- Delete class bol at point. Stores data in kill ring. Might be yanked back using `C-y'. py-kill-class-bol ----------------- Delete class bol at point. Stores data in kill ring. Might be yanked back using `C-y'. py-delete-class-bol ------------------- Delete class bol at point. Don't store data in kill ring. py-beginning-of-def-or-class-bol-p ---------------------------------- Returns position, if cursor is at the beginning of def-or-class, at beginning of line, nil otherwise. py-end-of-def-or-class-bol -------------------------- Goto beginning of line following end of def-or-class. Returns position reached, if successful, nil otherwise. See also `py-down-def-or-class': down from current definition to next beginning of def-or-class below. py-mark-def-or-class-bol ------------------------ Mark def-or-class, take beginning of line positions. With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too. Returns beginning and end positions of region, a cons. py-copy-def-or-class-bol ------------------------ Delete def-or-class bol at point. Stores data in kill ring. Might be yanked back using `C-y'. py-kill-def-or-class-bol ------------------------ Delete def-or-class bol at point. Stores data in kill ring. Might be yanked back using `C-y'. py-delete-def-or-class-bol -------------------------- Delete def-or-class bol at point. Don't store data in kill ring. py-beginning-of-statement-bol-p ------------------------------- Returns position, if cursor is at the beginning of statement, at beginning of line, nil otherwise. py-beginning-of-statement-bol ----------------------------- Goto beginning of line where statement starts. Returns position reached, if successful, nil otherwise. See also `py-up-statement': up from current definition to next beginning of statement above. py-end-of-statement-bol ----------------------- Goto beginning of line following end of statement. Returns position reached, if successful, nil otherwise. See also `py-down-statement': down from current definition to next beginning of statement below. py-mark-statement-bol --------------------- Mark statement, take beginning of line positions. Returns beginning and end positions of region, a cons. py-copy-statement-bol --------------------- Delete statement bol at point. Stores data in kill ring. Might be yanked back using `C-y'. py-kill-statement-bol --------------------- Delete statement bol at point. Stores data in kill ring. Might be yanked back using `C-y'. py-delete-statement-bol ----------------------- Delete statement bol at point. Don't store data in kill ring. ;;; Up/Down ----------- py-up-statement --------------- Go to the beginning of next statement upwards in buffer. Return position if statement found, nil otherwise. py-down-statement ----------------- Go to the beginning of next statement downwards in buffer. Return position if statement found, nil otherwise. py-up-block ----------- Go to the beginning of next block upwards in buffer. Return position if block found, nil otherwise. py-up-minor-block ----------------- Go to the beginning of next minor-block upwards in buffer. Return position if minor-block found, nil otherwise. py-up-clause ------------ Go to the beginning of next clause upwards in buffer. Return position if clause found, nil otherwise. py-up-block-or-clause --------------------- Go to the beginning of next block-or-clause upwards in buffer. Return position if block-or-clause found, nil otherwise. py-up-def --------- Go to the beginning of next def upwards in buffer. Return position if def found, nil otherwise. py-up-class ----------- Go to the beginning of next class upwards in buffer. Return position if class found, nil otherwise. py-up-def-or-class ------------------ Go to the beginning of next def-or-class upwards in buffer. Return position if def-or-class found, nil otherwise. py-down-block ------------- Go to the beginning of next block below in buffer. Return position if block found, nil otherwise. py-down-minor-block ------------------- Go to the beginning of next minor-block below in buffer. Return position if minor-block found, nil otherwise. py-down-clause -------------- Go to the beginning of next clause below in buffer. Return position if clause found, nil otherwise. py-down-block-or-clause ----------------------- Go to the beginning of next block-or-clause below in buffer. Return position if block-or-clause found, nil otherwise. py-down-def ----------- Go to the beginning of next def below in buffer. Return position if def found, nil otherwise. py-down-class ------------- Go to the beginning of next class below in buffer. Return position if class found, nil otherwise. py-down-def-or-class -------------------- Go to the beginning of next def-or-class below in buffer. Return position if def-or-class found, nil otherwise. py-up-block-bol --------------- Go to the beginning of next block upwards in buffer. Go to beginning of line. Return position if block found, nil otherwise. py-up-minor-block-bol --------------------- Go to the beginning of next minor-block upwards in buffer. Go to beginning of line. Return position if minor-block found, nil otherwise. py-up-clause-bol ---------------- Go to the beginning of next clause upwards in buffer. Go to beginning of line. Return position if clause found, nil otherwise. py-up-block-or-clause-bol ------------------------- Go to the beginning of next block-or-clause upwards in buffer. Go to beginning of line. Return position if block-or-clause found, nil otherwise. py-up-def-bol ------------- Go to the beginning of next def upwards in buffer. Go to beginning of line. Return position if def found, nil otherwise. py-up-class-bol --------------- Go to the beginning of next class upwards in buffer. Go to beginning of line. Return position if class found, nil otherwise. py-up-def-or-class-bol ---------------------- Go to the beginning of next def-or-class upwards in buffer. Go to beginning of line. Return position if def-or-class found, nil otherwise. py-down-block-bol ----------------- Go to the beginning of next block below in buffer. Go to beginning of line Return position if block found, nil otherwise py-down-minor-block-bol ----------------------- Go to the beginning of next minor-block below in buffer. Go to beginning of line Return position if minor-block found, nil otherwise py-down-clause-bol ------------------ Go to the beginning of next clause below in buffer. Go to beginning of line Return position if clause found, nil otherwise py-down-block-or-clause-bol --------------------------- Go to the beginning of next block-or-clause below in buffer. Go to beginning of line Return position if block-or-clause found, nil otherwise py-down-def-bol --------------- Go to the beginning of next def below in buffer. Go to beginning of line Return position if def found, nil otherwise py-down-class-bol ----------------- Go to the beginning of next class below in buffer. Go to beginning of line Return position if class found, nil otherwise py-down-def-or-class-bol ------------------------ Go to the beginning of next def-or-class below in buffer. Go to beginning of line Return position if def-or-class found, nil otherwise py-forward-into-nomenclature ---------------------------- Move forward to end of a nomenclature section or word. With C-u (programmatically, optional argument ARG), do it that many times. A `nomenclature' is a fancy way of saying AWordWithMixedCaseNotUnderscores. py-backward-into-nomenclature ----------------------------- Move backward to beginning of a nomenclature section or word. With optional ARG, move that many times. If ARG is negative, move forward. A `nomenclature' is a fancy way of saying AWordWithMixedCaseNotUnderscores. match-paren ----------- Go to the matching brace, bracket or parenthesis if on its counterpart. Otherwise insert the character, the key is assigned to, here `%'. With universal arg  insert a `%'. ;;; Python named shells ----------------------- python ------ Start an Python interpreter. Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'. ipython ------- Start an IPython interpreter. Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'. python3 ------- Start an Python3 interpreter. Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'. python2 ------- Start an Python2 interpreter. Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'. python2\.7 ---------- Start an Python2.7 interpreter. Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'. jython ------ Start an Jython interpreter. Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'. python3\.2 ---------- Start an Python3.2 interpreter. Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'. python3\.3 ---------- Start an Python3.3 interpreter. Optional C-u prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'. python3\.4 ---------- Start an Python3.3 interpreter. Optional C-u prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'. bpython ------- Start an Bpython interpreter. Optional C-u prompts for options to pass to the Bpython interpreter. See `py-python-command-args'. python-dedicated ---------------- Start an unique Python interpreter in another window. Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'. ipython-dedicated ----------------- Start an unique IPython interpreter in another window. Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'. python3-dedicated ----------------- Start an unique Python3 interpreter in another window. Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'. python2-dedicated ----------------- Start an unique Python2 interpreter in another window. Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'. python2\.7-dedicated -------------------- Start an unique Python2.7 interpreter in another window. Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'. jython-dedicated ---------------- Start an unique Jython interpreter in another window. Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'. python3\.2-dedicated -------------------- Start an unique Python3.2 interpreter in another window. Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'. python3\.3-dedicated -------------------- Start an unique Python3.3 interpreter in another window. Optional C-u prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'. bpython-dedicated ----------------- Start an unique Bpython interpreter in another window. Optional C-u prompts for options to pass to the Bpython interpreter. See `py-python-command-args'. python-switch ------------- Switch to Python interpreter in another window. Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'. ipython-switch -------------- Switch to IPython interpreter in another window. Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'. python3-switch -------------- Switch to Python3 interpreter in another window. Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'. python2-switch -------------- Switch to Python2 interpreter in another window. Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'. python2\.7-switch ----------------- Switch to Python2.7 interpreter in another window. Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'. jython-switch ------------- Switch to Jython interpreter in another window. Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'. python3\.2-switch ----------------- Switch to Python3.2 interpreter in another window. Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'. python3\.3-switch ----------------- Switch to Python3.3 interpreter in another window. Optional C-u prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'. bpython-switch -------------- Switch to Bpython interpreter in another window. Optional C-u prompts for options to pass to the Bpython interpreter. See `py-python-command-args'. python-no-switch ---------------- Open an Python interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'. ipython-no-switch ----------------- Open an IPython interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'. python3-no-switch ----------------- Open an Python3 interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'. python2-no-switch ----------------- Open an Python2 interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'. python2\.7-no-switch -------------------- Open an Python2.7 interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'. jython-no-switch ---------------- Open an Jython interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'. python3\.2-no-switch -------------------- Open an Python3.2 interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'. python3\.3-no-switch -------------------- Open an Python3.3 interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'. bpython-no-switch ----------------- Open an Bpython interpreter in another window, but do not switch to it. Optional C-u prompts for options to pass to the Bpython interpreter. See `py-python-command-args'. python-switch-dedicated ----------------------- Switch to an unique Python interpreter in another window. Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'. ipython-switch-dedicated ------------------------ Switch to an unique IPython interpreter in another window. Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'. python3-switch-dedicated ------------------------ Switch to an unique Python3 interpreter in another window. Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'. python2-switch-dedicated ------------------------ Switch to an unique Python2 interpreter in another window. Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'. python2\.7-switch-dedicated --------------------------- Switch to an unique Python2.7 interpreter in another window. Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'. jython-switch-dedicated ----------------------- Switch to an unique Jython interpreter in another window. Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'. python3\.2-switch-dedicated --------------------------- Switch to an unique Python3.2 interpreter in another window. Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'. python3\.3-switch-dedicated --------------------------- Switch to an unique Python3.3 interpreter in another window. Optional C-u prompts for options to pass to the Python3.3 interpreter. See `py-python-command-args'. bpython-switch-dedicated ------------------------ Switch to an unique Bpython interpreter in another window. Optional C-u prompts for options to pass to the Bpython interpreter. See `py-python-command-args'. ;;; Code execution ------------------ py-which-execute-file-command ----------------------------- Return the command appropriate to Python version. Per default it's "(format "execfile(r'%s') # PYTHON-MODE\n" filename)" for Python 2 series. py-execute-region-no-switch --------------------------- Send the region to a Python interpreter. Ignores setting of `py-switch-buffers-on-execute-p', buffer with region stays current. py-execute-region-switch ------------------------ Send the region to a Python interpreter. Ignores setting of `py-switch-buffers-on-execute-p', output-buffer will being switched to. py-execute-region ----------------- Send the region to a Python interpreter. When called with C-u, execution through `default-value' of `py-shell-name' is forced. When called with C-u followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment. When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument. Optional DEDICATED (boolean) py-execute-region-default ------------------------- Send the region to the systems default Python interpreter. py-execute-region-dedicated --------------------------- Get the region processed by an unique Python interpreter. When called with C-u, execution through `default-value' of `py-shell-name' is forced. When called with C-u followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment. When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument. py-execute-region-default-dedicated ----------------------------------- Send the region to an unique shell of systems default Python. py-execute-python-mode-v5 ------------------------- py-execute-string ----------------- Send the argument STRING to a Python interpreter. See also `py-execute-region'. py-execute-string-dedicated --------------------------- Send the argument STRING to an unique Python interpreter. See also `py-execute-region'. py-fetch-py-master-file ----------------------- Lookup if a `py-master-file' is specified. See also doku of variable `py-master-file' py-execute-import-or-reload --------------------------- Import the current buffer's file in a Python interpreter. If the file has already been imported, then do reload instead to get the latest version. If the file's name does not end in ".py", then do execfile instead. If the current buffer is not visiting a file, do `py-execute-buffer' instead. If the file local variable `py-master-file' is non-nil, import or reload the named file instead of the buffer's file. The file may be saved based on the value of `py-execute-import-or-reload-save-p'. See also `M-x py-execute-region'. This may be preferable to `M-x py-execute-buffer' because: - Definitions stay in their module rather than appearing at top level, where they would clutter the global namespace and not affect uses of qualified names (MODULE.NAME). - The Python debugger gets line number information about the functions. py-execute-buffer-dedicated --------------------------- Send the contents of the buffer to a unique Python interpreter. py-execute-buffer-switch ------------------------ Send the contents of the buffer to a Python interpreter and switches to output. py-execute-buffer-dedicated-switch ---------------------------------- Send the contents of the buffer to an unique Python interpreter. Ignores setting of `py-switch-buffers-on-execute-p'. py-execute-buffer ----------------- Send the contents of the buffer to a Python interpreter. py-execute-buffer-no-switch --------------------------- Send the contents of the buffer to a Python interpreter but don't switch to output. py-execute-defun ---------------- Send the current defun (class or method) to the inferior Python process. py-process-file --------------- Process "python filename". Optional OUTPUT-BUFFER and ERROR-BUFFER might be given. py-execute-line --------------- Send current line from beginning of indent to Python interpreter. py-output-filter ---------------- Clear output buffer from py-shell-input prompt etc. py-execute-file --------------- When called interactively, user is prompted for filename. ;;; Pdb ------- py-pdbtrack-toggle-stack-tracking --------------------------------- Set variable `py-pdbtrack-do-tracking-p'. turn-on-pdbtrack ---------------- turn-off-pdbtrack ----------------- ;;; Documentation ----------------- py-documentation ---------------- Launch PyDOC on the Word at Point py-fetch-docu ------------- Lookup in current buffer for the doku for the symbol at point. Useful for newly defined symbol, not known to python yet. py-find-imports --------------- Find top-level imports. Returns imports py-eldoc-function ----------------- Print help on symbol at point. py-describe-symbol ------------------ Print help on symbol at point. If symbol is defined in current buffer, jump to it's definition Optional C-u used for debugging, will prevent deletion of temp file. py-describe-mode ---------------- Dump long form of `python-mode' docs. py-load-file ------------ Load a Python file FILE-NAME into the inferior Python process. If the file has extension `.py' import or reload it as a module. Treating it as a module keeps the global namespace clean, provides function location information for debugging, and supports users of module-qualified names. py-find-definition ------------------ Find source of definition of SYMBOL. Interactively, prompt for SYMBOL. ;;; Miscellanus --------------- py-insert-super --------------- Insert a function "super()" from current environment. As example given in Python v3.1 documentation » The Python Standard Library » class C(B): def method(self, arg): super().method(arg) # This does the same thing as: # super(C, self).method(arg) Returns the string inserted. py-nesting-level ---------------- Accepts the output of `parse-partial-sexp'. py-beginning-of-commented-section --------------------------------- Leave upwards comments and/or empty lines. py-continuation-offset ---------------------- With numeric ARG different from 1 py-continuation-offset is set to that value; returns py-continuation-offset. py-compute-indentation ---------------------- Compute Python indentation. When HONOR-BLOCK-CLOSE-P is non-nil, statements such as `return', `raise', `break', `continue', and `pass' force one level of dedenting. Optional arguments are flags resp. values set and used by `py-compute-indentation' internally py-indentation-of-statement --------------------------- Returns the indenation of the statement at point. py-guess-default-python ----------------------- Defaults to "python", if guessing didn't succeed. py-set-ipython-completion-command-string ---------------------------------------- Set and return `ipython-completion-command-string'. py-shell-dedicated ------------------ Start an interactive Python interpreter in another window. With optional C-u user is prompted by `py-choose-shell' for command and options to pass to the Python interpreter. py-shell -------- Start an interactive Python interpreter in another window. Interactively, C-u 4 prompts for a buffer. C-u 2 prompts for `py-python-command-args'. If `default-directory' is a remote file name, it is also prompted to change if called with a prefix arg. Returns py-shell's buffer-name. Optional string PYSHELLNAME overrides default `py-shell-name'. BUFFER allows specifying a name, the Python process is connected to When DONE is `t', `py-shell-manage-windows' is omitted py-indent-forward-line ---------------------- Indent and move one line forward to next indentation. Returns column of line reached. If `py-kill-empty-line' is non-nil, delete an empty line. When closing a form, use py-close-block et al, which will move and indent likewise. With M-x universal argument just indent. py-dedent-forward-line ---------------------- Dedent line and move one line forward. py-dedent --------- Dedent line according to `py-indent-offset'. With arg, do it that many times. If point is between indent levels, dedent to next level. Return indentation reached, if dedent done, nil otherwise. Affected by `py-dedent-keep-relative-column'. py-close-def ------------ Set indent level to that of beginning of function definition. If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline. py-close-class -------------- Set indent level to that of beginning of class definition. If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline. py-close-clause --------------- Set indent level to that of beginning of clause definition. If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline. py-close-block -------------- Set indent level to that of beginning of block definition. If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline. py-class-at-point ----------------- Return class definition as string. With interactive call, send it to the message buffer too. py-line-at-point ---------------- Return line as string. With interactive call, send it to the message buffer too. py-looking-at-keywords-p ------------------------ If looking at a python keyword. Returns t or nil. py-match-paren-mode ------------------- py-match-paren-mode nil oder t py-match-paren -------------- Goto to the opening or closing of block before or after point. With arg, do it that many times. Closes unclosed block if jumping from beginning. py-printform-insert ------------------- Inserts a print statement out of current `(car kill-ring)' by default, inserts ARG instead if delivered. eva --- Put "eval(...)" forms around strings at point. pst-here -------- Kill previous "pdb.set_trace()" and insert it at point. py-line-to-printform-python2 ---------------------------- Transforms the item on current in a print statement. ;;; Imenu --------- py-switch-imenu-index-function ------------------------------ Switch between series 5. index machine `py-imenu-create-index' and `py-imenu-create-index-new', which also lists modules variables py-toggle-local-default-use --------------------------- py-choose-shell-by-path ----------------------- Select Python executable according to version desplayed in path, current buffer-file is selected from. Returns versioned string, nil if nothing appropriate found py-choose-shell-by-shebang -------------------------- Choose shell by looking at #! on the first line. Returns the specified Python resp. Jython shell command name. py-which-python --------------- Returns version of Python of current environment, a number. py-python-current-environment ----------------------------- Returns path of current Python installation. py-switch-shell --------------- Toggles between the interpreter customized in `py-shell-toggle-1' resp. `py-shell-toggle-2'. Was hard-coded CPython and Jython in earlier versions, now starts with Python2 and Python3 by default. ARG might be a python-version string to set to. C-u `py-toggle-shell' prompts to specify a reachable Python command. C-u followed by numerical arg 2 or 3, `py-toggle-shell' opens a respective Python shell. C-u followed by numerical arg 5 opens a Jython shell. Should you need more shells to select, extend this command by adding inside the first cond: ((eq NUMBER (prefix-numeric-value arg)) "MY-PATH-TO-SHELL") py-choose-shell --------------- Return an appropriate executable as a string. Returns nil, if no executable found. This does the following: - look for an interpreter with `py-choose-shell-by-shebang' - examine imports using `py-choose-shell-by-import' - look if Path/To/File indicates a Python version - if not successful, return default value of `py-shell-name' When interactivly called, messages the shell name, Emacs would in the given circtumstances. With C-u 4 is called `py-switch-shell' see docu there. py-install-directory-check -------------------------- Do some sanity check for `py-install-directory'. Returns `t' if successful. py-guess-py-install-directory ----------------------------- Takes value of user directory aka $HOME if `(locate-library "python-mode")' is not succesful. Used only, if `py-install-directory' is empty. py-set-load-path ---------------- Include needed subdirs of python-mode directory. ;;; Abbrevs ----------- py-edit-abbrevs --------------- Jumps to `python-mode-abbrev-table' in a buffer containing lists of abbrev definitions. You can edit them and type C-c C-c to redefine abbrevs according to your editing. Buffer contains a header line for each abbrev table, which is the abbrev table name in parentheses. This is followed by one line per abbrev in that table: NAME USECOUNT EXPANSION HOOK where NAME and EXPANSION are strings with quotes, USECOUNT is an integer, and HOOK is any valid function or may be omitted (it is usually omitted). py-add-abbrev ------------- Defines python-mode specific abbrev for last expressions before point. Argument is how many `py-partial-expression's form the expansion; or zero means the region is the expansion. Reads the abbreviation in the minibuffer; with numeric arg it displays a proposal for an abbrev. Proposal is composed from the initial character(s) of the expansion. Don't use this function in a Lisp program; use `define-abbrev' instead. py-python-version ----------------- Returns versions number of a Python EXECUTABLE, string. If no EXECUTABLE given, `py-shell-name' is used. Interactively output of `--version' is displayed. py-version ---------- Echo the current version of `python-mode' in the minibuffer. py-install-search-local ----------------------- py-install-local-shells ----------------------- Builds Python-shell commands from executable found in LOCAL. If LOCAL is empty, shell-command `find' searches beneath current directory. Eval resulting buffer to install it, see customizable `py-extensions'. ;;; Completion -------------- py-python-script-complete ------------------------- Complete word before point, if any. When `py-no-completion-calls-dabbrev-expand-p' is non-nil, try dabbrev-expand. Otherwise, when `py-indent-no-completion-p' is non-nil, call `tab-to-tab-stop'. py-python2-shell-complete ------------------------- py-python3-shell-complete ------------------------- Complete word before point, if any. Otherwise insert TAB. py-shell-complete ----------------- Complete word before point, if any. Otherwise insert TAB. ipython-complete ---------------- Complete the python symbol before point. If no completion available, insert a TAB. Returns the completed symbol, a string, if successful, nil otherwise. ;;; Checker ----------- pylint-flymake-mode ------------------- Toggle `pylint' `flymake-mode'. pyflakes-flymake-mode --------------------- Toggle `pyflakes' `flymake-mode'. pychecker-flymake-mode ---------------------- Toggle `pychecker' `flymake-mode'. pep8-flymake-mode ----------------- Toggle `pep8' `flymake-mode'. pyflakespep8-flymake-mode ------------------------- Toggle `pyflakespep8' `flymake-mode'. Joint call to pyflakes and pep8 as proposed by Keegan Carruthers-Smith py-pep8-run ----------- Run pep8, check formatting (default on the file currently visited). py-pep8-help ------------ Display pep8 command line help messages. py-pylint-run ------------- Run pylint (default on the file currently visited). For help see M-x pylint-help resp. M-x pylint-long-help. Home-page: http://www.logilab.org/project/pylint py-pylint-help -------------- Display Pylint command line help messages. Let's have this until more Emacs-like help is prepared py-pylint-doku -------------- Display Pylint Documentation. Calls `pylint --full-documentation' py-pyflakes-run --------------- Run pyflakes (default on the file currently visited). For help see M-x pyflakes-help resp. M-x pyflakes-long-help. Home-page: http://www.logilab.org/project/pyflakes py-pyflakes-help ---------------- Display Pyflakes command line help messages. Let's have this until more Emacs-like help is prepared py-pyflakespep8-run ------------------- Run pyflakespep8, check formatting (default on the file currently visited). py-pyflakespep8-help -------------------- Display pyflakespep8 command line help messages. py-flakes8-run -------------- Run flakes8, check formatting (default on the file currently visited). py-flakes8-help --------------- Display flakes8 command line help messages. py-pychecker-run ---------------- Run pychecker (default on the file currently visited). ;;; Skeletons ------------- py-load-skeletons ----------------- These skeletons are loaded by python-mode, if `py-load-skeletons-p' is non-nil. ;;; Virtualenv -------------- (defun v -------- virtualenv-current ------------------ Barfs the current activated virtualenv virtualenv-activate ------------------- Activate the virtualenv located in DIR virtualenv-deactivate --------------------- Deactivate the current virtual enviroment virtualenv-workon ----------------- Issue a virtualenvwrapper-like virtualenv-workon command ;;; Execute forms at point -------------------------- py-execute-statement -------------------- Send statement at point to a Python interpreter. py-execute-top-level -------------------- Send top-level at point to a Python interpreter. py-execute-block ---------------- Send block at point to a Python interpreter. py-execute-minor-block ---------------------- Send minor-block at point to a Python interpreter. A minor block is started by a `for', `if', `try' or `with'. py-execute-block-or-clause -------------------------- Send block-or-clause at point to a Python interpreter. py-execute-def -------------- Send def at point to a Python interpreter. py-execute-class ---------------- Send class at point to a Python interpreter. py-execute-def-or-class ----------------------- Send def-or-class at point to a Python interpreter. py-execute-expression --------------------- Send expression at point to a Python interpreter. py-execute-partial-expression ----------------------------- Send partial-expression at point to a Python interpreter. ;;; Execute line ---------------- ;;; Execute file commands ------------------------- py-execute-file-python ---------------------- Send file to a Python interpreter. py-execute-file-python-switch ----------------------------- Send file to a Python interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" py-execute-file-python-no-switch -------------------------------- Send file to a Python interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" py-execute-file-python-dedicated -------------------------------- Send file to a Python interpreter. Uses a dedicated shell. py-execute-file-python-dedicated-switch --------------------------------------- Send file to a Python interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" py-execute-file-ipython ----------------------- Send file to a Ipython interpreter. py-execute-file-ipython-switch ------------------------------ Send file to a Ipython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" py-execute-file-ipython-no-switch --------------------------------- Send file to a Ipython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" py-execute-file-ipython-dedicated --------------------------------- Send file to a Ipython interpreter. Uses a dedicated shell. py-execute-file-ipython-dedicated-switch ---------------------------------------- Send file to a Ipython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" py-execute-file-python3 ----------------------- Send file to a Python3 interpreter. py-execute-file-python3-switch ------------------------------ Send file to a Python3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" py-execute-file-python3-no-switch --------------------------------- Send file to a Python3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" py-execute-file-python3-dedicated --------------------------------- Send file to a Python3 interpreter. Uses a dedicated shell. py-execute-file-python3-dedicated-switch ---------------------------------------- Send file to a Python3 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" py-execute-file-python2 ----------------------- Send file to a Python2 interpreter. py-execute-file-python2-switch ------------------------------ Send file to a Python2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" py-execute-file-python2-no-switch --------------------------------- Send file to a Python2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" py-execute-file-python2-dedicated --------------------------------- Send file to a Python2 interpreter. Uses a dedicated shell. py-execute-file-python2-dedicated-switch ---------------------------------------- Send file to a Python2 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" py-execute-file-python2\.7 -------------------------- Send file to a Python2.7 interpreter. py-execute-file-python2\.7-switch --------------------------------- Send file to a Python2.7 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" py-execute-file-python2\.7-no-switch ------------------------------------ Send file to a Python2.7 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" py-execute-file-python2\.7-dedicated ------------------------------------ Send file to a Python2.7 interpreter. Uses a dedicated shell. py-execute-file-python2\.7-dedicated-switch ------------------------------------------- Send file to a Python2.7 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" py-execute-file-jython ---------------------- Send file to a Jython interpreter. py-execute-file-jython-switch ----------------------------- Send file to a Jython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" py-execute-file-jython-no-switch -------------------------------- Send file to a Jython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" py-execute-file-jython-dedicated -------------------------------- Send file to a Jython interpreter. Uses a dedicated shell. py-execute-file-jython-dedicated-switch --------------------------------------- Send file to a Jython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" py-execute-file-python3\.2 -------------------------- Send file to a Python3.2 interpreter. py-execute-file-python3\.2-switch --------------------------------- Send file to a Python3.2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" py-execute-file-python3\.2-no-switch ------------------------------------ Send file to a Python3.2 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" py-execute-file-python3\.2-dedicated ------------------------------------ Send file to a Python3.2 interpreter. Uses a dedicated shell. py-execute-file-python3\.2-dedicated-switch ------------------------------------------- Send file to a Python3.2 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" py-execute-file-python3\.3 -------------------------- Send file to a Python3.3 interpreter. py-execute-file-python3\.3-switch --------------------------------- Send file to a Python3.3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" py-execute-file-python3\.3-no-switch ------------------------------------ Send file to a Python3.3 interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" py-execute-file-python3\.3-dedicated ------------------------------------ Send file to a Python3.3 interpreter. Uses a dedicated shell. py-execute-file-python3\.3-dedicated-switch ------------------------------------------- Send file to a Python3.3 interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" py-execute-file-bpython ----------------------- Send file to a Bpython interpreter. py-execute-file-bpython-switch ------------------------------ Send file to a Bpython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" py-execute-file-bpython-no-switch --------------------------------- Send file to a Bpython interpreter. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "nil" py-execute-file-bpython-dedicated --------------------------------- Send file to a Bpython interpreter. Uses a dedicated shell. py-execute-file-bpython-dedicated-switch ---------------------------------------- Send file to a Bpython interpreter. Uses a dedicated shell. Ignores default of `py-switch-buffers-on-execute-p', uses it with value "non-nil" ;;; Extended executes --------------------- py-execute-statement-python --------------------------- Send statement at point to Python interpreter. py-execute-statement-python-switch ---------------------------------- Send statement at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-statement-python-no-switch ------------------------------------- Send statement at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-statement-python-dedicated ------------------------------------- Send statement at point to Python unique interpreter. py-execute-statement-python-dedicated-switch -------------------------------------------- Send statement at point to Python unique interpreter and switch to result. py-execute-statement-ipython ---------------------------- Send statement at point to IPython interpreter. py-execute-statement-ipython-switch ----------------------------------- Send statement at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-statement-ipython-no-switch -------------------------------------- Send statement at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-statement-ipython-dedicated -------------------------------------- Send statement at point to IPython unique interpreter. py-execute-statement-ipython-dedicated-switch --------------------------------------------- Send statement at point to IPython unique interpreter and switch to result. py-execute-statement-python3 ---------------------------- Send statement at point to Python3 interpreter. py-execute-statement-python3-switch ----------------------------------- Send statement at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-statement-python3-no-switch -------------------------------------- Send statement at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-statement-python3-dedicated -------------------------------------- Send statement at point to Python3 unique interpreter. py-execute-statement-python3-dedicated-switch --------------------------------------------- Send statement at point to Python3 unique interpreter and switch to result. py-execute-statement-python2 ---------------------------- Send statement at point to Python2 interpreter. py-execute-statement-python2-switch ----------------------------------- Send statement at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-statement-python2-no-switch -------------------------------------- Send statement at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-statement-python2-dedicated -------------------------------------- Send statement at point to Python2 unique interpreter. py-execute-statement-python2-dedicated-switch --------------------------------------------- Send statement at point to Python2 unique interpreter and switch to result. py-execute-statement-python2\.7 ------------------------------- Send statement at point to Python2.7 interpreter. py-execute-statement-python2\.7-switch -------------------------------------- Send statement at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-statement-python2\.7-no-switch ----------------------------------------- Send statement at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-statement-python2\.7-dedicated ----------------------------------------- Send statement at point to Python2.7 unique interpreter. py-execute-statement-python2\.7-dedicated-switch ------------------------------------------------ Send statement at point to Python2.7 unique interpreter and switch to result. py-execute-statement-jython --------------------------- Send statement at point to Jython interpreter. py-execute-statement-jython-switch ---------------------------------- Send statement at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-statement-jython-no-switch ------------------------------------- Send statement at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-statement-jython-dedicated ------------------------------------- Send statement at point to Jython unique interpreter. py-execute-statement-jython-dedicated-switch -------------------------------------------- Send statement at point to Jython unique interpreter and switch to result. py-execute-statement-python3\.2 ------------------------------- Send statement at point to Python3.2 interpreter. py-execute-statement-python3\.2-switch -------------------------------------- Send statement at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-statement-python3\.2-no-switch ----------------------------------------- Send statement at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-statement-python3\.2-dedicated ----------------------------------------- Send statement at point to Python3.2 unique interpreter. py-execute-statement-python3\.2-dedicated-switch ------------------------------------------------ Send statement at point to Python3.2 unique interpreter and switch to result. py-execute-statement-python3\.3 ------------------------------- Send statement at point to Python3.3 interpreter. py-execute-statement-python3\.3-switch -------------------------------------- Send statement at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-statement-python3\.3-no-switch ----------------------------------------- Send statement at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-statement-python3\.3-dedicated ----------------------------------------- Send statement at point to Python3.3 unique interpreter. py-execute-statement-python3\.3-dedicated-switch ------------------------------------------------ Send statement at point to Python3.3 unique interpreter and switch to result. py-execute-statement-bpython ---------------------------- Send statement at point to Bpython interpreter. py-execute-statement-bpython-switch ----------------------------------- Send statement at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-statement-bpython-no-switch -------------------------------------- Send statement at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-statement-bpython-dedicated -------------------------------------- Send statement at point to Bpython unique interpreter. py-execute-statement-bpython-dedicated-switch --------------------------------------------- Send statement at point to Bpython unique interpreter and switch to result. py-execute-block-python ----------------------- Send block at point to Python interpreter. py-execute-block-python-switch ------------------------------ Send block at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-python-no-switch --------------------------------- Send block at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-python-dedicated --------------------------------- Send block at point to Python unique interpreter. py-execute-block-python-dedicated-switch ---------------------------------------- Send block at point to Python unique interpreter and switch to result. py-execute-block-ipython ------------------------ Send block at point to IPython interpreter. py-execute-block-ipython-switch ------------------------------- Send block at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-ipython-no-switch ---------------------------------- Send block at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-ipython-dedicated ---------------------------------- Send block at point to IPython unique interpreter. py-execute-block-ipython-dedicated-switch ----------------------------------------- Send block at point to IPython unique interpreter and switch to result. py-execute-block-python3 ------------------------ Send block at point to Python3 interpreter. py-execute-block-python3-switch ------------------------------- Send block at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-python3-no-switch ---------------------------------- Send block at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-python3-dedicated ---------------------------------- Send block at point to Python3 unique interpreter. py-execute-block-python3-dedicated-switch ----------------------------------------- Send block at point to Python3 unique interpreter and switch to result. py-execute-block-python2 ------------------------ Send block at point to Python2 interpreter. py-execute-block-python2-switch ------------------------------- Send block at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-python2-no-switch ---------------------------------- Send block at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-python2-dedicated ---------------------------------- Send block at point to Python2 unique interpreter. py-execute-block-python2-dedicated-switch ----------------------------------------- Send block at point to Python2 unique interpreter and switch to result. py-execute-block-python2\.7 --------------------------- Send block at point to Python2.7 interpreter. py-execute-block-python2\.7-switch ---------------------------------- Send block at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-python2\.7-no-switch ------------------------------------- Send block at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-python2\.7-dedicated ------------------------------------- Send block at point to Python2.7 unique interpreter. py-execute-block-python2\.7-dedicated-switch -------------------------------------------- Send block at point to Python2.7 unique interpreter and switch to result. py-execute-block-jython ----------------------- Send block at point to Jython interpreter. py-execute-block-jython-switch ------------------------------ Send block at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-jython-no-switch --------------------------------- Send block at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-jython-dedicated --------------------------------- Send block at point to Jython unique interpreter. py-execute-block-jython-dedicated-switch ---------------------------------------- Send block at point to Jython unique interpreter and switch to result. py-execute-block-python3\.2 --------------------------- Send block at point to Python3.2 interpreter. py-execute-block-python3\.2-switch ---------------------------------- Send block at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-python3\.2-no-switch ------------------------------------- Send block at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-python3\.2-dedicated ------------------------------------- Send block at point to Python3.2 unique interpreter. py-execute-block-python3\.2-dedicated-switch -------------------------------------------- Send block at point to Python3.2 unique interpreter and switch to result. py-execute-block-python3\.3 --------------------------- Send block at point to Python3.3 interpreter. py-execute-block-python3\.3-switch ---------------------------------- Send block at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-python3\.3-no-switch ------------------------------------- Send block at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-python3\.3-dedicated ------------------------------------- Send block at point to Python3.3 unique interpreter. py-execute-block-python3\.3-dedicated-switch -------------------------------------------- Send block at point to Python3.3 unique interpreter and switch to result. py-execute-block-bpython ------------------------ Send block at point to Bpython interpreter. py-execute-block-bpython-switch ------------------------------- Send block at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-bpython-no-switch ---------------------------------- Send block at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-bpython-dedicated ---------------------------------- Send block at point to Bpython unique interpreter. py-execute-block-bpython-dedicated-switch ----------------------------------------- Send block at point to Bpython unique interpreter and switch to result. py-execute-clause-python ------------------------ Send clause at point to Python interpreter. py-execute-clause-python-switch ------------------------------- Send clause at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-clause-python-no-switch ---------------------------------- Send clause at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-clause-python-dedicated ---------------------------------- Send clause at point to Python unique interpreter. py-execute-clause-python-dedicated-switch ----------------------------------------- Send clause at point to Python unique interpreter and switch to result. py-execute-clause-ipython ------------------------- Send clause at point to IPython interpreter. py-execute-clause-ipython-switch -------------------------------- Send clause at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-clause-ipython-no-switch ----------------------------------- Send clause at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-clause-ipython-dedicated ----------------------------------- Send clause at point to IPython unique interpreter. py-execute-clause-ipython-dedicated-switch ------------------------------------------ Send clause at point to IPython unique interpreter and switch to result. py-execute-clause-python3 ------------------------- Send clause at point to Python3 interpreter. py-execute-clause-python3-switch -------------------------------- Send clause at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-clause-python3-no-switch ----------------------------------- Send clause at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-clause-python3-dedicated ----------------------------------- Send clause at point to Python3 unique interpreter. py-execute-clause-python3-dedicated-switch ------------------------------------------ Send clause at point to Python3 unique interpreter and switch to result. py-execute-clause-python2 ------------------------- Send clause at point to Python2 interpreter. py-execute-clause-python2-switch -------------------------------- Send clause at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-clause-python2-no-switch ----------------------------------- Send clause at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-clause-python2-dedicated ----------------------------------- Send clause at point to Python2 unique interpreter. py-execute-clause-python2-dedicated-switch ------------------------------------------ Send clause at point to Python2 unique interpreter and switch to result. py-execute-clause-python2\.7 ---------------------------- Send clause at point to Python2.7 interpreter. py-execute-clause-python2\.7-switch ----------------------------------- Send clause at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-clause-python2\.7-no-switch -------------------------------------- Send clause at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-clause-python2\.7-dedicated -------------------------------------- Send clause at point to Python2.7 unique interpreter. py-execute-clause-python2\.7-dedicated-switch --------------------------------------------- Send clause at point to Python2.7 unique interpreter and switch to result. py-execute-clause-jython ------------------------ Send clause at point to Jython interpreter. py-execute-clause-jython-switch ------------------------------- Send clause at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-clause-jython-no-switch ---------------------------------- Send clause at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-clause-jython-dedicated ---------------------------------- Send clause at point to Jython unique interpreter. py-execute-clause-jython-dedicated-switch ----------------------------------------- Send clause at point to Jython unique interpreter and switch to result. py-execute-clause-python3\.2 ---------------------------- Send clause at point to Python3.2 interpreter. py-execute-clause-python3\.2-switch ----------------------------------- Send clause at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-clause-python3\.2-no-switch -------------------------------------- Send clause at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-clause-python3\.2-dedicated -------------------------------------- Send clause at point to Python3.2 unique interpreter. py-execute-clause-python3\.2-dedicated-switch --------------------------------------------- Send clause at point to Python3.2 unique interpreter and switch to result. py-execute-clause-python3\.3 ---------------------------- Send clause at point to Python3.3 interpreter. py-execute-clause-python3\.3-switch ----------------------------------- Send clause at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-clause-python3\.3-no-switch -------------------------------------- Send clause at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-clause-python3\.3-dedicated -------------------------------------- Send clause at point to Python3.3 unique interpreter. py-execute-clause-python3\.3-dedicated-switch --------------------------------------------- Send clause at point to Python3.3 unique interpreter and switch to result. py-execute-clause-bpython ------------------------- Send clause at point to Bpython interpreter. py-execute-clause-bpython-switch -------------------------------- Send clause at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-clause-bpython-no-switch ----------------------------------- Send clause at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-clause-bpython-dedicated ----------------------------------- Send clause at point to Bpython unique interpreter. py-execute-clause-bpython-dedicated-switch ------------------------------------------ Send clause at point to Bpython unique interpreter and switch to result. py-execute-block-or-clause-python --------------------------------- Send block-or-clause at point to Python interpreter. py-execute-block-or-clause-python-switch ---------------------------------------- Send block-or-clause at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-or-clause-python-no-switch ------------------------------------------- Send block-or-clause at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-or-clause-python-dedicated ------------------------------------------- Send block-or-clause at point to Python unique interpreter. py-execute-block-or-clause-python-dedicated-switch -------------------------------------------------- Send block-or-clause at point to Python unique interpreter and switch to result. py-execute-block-or-clause-ipython ---------------------------------- Send block-or-clause at point to IPython interpreter. py-execute-block-or-clause-ipython-switch ----------------------------------------- Send block-or-clause at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-or-clause-ipython-no-switch -------------------------------------------- Send block-or-clause at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-or-clause-ipython-dedicated -------------------------------------------- Send block-or-clause at point to IPython unique interpreter. py-execute-block-or-clause-ipython-dedicated-switch --------------------------------------------------- Send block-or-clause at point to IPython unique interpreter and switch to result. py-execute-block-or-clause-python3 ---------------------------------- Send block-or-clause at point to Python3 interpreter. py-execute-block-or-clause-python3-switch ----------------------------------------- Send block-or-clause at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-or-clause-python3-no-switch -------------------------------------------- Send block-or-clause at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-or-clause-python3-dedicated -------------------------------------------- Send block-or-clause at point to Python3 unique interpreter. py-execute-block-or-clause-python3-dedicated-switch --------------------------------------------------- Send block-or-clause at point to Python3 unique interpreter and switch to result. py-execute-block-or-clause-python2 ---------------------------------- Send block-or-clause at point to Python2 interpreter. py-execute-block-or-clause-python2-switch ----------------------------------------- Send block-or-clause at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-or-clause-python2-no-switch -------------------------------------------- Send block-or-clause at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-or-clause-python2-dedicated -------------------------------------------- Send block-or-clause at point to Python2 unique interpreter. py-execute-block-or-clause-python2-dedicated-switch --------------------------------------------------- Send block-or-clause at point to Python2 unique interpreter and switch to result. py-execute-block-or-clause-python2\.7 ------------------------------------- Send block-or-clause at point to Python2.7 interpreter. py-execute-block-or-clause-python2\.7-switch -------------------------------------------- Send block-or-clause at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-or-clause-python2\.7-no-switch ----------------------------------------------- Send block-or-clause at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-or-clause-python2\.7-dedicated ----------------------------------------------- Send block-or-clause at point to Python2.7 unique interpreter. py-execute-block-or-clause-python2\.7-dedicated-switch ------------------------------------------------------ Send block-or-clause at point to Python2.7 unique interpreter and switch to result. py-execute-block-or-clause-jython --------------------------------- Send block-or-clause at point to Jython interpreter. py-execute-block-or-clause-jython-switch ---------------------------------------- Send block-or-clause at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-or-clause-jython-no-switch ------------------------------------------- Send block-or-clause at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-or-clause-jython-dedicated ------------------------------------------- Send block-or-clause at point to Jython unique interpreter. py-execute-block-or-clause-jython-dedicated-switch -------------------------------------------------- Send block-or-clause at point to Jython unique interpreter and switch to result. py-execute-block-or-clause-python3\.2 ------------------------------------- Send block-or-clause at point to Python3.2 interpreter. py-execute-block-or-clause-python3\.2-switch -------------------------------------------- Send block-or-clause at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-or-clause-python3\.2-no-switch ----------------------------------------------- Send block-or-clause at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-or-clause-python3\.2-dedicated ----------------------------------------------- Send block-or-clause at point to Python3.2 unique interpreter. py-execute-block-or-clause-python3\.2-dedicated-switch ------------------------------------------------------ Send block-or-clause at point to Python3.2 unique interpreter and switch to result. py-execute-block-or-clause-python3\.3 ------------------------------------- Send block-or-clause at point to Python3.3 interpreter. py-execute-block-or-clause-python3\.3-switch -------------------------------------------- Send block-or-clause at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-or-clause-python3\.3-no-switch ----------------------------------------------- Send block-or-clause at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-or-clause-python3\.3-dedicated ----------------------------------------------- Send block-or-clause at point to Python3.3 unique interpreter. py-execute-block-or-clause-python3\.3-dedicated-switch ------------------------------------------------------ Send block-or-clause at point to Python3.3 unique interpreter and switch to result. py-execute-block-or-clause-bpython ---------------------------------- Send block-or-clause at point to Bpython interpreter. py-execute-block-or-clause-bpython-switch ----------------------------------------- Send block-or-clause at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-block-or-clause-bpython-no-switch -------------------------------------------- Send block-or-clause at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-block-or-clause-bpython-dedicated -------------------------------------------- Send block-or-clause at point to Bpython unique interpreter. py-execute-block-or-clause-bpython-dedicated-switch --------------------------------------------------- Send block-or-clause at point to Bpython unique interpreter and switch to result. py-execute-def-python --------------------- Send def at point to Python interpreter. py-execute-def-python-switch ---------------------------- Send def at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-def-python-no-switch ------------------------------- Send def at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-def-python-dedicated ------------------------------- Send def at point to Python unique interpreter. py-execute-def-python-dedicated-switch -------------------------------------- Send def at point to Python unique interpreter and switch to result. py-execute-def-ipython ---------------------- Send def at point to IPython interpreter. py-execute-def-ipython-switch ----------------------------- Send def at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-def-ipython-no-switch -------------------------------- Send def at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-def-ipython-dedicated -------------------------------- Send def at point to IPython unique interpreter. py-execute-def-ipython-dedicated-switch --------------------------------------- Send def at point to IPython unique interpreter and switch to result. py-execute-def-python3 ---------------------- Send def at point to Python3 interpreter. py-execute-def-python3-switch ----------------------------- Send def at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-def-python3-no-switch -------------------------------- Send def at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-def-python3-dedicated -------------------------------- Send def at point to Python3 unique interpreter. py-execute-def-python3-dedicated-switch --------------------------------------- Send def at point to Python3 unique interpreter and switch to result. py-execute-def-python2 ---------------------- Send def at point to Python2 interpreter. py-execute-def-python2-switch ----------------------------- Send def at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-def-python2-no-switch -------------------------------- Send def at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-def-python2-dedicated -------------------------------- Send def at point to Python2 unique interpreter. py-execute-def-python2-dedicated-switch --------------------------------------- Send def at point to Python2 unique interpreter and switch to result. py-execute-def-python2\.7 ------------------------- Send def at point to Python2.7 interpreter. py-execute-def-python2\.7-switch -------------------------------- Send def at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-def-python2\.7-no-switch ----------------------------------- Send def at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-def-python2\.7-dedicated ----------------------------------- Send def at point to Python2.7 unique interpreter. py-execute-def-python2\.7-dedicated-switch ------------------------------------------ Send def at point to Python2.7 unique interpreter and switch to result. py-execute-def-jython --------------------- Send def at point to Jython interpreter. py-execute-def-jython-switch ---------------------------- Send def at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-def-jython-no-switch ------------------------------- Send def at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-def-jython-dedicated ------------------------------- Send def at point to Jython unique interpreter. py-execute-def-jython-dedicated-switch -------------------------------------- Send def at point to Jython unique interpreter and switch to result. py-execute-def-python3\.2 ------------------------- Send def at point to Python3.2 interpreter. py-execute-def-python3\.2-switch -------------------------------- Send def at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-def-python3\.2-no-switch ----------------------------------- Send def at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-def-python3\.2-dedicated ----------------------------------- Send def at point to Python3.2 unique interpreter. py-execute-def-python3\.2-dedicated-switch ------------------------------------------ Send def at point to Python3.2 unique interpreter and switch to result. py-execute-def-python3\.3 ------------------------- Send def at point to Python3.3 interpreter. py-execute-def-python3\.3-switch -------------------------------- Send def at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-def-python3\.3-no-switch ----------------------------------- Send def at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-def-python3\.3-dedicated ----------------------------------- Send def at point to Python3.3 unique interpreter. py-execute-def-python3\.3-dedicated-switch ------------------------------------------ Send def at point to Python3.3 unique interpreter and switch to result. py-execute-def-bpython ---------------------- Send def at point to Bpython interpreter. py-execute-def-bpython-switch ----------------------------- Send def at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-def-bpython-no-switch -------------------------------- Send def at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-def-bpython-dedicated -------------------------------- Send def at point to Bpython unique interpreter. py-execute-def-bpython-dedicated-switch --------------------------------------- Send def at point to Bpython unique interpreter and switch to result. py-execute-class-python ----------------------- Send class at point to Python interpreter. py-execute-class-python-switch ------------------------------ Send class at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-class-python-no-switch --------------------------------- Send class at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-class-python-dedicated --------------------------------- Send class at point to Python unique interpreter. py-execute-class-python-dedicated-switch ---------------------------------------- Send class at point to Python unique interpreter and switch to result. py-execute-class-ipython ------------------------ Send class at point to IPython interpreter. py-execute-class-ipython-switch ------------------------------- Send class at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-class-ipython-no-switch ---------------------------------- Send class at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-class-ipython-dedicated ---------------------------------- Send class at point to IPython unique interpreter. py-execute-class-ipython-dedicated-switch ----------------------------------------- Send class at point to IPython unique interpreter and switch to result. py-execute-class-python3 ------------------------ Send class at point to Python3 interpreter. py-execute-class-python3-switch ------------------------------- Send class at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-class-python3-no-switch ---------------------------------- Send class at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-class-python3-dedicated ---------------------------------- Send class at point to Python3 unique interpreter. py-execute-class-python3-dedicated-switch ----------------------------------------- Send class at point to Python3 unique interpreter and switch to result. py-execute-class-python2 ------------------------ Send class at point to Python2 interpreter. py-execute-class-python2-switch ------------------------------- Send class at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-class-python2-no-switch ---------------------------------- Send class at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-class-python2-dedicated ---------------------------------- Send class at point to Python2 unique interpreter. py-execute-class-python2-dedicated-switch ----------------------------------------- Send class at point to Python2 unique interpreter and switch to result. py-execute-class-python2\.7 --------------------------- Send class at point to Python2.7 interpreter. py-execute-class-python2\.7-switch ---------------------------------- Send class at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-class-python2\.7-no-switch ------------------------------------- Send class at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-class-python2\.7-dedicated ------------------------------------- Send class at point to Python2.7 unique interpreter. py-execute-class-python2\.7-dedicated-switch -------------------------------------------- Send class at point to Python2.7 unique interpreter and switch to result. py-execute-class-jython ----------------------- Send class at point to Jython interpreter. py-execute-class-jython-switch ------------------------------ Send class at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-class-jython-no-switch --------------------------------- Send class at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-class-jython-dedicated --------------------------------- Send class at point to Jython unique interpreter. py-execute-class-jython-dedicated-switch ---------------------------------------- Send class at point to Jython unique interpreter and switch to result. py-execute-class-python3\.2 --------------------------- Send class at point to Python3.2 interpreter. py-execute-class-python3\.2-switch ---------------------------------- Send class at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-class-python3\.2-no-switch ------------------------------------- Send class at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-class-python3\.2-dedicated ------------------------------------- Send class at point to Python3.2 unique interpreter. py-execute-class-python3\.2-dedicated-switch -------------------------------------------- Send class at point to Python3.2 unique interpreter and switch to result. py-execute-class-python3\.3 --------------------------- Send class at point to Python3.3 interpreter. py-execute-class-python3\.3-switch ---------------------------------- Send class at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-class-python3\.3-no-switch ------------------------------------- Send class at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-class-python3\.3-dedicated ------------------------------------- Send class at point to Python3.3 unique interpreter. py-execute-class-python3\.3-dedicated-switch -------------------------------------------- Send class at point to Python3.3 unique interpreter and switch to result. py-execute-class-bpython ------------------------ Send class at point to Bpython interpreter. py-execute-class-bpython-switch ------------------------------- Send class at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-class-bpython-no-switch ---------------------------------- Send class at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-class-bpython-dedicated ---------------------------------- Send class at point to Bpython unique interpreter. py-execute-class-bpython-dedicated-switch ----------------------------------------- Send class at point to Bpython unique interpreter and switch to result. py-execute-region-python ------------------------ Send region at point to Python interpreter. py-execute-region-python-switch ------------------------------- Send region at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-region-python-no-switch ---------------------------------- Send region at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-region-python-dedicated ---------------------------------- Send region at point to Python unique interpreter. py-execute-region-python-dedicated-switch ----------------------------------------- Send region at point to Python unique interpreter and switch to result. py-execute-region-ipython ------------------------- Send region at point to IPython interpreter. py-execute-region-ipython-switch -------------------------------- Send region at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-region-ipython-no-switch ----------------------------------- Send region at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-region-ipython-dedicated ----------------------------------- Send region at point to IPython unique interpreter. py-execute-region-ipython-dedicated-switch ------------------------------------------ Send region at point to IPython unique interpreter and switch to result. py-execute-region-python3 ------------------------- Send region at point to Python3 interpreter. py-execute-region-python3-switch -------------------------------- Send region at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-region-python3-no-switch ----------------------------------- Send region at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-region-python3-dedicated ----------------------------------- Send region at point to Python3 unique interpreter. py-execute-region-python3-dedicated-switch ------------------------------------------ Send region at point to Python3 unique interpreter and switch to result. py-execute-region-python2 ------------------------- Send region at point to Python2 interpreter. py-execute-region-python2-switch -------------------------------- Send region at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-region-python2-no-switch ----------------------------------- Send region at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-region-python2-dedicated ----------------------------------- Send region at point to Python2 unique interpreter. py-execute-region-python2-dedicated-switch ------------------------------------------ Send region at point to Python2 unique interpreter and switch to result. py-execute-region-python2\.7 ---------------------------- Send region at point to Python2.7 interpreter. py-execute-region-python2\.7-switch ----------------------------------- Send region at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-region-python2\.7-no-switch -------------------------------------- Send region at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-region-python2\.7-dedicated -------------------------------------- Send region at point to Python2.7 unique interpreter. py-execute-region-python2\.7-dedicated-switch --------------------------------------------- Send region at point to Python2.7 unique interpreter and switch to result. py-execute-region-jython ------------------------ Send region at point to Jython interpreter. py-execute-region-jython-switch ------------------------------- Send region at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-region-jython-no-switch ---------------------------------- Send region at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-region-jython-dedicated ---------------------------------- Send region at point to Jython unique interpreter. py-execute-region-jython-dedicated-switch ----------------------------------------- Send region at point to Jython unique interpreter and switch to result. py-execute-region-python3\.2 ---------------------------- Send region at point to Python3.2 interpreter. py-execute-region-python3\.2-switch ----------------------------------- Send region at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-region-python3\.2-no-switch -------------------------------------- Send region at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-region-python3\.2-dedicated -------------------------------------- Send region at point to Python3.2 unique interpreter. py-execute-region-python3\.2-dedicated-switch --------------------------------------------- Send region at point to Python3.2 unique interpreter and switch to result. py-execute-region-python3\.3 ---------------------------- Send region at point to Python3.3 interpreter. py-execute-region-python3\.3-switch ----------------------------------- Send region at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-region-python3\.3-no-switch -------------------------------------- Send region at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-region-python3\.3-dedicated -------------------------------------- Send region at point to Python3.3 unique interpreter. py-execute-region-python3\.3-dedicated-switch --------------------------------------------- Send region at point to Python3.3 unique interpreter and switch to result. py-execute-region-bpython ------------------------- Send region at point to Bpython interpreter. py-execute-region-bpython-switch -------------------------------- Send region at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-region-bpython-no-switch ----------------------------------- Send region at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-region-bpython-dedicated ----------------------------------- Send region at point to Bpython unique interpreter. py-execute-region-bpython-dedicated-switch ------------------------------------------ Send region at point to Bpython unique interpreter and switch to result. py-execute-buffer-python ------------------------ Send buffer at point to Python interpreter. py-execute-buffer-python-switch ------------------------------- Send buffer at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-buffer-python-no-switch ---------------------------------- Send buffer at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-buffer-python-dedicated ---------------------------------- Send buffer at point to Python unique interpreter. py-execute-buffer-python-dedicated-switch ----------------------------------------- Send buffer at point to Python unique interpreter and switch to result. py-execute-buffer-ipython ------------------------- Send buffer at point to IPython interpreter. py-execute-buffer-ipython-switch -------------------------------- Send buffer at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-buffer-ipython-no-switch ----------------------------------- Send buffer at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-buffer-ipython-dedicated ----------------------------------- Send buffer at point to IPython unique interpreter. py-execute-buffer-ipython-dedicated-switch ------------------------------------------ Send buffer at point to IPython unique interpreter and switch to result. py-execute-buffer-python3 ------------------------- Send buffer at point to Python3 interpreter. py-execute-buffer-python3-switch -------------------------------- Send buffer at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-buffer-python3-no-switch ----------------------------------- Send buffer at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-buffer-python3-dedicated ----------------------------------- Send buffer at point to Python3 unique interpreter. py-execute-buffer-python3-dedicated-switch ------------------------------------------ Send buffer at point to Python3 unique interpreter and switch to result. py-execute-buffer-python2 ------------------------- Send buffer at point to Python2 interpreter. py-execute-buffer-python2-switch -------------------------------- Send buffer at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-buffer-python2-no-switch ----------------------------------- Send buffer at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-buffer-python2-dedicated ----------------------------------- Send buffer at point to Python2 unique interpreter. py-execute-buffer-python2-dedicated-switch ------------------------------------------ Send buffer at point to Python2 unique interpreter and switch to result. py-execute-buffer-python2\.7 ---------------------------- Send buffer at point to Python2.7 interpreter. py-execute-buffer-python2\.7-switch ----------------------------------- Send buffer at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-buffer-python2\.7-no-switch -------------------------------------- Send buffer at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-buffer-python2\.7-dedicated -------------------------------------- Send buffer at point to Python2.7 unique interpreter. py-execute-buffer-python2\.7-dedicated-switch --------------------------------------------- Send buffer at point to Python2.7 unique interpreter and switch to result. py-execute-buffer-jython ------------------------ Send buffer at point to Jython interpreter. py-execute-buffer-jython-switch ------------------------------- Send buffer at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-buffer-jython-no-switch ---------------------------------- Send buffer at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-buffer-jython-dedicated ---------------------------------- Send buffer at point to Jython unique interpreter. py-execute-buffer-jython-dedicated-switch ----------------------------------------- Send buffer at point to Jython unique interpreter and switch to result. py-execute-buffer-python3\.2 ---------------------------- Send buffer at point to Python3.2 interpreter. py-execute-buffer-python3\.2-switch ----------------------------------- Send buffer at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-buffer-python3\.2-no-switch -------------------------------------- Send buffer at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-buffer-python3\.2-dedicated -------------------------------------- Send buffer at point to Python3.2 unique interpreter. py-execute-buffer-python3\.2-dedicated-switch --------------------------------------------- Send buffer at point to Python3.2 unique interpreter and switch to result. py-execute-buffer-python3\.3 ---------------------------- Send buffer at point to Python3.3 interpreter. py-execute-buffer-python3\.3-switch ----------------------------------- Send buffer at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-buffer-python3\.3-no-switch -------------------------------------- Send buffer at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-buffer-python3\.3-dedicated -------------------------------------- Send buffer at point to Python3.3 unique interpreter. py-execute-buffer-python3\.3-dedicated-switch --------------------------------------------- Send buffer at point to Python3.3 unique interpreter and switch to result. py-execute-buffer-bpython ------------------------- Send buffer at point to Bpython interpreter. py-execute-buffer-bpython-switch -------------------------------- Send buffer at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-buffer-bpython-no-switch ----------------------------------- Send buffer at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-buffer-bpython-dedicated ----------------------------------- Send buffer at point to Bpython unique interpreter. py-execute-buffer-bpython-dedicated-switch ------------------------------------------ Send buffer at point to Bpython unique interpreter and switch to result. py-execute-expression-python ---------------------------- Send expression at point to Python interpreter. py-execute-expression-python-switch ----------------------------------- Send expression at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-expression-python-no-switch -------------------------------------- Send expression at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-expression-python-dedicated -------------------------------------- Send expression at point to Python unique interpreter. py-execute-expression-python-dedicated-switch --------------------------------------------- Send expression at point to Python unique interpreter and switch to result. py-execute-expression-ipython ----------------------------- Send expression at point to IPython interpreter. py-execute-expression-ipython-switch ------------------------------------ Send expression at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-expression-ipython-no-switch --------------------------------------- Send expression at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-expression-ipython-dedicated --------------------------------------- Send expression at point to IPython unique interpreter. py-execute-expression-ipython-dedicated-switch ---------------------------------------------- Send expression at point to IPython unique interpreter and switch to result. py-execute-expression-python3 ----------------------------- Send expression at point to Python3 interpreter. py-execute-expression-python3-switch ------------------------------------ Send expression at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-expression-python3-no-switch --------------------------------------- Send expression at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-expression-python3-dedicated --------------------------------------- Send expression at point to Python3 unique interpreter. py-execute-expression-python3-dedicated-switch ---------------------------------------------- Send expression at point to Python3 unique interpreter and switch to result. py-execute-expression-python2 ----------------------------- Send expression at point to Python2 interpreter. py-execute-expression-python2-switch ------------------------------------ Send expression at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-expression-python2-no-switch --------------------------------------- Send expression at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-expression-python2-dedicated --------------------------------------- Send expression at point to Python2 unique interpreter. py-execute-expression-python2-dedicated-switch ---------------------------------------------- Send expression at point to Python2 unique interpreter and switch to result. py-execute-expression-python2\.7 -------------------------------- Send expression at point to Python2.7 interpreter. py-execute-expression-python2\.7-switch --------------------------------------- Send expression at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-expression-python2\.7-no-switch ------------------------------------------ Send expression at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-expression-python2\.7-dedicated ------------------------------------------ Send expression at point to Python2.7 unique interpreter. py-execute-expression-python2\.7-dedicated-switch ------------------------------------------------- Send expression at point to Python2.7 unique interpreter and switch to result. py-execute-expression-jython ---------------------------- Send expression at point to Jython interpreter. py-execute-expression-jython-switch ----------------------------------- Send expression at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-expression-jython-no-switch -------------------------------------- Send expression at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-expression-jython-dedicated -------------------------------------- Send expression at point to Jython unique interpreter. py-execute-expression-jython-dedicated-switch --------------------------------------------- Send expression at point to Jython unique interpreter and switch to result. py-execute-expression-python3\.2 -------------------------------- Send expression at point to Python3.2 interpreter. py-execute-expression-python3\.2-switch --------------------------------------- Send expression at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-expression-python3\.2-no-switch ------------------------------------------ Send expression at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-expression-python3\.2-dedicated ------------------------------------------ Send expression at point to Python3.2 unique interpreter. py-execute-expression-python3\.2-dedicated-switch ------------------------------------------------- Send expression at point to Python3.2 unique interpreter and switch to result. py-execute-expression-python3\.3 -------------------------------- Send expression at point to Python3.3 interpreter. py-execute-expression-python3\.3-switch --------------------------------------- Send expression at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-expression-python3\.3-no-switch ------------------------------------------ Send expression at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-expression-python3\.3-dedicated ------------------------------------------ Send expression at point to Python3.3 unique interpreter. py-execute-expression-python3\.3-dedicated-switch ------------------------------------------------- Send expression at point to Python3.3 unique interpreter and switch to result. py-execute-expression-bpython ----------------------------- Send expression at point to Bpython interpreter. py-execute-expression-bpython-switch ------------------------------------ Send expression at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-expression-bpython-no-switch --------------------------------------- Send expression at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-expression-bpython-dedicated --------------------------------------- Send expression at point to Bpython unique interpreter. py-execute-expression-bpython-dedicated-switch ---------------------------------------------- Send expression at point to Bpython unique interpreter and switch to result. py-execute-partial-expression-python ------------------------------------ Send partial-expression at point to Python interpreter. py-execute-partial-expression-python-switch ------------------------------------------- Send partial-expression at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-partial-expression-python-no-switch ---------------------------------------------- Send partial-expression at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-partial-expression-python-dedicated ---------------------------------------------- Send partial-expression at point to Python unique interpreter. py-execute-partial-expression-python-dedicated-switch ----------------------------------------------------- Send partial-expression at point to Python unique interpreter and switch to result. py-execute-partial-expression-ipython ------------------------------------- Send partial-expression at point to IPython interpreter. py-execute-partial-expression-ipython-switch -------------------------------------------- Send partial-expression at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-partial-expression-ipython-no-switch ----------------------------------------------- Send partial-expression at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-partial-expression-ipython-dedicated ----------------------------------------------- Send partial-expression at point to IPython unique interpreter. py-execute-partial-expression-ipython-dedicated-switch ------------------------------------------------------ Send partial-expression at point to IPython unique interpreter and switch to result. py-execute-partial-expression-python3 ------------------------------------- Send partial-expression at point to Python3 interpreter. py-execute-partial-expression-python3-switch -------------------------------------------- Send partial-expression at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-partial-expression-python3-no-switch ----------------------------------------------- Send partial-expression at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-partial-expression-python3-dedicated ----------------------------------------------- Send partial-expression at point to Python3 unique interpreter. py-execute-partial-expression-python3-dedicated-switch ------------------------------------------------------ Send partial-expression at point to Python3 unique interpreter and switch to result. py-execute-partial-expression-python2 ------------------------------------- Send partial-expression at point to Python2 interpreter. py-execute-partial-expression-python2-switch -------------------------------------------- Send partial-expression at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-partial-expression-python2-no-switch ----------------------------------------------- Send partial-expression at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-partial-expression-python2-dedicated ----------------------------------------------- Send partial-expression at point to Python2 unique interpreter. py-execute-partial-expression-python2-dedicated-switch ------------------------------------------------------ Send partial-expression at point to Python2 unique interpreter and switch to result. py-execute-partial-expression-python2\.7 ---------------------------------------- Send partial-expression at point to Python2.7 interpreter. py-execute-partial-expression-python2\.7-switch ----------------------------------------------- Send partial-expression at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-partial-expression-python2\.7-no-switch -------------------------------------------------- Send partial-expression at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-partial-expression-python2\.7-dedicated -------------------------------------------------- Send partial-expression at point to Python2.7 unique interpreter. py-execute-partial-expression-python2\.7-dedicated-switch --------------------------------------------------------- Send partial-expression at point to Python2.7 unique interpreter and switch to result. py-execute-partial-expression-jython ------------------------------------ Send partial-expression at point to Jython interpreter. py-execute-partial-expression-jython-switch ------------------------------------------- Send partial-expression at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-partial-expression-jython-no-switch ---------------------------------------------- Send partial-expression at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-partial-expression-jython-dedicated ---------------------------------------------- Send partial-expression at point to Jython unique interpreter. py-execute-partial-expression-jython-dedicated-switch ----------------------------------------------------- Send partial-expression at point to Jython unique interpreter and switch to result. py-execute-partial-expression-python3\.2 ---------------------------------------- Send partial-expression at point to Python3.2 interpreter. py-execute-partial-expression-python3\.2-switch ----------------------------------------------- Send partial-expression at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-partial-expression-python3\.2-no-switch -------------------------------------------------- Send partial-expression at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-partial-expression-python3\.2-dedicated -------------------------------------------------- Send partial-expression at point to Python3.2 unique interpreter. py-execute-partial-expression-python3\.2-dedicated-switch --------------------------------------------------------- Send partial-expression at point to Python3.2 unique interpreter and switch to result. py-execute-partial-expression-python3\.3 ---------------------------------------- Send partial-expression at point to Python3.3 interpreter. py-execute-partial-expression-python3\.3-switch ----------------------------------------------- Send partial-expression at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-partial-expression-python3\.3-no-switch -------------------------------------------------- Send partial-expression at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-partial-expression-python3\.3-dedicated -------------------------------------------------- Send partial-expression at point to Python3.3 unique interpreter. py-execute-partial-expression-python3\.3-dedicated-switch --------------------------------------------------------- Send partial-expression at point to Python3.3 unique interpreter and switch to result. py-execute-partial-expression-bpython ------------------------------------- Send partial-expression at point to Bpython interpreter. py-execute-partial-expression-bpython-switch -------------------------------------------- Send partial-expression at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-partial-expression-bpython-no-switch ----------------------------------------------- Send partial-expression at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-partial-expression-bpython-dedicated ----------------------------------------------- Send partial-expression at point to Bpython unique interpreter. py-execute-partial-expression-bpython-dedicated-switch ------------------------------------------------------ Send partial-expression at point to Bpython unique interpreter and switch to result. py-execute-line-python ---------------------- Send line at point to Python interpreter. py-execute-line-python-switch ----------------------------- Send line at point to Python interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-line-python-no-switch -------------------------------- Send line at point to Python interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-line-python-dedicated -------------------------------- Send line at point to Python unique interpreter. py-execute-line-python-dedicated-switch --------------------------------------- Send line at point to Python unique interpreter and switch to result. py-execute-line-ipython ----------------------- Send line at point to IPython interpreter. py-execute-line-ipython-switch ------------------------------ Send line at point to IPython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-line-ipython-no-switch --------------------------------- Send line at point to IPython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-line-ipython-dedicated --------------------------------- Send line at point to IPython unique interpreter. py-execute-line-ipython-dedicated-switch ---------------------------------------- Send line at point to IPython unique interpreter and switch to result. py-execute-line-python3 ----------------------- Send line at point to Python3 interpreter. py-execute-line-python3-switch ------------------------------ Send line at point to Python3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-line-python3-no-switch --------------------------------- Send line at point to Python3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-line-python3-dedicated --------------------------------- Send line at point to Python3 unique interpreter. py-execute-line-python3-dedicated-switch ---------------------------------------- Send line at point to Python3 unique interpreter and switch to result. py-execute-line-python2 ----------------------- Send line at point to Python2 interpreter. py-execute-line-python2-switch ------------------------------ Send line at point to Python2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-line-python2-no-switch --------------------------------- Send line at point to Python2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-line-python2-dedicated --------------------------------- Send line at point to Python2 unique interpreter. py-execute-line-python2-dedicated-switch ---------------------------------------- Send line at point to Python2 unique interpreter and switch to result. py-execute-line-python2\.7 -------------------------- Send line at point to Python2.7 interpreter. py-execute-line-python2\.7-switch --------------------------------- Send line at point to Python2.7 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-line-python2\.7-no-switch ------------------------------------ Send line at point to Python2.7 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-line-python2\.7-dedicated ------------------------------------ Send line at point to Python2.7 unique interpreter. py-execute-line-python2\.7-dedicated-switch ------------------------------------------- Send line at point to Python2.7 unique interpreter and switch to result. py-execute-line-jython ---------------------- Send line at point to Jython interpreter. py-execute-line-jython-switch ----------------------------- Send line at point to Jython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-line-jython-no-switch -------------------------------- Send line at point to Jython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-line-jython-dedicated -------------------------------- Send line at point to Jython unique interpreter. py-execute-line-jython-dedicated-switch --------------------------------------- Send line at point to Jython unique interpreter and switch to result. py-execute-line-python3\.2 -------------------------- Send line at point to Python3.2 interpreter. py-execute-line-python3\.2-switch --------------------------------- Send line at point to Python3.2 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-line-python3\.2-no-switch ------------------------------------ Send line at point to Python3.2 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-line-python3\.2-dedicated ------------------------------------ Send line at point to Python3.2 unique interpreter. py-execute-line-python3\.2-dedicated-switch ------------------------------------------- Send line at point to Python3.2 unique interpreter and switch to result. py-execute-line-python3\.3 -------------------------- Send line at point to Python3.3 interpreter. py-execute-line-python3\.3-switch --------------------------------- Send line at point to Python3.3 interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-line-python3\.3-no-switch ------------------------------------ Send line at point to Python3.3 interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-line-python3\.3-dedicated ------------------------------------ Send line at point to Python3.3 unique interpreter. py-execute-line-python3\.3-dedicated-switch ------------------------------------------- Send line at point to Python3.3 unique interpreter and switch to result. py-execute-line-bpython ----------------------- Send line at point to Bpython interpreter. py-execute-line-bpython-switch ------------------------------ Send line at point to Bpython interpreter. Switch to output buffer. Ignores `py-switch-buffers-on-execute-p'. py-execute-line-bpython-no-switch --------------------------------- Send line at point to Bpython interpreter. Keep current buffer. Ignores `py-switch-buffers-on-execute-p' py-execute-line-bpython-dedicated --------------------------------- Send line at point to Bpython unique interpreter. py-execute-line-bpython-dedicated-switch ---------------------------------------- Send line at point to Bpython unique interpreter and switch to result. ;;; Subprocess utilities and filters ------------------------------------ py-remove-overlays-at-point --------------------------- Remove overlays as set when `py-highlight-error-source-p' is non-nil. py-down-exception ----------------- Go to the next line down in the traceback. With C-u (programmatically, optional argument BOTTOM), jump to the bottom (innermost) exception in the exception stack. py-up-exception --------------- Go to the previous line up in the traceback. With C-u (programmatically, optional argument TOP) jump to the top (outermost) exception in the exception stack. py-mouseto-exception -------------------- Jump to the code which caused the Python exception at EVENT. EVENT is usually a mouse click. py-goto-exception ----------------- Go to the line indicated by the traceback. py-output-buffer-filter ----------------------- Clear output buffer from py-shell-input prompt etc. py-send-string -------------- Evaluate STRING in inferior Python process. py-send-file ------------ Send FILE-NAME to inferior Python PROCESS. If TEMP-FILE-NAME is passed then that file is used for processing instead, while internally the shell will continue to use FILE-NAME. python-mode.el-6.1.3/doc/variables-python-mode.org0000644000000000000000000006241012271450574022022 0ustar rootroot00000000000000python-mode.el variables ** python-mode-modeline-display String to display in Emacs modeline ** py-indent-offset Amount of offset per level of indentation. `M-x py-guess-indent-offset' can usually guess a good value when you're editing someone else's Python code. ** py-backslashed-lines-indent-offset Amount of offset per level of indentation of backslashed. No semantic indent, which diff to `py-indent-offset' indicates ** pdb-path Where to find pdb.py. Edit this according to your system. If you ignore the location `M-x py-guess-pdb-path' might display it ** py-verbose-p If indenting functions should report reached indent level. Default is nil. ** py-store-result-p When non-nil, put resulting string of `py-execute-...' into kill-ring, so it might be yanked. Default is nil ** py-load-skeletons-p If skeleton definitions should be loaded, default is nil. ** py-load-pymacs-p If Pymacs related stuff should be loaded. Default is nil. Pymacs has been written by François Pinard and many others. See original source: http://pymacs.progiciels-bpi.ca ** py-smart-operator-mode-p If python-mode calls (smart-operator-mode-on) Default is non-nil. ** py-sexp-function When set, it's value is called instead of `forward-sexp', `backward-sexp' Default is nil. ** py-autopair-mode If python-mode calls (autopair-mode-on) Default is nil Load `autopair-mode' written by Joao Tavora URL: http://autopair.googlecode.com ** py-no-completion-calls-dabbrev-expand-p If completion function should call dabbrev-expand when no completion found. Default is `t' See also `py-indent-no-completion-p' ** py-indent-no-completion-p If completion function should insert a TAB when no completion found. Default is `t' See also `py-no-completion-calls-dabbrev-expand-p' ** py-set-fill-column-p If python-mode should set fill-column according values in `py-comment-fill-column' and `py-docstring-fill-column'. Default is nil ** py-autofill-timer-delay Delay when idle before functions ajusting `py-docstring-fill-column' resp. `py-comment-fill-column' are called. ** py-docstring-fill-column Value of `fill-column' to use when filling a docstring. Any non-integer value means do not use a different value of `fill-column' when filling docstrings. ** py-comment-fill-column Value of `fill-column' to use when filling a comment. Any non-integer value means do not use a different value of `fill-column' when filling docstrings. ** py-fontify-shell-buffer-p If code in Python shell should be highlighted as in script buffer. Default is nil. If `t', related vars like `comment-start' will be set too. Seems convenient when playing with stuff in IPython shell Might not be TRT when a lot of output arrives ** py-modeline-display-full-path-p If the full PATH/TO/PYTHON should be displayed in shell modeline. Default is nil. Note: when `py-shell-name' is specified with path, it's shown as an acronym in buffer-name already. ** py-modeline-acronym-display-home-p If the modeline acronym should contain chars indicating the home-directory. Default is nil ** py-install-directory Directory where python-mode.el and it's subdirectories should be installed. Needed for completion and other environment stuff only. ** py-guess-py-install-directory-p If in cases, `py-install-directory' isn't set, `py-set-load-path'should guess it from `buffer-file-name'. ** py-extensions File where extensions to python-mode.el should be installed. Used by virtualenv support. ** py-pylint-offer-current-p If current buffers file should be offered for check. Default is non-nil. If nil, `py-pylint-run' offers filename from history ** py-hide-show-minor-mode-p If hide-show minor-mode should be on, default is nil. ** empty-comment-line-separates-paragraph-p Consider paragraph start/end lines with nothing inside but comment sign. Default is non-nil ** py-if-name-main-permission-p Allow execution of code inside blocks started by "if __name__== '__main__':". Default is non-nil ** py-use-font-lock-doc-face-p If documention string inside of def or class get `font-lock-doc-face'. `font-lock-doc-face' inherits `font-lock-string-face'. Call M-x `customize-face' in order to have a visible effect. ** py-defun-use-top-level-p When non-nil, keys C-M-a, C-M-e address top-level form. Default is nil. Beginning- end-of-defun forms use commands `py-beginning-of-top-level', `py-end-of-top-level' mark-defun marks top-level form at point etc. ** py-tab-shifts-region-p If `t', TAB will indent/cycle the region, not just the current line. Default is nil ** py-tab-indents-region-p When `t' and first TAB doesn't shift, indent-region is called. Default is nil ** py-block-comment-prefix-p If py-comment inserts py-block-comment-prefix. Default is t ** py-org-cycle-p When non-nil, command `org-cycle' is available at shift-TAB, Default is nil. ** ipython-complete-use-separate-shell-p If `ipython-complete' should use a separate shell. Thus prompt-counter is not incremented by completion. ** py-outline-minor-mode-p If outline minor-mode should be on, default is `t'. ** py-outline-mode-keywords Keywords composing visible heads. ** py-start-run-py-shell If `python-mode' should start a python-shell, `py-shell'. Default is `nil'. ** py-start-run-ipython-shell If `python-mode' should start an ipython-shell. Default is `nil'. ** py-close-provides-newline If a newline is inserted, when line after block isn't empty. Default is non-nil. ** py-dedent-keep-relative-column If point should follow dedent or kind of electric move to end of line. Default is t - keep relative position. ** py-indent-honors-multiline-listing If `t', indents to 1+ column of opening delimiter. If `nil', indent adds one level to the beginning of statement. Default is `nil'. ** py-indent-paren-spanned-multilines-p If non-nil, indents elements of list a value of `py-indent-offset' to first element: def foo(): if (foo && baz): bar() Default lines up with first element: def foo(): if (foo && baz): bar() ** py-indent-honors-inline-comment If non-nil, indents to column of inlined comment start. Default is nil. ** py-closing-list-dedents-bos When non-nil, indent list's closing delimiter like start-column. It will be lined up under the first character of the line that starts the multi-line construct, as in: my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', ) Default is nil, i.e. my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', ) Examples from PEP8 ** py-closing-list-space Number of chars, closing parenthesis outdent from opening, default is 1 ** py-closing-list-keeps-space If non-nil, closing parenthesis dedents onto column of opening plus `py-closing-list-space', default is nil ** py-electric-kill-backward-p Affects `py-electric-backspace'. Default is nil. If behind a delimited form of braces, brackets or parentheses, backspace will kill it's contents With when cursor after my_string[0:1] --------------^ ==> my_string[] ----------^ In result cursor is insided emptied delimited form. ** py-electric-colon-active-p `py-electric-colon' feature. Default is `nil'. See lp:837065 for discussions. See also `py-electric-colon-bobl-only' ** py-electric-colon-bobl-only When inserting a colon, do not indent lines unless at beginning of block See lp:1207405 resp. `py-electric-colon-active-p' ** py-electric-colon-greedy-p If py-electric-colon should indent to the outmost reasonable level. If nil, default, it will not move from at any reasonable level. ** py-electric-colon-newline-and-indent-p If non-nil, `py-electric-colon' will call `newline-and-indent'. Default is `nil'. ** py-electric-comment-p If "#" should call `py-electric-comment'. Default is `nil'. ** py-electric-comment-add-space-p If py-electric-comment should add a space. Default is `nil'. ** py-mark-decorators If py-mark-def-or-class functions should mark decorators too. Default is `nil'. ** py-tab-indent Non-nil means TAB in Python mode calls `py-indent-line'. ** py-return-key Which command should call. ** py-complete-function When set, enforces function todo completion, default is nil. Normally python-mode, resp. inferior-python-mode know best which function to use. ** ipython-complete-function Function used for completion in IPython shell buffers. ** py-encoding-string Default string specifying encoding of a Python file. ** py-shebang-startstring Detecting the shell in head of file. ** py-python-command-args List of string arguments to be used when starting a Python shell. ** py-jython-command-args List of string arguments to be used when starting a Jython shell. ** py-cleanup-temporary If temporary buffers and files used by functions executing region should be deleted afterwards. ** py-execute-no-temp-p Seems Emacs-24.3 provided a way executing stuff without temporary files. ** py-lhs-inbound-indent When line starts a multiline-assignment: How many colums indent should be more than opening bracket, brace or parenthesis. ** py-continuation-offset Additional amount of offset to give for some continuation lines. Continuation lines are those that immediately follow a backslash terminated line. ** py-indent-tabs-mode Python-mode starts `indent-tabs-mode' with the value specified here, default is nil. ** py-smart-indentation Should `python-mode' try to automagically set some indentation variables? When this variable is non-nil, two things happen when a buffer is set to `python-mode': 1. `py-indent-offset' is guessed from existing code in the buffer. Only guessed values between 2 and 8 are considered. If a valid guess can't be made (perhaps because you are visiting a new file), then the value in `py-indent-offset' is used. 2. `indent-tabs-mode' is turned off if `py-indent-offset' does not equal `tab-width' (`indent-tabs-mode' is never turned on by Python mode). This means that for newly written code, tabs are only inserted in indentation if one tab is one indentation level, otherwise only spaces are used. Note that both these settings occur *after* `python-mode-hook' is run, so if you want to defeat the automagic configuration, you must also set `py-smart-indentation' to nil in your `python-mode-hook'. ** py-block-comment-prefix String used by M-x comment-region to comment out a block of code. This should follow the convention for non-indenting comment lines so that the indentation commands won't get confused (i.e., the string should be of the form `#x...' where `x' is not a blank or a tab, and `...' is arbitrary). However, this string should not end in whitespace. ** py-indent-comments When t, comment lines are indented. ** py-uncomment-indents-p When non-nil, after uncomment indent lines. ** py-separator-char Values set by defcustom only will not be seen in batch-mode. ** py-custom-temp-directory If set, will take precedence over guessed values from `py-temp-directory'. Default is the empty string. When set, make sure the directory exists. ** py-beep-if-tab-change Ring the bell if `tab-width' is changed. If a comment of the form # vi:set tabsize=: is found before the first code line when the file is entered, and the current value of (the general Emacs variable) `tab-width' does not equal , `tab-width' is set to , a message saying so is displayed in the echo area, and if `py-beep-if-tab-change' is non-nil the Emacs bell is also rung as a warning. ** py-jump-on-exception Jump to innermost exception frame in *Python Output* buffer. When this variable is non-nil and an exception occurs when running Python code synchronously in a subprocess, jump immediately to the source code of the innermost traceback frame. ** py-ask-about-save If not nil, ask about which buffers to save before executing some code. Otherwise, all modified buffers are saved without asking. ** py-backspace-function Function called by `py-electric-backspace' when deleting backwards. ** py-delete-function Function called by `py-electric-delete' when deleting forwards. ** py-pdbtrack-do-tracking-p Controls whether the pdbtrack feature is enabled or not. When non-nil, pdbtrack is enabled in all comint-based buffers, e.g. shell buffers and the *Python* buffer. When using pdb to debug a Python program, pdbtrack notices the pdb prompt and displays the source file and line that the program is stopped at, much the same way as gud-mode does for debugging C programs with gdb. ** py-pdbtrack-filename-mapping Supports mapping file paths when opening file buffers in pdbtrack. When non-nil this is an alist mapping paths in the Python interpreter to paths in Emacs. ** py-pdbtrack-minor-mode-string String to use in the minor mode list when pdbtrack is enabled. ** py-import-check-point-max Maximum number of characters to search for a Java-ish import statement. When `python-mode' tries to calculate the shell to use (either a CPython or a Jython shell), it looks at the so-called `shebang' line -- i.e. #! line. If that's not available, it looks at some of the file heading imports to see if they look Java-like. ** py-jython-packages Imported packages that imply `jython-mode'. ** py-current-defun-show If `py-current-defun' should jump to the definition, highlight it while waiting PY-WHICH-FUNC-DELAY seconds, before returning to previous position. Default is `t'. ** py-current-defun-delay When called interactively, `py-current-defun' should wait PY-WHICH-FUNC-DELAY seconds at the definition name found, before returning to previous position. ** py-send-receive-delay Seconds to wait for output, used by `py-send-receive'. ** py-honor-IPYTHONDIR-p When non-nil ipython-history file is constructed by $IPYTHONDIR followed by "/history". Default is nil. Otherwise value of py-ipython-history is used. ** py-ipython-history ipython-history default file. Used when py-honor-IPYTHONDIR-p is nil (default) ** py-honor-PYTHONHISTORY-p When non-nil python-history file is set by $PYTHONHISTORY Default is nil. Otherwise value of py-python-history is used. ** py-python-history python-history default file. Used when py-honor-PYTHONHISTORY-p is nil (default) ** py-master-file If non-nil, M-x py-execute-buffer executes the named master file instead of the buffer's file. If the file name has a relative path, the value of variable `default-directory' for the buffer is prepended to come up with a file name. Beside you may set this variable in the file's local variable section, e.g.: # Local Variables: # py-master-file: "master.py" # End: ** py-pychecker-command Shell command used to run Pychecker. ** py-pychecker-command-args List of string arguments to be passed to pychecker. ** py-pep8-command Shell command used to run pep8. ** py-pep8-command-args List of string arguments to be passed to pylint. Default is "" ** py-pyflakespep8-command Shell command used to run `pyflakespep8'. ** py-pyflakespep8-command-args List of string arguments to be passed to pyflakespep8. Default is "" ** py-pyflakes-command Shell command used to run Pyflakes. ** py-pyflakes-command-args List of string arguments to be passed to pyflakes. Default is "" ** py-pylint-command Shell command used to run Pylint. ** py-pylint-command-args List of string arguments to be passed to pylint. Default is "--errors-only" ** py-shell-input-prompt-1-regexp A regular expression to match the input prompt of the shell. ** py-shell-input-prompt-2-regexp A regular expression to match the input prompt of the shell after the first line of input. ** py-shell-prompt-read-only If non-nil, the python prompt is read only. Setting this variable will only effect new shells. ** py-fileless-buffer-use-default-directory-p When `py-use-current-dir-when-execute-p' is non-nil and no buffer-file exists, value of `default-directory' sets current working directory of Python output shell ** py-keep-shell-dir-when-execute-p Don't change Python shell's current working directory when sending code. See also `py-execute-directory' ** py-switch-buffers-on-execute-p When non-nil switch to the Python output buffer. ** py-split-windows-on-execute-p When non-nil split windows. ** py-max-split-windows When split windows is enabled the maximum windows to allow before reusing other windows. ** py-split-windows-on-execute-function How window should get splitted to display results of py-execute-... functions. ** py-hide-show-keywords Keywords composing visible heads. Also used by (minor-)outline-mode ** py-hide-show-hide-docstrings Controls if doc strings can be hidden by hide-show ** py-paragraph-fill-docstring-p If `py-fill-paragraph', when inside a docstring, should fill the complete string. Default is nil. Convenient use of `M-q' inside docstrings See also `py-docstring-style' ** python-mode-hook Hook run after entering python-mode-modeline-display mode. No problems result if this variable is not bound. `add-hook' automatically binds it. (This is true for all hook variables.) ** py-imenu-create-index-p Non-nil means Python mode creates and displays an index menu of functions and global variables. ** py-imenu-create-index-function Switch between `py-imenu-create-index-new', which also lists modules variables, and series 5. index-machine ** py-shell-name A PATH/TO/EXECUTABLE or default value `py-shell' may look for, if no shell is specified by command. ** py-shell-toggle-1 A PATH/TO/EXECUTABLE or default value used by `py-toggle-shell'. ** py-shell-toggle-2 A PATH/TO/EXECUTABLE or default value used by `py-toggle-shell'. ** py-match-paren-mode Non-nil means, cursor will jump to beginning or end of a block. This vice versa, to beginning first. Sets `py-match-paren-key' in python-mode-map. Customize `py-match-paren-key' which key to use. ** py-match-paren-key String used by M-x comment-region to comment out a block of code. This should follow the convention for non-indenting comment lines so that the indentation commands won't get confused (i.e., the string should be of the form `#x...' where `x' is not a blank or a tab, and `...' is arbitrary). However, this string should not end in whitespace. ** py-kill-empty-line If t, py-indent-forward-line kills empty lines. ** py-remove-cwd-from-path Whether to allow loading of Python modules from the current directory. If this is non-nil, Emacs removes '' from sys.path when starting an inferior Python process. This is the default, for security reasons, as it is easy for the Python process to be started without the user's realization (e.g. to perform completion). ** py-imenu-show-method-args-p Controls echoing of arguments of functions & methods in the Imenu buffer. When non-nil, arguments are printed. ** py-history-filter-regexp Input matching this regexp is not saved on the history list. Default ignores all inputs of 0, 1, or 2 non-blank characters. ** inferior-python-filter-regexp Input matching this regexp is not saved on the history list. Default ignores all inputs of 0, 1, or 2 non-blank characters. ** py-set-complete-keymap-p If `py-complete-initialize', which sets up enviroment for Pymacs based py-complete, should load it's keys into `python-mode-map' Default is nil. See also resp. edit `py-complete-set-keymap' ** py-use-local-default If `t', py-shell will use `py-shell-local-path' instead of default Python. Making switch between several virtualenv's easier, `python-mode' should deliver an installer, so named-shells pointing to virtualenv's will be available. ** py-highlight-error-source-p When py-execute-... commands raise an error, respective code in source-buffer will be highlighted. Default is nil. M-x `py-remove-overlays-at-point' removes that highlighting. ** py-set-pager-cat-p If the shell environment variable $PAGER should set to `cat'. If `t', use `C-c C-r' to jump to beginning of output. Then scroll normally. Avoids lp:783828, "Terminal not fully functional", for help('COMMAND') in python-shell When non-nil, imports module `os' ** py-prompt-on-changed-p When called interactively, ask for save before a changed buffer is sent to interpreter. Default is `t' ** py-dedicated-process-p If commands executing code use a dedicated shell. Default is nil ** py-shell-local-path If `py-use-local-default' is non-nil, `py-shell' will use EXECUTABLE indicated here incl. path. ** py-edit-only-p When `t' `python-mode' will not take resort nor check for installed Python executables. Default is nil. See bug report at launchpad, lp:944093. ** py-force-py-shell-name-p When `t', execution with kind of Python specified in `py-shell-name' is enforced, possibly shebang doesn't take precedence. ** python-mode-v5-behavior-p Execute region through `shell-command-on-region' as v5 did it - lp:990079. This might fail with certain chars - see UnicodeEncodeError lp:550661 ** py-trailing-whitespace-smart-delete-p Default is nil. When t, python-mode calls (add-hook 'before-save-hook 'delete-trailing-whitespace nil 'local) Also commands may delete trailing whitespace by the way. When editing other peoples code, this may produce a larger diff than expected ** py-newline-delete-trailing-whitespace-p Delete trailing whitespace maybe left by `py-newline-and-indent'. Default is `t'. See lp:1100892 ** py-warn-tmp-files-left-p Messages a warning, when `py-temp-directory' contains files susceptible being left by previous Python-mode sessions. See also lp:987534 ** py-ipython-execute-delay Delay needed by execute functions when no IPython shell is running. ** python-shell-buffer-name Default buffer name for Python interpreter. ** python-shell-interpreter Default Python interpreter for shell. ** python-shell-prompt-regexp Regular Expression matching top-level input prompt of python shell. It should not contain a caret (^) at the beginning. ** py-ffap-p Select python-modes way to find file at point. Default is nil ** python-ffap-setup-code Python code to get a module path. ** py-ffap-string-code Python code used to get a string with the path of a module. ** py-eldoc-setup-code Python code to setup documentation retrieval. ** py-setup-codes List of code run by `py-shell-send-setup-codes'. ** py-shell-prompt-regexp Regular Expression matching top-level input prompt of python shell. It should not contain a caret (^) at the beginning. ** python-shell-completion-setup-code Code used to setup completion in inferior Python processes. ** python-shell-module-completion-string-code Python code used to get completions separated by semicolons for imports. For IPython v0.11, add the following line to `python-shell-completion-setup-code': from IPython.core.completerlib import module_completion and use the following as the value of this variable: ';'.join(module_completion('''%s''')) ** strip-chars-before Regexp indicating which chars shall be stripped before STRING - which is defined by `string-chars-preserve'. ** strip-chars-after Regexp indicating which chars shall be stripped after STRING - which is defined by `string-chars-preserve'. ** py-docstring-style Implemented styles are DJANGO, ONETWO, PEP-257, PEP-257-NN, SYMMETRIC, and NIL. A value of NIL won't care about quotes position and will treat docstrings a normal string, any other value may result in one of the following docstring styles: DJANGO: """ Process foo, return bar. """ """ Process foo, return bar. If processing fails throw ProcessingError. """ ONETWO: """Process foo, return bar.""" """ Process foo, return bar. If processing fails throw ProcessingError. """ PEP-257: """Process foo, return bar.""" """Process foo, return bar. If processing fails throw ProcessingError. """ PEP-257-NN: """Process foo, return bar.""" """Process foo, return bar. If processing fails throw ProcessingError. """ SYMMETRIC: """Process foo, return bar.""" """ Process foo, return bar. If processing fails throw ProcessingError. """ ** py-execute-directory When set, stores the file's default directory-name py-execute-... functions act upon. Used by Python-shell for output of `py-execute-buffer' and related commands. See also `py-use-current-dir-when-execute-p' ** py-use-current-dir-when-execute-p When `t', current directory is used by Python-shell for output of `py-execute-buffer' and related commands. See also `py-execute-directory' ** py-shell-prompt-output-regexp Regular Expression matching output prompt of python shell. It should not contain a caret (^) at the beginning. ** py-output-buffer When `py-enforce-output-buffer-p' is non-nil, provides the default for output-buffer. ** py-enforce-output-buffer-p When non-nil, current value of `py-output-buffer' is used for output, regardless of environment. Default is nil ** py-underscore-word-syntax-p If underscore chars should be of syntax-class `word', not of `symbol'. Underscores in word-class makes `forward-word' etc. travel the indentifiers. Default is `t'. See bug report at launchpad, lp:940812