Dormir em uma macro kbd

7

Eu estava concluindo os koans python no emacs e estava usando uma macro kdb para testar minhas alterações em um buffer de shell e retornar ao código python. Eu queria pegar o número da linha do próximo erro do buffer do shell para poder pular diretamente para ele, mas, como a execução levou um momento, acabou com a saída anterior.

Como inserir uma pausa em uma macro enquanto a estou gravando?

Matthew Piziak
fonte

Respostas:

5

Você pode tentar avaliar (sleep-for n)enquanto executa sua macro, usando M-:. Isso faz com que o encadeamento principal do Emacs seja interrompido, adiando o restante de suas ações de macro, mas não deve afetar a obtenção de resultados de outros processos como o Python.

Observe que isso pode causar um comportamento estranho com o cursor se você estiver obtendo saída de comint (como o resultado de um processo Python). Você ainda deve obter toda a sua saída, mas o cursor pode parar de rastrear o final. No mínimo, isso aconteceu algumas vezes ao testá-lo agora.

Tikhon Jelvis
fonte
1

Eu estou supondo a partir da descrição, você está executando python no buffer do shell? Pode fazer mais sentido executar python como um comando síncrono ou pelo menos usar compilepara executar python.

Se você usar compile, acho que é mais fácil vincular uma chave a isso e, em seguida, usar C-x `( command-next-error) ou M-g n, M-g p( next-error, previous-error) para passar por erros com a análise de erro incorporada.

Acabei de testar usando o builtin python-modee C-c C-cexecuta o python-shell-send-bufferque inicia o python e envia o buffer para ele. O shell python parece estar ciente de erros, portanto, a chamada repetida C-x `pula para cada linha com um erro.

Não estou entendendo bem o que você quer dizer com "matar a saída anterior"? Você está tentando solucionar erros enquanto executa o programa simultaneamente novamente?

dgtized
fonte
Obrigado pela sua resposta. Como a outra resposta aborda a questão geral do título, sou obrigado a aceitá-la. No entanto, você abordou com mais precisão meu problema individual e sou muito grato por isso.
Matthew Piziak