2012-03-28 1 views
1

Я использую emacs некоторое время, но не так хорошо знаком с программированием lisp. Это было всего пару дней, когда я начал кодировать Python на emacs. Я нашел python-mode весьма полезным, и я хочу изучить его дальше. Я нашел несколько функций губкой emacs в Интернете, немного поработал им, чтобы сделать интерфейс удобным для пользователя. Я пытаюсь достичь следующих действий:настройки буфера переключателя с использованием python-mode в emacs?

Обычно я запускаю emacs с двумя вертикальными окнами, один с источником python, а другой - оболочкой. Я должен быть в состоянии сделать следующее с помощью привязок клавиш

  • переключения между буферами (рабочих)
  • выполнить область (рабочий) но заменяет исходный буфер буфер оболочки. Я хочу выполнить выбранную область в исходном буфере оболочки.
  • выполнить строку (рабочий) но такой же выпуск как указано выше. когда я пишу, строка должна быть выполнена в оболочке python без замены каких-либо буферов. поэтому скопируйте строку, переключитесь на оболочку python, выполните строку, вернитесь в исходный буфер python.

Я не могу добиться переключения выше. Ниже приведен мой код из файла init.el.

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

(defun goto-python-source() 
    "switch back to source window" 
    (interactive) 
    (setq current-python-shell-buffer (current-buffer)) 
    (switch-to-buffer-other-window current-python-script-buffer) 
) 

(defun py-execute-statement-and-step() 
    "select a statement, submit as a region and then step forward" 
    (interactive) 
    (beginning-of-line 1) 
    (let ((beg (point))) 
    (py-next-statement 1) 
    ; if last statement. 
     (if (= (point) beg) (end-of-buffer)) 
; (switch-to-buffer-other-window current-python-shell-buffer) 
    (py-execute-region beg (point)) 
    (switch-to-buffer-other-window current-python-script-buffer) 
    ) 
) 

; some key bindings 
(define-key python-mode-map (quote [f9]) 'py-execute-statement-and-step) 
;(define-key python-mode-map (quote [f10]) `py-execute-region) 
;py-shell-switch-buffers-on-execute 
(define-key python-mode-map (quote [f10]) `py-shell-switch-buffers-on-execute) 
(define-key python-mode-map (quote [f11]) `py-execute-buffer) 
(define-key python-mode-map (quote [f12]) `goto-python-shell) 
(define-key py-shell-map (quote [f12]) `goto-python-source) 

Прошу совета.

Кроме того, поскольку я новичок в режиме python, может ли кто-то поделиться хорошими инициализациями для использования режима python, подобного выше?

благодарит за вашу помощь.

С уважением, AJ

+0

Желание, если кто-то знал ответ .. Я просто хочу скопировать строку, отправить ее в другой буфер ..выполните некоторые действия и вернитесь к предыдущему буферу. – Alok

ответ

3

Вы должны взглянуть на первый ответ this question и настроить переменную py-shell-switch-buffers-on-execute.

Таким образом, вам не нужно будет все пользовательские функции, чтобы сделать python-mode работы, как вы хотите (т.е. сохраняя исходный буфер активны)

2

Я думаю, что вы пытаетесь изобрести то, что доступно в Emacs 24 (по крайней мере, с материалом оценки). Попробуйте Emacs 24. Когда вы редактируете исходный код Python, вы можете нажать C-c C-c, чтобы оценить буфер, и нажмите C-c C-r, чтобы оценить область. Вам не нужно явно запускать оболочку Python.

Я не думаю, что есть прямая поддержка для оценки линии и шага. Вы можете добиться этого нажатием клавиш C-SPC C-n C-c C-r. Ваш фокус останется в исходном коде, и нет необходимости явно переключаться между исходным кодом и оболочкой.

FWIW, я использую Emacs 24 в течение разумного количества времени на ежедневной основе, и я не сталкивался с какой-либо проблемой стабильности.

0

следующих изменений работают как шарм. f9 выполняет выполнение строки за строкой, а f10 выполняет выполнение на основе региона. curser остается в окне скрипта после того, как я отключил py-shell-switch-buffers-on-execute.

(defun py-execute-statement-and-step() 
    "select a statement, submit as a region and then step forward" 
    (interactive) 
    (beginning-of-line 1) 
    (let ((beg (point))) 
    (py-next-statement 1) 
    ; if last statement. 
     (if (= (point) beg) (end-of-buffer)) 
     (py-execute-region beg (point)) 
     (next-line) 
) 
) 

(custom-set-variables 
'(py-shell-switch-buffers-on-execute nil)) 

(define-key python-mode-map (quote [f9]) 'py-execute-statement-and-step) 
(define-key python-mode-map (quote [f10]) `py-execute-region)