X-Git-Url: https://iankelling.org/git/?p=spray;a=blobdiff_plain;f=spray.el;h=8e3b9225cf37568d1037e02b3391f4a325daba09;hp=361e0490cb0d0af45f85e9cdf4088d175b564d0f;hb=56e5f215f349620f23022947e00676d29bd38794;hpb=19017e3d79de794de7654d66033fa8cf5b276599 diff --git a/spray.el b/spray.el index 361e049..8e3b922 100644 --- a/spray.el +++ b/spray.el @@ -18,7 +18,8 @@ ;; Author: zk_phi ;; URL: http://hins11.yu-yake.com/ -;; Version: 0.0.0 +;; Author: Ian Kelling +;; Version: 0.0.1 ;;; Commentary: @@ -36,6 +37,7 @@ ;;; Change Log: ;; 0.0.0 test release +;; 0.0.1 add spray-set-margins ;;; Code: @@ -45,6 +47,8 @@ (defvar spray-wpm 400 "words/min") (defvar spray-height 400 "height of characters") +(defvar spray-margin-top 1 "character margin at top of buffer. Characters are as big as spray text characters.") +(defvar spray-margin-left 0 "character margin at left of buffer. Characters are as big as spray text characters.") (defvar spray-mode-map (let ((km (make-sparse-keymap))) @@ -53,6 +57,9 @@ (define-key km (kbd "l") 'spray-forward-word) (define-key km (kbd "") 'spray-backward-word) (define-key km (kbd "") 'spray-forward-word) + (define-key km (kbd "f") 'spray-faster) + (define-key km (kbd "q") 'spray-quit) + (define-key km (kbd "") 'spray-quit) km) "keymap for spray-mode buffers") @@ -61,16 +68,20 @@ (make-face 'spray-base-face) (set-face-attribute 'spray-base-face nil :background (face-background 'default) - :foreground (face-foreground 'default)) + :foreground (face-foreground 'default) + :slant 'normal) -(make-face 'spray-orp-face) -(set-face-attribute 'spray-orp-face nil +(make-face 'spray-accent-face) +(set-face-attribute 'spray-accent-face nil :foreground "red" :overline (face-foreground 'default) - :underline (face-foreground 'default)) + :underline (face-foreground 'default) + :slant 'normal) ;; * internal vars +(defvar spray--margin-string "" + "Currently not used.") (defvar spray--base-overlay nil) (defvar spray--orp-overlay nil) (defvar spray--running nil) @@ -79,6 +90,14 @@ (defvar spray--saved-buffer-face nil) (defvar spray--saved-restriction nil) +;; * utility functions + +(defun spray-set-margins () + "Setup spray--margin-string" + (setq spray--margin-string + (concat (make-string spray-margin-top 10) ;; 10 = ascii newline + (make-string spray-margin-left 32)))) ;; 32 = ascii space + ;; * the mode ;;;###autoload @@ -101,9 +120,8 @@ (overlay-put spray--base-overlay 'priority 100) (overlay-put spray--base-overlay 'face 'spray-base-face) (overlay-put spray--orp-overlay 'priority 101) - (overlay-put spray--orp-overlay 'face 'spray-orp-face) - (add-hook 'pre-command-hook 'spray--pre-command-handler) - (spray-start/stop 1)) + (overlay-put spray--orp-overlay 'face 'spray-accent-face) + (spray-start)) (t (setq cursor-type spray--saved-cursor-type) (if spray--saved-restriction @@ -116,13 +134,12 @@ (buffer-face-mode 1))) (delete-overlay spray--base-overlay) (delete-overlay spray--orp-overlay) - (remove-hook 'pre-command-hook 'spray--pre-command-handler) - (spray-start/stop -1)))) + (spray-stop)))) -(defun spray--pre-command-handler () - (unless (memq this-command - '(spray-forward-word spray-backward-word spray-start/stop)) - (spray-mode -1))) +(defun spray-quit () + "Exit spray mode." + (interactive) + (spray-mode -1)) (defun spray--word-at-point () (skip-chars-backward "^\s\t\n") @@ -143,8 +160,10 @@ (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)) + (spray-set-margins) + (overlay-put spray--base-overlay 'before-string + (concat spray--margin-string + (make-string (- 5 (- orp beg)) ?\s))) (narrow-to-region beg end))) (defun spray--update () @@ -161,33 +180,68 @@ ;; * interactive commands -(defun spray-start/stop (&optional switch) +(defun spray-start/stop () + "Toggle pause/unpause spray." (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))) + (or (spray-stop) (spray-start))) + +(defun spray-stop () + "Pause spray. +Returns t if spray was unpaused." + (interactive) + (prog1 spray--running + (when spray--running + (cancel-timer spray--running) + (setq spray--running nil)))) + +(defun spray-start () + "Start / resume spray." + (interactive) + (setq spray--running + (run-with-timer 0 (/ 60.0 spray-wpm) 'spray--update))) + (defun spray-forward-word () (interactive) - (when spray--running (spray-start/stop -1)) + (spray-stop) (widen) (skip-chars-forward "\s\t\n") (spray--word-at-point)) (defun spray-backward-word () (interactive) - (when spray--running (spray-start/stop -1)) + (spray-stop) (widen) (skip-chars-backward "^\s\t\n") (skip-chars-backward "\s\t\n") (spray--word-at-point)) +(defun spray-faster () + "Increases speed. + +Increases the wpm (words per minute) parameter. See the variable +`spray-wmp'." + (interactive) + (spray-inc-wpm 20)) + +(defun spray-slower () + "Decreases speed. + +Decreases the wpm (words per minute) parameter. See the variable +`spray-wmp'." + (interactive) + (spray-inc-wpm -20)) + +(defun spray-inc-wpm (delta) + (let ((was-running spray--running)) + (spray-stop) + (when (< 10 (+ spray-wpm delta)) + (setq spray-wpm (+ spray-wpm delta))) + (and was-running (spray-backward-word)) + (message "spray wpm: %d" spray-wpm) + (when was-running + (spray-start)))) + ;; * provide (provide 'spray)