我想创建一个命令,如果区域发送,如果活动,如果不是,当前行/语句进行评估,点进一步到下一个语句。emacs elisp发送行如果没有区域活动python模式
我开始与This solution. 现在我不能得到(蟒蛇壳送区)工作,虽然我不知道如何将区域的开始和结束传递给它。
到目前为止,我有这样的:
(defun my-python-send-region (&optional beg end)
(interactive)
(if (use-region-p)
(python-shell-send-region) (let ((beg (cond (beg beg)
((region-active-p)
(region-beginning))
(t (line-beginning-position))))
(end (cond (end end)
((region-active-p)
(copy-marker (region-end)))
(t (line-end-position)))))
(python-shell-send-region beg end)
(python-nav-forward-statement))))
(add-hook 'python-mode-hook
(lambda()
(define-key python-mode-map "\C-cn" 'my-python-send-region)))
UPDATE: 安德烈亚斯和Legoscia的建议,我改变了结构的位。
现在,我得到一个错误(无效的功能:(setq BEG(点))为:
(defun my-python-send-region (&optional beg end)
(interactive)
(if (use-region-p)
(python-shell-send-region (region-beginning) (region-end))
((setq beg (point))
(python-nav-end-of-statement)
(setq end (point))
(python-shell-send-region (beg) (end)))
(python-nav-forward-statement))))
然而,这个工程:
(defun my-python-send-region (&optional beg end)
(interactive)
(setq beg (point))
(python-nav-end-of-statement)
(setq end (point))
(python-shell-send-region beg end))
由于Pythons敏感性WRT空格,发送区域或行很容易出错。而是使用命令在点上输入Python形式 - 发送块,语句,等等。 –