Package: wpm
wpmis a curses-based UNIX terminal program for measuring and improving your typing
speed (measured in words per minute, or WPM).It depends only on standard Python libraries and therefore works with Python 2,
3 and PyPy.FeaturesOver 4900 quotes in the database, shamelessly stolen from typeracerdata.comExtremely low typing latency!Timer starts when you strike the first keyCompleted text isdarkened, helping you to focus aheadKeep separate scores for, e.g. type of keyboard, layout etc.Saves race scores in a CSV file that is a superset of TypeRacer’s export
format. Loads fine in Excel as well.Launches quickly in your terminal window for “in-between moments”How to installThe recommended way is to install via PyPi$pipinstallwpmThe above usually requiressudo. If you don’t want to install it
system-wide, you can usepip install wpm--user.Remember to check for upgrades withpip install--upgradewpm. You can also
install it from the source repository with$pipinstall.[--user]To just test the app without installing, typemake run.How to runJust typewpmto start the program. The timer will start when you press the
first key. At any time, you can hit ESCAPE to quit.You can backspace for the current word you’re editing, if you make a mistake.
Mistakes will lower the accuracy score.If you have problems finding thewpmfile, you can also start it by typingpython-mwpm. You can also see options withpython-mwpm--help.Calculating WPMThe WPM is calculated by dividing characters per second by five and then
multiplying that with 60. This is a well-known formula, but gives slightly
higher scores than on sites like typeracer.com. It is, however, good enough to
gauge your typing speed. And it works offline, and with your own texts.Regarding TypeRacer, I really suggest everyone check it out. I use this program
merely to warm up before heading over to typeracer.com, where you can race
against others.How to get the lowest typing latencyRun outside of tmux, and use a really speedy terminal window. On my macOS
system, I found the best latency using the built-in Terminal.app, which easily
beats iTerm. I also found the Kitty terminal to provide very low latency.On Linux, the ultimate typing latency is achieved if you open up one of the
virtual consoles. For example, hit CTRL+ALT+F2 and log in, set yourTERM=xterm-colorand runwpm. Many terms also have quite a high
latency. Try using uxterm if you need to run it inside X.How to improve your typing speedI believe that everyone can type at 100 WPM with enough practice. If you are
currently typing slower than that, my suggestions are:Learn to type without looking at the keyboardLearn to use all your fingersSit up straight and type in a comfortable situationIf you are consistently above 100 WPM:Focus on the next wordType words instead of charactersTrain muscle memoryType hard parts slowerRaise your wristsPractice a little bit every few days, but don’t overdo it. Stop when you’re
tired or feeling unmotivated.Loading custom textsIf you want to type a custom text, run$wpm--loadyourfile.txtIf you use--load, the author will currently be empty, the title will be
the basename of the file. The text ID will be its inode, just to make them
somewhat unique, so your stats will work.You can also bundle up several texts into a single JSON file, usingwpm--load-jsonyourfile.json. It must have the following format:[{"author":"Author Name","title":"Title of Work","text":"The text to type here ...""id":123,},...]Theidis an optional integer. If you leave it out, an increasing,
zero-based integer will be used.Format of race historywpm will save scores in a CSV file in~/.wpm.csv. This file can be loaded
directly into Excel. It uses the same format as TypeRacer, with the addition of
a few extra columns at the end. That means is should be possible to use
existing TypeRacer score history tools with this file with minor modifications.The column order is:ColumnDatatypeExplanationraceintRace number, always increasing and tied to timestampwpmfloatThe average WPM for that quote that single timeaccuracyfloatFrom 0 to 1, where 1 means no mistakesrankintAlways 1racersintAlways 1text_idintItem number of text in given databasetimestampstrUTC timestamp in strptime format%Y-%m-%d %H:%M:%S.%fdatabasestrEither “default” or the basename of the file usedtagstrA user supplied tag for that score (e.g., keyboard)Should there be any problem saving or loading the score history, it will copy
the existing file into~/.wpm.csv.backupand create a new one.Tagging racesIf you use–tag=…to tag your scores, this will be used until you change
it. It is just a free text field that is saved along with each race result. It
is useful to compare how well you are typing in various situations.For example, perhaps you want to check if you are typing faster (but perhaps
less accurate?) on different keyboards, or you are learning a new keyboard
layout like Dvorak or Colemak and then use the tags–tag=qwertyand–tag=dvorak.  If you are learning to touch type, or type with more fingers,
you often start out slower than your normal speed. Tagging is a great way to
keep track of your progress.By runningwpm –stats(or just-s), you will see a table of statistics,
grouped by each tag. It shows things like the average over time, along with
confidence and prediction intervals. An item liken-10means “the last 10
games”.The ~/.wpmrc fileThe first time you start wpm, it writes a.wpmrcfile to your home directory.
It contains user settings that you can change. They are given in the table
below.SectionNameDefaultDescriptioncursesescdelay15Time in ms to wait for follow-up key after ESCcurseswindow_timeout20Time in ms until giving up waiting for a keypress. If negative, wait forever.wpmconfidence_level0.95The confidence level for WPM statisticswpmcpm0If positive, report CPM in stats instead of WPMwpmtab_spaces1Number of spaces to expand tabs towpmwrap_width-1If positive, wrap text at this widthxterm256colorsColor codes for 256-color terminals (foreground, background)xtermcolorsColor codes for ordinary terminals (foreground, background)Development featuresYou can enable certain unofficial features by seting the environment variableWPM_DEVFEATURES=feature1:feature2:etc..Look in the filewpm/devfeatures.pyfor a list.LicenseCopyright 2017, 2018 Christian Stigen LarsenDistributed under the GNU Affero General Public License (AGPL) v3 or later. See
the file LICENSE.txt for the full license text. This software makes use of open
source software.The quotes database isnotcovered by the AGPL!