diff options
| -rw-r--r-- | emacsconf-stream.el | 50 | 
1 files changed, 48 insertions, 2 deletions
diff --git a/emacsconf-stream.el b/emacsconf-stream.el index 2344628..55c4648 100644 --- a/emacsconf-stream.el +++ b/emacsconf-stream.el @@ -818,6 +818,7 @@ ffplay URL  (defvar emacsconf-stream-track "General")  (defvar emacsconf-stream-clock-buffer "*emacsconf*")  (defvar emacsconf-stream-clock-timer nil) +(defvar emacsconf-stream-random-timer nil)  (require 'diary-lib)  (require 'text-property-search) @@ -861,10 +862,55 @@ ffplay URL                          " to go" (if message ": " ""))                       ""))))         "") -     (or message "")) +     (or message "") +		 "\n\n" +		 (propertize "Enjoy EmacsConf!" 'emacsconf-random t))      (when (timerp emacsconf-stream-clock-timer) (cancel-timer emacsconf-stream-clock-timer))      (emacsconf-stream-update-time) -    (setq emacsconf-stream-clock-timer (run-at-time t 1 #'emacsconf-stream-update-time)))) +    (setq emacsconf-stream-clock-timer (run-at-time t 1 #'emacsconf-stream-update-time)) +		(setq emacsconf-stream-clock-timer (run-at-time t 10 #'emacsconf-stream-update-random)))) + +(defvar emacsconf-stream-random-file (expand-file-name "fortune.txt" emacsconf-cache-dir)) +(defvar emacsconf-stream-random-data nil) + +(defun emacsconf-stream-shuffle-list (list) +  "Shuffle LIST using Fisher-Yates algorithm." +  (let ((shuffled (copy-sequence list))) +    (dotimes (i (1- (length shuffled))) +      (let* ((j (+ i (random (- (length shuffled) i)))) +             (temp (nth i shuffled))) +        (setf (nth i shuffled) (nth j shuffled)) +        (setf (nth j shuffled) temp))) +    shuffled)) + +(defun emacsconf-stream-get-random-string () +	(when (and (not emacsconf-stream-random-data) +						 emacsconf-stream-random-file (file-exists-p emacsconf-stream-random-file)) +			(setq emacsconf-stream-random-data +						(emacsconf-stream-shuffle-list +						 (with-temp-buffer +							 (insert-file-contents emacsconf-stream-random-file) +							 (split-string (string-trim (buffer-string)) "\n%\n"))))) +	(when emacsconf-stream-random-data +		(pop emacsconf-stream-random-data))) + +(defun emacsconf-stream-update-random () +  (if (get-buffer emacsconf-stream-clock-buffer) +      (when (get-buffer-window emacsconf-stream-clock-buffer) +        (with-current-buffer emacsconf-stream-clock-buffer +          (save-excursion +						(goto-char (point-min)) +						(let (match) +							(while (setq match (text-property-search-forward 'emacsconf-random)) +								(goto-char (prop-match-beginning match)) +								(add-text-properties +								 (prop-match-beginning match) +								 (prop-match-end match) +								 (list 'display +											 (emacsconf-stream-get-random-string))) +								(goto-char (prop-match-end match))))))) +    (when (timerp emacsconf-stream-random-timer) +      (cancel-timer emacsconf-stream-random-timer))))  (defun emacsconf-stream-update-time ()  	"Update the displayed time."  | 
