2 (defvar spray-wpm 400 "words/min")
3 (defvar spray-text-scale 5)
4 (defvar spray-orp-face 'error)
6 ;; internal variables for spraying
7 (defvar spray--padding-overlay nil)
8 (defvar spray--orp-overlay nil)
9 (defvar spray--timer nil)
10 (defvar spray--delay 0)
12 ;; incompatible minor-modes
13 (defvar spray--saved-global-hl-line-mode nil)
14 (defvar spray--saved-font-lock-mode nil)
15 (defvar spray--saved-hl-line-mode nil)
16 (defvar spray--saved-cursor-type nil)
18 (define-minor-mode spray-mode
23 (setq spray--orp-overlay (make-overlay 0 0)
24 spray--padding-overlay (make-overlay 0 0)
25 spray--timer (run-with-timer 0 (/ 60.0 spray-wpm) 'spray-next)
26 spray--saved-cursor-type cursor-type)
27 (setq cursor-type nil)
28 (text-scale-set spray-text-scale)
29 (overlay-put spray--orp-overlay 'face spray-orp-face)
30 (add-hook 'pre-command-hook 'turn-off-spray-mode)
31 ;; disable incompatible minor-modes
32 (when (boundp 'global-hl-line-mode)
33 (setq spray--saved-global-hl-line-mode global-hl-line-mode)
34 (set (make-local-variable 'global-hl-line-mode) nil))
35 (when (boundp 'font-lock-mode)
36 (setq spray--saved-font-lock-mode font-lock-mode)
38 (when (boundp 'hl-line-mode)
39 (setq spray--saved-hl-line-mode hl-line-mode)
43 (setq cursor-type spray--saved-cursor-type)
45 (delete-overlay spray--orp-overlay)
46 (delete-overlay spray--padding-overlay)
47 (cancel-timer spray--timer)
48 (remove-hook 'pre-command-hook 'turn-off-spray-mode)
49 ;; restore incompatible minor-modes
50 (when spray--saved-global-hl-line-mode
51 (setq global-hl-line-mode spray--saved-global-hl-line-mode))
52 (when spray--saved-font-lock-mode
54 (when spray--saved-hl-line-mode
57 (defun turn-on-spray-mode () (interactive) (spray-mode 1))
58 (defun turn-off-spray-mode () (interactive) (spray-mode -1))
61 (cond ((not (zerop spray--delay))
62 (setq spray--delay (1- spray--delay))
63 (when (and (<= spray--delay 2)
65 (narrow-to-region (point) (point))))
70 (skip-chars-forward "\s\t\n")
72 (len (skip-chars-forward "^\s\t\n"))
74 (orp (+ beg (cl-case len
80 (setq spray--delay (+ (if (> len 8) 1 0) (cl-case (char-before)
84 (overlay-put spray--padding-overlay
85 'before-string (make-string (- 5 (- orp beg)) ?\s))
86 (move-overlay spray--padding-overlay beg (1+ beg))
87 (move-overlay spray--orp-overlay (1- orp) orp)
88 (narrow-to-region beg end))))))