Как мне посоветовать py-execute-buffer в emacs запускать py-shell перед функцией?

Я хочу отредактировать буфер или файл, нажать C-c C-c и отправить файл в сеанс IPython. Я могу выполнить это сейчас, если сначала запущу M-x py-shell, а затем py-execute-buffer через C-c C-c. Но если я попытаюсь посоветовать функцию через

(defadvice py-execute-buffer (before open-py-shell-first)
   (let ((remember-window (selected-window))
     (remember-point (point)))
     (generate-new-buffer "*Python*")
     (call-interactively 'py-shell)
     (select-window remember-window)
     (goto-char remember-point)))
(ad-activate 'py-execute-buffer)

Я получаю сообщение об ошибке:

## working on region in file /var/folders/6o/6o08knx-FVOhrvCbYyrRDU+++TI/-Tmp-/python-29189FKe.py...
Python 2.7.1 (r271:86832, Feb  5 2011, 13:58:58) 
Type "copyright", "credits" or "license" for more information.

IPython 0.10.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object'. ?object also works, ?? prints more.

In [1]: ---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)

/Users/aresnick/Desktop/<ipython console> in <module>()

IOError: [Errno 2] No such file or directory: '/var/folders/6o/6o08knx-FVOhrvCbYyrRDU+++TI/-Tmp-/python-29189FKe.py'

In [2]: 

Казалось бы, созданный временный файл не виден IPython? Если я сейчас вернусь к своему файлу Python и повторно запущу py-execute-buffer, все будет хорошо.

Любые мысли будут оценены - спасибо!


person aresnick    schedule 09.07.2011    source источник
comment
У меня даже нет команды py-execute-buffer. Это что-то из ipython.el?   -  person Michael Hoffman    schedule 29.09.2011


Ответы (2)


Я думаю, что нашел какое-то решение:

(defun my-py-execute-buffer ()
  (interactive)
  (set 'code-buffer (current-buffer))
  (unless (get-buffer "*Python*")
    (py-shell)
    (set-buffer code-buffer)
    (sleep-for 0.2))
  (py-execute-buffer))

Со сном-ибо работает корректно.

person baldman88    schedule 13.02.2012

с текущим python-mode.el,

bzr ветка lp: python-mode

просто M-x py-execute-buffer-ipython RET

Отв. с именем py-shell, установленным на «ipython»

py-execute-buffer должен DTRT - если shebang не говорит иначе

Конкретная команда выше предшествует shebang

Вместо «ipython» по умолчанию вы можете указать версию, включая путь

person Andreas Röhler    schedule 01.12.2012