Git Product home page Git Product logo

speedread's Introduction

speedread

A simple terminal-based open source Spritz-alike.

This command line filter shows input text as a per-word RSVP (rapid serial visual presentation) aligned on optimal reading points. This kind of input mode allows reading text at a much more rapid pace than usual as the eye can stay fixed on a single place.

Basic Example

cat tea.txt | ./speedread -w 250

The default of 250 words per minute is very timid, designed so that you get used to this. Be sure to try cranking this up, 500wpm should still be fairly easy to follow even for beginners.

250wpm example 500wpm example 750wpm example 1000wpm example

Controls

speedread is slightly interactive, with these controls accepted:

  • [ - slow down by 10%
  • ] - speed up by 10%
  • space - pause (and show the last two lines of context)

Integration Recipes

You can connect mutt with speedread by putting a macro like this in your ~/.muttrc (or pressing ':' in running mutt and pasting it):

macro pager R "<enter-command>set pipe_decode=yes<enter>v|grep -v '^>' | ~/speedread/speedread<enter><enter-command>unset pipe_decode<enter>q" "speedread"

Then, just press R when viewing a message. Unfortunately, it does not work with non-ASCII messages (probably due to mutt limitations).

TODO

Not sure if I will ever get around to these...

  • Better word timing! Instead of just pausing longer at commas and full-stops, distribute time better. Some short words like "not" and "can" could often get missed the way things are now.
  • Support for seeking back/forward.
  • Automatically adjust wpm on trained content difficulty (look-ahead)?
  • More controls, explore how can interactivity enhance usefulness of this.
  • Make various timing and ORP coefficients configurable.
  • Add a (Cairo-based?) simplistic graphical frontend (keeping with the filter philosophy). This would allow better eye guidance and large font.
  • An elinks-based recipe for reading websites this way.

Check out also OpenSpritz or spritz-js if you want to get this functionality in the web context.

speedread's People

Contributors

and-reas-se avatar durka avatar h3xx avatar matthewfranglen avatar nfedyashev avatar pasky avatar ph-7 avatar readmecritic avatar trironkk avatar webstrand avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

speedread's Issues

-w: command not found?

I tried your example with my file and it hasn't worked. Could you tell me what am I doing wrong?

I add the following
cat README.txt | -w 250

and get this in bash and zsh
-w: command not found

Just Text, Minimal View

Would it be possible to add a flag so no information is printed with the current word? For example, by default, it shows something like:

 netctl 250 wpm

With the minimal view, however, it would only show:

 netctl

Thanks :)

Errors are printed while using the program

Now and then the program will print errors.

For example:

Use of the encoding pragma is deprecated at speedread-original/speedread line 39.

and

99918 wpmBytes implicitly upgraded into wide characters as iso-8859-1 at speedread-original/speedread line 194.

This is fixed by some minimal changes as proposed in this pull-request: #21

Fix for Arabic alphabets

I have a lot of reading in Persian to do. The files are available as txt, but speedread seems to have some hiccups with Arabic alphabets.

Well, actually it's somewhat working out of the box, only that the current reading speed and the word to read change positions for some reason. Can someone point me into the right direction for fixing this?

grafik

Feature requests

A few things that came to mind when using this:

  • Possibility to increase font size. I know that increasing my terminal font size would do the trick, but I'd like to keep my terminal configuration intact, but would like to increase just the speed reader text font size a bit to make it easier on the eyes.
  • Possibility to configure how many words to show. I find it a bit difficult to keep up with the context, when only one word is showing, and found out a few other speed readers where one could set the amount of words to show at the same time. Three words seemed like a good amount at least for me.

Thanks for your time on the project! Keep up the good work.

Dependencies?

Hi,

I'm getting the following error trying to run the example:

Can't locate Term/Screen.pm in @INC (you may need to install the Term::Screen module) (@INC contains: /usr/lib/perl5/site_perl /usr/share/perl5/site_perl /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/core_perl /usr/share/perl5/core_perl .) at /home/krypt0n/bin/speedread line 36.
BEGIN failed--compilation aborted at /home/krypt0n/bin/speedread line 36.

Well, probably I need http://search.cpan.org/~jstowe/Term-Screen-1.03/Screen.pm, anything else?
Would be nice if you could add a full list of all dependencies in the README.

Paused context behaviour

Often when paused, the highlit word is at the begining of physical line and you can't read the text prior to it to see a missed word.

Ideally (for me), pausing would place the highlit word at the end of the last line and fill the terminal right up with prior text or center the highlit word and fill in the terminal to and from it.

TL;DR Paused context is myopic!

Bytes implicitly upgraded into wide characters as iso-8859-1

Greetings!

Using the tea.txt example, I'm occasionally getting this error:

Bytes implicitly upgraded into wide characters as iso-8859-1 at /home/rtucker/bin/speedread line 172

I'm using xfce4-terminal on Linux Mint 16, and en_US.UTF-8 is my language. This is with revision fc18f1b.

Thanks!

(master) rtucker@racer-x:~/dev/speedread$ speedread tea.txt 
                    v
                  golden:                                       332 wpmBytes implicitly upgraded into wide characters as iso-8859-1 at /home/rtucker/bin/speedread line 172
                   has                                          332 wpmBytes implicitly upgraded into wide characters as iso-8859-1 at /home/rtucker/bin/speedread line 172
                   and                                          332 wpmBytes implicitly upgraded into wide characters as iso-8859-1 at /home/rtucker/bin/speedread line 172
                   tea.                                         332 wpmBytes implicitly upgraded into wide characters as iso-8859-1 at /home/rtucker/bin/speedread line 172
                   small                                        332 wpm
 49.71s, 230 words, 1006 letters, 277.61 true wpm

Please tag a commit

I created a Formula for home-brew but home-brew maintainers want to have a tagged commit to point to for the download. Therefore I would really like to see a tag so the Formula can be pushed upstream.

Use of undefined value

Hello,

When I try and run your script under Strawberry Perl, I get undefined value errors on $ch, $self and ver.

They seem to loop over and over, giving endless errors.

Any ideas?

License?

I'd like to make use of this in a (free, open-source) project; would you mind putting it under a license?

Thanks!

P.S. My vote is for Apache 2.0, fwiw. :)

Some keys are being processed as if they were '['

For example, if I start the program using cat tea.txt | ./speedread, and then press the right arrow key twice, it will go from 250 to 225 WPM. Repeatedly pressing this key decreased the speed further. The \ key does nothing on it's own, but pressing an arrow key and then \, makes it decrease in speed once.

speedread + espeak

I am trying to figure out how to use
speedread with espeak. I think I have to

cat book.txt | ./speedread -w 230 | espeak

Works, but I cannot see the text words going by. I can
only hear espeak - speaking the book

Feature request: flash words

Long time ago I used a fast reading app which had a feature I never seen again in other apps but it was the most useful one.

Basically it "removed" the words before to show the next one, this means that the words "flashes" (show word1, unshow it, show word2, unshow it...) instead of showing them linearly one after the other, this increases the visibility of the chars for the brain by really-knowing what chars are drawn, instead of retaining the previous pixels in your memory

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.