Code Monkey home page Code Monkey logo

spray's Introduction

spray.el

A speed reading mode for Emacs

Screencast

screencast.gif

The story continues at gnu.org

Installation

Put spray.el into a “load-path”ed directory, and load it in your init file.

(require 'spray)

Then you can start spraying from the cursor position with M-x spray-mode. Binding some keys may also be useful.

(global-set-key (kbd "<f6>") 'spray-mode)

Commands

In spray-mode buffers, following commands are available.

spray-start/stop (SPC)
pause or resume spraying
spray-backward-word (h, <left>)
pause and back to the last word
spray-forward-word (l, <right>)
inverse of spray-backward-word
spray-faster (f)
increases speed
spray-slower (s)
decreases speed
spray-quit (q, <return>)
quit spray-mode

Customization

You may customize spray by modifying following items:

  • [Variable] spray-wpm
  • [Variable] spray-height
  • [Variable] spray-margin-top
  • [Variable] spray-margin-left
  • [Variable] spray-ramp
  • [Keymap] spray-mode-map
  • [Face] spray-base-face
  • [Face] spray-accent-face

If your emacs color theme does not work well with spray

You could create a function to toggle the emacs theme to one that works with spray, and then put that in the spray mode hook. For example:

(defun toggle-night ()
 (interactive)
  (if (equal (car custom-enabled-themes) 'naquadah)
      (override-theme 'leuven)
  (override-theme 'naquadah)))
(add-hook 'spray-mode-hook 'toggle-night)

Alternatively, one user found ways to setup a single buffer with better colors, using

He also found this library useful: https://github.com/ShingoFukuyama/ov.el

Feedback, bugs, contributions, all welcome

All on: https://gitlab.com/iankelling/spray

There’s lots of features and enhancements to do. The algorithm and interface could certainly be improved in various ways.

Similar emacs package: speedread

Available in marmalade or github It has several nice features and does not align on an accent character. Eventually I’d like to merge the two packages.

Deficiencies in similar projects which spray.el solves:

The algorithm is inspired from OpenSpritz.

Mostly as of June 28, 2014.

For all other projects:

  • It is very difficult to save your place and come back later. Emacs has lots of built in features like bookmarks or just making a note which make this easy.
  • No keybinds. This is especially useful for common, quickly used functionality like pause and back up.

Specific projects:

  • speed-readerff firefox extension.
  • squirt javascript bookmarklet.
  • OpenSpritz javascript bookmarklet.
    • Very difficult selecting where to start / what exactly to read.
    • Very difficult to figure out where you are within a document.
  • spray website you paste text into.
    • Very difficult to figure out where you are within a document.
  • spread0r Perl program.
    • No apparent way to resize text.
    • Very difficult to figure out where you are within a document.
  • sprits-it website or bookmarklet. Looks most promising of the web based projects.
    • Very difficult selecting where to start / what exactly to read.
    • Somewhat difficult to figure out where you are in a document.

Programs that I, Ian Kelling, didn’t try, and why. They also probably have a lot of the problems listed above.

Downsides compared to similar projects:

  • The emacs learning curve.
  • Would be hard to get running on a phone.

Algorithm details

Main algorithm code location

In ./spray.el, the functions spray--word-at-point, spray--update and spray-start contain the main algorithm of choosing a word, an accent character and an interval to display it. Word splitting is also duplicated the same way as in those functions throughout ./spray.el.

Algorithm translated from code to english

Words are split at space, tab, newline, and emdash characters.

Each word is displayed for (60 / the choosen wpm) seconds, except if the word ends with .!?,;:— or is greater than 9 characters long, in which case it is displayed for twice as long.

When started, an added delay is optionally added, based on the spray-ramp variable. See it’s documentation for details.

The accent location is chosen as the nth character in a word, depending on its length, based on the following table

lengthaccent position
11
2-52
6-93
10-134
14+5

spray's People

Contributors

ian-kelling avatar zk-phi-test avatar syl20bnr avatar zk-phi avatar jakuzure avatar

Stargazers

Egor Abrashov avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.