переключить настройки буфера с помощью режима Python в emacs?

Некоторое время я использую emacs, но не очень хорошо знаком с Lisp-программированием. Буквально через пару дней я начал писать Python на emacs. Я обнаружил, что режим python весьма полезен, и я хочу изучить его дальше. Я нашел несколько функций emacs lips в Интернете, немного подправил их, чтобы сделать интерфейс более удобным для пользователя. Я пытаюсь выполнить следующие действия

Обычно я запускаю 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


person Alok    schedule 28.03.2012    source источник
comment
Если бы кто-то знал ответ ... я просто хочу скопировать строку, отправить ее в другой буфер ... выполнить какое-то действие и вернуться в предыдущий буфер.   -  person Alok    schedule 29.03.2012


Ответы (3)


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

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

person François Févotte    schedule 29.03.2012

Я думаю, что вы пытаетесь заново изобрести то, что доступно в 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 в течение разумного количества времени ежедневно и не сталкивался с какими-либо проблемами со стабильностью.

person Praveen Kumar    schedule 29.03.2012

следующие изменения работают как шарм. f9 выполняет построчное выполнение, а f10 выполняет выполнение на основе региона. курсор остается в окне скрипта после того, как я отключил 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)
person Community    schedule 30.03.2012