2009-06-20 6 views
5

Dans la fonction suivante dans Lisp,Emacs Lisp: rend le tampon nouvellement créé visible avant que la fonction ne retourne?

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

Je voudrais créer le tampon « Life-Window », et ont l'événement de la vie générée par (live) affiché en continu tout va vivre.

Malheureusement, le tampon ne devient visible après les (live) renvoie (quand il est fini!)

J'ai aussi essayé pop-to-buffer, le comportement est le même.

Répondre

13

Ajoutez un appel à 'sit-for juste avant l'appel à 'live, par ex.

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

Et, si vous voulez voir les résultats de 'live, il doit périodiquement appeler 'sit-for ainsi.

La chaîne de doc pour 'sit-for est:

sit-for est une fonction Lisp compilé dans `subr.el ». (Sit-secondes pour & option NoDisp)

Effectuer réafficher, puis attendez secondes secondes ou jusqu'à ce que l'entrée est disponible. secondes peut être une valeur à virgule flottante . (Le fonctionnement systèmes qui ne prennent pas en charge l'attente pour les fractions de seconde, valeurs à virgule flottante sont arrondies vers le bas entier le plus proche.)

Si option arg NoDisp est t, ne pas réafficher, juste attendre l'entrée. La réaffichage ne se produit pas si l'entrée est disponible avant le démarrage.

La valeur est t si attendu le plein temps sans entrée, et sinon.

4

J'ai découvert la solution. Je dois utiliser (sit-for <time-to-wait>) pour obtenir le tampon pour montrer la mise à jour des événements de la vie.

Ainsi, le segment de code doit être modifié comme suit:

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

Peut-être à l'intérieur du corps live, sit-for devrait être appelé périodiquement.

+0

Nous diffusions la même ambiance, jusqu'au mot "périodiquement". –

Questions connexes