Как запустить emacs с запущенной оболочкой ipython в одной стороне разделенного окна?
Мне бы хотелось иметь следующий рабочий процесс, использующий emacs 23.4 в качестве Python (2.7) IDE в Debian:
- Emacs запускается с двумя окнами рядом при открытии файла, такого как $ emacs file.py
- Уже есть оболочка в левом окне и буфер file.py в правом окне.
- Сочетание клавиш выполняет код (и другой ярлык для его частей), и результат можно увидеть в левом окне (оболочка ipython). Фокус остается в правом окне, и буферы не меняются при выполнении команды.
- Ярлык легко переключает фокусировку слева направо и наоборот.
До сих пор я мог выполнить все, кроме второго пункта (я должен сделать буфер видимым вручную), что кажется простым. Я читал справочное руководство по 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
в текущем транке: