Как запустить emacs с запущенной оболочкой ipython в одной стороне разделенного окна?

Мне бы хотелось иметь следующий рабочий процесс, использующий emacs 23.4 в качестве Python (2.7) IDE в Debian:

  1. Emacs запускается с двумя окнами рядом при открытии файла, такого как $ emacs file.py
  2. Уже есть оболочка в левом окне и буфер file.py в правом окне.
  3. Сочетание клавиш выполняет код (и другой ярлык для его частей), и результат можно увидеть в левом окне (оболочка ipython). Фокус остается в правом окне, и буферы не меняются при выполнении команды.
  4. Ярлык легко переключает фокусировку слева направо и наоборот.

До сих пор я мог выполнить все, кроме второго пункта (я должен сделать буфер видимым вручную), что кажется простым. Я читал справочное руководство по emacs lips, чтобы я мог самостоятельно настраивать emacs, но я все еще новичок в emacs. Я также нашел несколько похожих вопросов, но не полностью полезных. Вот некоторые важные части моего.emacs.

;; Initial frame size and position (1280x1024)
(setq default-frame-alist
  '((top . 45) (left . 45)
    (width . 142) (height . 54)))
(if (window-system) 
  (split-window-horizontally (floor (* 0.49 (window-width))))
)

; python-mode
(setq py-install-directory "~/.emacs.d/python-mode.el-6.1.3")
(add-to-list 'load-path py-install-directory)
(require 'python-mode)

; use IPython
(setq-default py-shell-name "ipython")
(setq-default py-which-bufname "IPython")
; use the wx backend, for both mayavi and matplotlib
(setq py-python-command-args
  '("--gui=wx" "--pylab=wx" "--colors=linux"))
(setq py-force-py-shell-name-p t)

; switch to the interpreter after executing code
(setq py-shell-switch-buffers-on-execute-p t)
 ;(setq py-switch-buffers-on-execute-p t)

; don't split windows
(setq py-split-windows-on-execute-p nil)
; try to automagically figure out indentation
(setq py-smart-indentation t)

(defun goto-python-shell () 
  "Go to the python command window (start it if needed)" 
  (interactive)
  (setq current-python-script-buffer (current-buffer))
  (py-shell)
  (end-of-buffer)
)
(goto-python-shell)

Я считаю, что решение простое и лежит на функциях / переменных: переключение в буфер, выбор начального буфера, другое окно, py-shell-switch-buffers-on-execute-p, py-switch-buffers- на выполнение-р.

Тем не менее, я все еще не мог найти решение, которое заставляет все это работать.


РЕДАКТИРОВАТЬ:

Я смог получить желаемое поведение, заменив последнюю часть:

(switch-to-buffer (py-shell))
(end-of-buffer)
(other-window 3)
(switch-to-buffer (current-buffer))

Так как я выяснил с помощью get-buffer-window, что левое окно отображается как 3, а правое - как 6.

1 ответ

Когда py-split-windows-on-execute-p, py-switch-buffers-on-execute-p установлены, он должен работать как положено - не нужно расщеплять рукописные записи.

Остается горизонтальный / вертикальный вопрос. Для этого python-mode.el предоставляет настройку py-split-windows-on-execute-function в текущем транке:

https://code.launchpad.net/python-mode

Другие вопросы по тегам