Pergunta

Na seguinte função em Emacs Lisp,

(defun show-life ()
  (interactive)
  (switch-to-buffer "*Life-Window*") ; show how life goes on while living
  (live)) ; it takes 70 years to finish and return!

Eu gostaria de criar o buffer "Window da vida", E o evento da vida gerado pelo (Live) exibido continuamente enquanto o Live continua.

Infelizmente, o buffer só se torna visível após o retorno (ao vivo) (quando acabou!)

Eu também tentei pop-a-buffer, o comportamento é o mesmo.

Foi útil?

Solução

Adicionar uma chamada para 'sit-for pouco antes da chamada para 'live, por exemplo

(defun show-life ()
  (interactive)
  (switch-to-buffer "*Life-Window*")    ; show how life goes on while living
  (sit-for 0)                           ; perform redisplay
  (live))                               ; it takes 70 years to finish and return!

E, se você quiser ver os resultados de 'live, deve ligar periodicamente 'sit-for também.

A string do documento para 'sit-for é:

Sit-for é uma função LISP compilada em `sub-r.el '. (Sit-for Seconds e Nodisp opcional)

Execute o Redisplay e aguarde segundos segundos ou até que a entrada esteja disponível. segundos podem ser um valor de ponto flutuante. (Em sistemas operacionais que não suportam aguardando frações de segundo, os valores de ponto flutuante são arredondados para o número inteiro mais próximo.)

Se o Arg Nodisp opcional for t, não seja redisplay, apenas aguarde a entrada. O Redisplay não acontece se a entrada estiver disponível antes de iniciar.

O valor é t se esperava em tempo integral sem nenhuma entrada chegando e nil de outra forma.

Outras dicas

Eu descobri a solução. Eu tenho que usar (sit-for <time-to-wait>) Para fazer com que o buffer mostre a atualização dos eventos da vida.

Portanto, o segmento de código deve ser modificado da seguinte forma:

(defun show-life ()
  (interactive)
  (switch-to-buffer "*Life-Window*") ; show how life goes on while living
  (sit-for 0)
  (live)) ; it takes 70 years to finish and return!

Talvez dentro do live corpo, sit-for deve ser chamado periodicamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top