diff options
author | Lin Sun <sunlin7@hotmail.com> | 2024-04-27 06:54:27 +0000 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2024-05-02 12:56:31 +0300 |
commit | b2e92c746eb7d1135d3d4ccecc774d79555ffb99 (patch) | |
tree | 09e6292e053fdf3b3558e98a653e7740d14c6401 /lisp | |
parent | bf00762745c07816e7a9c64e0fce037039852971 (diff) | |
download | emacs-b2e92c746eb7d1135d3d4ccecc774d79555ffb99.tar.gz |
New function 'python-shell-send-block' for python-mode
* lisp/progmodes/python.el (python-shell-send-block): New
function.
* test/lisp/progmodes/python-tests.el
(python-test--shell-send-block): Test case for the new
function.
* etc/NEWS: Document 'python-shell-send-block'.
(Bug#70609)
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/progmodes/python.el | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index ecbec18f518..57cdf68fc25 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -350,6 +350,7 @@ To customize the Python interpreter for interactive use, modify (define-key map "\C-c\C-e" #'python-shell-send-statement) (define-key map "\C-c\C-r" #'python-shell-send-region) (define-key map "\C-\M-x" #'python-shell-send-defun) + (define-key map "\C-c\C-b" #'python-shell-send-block) (define-key map "\C-c\C-c" #'python-shell-send-buffer) (define-key map "\C-c\C-l" #'python-shell-send-file) (define-key map "\C-c\C-z" #'python-shell-switch-to-shell) @@ -390,6 +391,8 @@ To customize the Python interpreter for interactive use, modify :help "Switch to running inferior Python process"] ["Eval string" python-shell-send-string :help "Eval string in inferior Python session"] + ["Eval block" python-shell-send-block + :help "Eval block in inferior Python session"] ["Eval buffer" python-shell-send-buffer :help "Eval buffer in inferior Python session"] ["Eval statement" python-shell-send-statement @@ -4141,6 +4144,27 @@ interactively." (save-excursion (python-nav-end-of-statement)) send-main msg t))) +(defun python-shell-send-block (&optional arg msg) + "Send the block at point to inferior Python process. +The block is delimited by `python-nav-beginning-of-block' and +`python-nav-end-of-block'. When optional argument ARG is non-nil, send +the block body without its header. When optional argument MSG is +non-nil, forces display of a user-friendly message if there's no process +running; defaults to t when called interactively." + (interactive (list current-prefix-arg t)) + (let ((beg (save-excursion + (when (python-nav-beginning-of-block) + (if (null arg) + (beginning-of-line) + (python-nav-end-of-statement) + (beginning-of-line 2))) + (point-marker))) + (end (save-excursion (python-nav-end-of-block))) + (python-indent-guess-indent-offset-verbose nil)) + (if (and beg end) + (python-shell-send-region beg end nil msg t) + (user-error "Can't get code block from current position.")))) + (defun python-shell-send-buffer (&optional send-main msg) "Send the entire buffer to inferior Python process. When optional argument SEND-MAIN is non-nil, allow execution of @@ -7181,6 +7205,7 @@ implementations: `python-mode' and `python-ts-mode'." python-nav-if-name-main python-nav-up-list python-remove-import + python-shell-send-block python-shell-send-buffer python-shell-send-defun python-shell-send-statement |