X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=spray.el;h=48819cb12ad2d42ea97c30bf760044f195ce00ef;hb=9f3a3bd2793955083a394d2e527209bc273e0d57;hp=a33e7295da9b94834a17ec48e72ecafa35617b81;hpb=746151f7b3e2435caa1d44225316b241f8749904;p=spray diff --git a/spray.el b/spray.el index a33e729..48819cb 100644 --- a/spray.el +++ b/spray.el @@ -1,16 +1,65 @@ +;;; cedit.el --- a speed reading mode + +;; Copyright (C) 2014 zk_phi + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2 of the License, or +;; (at your option) any later version. +;; +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with this program; if not, write to the Free Software +;; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +;; Author: zk_phi +;; URL: http://hins11.yu-yake.com/ +;; Version: 0.0.1 + +;;; Commentary: + +;; Put this script into a "load-path"ed directory, and load it in your +;; init file. +;; +;; (require 'spray) +;; +;; Then you may run spray with "M-x spray-mode". Binding some keys may +;; also be useful. +;; +;; (global-set-key (kbd "") 'spray-mode) +;; +;; For more informations, see Readme.org. + +;;; Change Log: +;; 0.0.0 test release +;; 0.0.1 add spray-set-margins + +;;; Code: + (require 'face-remap) -;; custom +;; * customizable vars + (defvar spray-wpm 400 "words/min") (defvar spray-height 400 "height of characters") + (defvar spray-mode-map (let ((km (make-sparse-keymap))) (define-key km (kbd "SPC") 'spray-start/stop) (define-key km (kbd "h") 'spray-backward-word) - (define-key km (kbd "") 'spray-backward-word) (define-key km (kbd "l") 'spray-forward-word) + (define-key km (kbd "") 'spray-backward-word) (define-key km (kbd "") 'spray-forward-word) - km)) + (define-key km (kbd "f") 'spray-faster) + (define-key km (kbd "s") 'spray-slower) + km) + "keymap for spray-mode buffers") + +;; * faces (make-face 'spray-base-face) (set-face-attribute 'spray-base-face nil @@ -23,7 +72,9 @@ :overline (face-foreground 'default) :underline (face-foreground 'default)) -;; internal variables +;; * internal vars + +(defvar spray--margin-string "") (defvar spray--base-overlay nil) (defvar spray--orp-overlay nil) (defvar spray--running nil) @@ -32,6 +83,17 @@ (defvar spray--saved-buffer-face nil) (defvar spray--saved-restriction nil) +;; * utility functions + +(defun spray-set-margins (left above) + "add margins before/above the spray text. each arguments can be +an integer or a float value." + (setq spray--margin-string + (propertize " " 'display `((space-width ,left) (height ,(1+ above)))))) + +;; * the mode + +;;;###autoload (define-minor-mode spray-mode "spray mode" :init nil @@ -70,8 +132,7 @@ (spray-start/stop -1)))) (defun spray--pre-command-handler () - (unless (memq this-command '(spray-forward-word - spray-backward-word spray-start/stop)) + (unless (string-match "^spray-" (symbol-name this-command)) (spray-mode -1))) (defun spray--word-at-point () @@ -93,8 +154,9 @@ (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)) + (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 () @@ -109,7 +171,7 @@ (skip-chars-forward "\s\t\n") (spray--word-at-point))))) -;; commands +;; * interactive commands (defun spray-start/stop (&optional switch) (interactive) @@ -138,4 +200,34 @@ (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-start/stop -1) + (when (< 10 (+ spray-wpm delta)) + (setq spray-wpm (+ spray-wpm delta))) + (spray-backward-word) + (message "spray wpm: %d" spray-wpm) + (when was-running + (spray-start/stop 1)))) + +;; * provide + (provide 'spray) + +;;; spray.el ends here