2009-06-20 13 views
5

En la siguiente función en Emacs Lisp,Emacs Lisp: ¿hace visible el búfer recién creado antes de que la función regrese?

(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! 

Me gustaría crear el buffer "Vida-Ventana", y que el evento generado por la vida (en vivo) que aparecen continuamente mientras vivo continúa.

Por desgracia, la memoria intermedia sólo se hace visible después de los retornos (en vivo) (cuando se acabó!)

También probé pop-to-buffer, el comportamiento es el mismo.

Respuesta

13

Agregue una llamada a 'sit-for justo antes de llamar a 'live, p. Ej.

(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! 

Y, si desea ver los resultados de 'live, debe llamar periódicamente 'sit-for también.

La cadena de documentación para 'sit-for es:

plantón de una función Lisp compilado en `subr.el'. (Sit-segundos para & opcional nodisp)

Realizar remostrado, luego esperar a que segundos segundos o hasta que la entrada es disponible. los segundos pueden ser un valor de coma flotante. (En funcionamiento sistemas que no soportan la espera por fracciones de segundo, valores de coma flotante se redondean hacia abajo al entero más cercano.)

Si nodisp arg opcional es t, hacer no remostrado, justo espera la entrada. No se vuelve a mostrar si la entrada es disponible antes de que comience.

El valor es t si se esperó a tiempo completo sin entrada, y nulo de lo contrario.

4

Encontré la solución. Tengo que usar (sit-for <time-to-wait>) para que el buffer muestre la actualización de los eventos de la vida.

Así que el segmento de código debe ser modificado como sigue:

 
(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! 

Quizás interior del cuerpo live, sit-for debe ser llamado periódicamente.

+0

Estábamos canalizando el mismo ambiente, hasta la palabra "periódicamente". –

Cuestiones relacionadas