Avalie uma declaração de uma linha do Python no GNU Emacs

1

Estou usando run-python no GNU Emacs 24.3 para seu "shell python Inferior" e estou tentando obter um comportamento semelhante ao lisp-send-last-sexp , que envia e avalia uma expressão no interpretador em execução. Estou apenas tentando fazer isso por uma linha de cada vez.

Reduzi as soluções dadas aqui para a seguinte função:

(add-hook 'python-mode-hook
          'my-python-send-statement)

(defun my-python-send-statement ()
  (interactive)
  (local-set-key [S-return] 'my-python-send-statement)
  (end-of-line)
  (set-mark (line-beginning-position))
  (call-interactively 'python-shell-send-region))

Funciona a meio caminho. Quando executo este comando em várias linhas, recebo uma string com vários > > > prompts e não consigo descobrir por que, como apenas uma linha deve ser enviada. Além disso, às vezes o resultado não será mostrado imediatamente e eu tenho que executar o comando duas vezes. Por exemplo:

9 + 9 # executa o comando na linha 13 do arquivo .py,

======

# result in Python shell.

>>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> 18

    
por Heitor Chang 15.12.2013 / 21:57

2 respostas

3

ISENÇÃO DE RESPONSABILIDADE : o seguinte é auto-anúncio ...

Para gerenciar a interação entre um buffer e um interpretador de código, desenvolvi isend-mode .

Veja como você pode usá-lo:

  1. Execute um interpretador python em um terminal:

    M-x ansi-term RET /usr/bin/python RET

  2. Mude para o buffer que contém seu código python:

    C-x b my-buffer.py RET

  3. Associe-o ao seu terminal:

    M-x isend RET *ansi-term* RET

  4. Digite C-RET para enviar a linha de buffer atual para o interpretador.

A vantagem de isend-mode (do meu ponto de vista, pelo menos) é que ela é independente de linguagem. Você pode usá-lo da mesma maneira para python, shell ou qualquer outra linguagem interpretada que você goste.

    
por 16.12.2013 / 09:16
0

OK, depois de navegar um pouco mais nas funções python-shell eu montei um hack que resolve o meu problema: envie um comando print depois de enviar a região! Por alguma razão, isso suprime todo o > > > prompts.

(add-hook 'python-mode-hook
          'my-python-send-statement)

(defun my-python-send-statement ()
  (interactive)
  (local-set-key [S-return] 'my-python-send-statement)
  (end-of-line)
  (set-mark (line-beginning-position))
  (call-interactively 'python-shell-send-region)
  (python-shell-send-string "; print()"))
    
por 15.12.2013 / 22:10

Tags