EMACS LISP: Machen Sie den neu geschaffenen Puffer sichtbar, bevor die Funktion zurückkehrt?

StackOverflow https://stackoverflow.com/questions/1021523

  •  06-07-2019
  •  | 
  •  

Frage

In der folgenden Funktion in 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!

Ich möchte den Puffer erstellen "Lebenswindow", und haben das Lebensereignis, das (Live) erzeugt wird, während live kontinuierlich angezeigt wird.

Leider wird der Puffer erst nach der Rückkehr der (lebenden) Puffer sichtbar (wenn er vorbei ist!)

Ich habe auch Pop-to-Puffer ausprobiert, das Verhalten ist das gleiche.

War es hilfreich?

Lösung

Fügen Sie einen Anruf hinzu zu 'sit-for kurz vor dem Anruf an 'live, z.B

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

Und wenn Sie die Ergebnisse von sehen möchten 'live, es sollte regelmäßig anrufen 'sit-for auch.

Die DOC -Zeichenfolge für 'sit-for ist:

Sit-for ist eine kompilierte Lisp-Funktion in "subr.el". (Sit-for-Sekunden und optionales Nodisp)

Führen Sie Redisplay durch und warten Sie Sekunden Sekunden oder bis die Eingabe verfügbar ist. Sekunden können ein schwimmender Punktwert sein. (Bei Betriebssystemen, die nicht das Warten auf Brüche einer Sekunde unterstützen, werden schwimmende Punktwerte auf die nächste Ganzzahl abgerundet.)

Wenn optional arg nodisp t t t t t t t t t t t tg, nicht wieder aufzunehmen, warten Sie einfach auf die Eingabe. Redisplay tritt nicht auf, wenn die Eingabe vor Beginn verfügbar ist.

Der Wert ist t, wenn die Vollzeit ohne Eingabe gewartet wird, und sonst nil.

Andere Tipps

Ich fand die Lösung heraus. Ich muss benutzen (sit-for <time-to-wait>) Um den Puffer zu bekommen, um das Update von Lebensereignissen zu zeigen.

Das Codesegment sollte also wie folgt geändert werden:

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

Vielleicht innerhalb des live Karosserie, sit-for sollte regelmäßig aufgerufen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top