4 (defvar spray-wpm 400 "words/min")
5 (defvar spray-height 400 "height of characters")
7 (make-face 'spray-base-face)
8 (set-face-attribute 'spray-base-face nil
9 :background (face-background 'default)
10 :foreground (face-foreground 'default))
12 (make-face 'spray-orp-face)
13 (set-face-attribute 'spray-orp-face nil
15 :overline (face-foreground 'default)
16 :underline (face-foreground 'default))
19 (defvar spray--base-overlay nil)
20 (defvar spray--orp-overlay nil)
21 (defvar spray--timer nil)
22 (defvar spray--delay 0)
23 (defvar spray--saved-cursor-type nil)
25 (define-minor-mode spray-mode
30 (let ((buffer-face-mode-face `(:height ,spray-height)))
32 (setq spray--base-overlay (make-overlay (point-min) (point-max))
33 spray--orp-overlay (make-overlay 0 0)
34 spray--timer (run-with-timer 0 (/ 60.0 spray-wpm) 'spray-next)
35 spray--saved-cursor-type cursor-type)
36 (setq cursor-type nil)
37 (overlay-put spray--base-overlay 'priority 100)
38 (overlay-put spray--base-overlay 'face 'spray-base-face)
39 (overlay-put spray--orp-overlay 'priority 101)
40 (overlay-put spray--orp-overlay 'face 'spray-orp-face)
41 (add-hook 'pre-command-hook 'turn-off-spray-mode))
45 (setq cursor-type spray--saved-cursor-type)
46 (delete-overlay spray--base-overlay)
47 (delete-overlay spray--orp-overlay)
48 (cancel-timer spray--timer)
49 (remove-hook 'pre-command-hook 'turn-off-spray-mode))))
51 (defun turn-on-spray-mode () (interactive) (spray-mode 1))
52 (defun turn-off-spray-mode () (interactive) (spray-mode -1))
55 (cond ((not (zerop spray--delay))
56 (setq spray--delay (1- spray--delay))
57 (when (= spray--delay 2)
58 (narrow-to-region (point) (point))))
63 (skip-chars-forward "\s\t\n")
65 (len (skip-chars-forward "^\s\t\n"))
67 (orp (+ beg (cl-case len
73 (setq spray--delay (+ (if (> len 9) 1 0)
74 (if (eql (char-after) ?\n) 3 0)
75 (cl-case (char-before)
79 (move-overlay spray--orp-overlay (1- orp) orp)
80 (move-overlay spray--base-overlay beg end)
81 (overlay-put spray--base-overlay
82 'before-string (make-string (- 5 (- orp beg)) ?\s))
83 (narrow-to-region beg end))))))