Emacs Lisp: открыть новый фрейм, запустить IPython, запустить предыдущий буфер - PullRequest
1 голос
/ 16 августа 2011

Я хочу написать функцию 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

Есть какие-нибудь мысли о том, как заставить работать либо одно окно, либо буфер? Спасибо!

1 Ответ

0 голосов
/ 17 августа 2011

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

(let ((my-buffer-name (buffer-name))
   ....
...