Emacs Lisp: открыть новый фрейм, запустить IPython, запустить предыдущий буфер

1

Я хочу написать ELisp-функцию для запуска интерпретатора Python (IPython) в новом фрейме, а затем запустить содержимое предыдущего буфера в интерпретаторе IPython. Я использую Emacs 23.3.1, python-mode 6.0 и ipython.el.

Здесь моя функция до сих пор:

(defun python-run ()
  "Use to run Python programs."
  (interactive)
  (let (my-buffer-name buffer-name)
    (select-frame (make-frame))
    (set-frame-size (selected-frame) 90 60)
    (py-shell)
    (delete-other-windows)
    (switch-to-buffer my-buffer-name)
    (py-execute-buffer)))

Вывод:

  1. IPython успешно запускается через py-shell.
  2. В кадре еще два окна, а не одно, как я хочу.
  3. Он не успешно выполняет буфер, вывод:
In [1]: execfile(r'/var/folders/so/sox1TODiEE0hAb6AVusYq++++Tc/-Tmp-/python-26368Zoi.py') # PYTHON-> MODE
---------------------------------------------------------------------------
IOError                                   
Traceback (most recent call last)
/Users/ben/ in ()
----> 1 execfile(r'/var/folders/so/sox1TODiEE0hAb6AVusYq++++Tc/-Tmp-/python-26368Zoi.py') # PYTHON-> MODE 
IOError: [Errno 2] No such file or directory: '/var/folders/so/sox1TODiEE0hAb6AVusYq++++Tc/-Tmp-> /python-26368Zoi.py'
In [2]: ## working on region in file /var/folders/so/sox1TODiEE0hAb6AVusYq++++Tc/-Tmp-/python-> 26368fXv.py...
execfile(r'/var/folders/so/sox1TODiEE0hAb6AVusYq++++Tc/-Tmp-/python-26368fXv.py') # PYTHON-MODE
File "/var/folders/so/sox1TODiEE0hAb6AVusYq++++Tc/-Tmp-/python-26368fXv.py", line 1
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ^
SyntaxError: invalid syntax

Любые мысли о том, как получить либо одиночное окно, либо буфер, который будет выполнен? Благодарю!

Теги:
emacs
ipython
elisp

1 ответ

0
Лучший ответ

Не уверен в том, что вывод python, но в коде elisp вы не устанавливаете имя моего буфера на что-либо (это будет nil). Должен быть:

(let ((my-buffer-name (buffer-name))
   ....
  • 0
    Спасибо за это. Это вроде работает сейчас. Первый раз, когда вызывается python-run, когда он пытается выполнить py-execute-buffer, он терпит неудачу, но в следующий раз он работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню