;;; -*- lexical-binding: t -*- (require 'deferred) (defvar marquee-deferred-chain nil) (defvar marquee-count 0) (defun marquee-string (str delay) (setq marquee-count 0) (setq marquee-deferred-chain (deferred:loop 29999 (lambda (i) (deferred:$ (deferred:next (lambda () (message "%s" (truncate-string-to-width (substring (concat str " " str " " str) (mod i (length str))) (- (frame-width) 1) 0)))) (deferred:wait (* 1000 delay))))))) ;; (marquee-string "foobarbaz" 0.2) ;; (marquee-cancel) (defun marquee-cancel () (interactive) (when marquee-deferred-chain (deferred:cancel marquee-deferred-chain)) (setq marquee-deferred-chain nil)) (provide 'mylisp-marquee)