- (let* ((beg (point))
- (len (skip-chars-forward "^\s\t\n"))
- (end (point))
- (orp (+ beg (cl-case len
- ((1) 1)
- ((2 3 4 5) 2)
- ((6 7 8 9) 3)
- ((10 11 12 13) 4)
- (t 5)))))
- (setq spray--delay (+ (if (> len 9) 1 0)
- (if (eql (char-after) ?\n) 3 0)
- (cl-case (char-before)
- ((?. ?! ?\? ?\;) 3)
- ((?, ?:) 1)
- (t 0))))
- (move-overlay spray--orp-overlay (1- orp) orp)
- (move-overlay spray--base-overlay beg end)
- (overlay-put spray--base-overlay
- 'before-string (make-string (- 5 (- orp beg)) ?\s))
- (narrow-to-region beg end))))))
+ (spray--word-at-point)))))
+
+;; commands
+
+(defun spray-start/stop (&optional switch)
+ (interactive)
+ (cond ((and (memql switch '(nil 1))
+ (not spray--running))
+ (setq spray--running
+ (run-with-timer 0 (/ 60.0 spray-wpm) 'spray--update)))
+ ((memql switch '(nil -1))
+ (cancel-timer spray--running)
+ (setq spray--running nil))
+ (t
+ nil)))
+
+(defun spray-forward-word ()
+ (interactive)
+ (when spray--running (spray-start/stop -1))
+ (widen)
+ (skip-chars-forward "\s\t\n")
+ (spray--word-at-point))
+
+(defun spray-backward-word ()
+ (interactive)
+ (when spray--running (spray-start/stop -1))
+ (widen)
+ (skip-chars-backward "^\s\t\n")
+ (skip-chars-backward "\s\t\n")
+ (spray--word-at-point))