2009-06-20 6 views
5

Nella seguente funzione in Emacs Lisp,Emacs Lisp: rende visibile il buffer appena creato prima che la funzione ritorni?

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

Mi piacerebbe creare il buffer "Vita-Window", e avere l'evento di vita generato (live) visualizzati in modo continuo, mentre dal vivo va avanti.

Purtroppo, il buffer diventa visibile solo dopo il ritorno (live) (quando è finita!)

Ho anche provato a comparsa a-buffer, il comportamento è lo stesso.

risposta

13

Aggiungi una chiamata a 'sit-for appena prima della chiamata a 'live, ad es.

(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 si desidera vedere i risultati di 'live, dovrebbe periodicamente chiamare 'sit-for pure.

La stringa doc per 'sit-for è:

sit-in è una funzione Lisp compilato in `subr.el'. (Sit-in secondi & opzionale nodisp)

Eseguire Rivisualizza, quindi attendere secondi secondi o fino a quando in ingresso è disponibili. secondi possono essere un valore in virgola mobile . (Azionando sistemi che non supportano attesa per frazioni di secondo, numeri a virgola mobile vengono arrotondati verso il basso all'intero più vicino.)

Se facoltativo arg nodisp è t, non Rivisualizza, basta attendere l'input. Il rivisualizzazione non si verifica se l'input è disponibile prima dell'avvio.

Il valore è t se si attende il tempo pieno senza input in arrivo, e nil altrimenti.

4

Ho trovato la soluzione. Devo usare (sit-for <time-to-wait>) per ottenere il buffer per mostrare l'aggiornamento degli eventi della vita.

Così il segmento di codice dovrebbe essere modificato come segue:

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

Forse all'interno del corpo live, sit-for dovrebbe essere chiamato periodicamente.

+0

Stavamo canalizzando la stessa atmosfera, fino alla parola "periodicamente". –