我想創建一個命令,如果區域發送,如果活動,如果不是,當前行/語句進行評估,點進一步到下一個語句。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形式 - 發送塊,語句,等等。 –