Я хочу создать команду, в которой регион отправлен, если активен, а если нет, текущий оператор строки/вычисляется, а точка переходит к следующему оператору.emacs elisp send line if no region active python-mode
Я начал с This solution. Теперь я не могу заставить (python-shell-send-region) работать, хотя я не знаю, как передать начало и конец региона.
До сих пор у меня есть это:
(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: С Andreas' и предложения Legoscia, я изменил структуру немного.
Теперь я получаю ошибку (Invalid функция: (SETQ бек (точка)) для:
(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 в блоке отправки точки, инструкции, независимо. –