2009-06-20 34 views
5

Trong các chức năng sau đây trong emacs Lisp,Emacs Lisp: tạo bộ đệm mới được tạo trước khi hàm trả về?

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

Tôi muốn tạo bộ đệm "Life-Window", và có sự kiện cuộc sống được tạo ra bởi (live) hiển thị liên tục trong khi sống đi về.

Thật không may, bộ đệm chỉ trở nên rõ ràng sau khi trở về (live) (khi nó kết thúc!)

Tôi cũng đã cố gắng pop-to-đệm, hành vi này là giống nhau.

Trả lời

13

Thêm cuộc gọi đến 'sit-for ngay trước cuộc gọi đến 'live, ví dụ:

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

Và, nếu bạn muốn xem kết quả của 'live, định kỳ nên gọi 'sit-for là tốt.

Chuỗi doc cho 'sit-for là:

ngồi cho là một hàm Lisp biên soạn trong 'subr.el'. (sit-for seconds & tùy chọn nodisp)

Thực hiện lại, sau đó đợi giây hoặc cho đến khi nhập là . giây có thể là giá trị dấu phẩy động. (Trên hành hệ thống không hỗ trợ chờ cho phần của một giây, giá trị dấu chấm động được làm tròn xuống đến số nguyên gần nhất.)

Nếu tùy chọn arg nodisp là t, không hiển thị lại, chỉ cần đợi đầu vào. Hiển thị lại không xảy ra nếu đầu vào là có sẵn trước khi bắt đầu.

Giá trị là t nếu đợi toàn bộ thời gian mà không có đầu vào nào đến, và nil nếu không.

4

Tôi đã tìm ra giải pháp. Tôi phải sử dụng (sit-for <time-to-wait>) để nhận bộ đệm hiển thị cập nhật các sự kiện trong cuộc sống.

Vì vậy, các đoạn mã nên được sửa đổi như sau:

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

Có lẽ bên trong cơ thể live, sit-for nên được gọi là theo định kỳ.

+0

Chúng tôi đã tạo ra cùng một sự rung cảm, xuống từ "định kỳ". –

Các vấn đề liên quan