Emacs Lisp: сделать вновь созданный буфер видимым, прежде чем функция вернется?

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

  •  06-07-2019
  •  | 
  •  

Вопрос

В следующей функции в 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!

Я хотел бы создать буфер " Life-Window " и отображать событие life, генерируемое (live), непрерывно, пока идет live.

К сожалению, буфер становится видимым только после возврата (в реальном времени) (когда он закончился!)

Я также попробовал pop-to-buffer, поведение такое же.

Это было полезно?

Решение

Добавьте вызов 'sit-for непосредственно перед вызовом 'live, например

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

И, если вы хотите увидеть результаты <=>, он также должен периодически вызывать <=>.

Строка документа для <=>:

  

sit-for - это скомпилированная функция Lisp в   `Subr.el». (сидеть в течение секунд & и опционально;   nodisp)      

Выполните повторное отображение, затем дождитесь   секунды, секунды или пока ввод   имеется в наличии. секунды могут быть   значение с плавающей точкой. (На операционной   системы, которые не поддерживают ожидание   за доли секунды,   значения с плавающей точкой округляются в меньшую сторону   до ближайшего целого числа.)

     

Если необязательный аргумент arg nodisp, не   переотображение, просто дождитесь ввода.   Повторное отображение не происходит, если ввод   доступно до его запуска.

     

Значение равно t, если ожидал полный рабочий день   без ввода поступающего, и ноль   в противном случае.

Другие советы

Я нашел решение. Я должен использовать (sit-for <time-to-wait>), чтобы получить буфер для отображения обновлений событий жизни.

Таким образом, сегмент кода должен быть изменен следующим образом:

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

Возможно, внутри live тела, sit-for следует периодически вызывать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top