[Commits] typing-turtle branch master updated.

Wade Brainerd wadetb at gmail.com
Wed Dec 31 17:05:51 EST 2008


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "/home/olpc-code/git/activities/typing-turtle".

The branch, master has been updated
       via  b6204b0afe9ba2b3bc6351705409648406351c7b (commit)
      from  cc20790707b816f860a4cb49afa2e6a692e1c5f5 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

 TODO                              |   13 ++-----
 keyboard.py                       |   66 +++++++++++++++++++++++++++----------
 lessonbuilder.py                  |   36 +++++++++++++++++---
 lessons/en_US/MAKELESSONS         |   18 +++-------
 lessons/en_US/MAKETESTLESSONS     |   11 ++++++
 lessons/en_US/badwords.txt        |    2 +
 lessons/en_US/bottomrow.lesson    |    2 +-
 lessons/en_US/homerow.lesson      |    2 +-
 lessons/en_US/leftcapital.lesson  |    2 +-
 lessons/en_US/rightcapital.lesson |    2 +-
 lessons/en_US/test.lesson         |    2 +-
 lessons/en_US/toprow.lesson       |    2 +-
 lessonscreen.py                   |   16 ++++----
 mainscreen.py                     |    2 +-
 14 files changed, 114 insertions(+), 62 deletions(-)
 create mode 100755 lessons/en_US/MAKETESTLESSONS
 create mode 100644 lessons/en_US/badwords.txt

- Log -----------------------------------------------------------------
commit b6204b0afe9ba2b3bc6351705409648406351c7b
Author: Wade Brainerd <wadetb at gmail.com>
Date:   Wed Dec 31 22:05:37 2008 +0000

    Progress towards release.

diff --git a/TODO b/TODO
index c7138e3..73ce3fd 100644
--- a/TODO
+++ b/TODO
@@ -14,7 +14,7 @@ First Release
 - Ability of lessons to list medals in other lessons as prerequisites.  Disable unavailable lessons.
 - Some sort of lesson sorting criteria.
 - Split into file-per-screen.
-+ Scroll lessons list to the first non-medaled lesson at startup.  Or just remember scroll position.
+- Scroll lessons list to the first non-medaled lesson at startup.  Or just remember scroll position.
 + Status message on the main screen.  "You unlocked a new lesson!" for example.  Eventually have the turtle 'say' it.
 - Implement a long text copying lesson and fix bugs in the scrolling and typing.
 + Graphical WPM and accuracy meters.
@@ -26,28 +26,22 @@ First Release
 - Change key shown when modified is held.
 - Indicate next key to press on keyboard.
 - Translate keyboard to native key layout.
-+ Use keyboard geometry file from system instead of hardcoding.
 + Make medal WPM adjustable somehow?  Perhaps a settable Goal WPM?
 + Highlight regions of keyboard, color by finger.
-+ Allow lessons to choose between forcing correct keypresses and allowing incorrect ones (with support for Backspace).
 + Artwork and animations.
-  + Background picture in main screen.
   + Speed meter picture?
   + Accuracy meter picture?
-  + Animated turtle in main screen.
-  + Medal pictures: Bronze, Silver, Gold.
-  + Icons for remaining keyboard keys.
-  + Overlay of correct hand position on keyboard.
 + Sound effects.
   + Welcome to the activity sound.
   + Speed up / slow down sounds when WPM crosses threshold: Slow, Medium, Fast.
   + Medal award sounds for each medal type: None, Bronze, Silver, Gold.  Applause sound.
   + Incorrect key pressed tick sound. 
 + Develop lessons.
-  + Continue to develop lessons for all keys on the keyboard.
+  - Continue to develop lessons for all keys on the keyboard.
   - Develop 'focus' lessons e.g. fj.
   - Mark some lessons as "locational" versus "textual" and translate from the English keyboard to native.  Ex: Home row, Left hand, Numbers, etc.
   - Give each lesson criteria for each medal type based on Accuracy, WPM.
+- Automatically generate lessons similar to 'home row' based on a list of keys.
 
 Future Release
 + Goal support with progress reporting.  WPM, Accuracy, Entire keyboard learned, etc.
@@ -55,7 +49,6 @@ Future Release
 + History screen: List of lessons completed with statistics.
 + Progress screen: Line graphs of Accuracy, WPM over time.
 + Lesson editor activity or mode.
-+ Automatically generate lessons similar to 'home row' based on a list of keys.
 
 Balloon Game
 
diff --git a/keyboard.py b/keyboard.py
index 1aa6101..e71fba9 100644
--- a/keyboard.py
+++ b/keyboard.py
@@ -223,7 +223,7 @@ DEFAULT_LAYOUT = {
                 {'key-label':"",'key-width':55}, # LHand
                 {'key-scan':0x40,'key-label':"alt",'key-width':55}, # LAlt
                 {'key-scan':0x41,'key-finger':'RT','key-hand-image':'OLPC_Rhand_SPACE.svg','key-width':325}, # Spacebar
-                {'key-scan':0x6c,'key-label':"alt",'key-width':55}, # RAlt
+                {'key-scan':0x6c,'key-label':"altgr",'key-width':55}, # AltGr
                 {'key-label':"",'key-width':55}, # RHand
                 {'key-scan':0x71,'key-label':""}, # Left 
                 {'key-scan':0x74,'key-label':""}, # Down
@@ -345,6 +345,31 @@ class KeyboardData:
         else:
             return None, None, None
 
+    def get_key_state_group_for_letter(self, letter):
+        """Returns a (key, modifier_state) which when pressed will generate letter."""
+        # Special processing for the enter key.
+        if letter == '\n' or letter == PARAGRAPH_CODE:
+            return self.find_key_by_label('enter'), 0, 0
+
+        # Convert unicode to GDK keyval.
+        keyval = gtk.gdk.unicode_to_keyval(ord(letter))
+        
+        # Find list of key combinations that can generate this keyval.
+        entries = self.keymap.get_entries_for_keyval(keyval)
+        if not entries:
+	    return None, 0, 0
+
+        keycode, group, level = entries[0]
+
+        # TODO: Level -> state calculations are hardcoded to what the XO keyboard does.
+        # They were discovered through experimentation.
+        state = 0
+        if level & 1: # Level bit 0 corresponds to the SHIFT key.
+            state |= gtk.gdk.SHIFT_MASK
+        if level & 2: # Level bit 1 corresponds to the ALTGR key.
+            state |= gtk.gdk.MOD5_MASK
+
+        return self.key_scan_map.get(keycode), state, group
 
 class KeyboardWidget(KeyboardData, gtk.DrawingArea):
     """A GTK widget which implements an interactive visual keyboard, with support
@@ -368,10 +393,11 @@ class KeyboardWidget(KeyboardData, gtk.DrawingArea):
         
         self.draw_hands = False
         
-        # Load SVG files.
-        bundle_path = sugar.activity.activity.get_bundle_path() 
+        # Load stock SVG files.
         self.lhand_home = self._load_image('OLPC_Lhand_HOMEROW.svg')
         self.rhand_home = self._load_image('OLPC_Rhand_HOMEROW.svg')
+        self.lhand_shift = self._load_image('OLPC_Lhand_SHIFT.svg')
+        self.rhand_shift = self._load_image('OLPC_Rhand_SHIFT.svg')
         
         # Connect keyboard grabbing and releasing callbacks.        
         self.connect('realize', self._realize_cb)
@@ -495,26 +521,27 @@ class KeyboardWidget(KeyboardData, gtk.DrawingArea):
         rhand_image = self.rhand_home
 
         if self.hilite_letter:
-            # Find the key that would generate this letter.
-            key = None
-            if self.hilite_letter == PARAGRAPH_CODE:
-                key = self.find_key_by_label('enter')
-            else:
-                keyval = gtk.gdk.unicode_to_keyval(ord(self.hilite_letter))
-                entries = self.keymap.get_entries_for_keyval(keyval)
-                if entries:
-                    code = entries[0][0]
-                    key = self.key_scan_map.get(code)
-
+            key, state, group = self.get_key_state_group_for_letter(self.hilite_letter) 
             if key:
                 handle = key['key-hand-image-handle']
                 finger = key['key-finger']
+
+                # Assign the key image to the correct side.
                 if finger and handle:
                     if finger[0] == 'L':
                         lhand_image = handle
                     else:
                         rhand_image = handle
 
+                # Put the other hand on the SHIFT key if needed.
+                if state & gtk.gdk.SHIFT_MASK:
+                    if finger[0] == 'L':
+                        rhand_image = self.rhand_shift 
+                    else:
+                        rhand_image = self.lhand_shift 
+
+                # TODO: Do something about ALTGR.
+
         lhand_image.render_cairo(cr)
         rhand_image.render_cairo(cr)
 
@@ -554,8 +581,11 @@ class KeyboardWidget(KeyboardData, gtk.DrawingArea):
             self.active_group = event.group
             self.active_state = state
             self.queue_draw()
+
+            info = self.keymap.translate_keyboard_state(
+                0x18, self.active_state, self.active_group)
             
-            #print "press %d state=%x group=%d" % (event.hardware_keycode, self.active_state, self.active_group)
+            print "press %d state=%x group=%d level=%d" % (event.hardware_keycode, self.active_state, self.active_group, info[2])
         
         return False
 
@@ -564,7 +594,7 @@ class KeyboardWidget(KeyboardData, gtk.DrawingArea):
         if self.draw_hands:
             self.queue_draw()
         else:
-            key, dummy, dummy = self.find_key_by_letter(self.hilite_letter)
+            key, dummy, dummy = self.get_key_state_group_for_letter(self.hilite_letter)
             if key:
                 self._expose_key(key)
 
@@ -574,10 +604,10 @@ class KeyboardWidget(KeyboardData, gtk.DrawingArea):
         if self.draw_hands:
             self.queue_draw()
         else:
-            key, dummy, dummy = self.find_key_by_letter(old_letter)
+            key, dummy, dummy = self.get_key_state_group_for_letter(old_letter)
             if key:
                 self._expose_key(key)
-            key, dummy, dummy = self.find_key_by_letter(letter)
+            key, dummy, dummy = self.get_key_state_group_for_letter(letter)
             if key:
                 self._expose_key(key)
 
diff --git a/lessonbuilder.py b/lessonbuilder.py
index 983cfa6..a25507c 100644
--- a/lessonbuilder.py
+++ b/lessonbuilder.py
@@ -19,6 +19,9 @@
 import os, sys, random, json, locale, re
 from gettext import gettext as _
 
+# For modifier constants.
+import gtk
+
 # Set up remote debugging.
 #import dbgp.client
 #dbgp.client.brkOnExcept(host='192.168.1.104', port=12900)
@@ -314,12 +317,33 @@ def build_lesson(
             % { 'name': name, 'keynames': keynames },
         'key', '\n')
 
-    for key in new_keys:
-        k = kb.find_key_by_letter(key)
-        add_step(lesson,
-            _('Press the %(name)s key using your %(finger)s finger.') \
-                % { 'name': key, 'finger': FINGERS[k['key-finger']] },
-            'key', key)
+    for letter in new_keys:
+        key, state, group = kb.get_key_state_group_for_letter(letter)
+
+        finger = FINGERS[key['key-finger']]
+
+        if state == gtk.gdk.SHIFT_MASK:
+            # Choose the finger to press the SHIFT key with.
+            if key['key-finger'][0] == 'R':
+                shift_finger = FINGERS['LP']
+            else:
+                shift_finger = FINGERS['RP']
+
+            instructions = _('Press and hold the SHIFT key with your %(finger)s finger, ') % { 'finger': shift_finger }
+            instructions += _('then press the %(letter)s key with your %(finger)s finger.') % { 'letter': letter, 'finger': finger }
+
+        elif state == gtk.gdk.MOD5_MASK:
+            instructions = _('Press and hold the ALTGR key, ') 
+            instructions += _('then press the %(letter)s key with your %(finger)s finger.') % { 'letter': letter, 'finger': finger }
+
+        elif state == gtk.gdk.SHIFT_MASK | gtk.gdk.MOD5_MASK:
+            instructions = _('Press and hold the ALTGR and SHIFT keys, ')
+            instructions += _('then press the %(letter)s key with your %(finger)s finger.') % { 'letter': letter, 'finger': finger }
+
+        else:
+            instructions = _('Press the %(letter)s key with your %(finger)s finger.') % { 'letter': letter, 'finger': finger }
+
+        add_step(lesson, instructions, 'key', letter)
 
     add_step(lesson,
         _('Practice typing the keys you just learned.'),
diff --git a/lessons/en_US/MAKELESSONS b/lessons/en_US/MAKELESSONS
index 1585fb2..d1e4f3c 100755
--- a/lessons/en_US/MAKELESSONS
+++ b/lessons/en_US/MAKELESSONS
@@ -3,14 +3,6 @@
 # Script for generating en_US lesson content for Typing Turtle.
 #
 
-python ../../lessonbuilder.py --make-key-lesson \
-    --title="Test" \
-    --desc="Quick dummy lesson" \
-    --keys=A \
-    --wordlist=2of12.txt \
-    --order=-1 \
-    --output=test.lesson
-
 # Generate the introductory lesson.
 python ../../lessonbuilder.py --make-intro-lesson --order=0 --output=intro.lesson
 
@@ -19,7 +11,7 @@ python ../../lessonbuilder.py --make-key-lesson \
     --title="The Home Row" \
     --desc="This lesson teaches you the a, s, d, f, g, h, j, k and l keys \nin the middle of the keyboard.\nThese keys are called the Home Row." \
     --keys=asdfghjkl \
-    --wordlist=2of12.txt \
+    --wordlist=2of12.txt --badwordlist=badwords.txt \
     --order=1 \
     --output=homerow.lesson
     
@@ -27,7 +19,7 @@ python ../../lessonbuilder.py --make-key-lesson \
     --title="The Top Row" \
     --desc="This lesson teaches you the q, w, e, r, t, y, u, i, o and p keys \non the top row of the keyboard." \
     --keys=qwertyuiop --base-keys=asdfghjkl \
-    --wordlist=2of12.txt \
+    --wordlist=2of12.txt --badwordlist=badwords.txt \
     --order=2 \
     --output=toprow.lesson
 
@@ -35,7 +27,7 @@ python ../../lessonbuilder.py --make-key-lesson \
     --title="The Bottom Row" \
     --desc="This lesson teaches you the z, x, c, v, b, n and m keys \non the bottom row of the keyboard." \
     --keys=zxcvbnm --base-keys=asdfghjklqwertyuiop \
-    --wordlist=2of12.txt \
+    --wordlist=2of12.txt --badwordlist=badwords.txt \
     --order=3 \
     --output=bottomrow.lesson
 
@@ -45,7 +37,7 @@ python ../../lessonbuilder.py --make-key-lesson \
     --desc="This lesson teaches you the CAPITAL letters which are typed by your left hand.\nThese are Q, W, E, R, T, A, S, D, F, G, Z, X, C, V and B." \
     --keys=QWERTASDFGZXCVB \
     --base-keys=abcdefghijklmnopqrstuvwxyz \
-    --wordlist=2of12.txt \
+    --wordlist=2of12.txt --badwordlist=badwords.txt \
     --order=4 \
     --output=leftcapital.lesson
 
@@ -54,6 +46,6 @@ python ../../lessonbuilder.py --make-key-lesson \
     --desc="This lesson teaches you the CAPITAL letters which are typed by your right hand.\nThese are Y, U, I, O, P, H, J, K, L, B, N, and M." \
     --keys=YUIOPHJKLBNM \
     --base-keys=abcdefghijklmnopqrstuvwxyzQWERTASDFGZXCVB \
-    --wordlist=2of12.txt \
+    --wordlist=2of12.txt --badwordlist=badwords.txt \
     --order=5 \
     --output=rightcapital.lesson
diff --git a/lessons/en_US/MAKETESTLESSONS b/lessons/en_US/MAKETESTLESSONS
new file mode 100755
index 0000000..56f39d2
--- /dev/null
+++ b/lessons/en_US/MAKETESTLESSONS
@@ -0,0 +1,11 @@
+#!/bin/bash
+#LANG=en_EN
+
+python ../../lessonbuilder.py --make-key-lesson \
+    --title="Test" \
+    --desc="Quick dummy lesson" \
+    "--keys=AæΩ" \
+    --wordlist=2of12.txt --badwordlist=badwords.txt \
+    --order=-1 \
+    --output=test.lesson
+
diff --git a/lessons/en_US/badwords.txt b/lessons/en_US/badwords.txt
new file mode 100644
index 0000000..2a549a7
--- /dev/null
+++ b/lessons/en_US/badwords.txt
@@ -0,0 +1,2 @@
+coitus
+ass
diff --git a/lessons/en_US/bottomrow.lesson b/lessons/en_US/bottomrow.lesson
index f9c4bf9..f30051b 100644
--- a/lessons/en_US/bottomrow.lesson
+++ b/lessons/en_US/bottomrow.lesson
@@ -1 +1 @@
-{"order":3,"steps":[{"text":"\n","mode":"key","instructions":"Welcome to the The Bottom Row lesson!\n\nIn this lesson, you will learn the z, x, c, v, b, n and m keys.  Press the Enter key when you are ready to begin!"},{"text":"z","mode":"key","instructions":"Press the z key using your left pinky finger."},{"text":"x","mode":"key","instructions":"Press the x key using your left ring finger."},{"text":"c","mode":"key","instructions":"Press the c key using your left middle finger."},{"text":"v","mode":"key","instructions":"Press the v key using your left index finger."},{"text":"b","mode":"key","instructions":"Press the b key using your left index finger."},{"text":"n","mode":"key","instructions":"Press the n key using your right index finger."},{"text":"m","mode":"key","instructions":"Press the m key using your right index finger."},{"text":"xx xx zz zz bb zz cc mm cc cc bb xx cc mm vv cc zz cc nn bb bb xx vv bb xx mm nn bb vv nn xx nn mm mm vv mm nn nn mm vv","mode":"text","
 instructions":"Practice typing the keys you just learned."},{"text":"cc mm nn vv vv mm nn bb xx zz mm cc mm bb mm nn zz bb nn mm mm nn vv cc vv cc xx bb xx nn cc cc xx mm bb nn bb cc zz zz","mode":"text","instructions":"Keep practicing the new keys."},{"text":"zm cn mb nz nx xn bv zv nb cn nm cn cm nx nb mn nc mn bb nc cc nz xn nx bv mc nn xn mv mv bv nn mn nn cz nc mc mv zz cz xc xb nz cn mv xc nx bn zz xc","mode":"text","instructions":"Now put the keys together into pairs."},{"text":"bv mb cz xc nc bm nm bb mv xb bv mb bc bc nx bv bn mm bn nv xn bz zm nb cc mn nm bc cz bn mb xc nm cz bc xc bc vv cc mn zm zz zv mb zv cz bv cc xb bz","mode":"text","instructions":"Keep practicing key pairs."},{"text":"xl ec ix xe ev bh ib mb xe un fb ce nk tm db gm ab bv ox dz bb en ec bi gc mb ce cq iv mb nx bs iv zi hc mm mw um tz bd nj dz ct co mw ez zz ax bl bc","mode":"text","instructions":"Now practice all the keys you know."},{"text":"nc nw tz uz oc tm ci wz ch cz av yn vu bf kb nm cy 
 vr bu fm va iz sc nh ox mj co bw nr zu zo ve sc bn mh pb nm nw bw oz nv eb om hc iz zp ve nr zz fc","mode":"text","instructions":"Almost done.  Keep practicing all the keys you know."},{"text":"mammoth encumber official obtrude renewed pond dopiness fathom intoner observer vittles blockade libelous tailwind century sac mistrust exhume poetical graphics mismatch chicle filmy meditate sandal magnate piracy christen legible whiz unswayed winded comply hunting factness hunch gamete chemise rich duration tackler overlong outbid mosey dweeb buyback rumba coercive unkempt unbelief honors gimpy garlicky nip calamity danger behaved trampler brat actual ribbed spectrum cathodic male jangle keno barring barker negation medic strobe crescent front snuck knell tiny confetti approve vile infusion caseload marmoset cenobite tinsel blink bipolar franc enviably enquiry uncombed manger jangle bare abaft gloomily parvenu maraud choicer unstuck bellows","mode":"text","instructions":"Time to typ
 e real words."},{"text":"wicket sedan bunghole evict bass butcher young bonding residuum ambition coverage research curt shack bestrode offering occupied flanker acrimony nonsense recook sunshade emotion windfall saviour pica chert overate inhabit bailiff narrate planner tenderly unless crania paginate modish filings sincere radiance basketry equinox tendency quiver nondairy misplace smutty saucer joint cleanup piffling covering donate forbad plume signpost rollick backroom bigness amongst violence calamine unwell gibbon fizz scowl occlude matron extoll pueblo scalawag cowboy enlarger warring badinage chickpea villein deluxe misplay siphon genus suitably ganglia granola misdone impulse organist drain gauzy bridal sane burp fungi giant bog conic sympathy sterling privily wick","mode":"text","instructions":"Keep practicing these words."},{"text":"serum reciter stunt criteria gains funnies legman remnant insular seltzer shamrock mnemonic unwashed expound whack peach trouble dae
 mon botany blazon interact ragtime minuend monetary ethylene maharaja smarten maid steaming override clerk excrete flextime grownup elliptic humanist answer curiae frame saunter covert hackles yack silicate fingered atonally newborn machismo riches cloudy taxation temper shanter naughty rescue unmoved fireman polemic rompers blade chintz myelitis cannabis pinky junker chapter math stocky mural backseat magician rapacity peculiar extant inshore motility callous orthodox iamb punditry assembly blow jim madman especial smallish chunky pantry migrate sexual deftness trachea tangy overdose brazen zealous menace sector crawly extreme commend phantasy beeline hindmost ictus honer macrame purveyor leveller crouton chap claim daemonic geranium rioting brave reprice omit annalist brevity naiad daunt ravage snowball naphtha mistaken dirndl abeam unlimber poaching polling fourteen nonsense reenact snobbish convince emphasis madras unbiased sunbath filings collude bask daze thymus dampen
  bitchy stagnant wellness smoulder nomadic thoraces remains mothball abject cleanser vice keynote shrapnel killing swollen owned lyncher reverse whine hungry dingily double huntsman uneven anymore cereal feverish wonk sometime linchpin linkage laburnum spine madam bunco indolent slangy gizmo tourney recall caiman lockup kneed actively puncher bushy scavenge tuner wingtip cap vole doomsday angina lubber","mode":"text","instructions":"Almost finished. Try to type as quickly and accurately as you can!"},{"text":"\n","mode":"key","instructions":"$report"}],"name":"The Bottom Row","medals":[{"wpm":5,"name":"bronze","accuracy":60},{"wpm":10,"name":"silver","accuracy":75},{"wpm":20,"name":"gold","accuracy":90}],"description":"This lesson teaches you the z, x, c, v, b, n and m keys \non the bottom row of the keyboard."}
\ No newline at end of file
+{"order":3,"steps":[{"text":"\n","mode":"key","instructions":"Welcome to the The Bottom Row lesson!\n\nIn this lesson, you will learn the zx, c, v, b, n and m keys.  Press the Enter key when you are ready to begin!"},{"text":"z","mode":"key","instructions":"Press the z key with your left pinky finger."},{"text":"x","mode":"key","instructions":"Press the x key with your left ring finger."},{"text":"c","mode":"key","instructions":"Press the c key with your left middle finger."},{"text":"v","mode":"key","instructions":"Press the v key with your left index finger."},{"text":"b","mode":"key","instructions":"Press the b key with your left index finger."},{"text":"n","mode":"key","instructions":"Press the n key with your right index finger."},{"text":"m","mode":"key","instructions":"Press the m key with your right index finger."},{"text":"nn vv nn mm mm xx bb mm mm cc bb zz nn mm nn nn xx nn xx nn nn vv vv mm bb bb vv zz xx nn zz vv vv zz xx vv cc xx mm cc","mode":"text","instructi
 ons":"Practice typing the keys you just learned."},{"text":"vv cc nn xx mm bb zz zz zz vv xx bb zz bb nn vv vv zz vv vv cc zz vv nn cc zz nn xx cc mm zz vv nn vv bb bb zz vv cc mm","mode":"text","instructions":"Keep practicing the new keys."},{"text":"cn bb zz cc cz nm nx mv zv vv nn cn mm nx nb nv cm cn xc xb mn xb nc nc nv zz cz cn nc nv zz nv xb nm nc nn cn nx bb nc cm mv nz xb nm cm zz mb bz bb","mode":"text","instructions":"Now put the keys together into pairs."},{"text":"xb nc cm mb xb cn zv xb mn nx xb mv mb xn bn cz cc nb bb nn nb nb nn nz cc vv mm zz bn bz cn mm zz bm zm mm nz cn cc cc cc xb bv vv vv nz cn xc cm mn","mode":"text","instructions":"Keep practicing key pairs."},{"text":"ce co bo cu nf mp av ac mi bc iv an mn en tb uv ci zm bd zi fm yb vy tn km bv bi rb eb vr cn bp sn rb yz um ix lm nk ze xh xy sb ix sc tm mf nt cm cy","mode":"text","instructions":"Now practice all the keys you know."},{"text":"bm ym bh nn wc sv sm nr ob ln no nc br ym nn zi nx wz an kv 
 vo yx xs hn nq ex dv nq ba nc nw rc vv mp nx ob mj nq bp bo xf ix mn oz gz oc az nr vr dz","mode":"text","instructions":"Almost done.  Keep practicing all the keys you know."},{"text":"juicily syllabic funnies haven ditz movement infield outreach sagacity endanger crinkled dentist pony minstrel received miser tactful driving net overripe frizz boldness dibs volcano punish inject bubbly corsair beer subsonic taxer particle stung flounce suck swoon organdie ashram boast arranger crawdad slackly macadam causally tarnish plantar drafting telegram leftover virus futurism retaken canola am bootleg bottoms vouch bootleg brand bodied tidings moil embezzle humpback monopoly kibble seconds argument amigo assize bouquet launder buoyancy amaze oration zillion salve wormy pound canopy suburbia priming private behavior bawl cricket cockcrow salvage codger unravel majestic optical handcart forbore mamba denial cry bullshit chatty aviatrix","mode":"text","instructions":"Time to type real wo
 rds."},{"text":"faience slangy haircut oxidizer baseball alcohol farmland cooker lashing carpi vial paycheck menace barbecue kinship osmotic abattoir moue subtotal weevil pimply finitely coachman causal thrum menu viscera transept rice residuum highborn amuck bezel guaranty sown built manned dictum baneful unfroze normally deputize remotely waxwork voter dictum narrow dejected groan cowhide accolade schmaltz consort bylaw scratchy wetting libido cogitate avid knitting decisive smooch conveyor lyric rawboned mink exiguity blister deniable daytime marinara hospice hoecake blazon panther octette matzot gaucho grasping chemist bunny coronae piffling fink woodcut sickout restive gremlin opine mess feasibly rotten vascular reenter chutzpah taboo polemics hysteric helmsman scanner","mode":"text","instructions":"Keep practicing these words."},{"text":"cretin voyageur chiffon bend children chest colleen allusion oink drubbing braise rickshaw coleus squeeze filch unsealed pointy unlea
 sh vest cookout droves effects hewn earmuff mistreat decorum tinge soever shimmery tragic godchild timidly footman crowbar branched scummy corset anger blower panorama womanize plank eschew maze lacrosse rumble tribunal nosiness watchman quizzer assign bigot goodness bedpan fastness luxury might talisman brutish ensue company thump bedstead bitchy slowdown retouch upbraid woodsman caret midmost caldron emir doting barely flamenco flimflam reecho crochet caiman academe dullness handed pocus epoxy origin livelong welch gnomic beatable monogram meaning packager tint banal betwixt somber unzip purloin gimlet inspired jumpy chastise evasion stabbing delusion princely longish crowbar map chess homey sundial epic mugful telecast tun kvetch gender grain ponytail traveled larva mankind paradox saucer tic unbroken warmness gumdrop aphelion match cheerer greenly raunchy burled passably replant epigram jauntily owing screamer forbore man tensile bebop cadenza clang ranch morbid corundum
  infringe gobbler natural furnish traffic seething restrain keenness algebra anally chasten sewing madame turbo knob evenness clobber diver conduct excel vet pickax viable morocco shun criminal finny news voiced blueness ulnae piercing mustard slacken daub vaginal novena trimmer confine cascade abusive claim chanson sigma cast hospice swank succor nicety live","mode":"text","instructions":"Almost finished. Try to type as quickly and accurately as you can!"},{"text":"\n","mode":"key","instructions":"$report"}],"name":"The Bottom Row","medals":[{"wpm":5,"name":"bronze","accuracy":60},{"wpm":10,"name":"silver","accuracy":75},{"wpm":20,"name":"gold","accuracy":90}],"description":"This lesson teaches you the z, x, c, v, b, n and m keys \non the bottom row of the keyboard."}
\ No newline at end of file
diff --git a/lessons/en_US/homerow.lesson b/lessons/en_US/homerow.lesson
index 8ca5311..2aa3c66 100644
--- a/lessons/en_US/homerow.lesson
+++ b/lessons/en_US/homerow.lesson
@@ -1 +1 @@
-{"order":1,"steps":[{"text":"\n","mode":"key","instructions":"Welcome to the The Home Row lesson!\n\nIn this lesson, you will learn the a, s, d, f, g, h, j, k and l keys.  Press the Enter key when you are ready to begin!"},{"text":"a","mode":"key","instructions":"Press the a key using your left pinky finger."},{"text":"s","mode":"key","instructions":"Press the s key using your left ring finger."},{"text":"d","mode":"key","instructions":"Press the d key using your left middle finger."},{"text":"f","mode":"key","instructions":"Press the f key using your left index finger."},{"text":"g","mode":"key","instructions":"Press the g key using your left index finger."},{"text":"h","mode":"key","instructions":"Press the h key using your right index finger."},{"text":"j","mode":"key","instructions":"Press the j key using your right index finger."},{"text":"k","mode":"key","instructions":"Press the k key using your right middle finger."},{"text":"l","mode":"key","instructions":"Press the
  l key using your right ring finger."},{"text":"ss hh hh ll hh ff jj gg ss ss kk ll hh aa hh ll jj ll dd ss gg ss ss hh gg aa ss jj jj ss ff gg gg gg kk kk ss ff ss ff","mode":"text","instructions":"Practice typing the keys you just learned."},{"text":"kk ff hh hh hh dd ll hh ss ll jj jj dd hh aa ss hh aa jj ss aa aa dd hh ss kk ff ll kk gg gg hh gg hh gg ff jj kk ss kk","mode":"text","instructions":"Keep practicing the new keys."},{"text":"gk ja da ja gg gj kf hj lj sg gh kd kh hl ak fg af gk df ja hj kf kd ad sj gl sf ds kh ak dj aa aa sf gl lf fa kl fl hj hd gj aa lg dk hf as dh al ad","mode":"text","instructions":"Now put the keys together into pairs."},{"text":"al dk hh kf gl sd lh hf kl lk ad kd hg ah sd af dd df dd sg ah fl dh gs dd hl dj lh hl ls sa gh fd kf hg ja ss ks kk gj gd fd kd ha gg kf ka gf sf sa","mode":"text","instructions":"Keep practicing key pairs."},{"text":"af ld kh gl gf dl sk lk ds hg sd ff ja kh fs ad hg ls ah dg ad lg dk gg kh sj ha ds gd sg dh fh
  ls ff sj dh kk sf sk sh gf hd ga aj lj gk ja gf dg kj ks ss fa gh hg hk ah gg ss dl ks sk dl kh ks af dd ga df hd hh lf ag sf aa sh gs df fl df sh af sk kh sl gs hf as ha dj aj ak gg ls ff fl hk ll ll sa","mode":"text","instructions":"Almost done.  Keep practicing key pairs."},{"text":"ssh lag all algal ass falls shag da gag gaff salad gall lash da all half fag ll jag fad ass had ll dash glad ash salsa fad had flak slag salsa algal salad gad has hash dash flask lag ask shh gaff flash gas as sh shad hash glad ska shad gad sass lad gag ll sag glad gash shag ad glass as alga dad shah had glad all fag sad algal hah shall hajj hash gall alga slash flak add slag da dad lash all fa sad gad salad gaga sag sad fa lass sh shag falls ssh","mode":"text","instructions":"Time to type real words."},{"text":"lad saga shag has had shag dash sh all aha shad ll half shag falls gaga glad gall flag la sad sag had dad aha as algal ad gash alga jag fag aha flash flash salad halal algal hajj alfal
 fa ash alfalfa da had ask sass halal gala gal shad flash algal gaff ass hash hajj flag alga ad as jag fa glad flash hah ah sh hall flag shag hajj dad sass lash sad ah shag ask salad ask hajj gaga had sash shall la shag ska gaff fall lass ssh fall lad ssh falls gag gall ask lad","mode":"text","instructions":"Keep practicing these words."},{"text":"alfalfa shad glad all add hah lass la flash sad has ah add gas slag as gal has ha ash fa shag saga ass shh gag shag ssh fall shad has alga jag has all fag lass slash hag da gall gal gaff ha shall ha shh gal da alas flash flag shh ad glad salad dad hajj ass fag falls all shah gala sass shag ll ask ash flash hajj algal hash alas fall saga lag lash halal salsa ha gaff half gall shad sad ass shah ll gall gag lad lass shah ah hah halal sag alfalfa hash gash fa ll flask algal alas glad ass sh glad dad sag hash fad fall lass fag ha lash sh glass gal half fa gall flash shag gaga hag la as flak gaga lag sass hajj falls aha gad alas add sad j
 ag flak ass gaga jag flag ssh hah shall algal shall falls hajj gaff all jag algal flash ad ask as ash sash algal shad ah lash gaff hash lass flak fag flask fall shah flask dad aha halal algal ssh gaga aha shad flag ah sass had hag gag gall alfalfa ad alfalfa gag hag half gash","mode":"text","instructions":"Almost finished. Try to type as quickly and accurately as you can!"},{"text":"\n","mode":"key","instructions":"$report"}],"name":"The Home Row","medals":[{"wpm":5,"name":"bronze","accuracy":60},{"wpm":10,"name":"silver","accuracy":75},{"wpm":20,"name":"gold","accuracy":90}],"description":"This lesson teaches you the a, s, d, f, g, h, j, k and l keys \nin the middle of the keyboard.\nThese keys are called the Home Row."}
\ No newline at end of file
+{"order":1,"steps":[{"text":"\n","mode":"key","instructions":"Welcome to the The Home Row lesson!\n\nIn this lesson, you will learn the as, d, f, g, h, j, k and l keys.  Press the Enter key when you are ready to begin!"},{"text":"a","mode":"key","instructions":"Press the a key with your left pinky finger."},{"text":"s","mode":"key","instructions":"Press the s key with your left ring finger."},{"text":"d","mode":"key","instructions":"Press the d key with your left middle finger."},{"text":"f","mode":"key","instructions":"Press the f key with your left index finger."},{"text":"g","mode":"key","instructions":"Press the g key with your left index finger."},{"text":"h","mode":"key","instructions":"Press the h key with your right index finger."},{"text":"j","mode":"key","instructions":"Press the j key with your right index finger."},{"text":"k","mode":"key","instructions":"Press the k key with your right middle finger."},{"text":"l","mode":"key","instructions":"Press the l key wit
 h your right ring finger."},{"text":"kk ll ss ll aa ll gg jj aa gg ss ff aa ll hh kk jj kk ss gg hh jj hh jj hh kk ss jj dd hh hh jj kk ll aa ss gg dd ff ss","mode":"text","instructions":"Practice typing the keys you just learned."},{"text":"gg jj gg ss kk ss ll kk hh ss ll jj aa dd ll kk aa hh gg aa ff gg kk aa kk ff gg ss ll dd kk aa kk aa jj hh jj ff hh jj","mode":"text","instructions":"Keep practicing the new keys."},{"text":"lk gs kh ka hj sh sg lk ka aj al fl ls gh ja ah sl kd hs ak la gs ks fj fj dj lg af sk dl hl sg sl gl lg lg hh lg lj kd ll hh sa dk hh ds hd sj fj da","mode":"text","instructions":"Now put the keys together into pairs."},{"text":"sl fl kd ak ka dh ka fg hf sd la dk sh hs sk ll kh sa gg sa kj ah gl hk fl sg hl kd sj af al ak fd gf hs dl la fj gs fj af gg aa sg kh sa hf lj sk al","mode":"text","instructions":"Keep practicing key pairs."},{"text":"lj ss gs lf fg sf lk fj kl dg fl fd gl ls ad ls dk jj ag sk ag dg fg fa gh sl gd ll gg jj fg ls gh dk gj f
 d ad dg aa jj ls gh gh hf sk ll fd fl hj gg lk hh ds sj hs sg aa hd sk kh gd hd al kj ga sg ff hk gj as ja sh kf ha ak fs fh sj ga ag gs gg lk gh gk sf dj kd ff kg fg gd kf sa aa ds ad la lj hs","mode":"text","instructions":"Almost done.  Keep practicing key pairs."},{"text":"lag alfalfa alas alas saga la shall saga shh falls fag hag add salsa hag gaff flash had jag fa sag shag slag algal da la sash shad sash ska da all ska ssh sh half hall ssh flak ska fad saga dash sag ash flag falls lash all algal shag sag shah half salad gaff had gag flash has gaga dash as half gas had gaga ah shh slag shad ssh fag add half fa la ah falls halal ad sash flask salad fall slash ll ad fag all fall fad dad dad flak sass gala gall sash ash","mode":"text","instructions":"Time to type real words."},{"text":"gad alga fag salad lag lass salad falls add fall la algal glad lag slag alga lash algal sass salsa lag half gag alga sass alas la gad da sash dash lag flak salad ash algal slash halal halal l
 ash jag fall salsa has lash has salad falls hajj aha has half falls hajj algal ad alfalfa hag lag flash falls gaga gala ssh flag add flag gash salad sag jag has ad halal dad gal da la flash lass gaff alfalfa hajj sh had gall ask gala sass shad ah gash ha lash fad lash gad flak gas sash","mode":"text","instructions":"Keep practicing these words."},{"text":"salad ssh ssh fa hall sh aha fad flask shah glass flak fad ha shad glad salad glad ll shh lag ah hash sash gad lass as add hall fag half flash alas all jag gall salad sad fa alfalfa all ask as add gall gash ad lass la hag ask fag flag gas sass hash shad la gad shad fag hag algal sash flash glass dash shad flak flag as hajj jag halal ska hajj gag lass ash gaff gas lad salad alga lass falls hall shad salad all gash ad slash shh halal halal saga algal aha alga glad dash jag gaff gag halal alfalfa gas ah has fall flag gad gal half hag ask flash aha fag shall fad ad flask shad shh ssh add gash halal hag ha la hash shall ha dad a
 sk falls add algal gaff gas halal gash falls gal gad lag flag half ll sash algal alga flag flask flask had ah has gaff shall shad ash flask lad ad shh half as flak sag all dash gall ad shag flask hajj flask ha sass gag ask sh ska jag jag half gall alas fa has sash gaga shh glass ll fa","mode":"text","instructions":"Almost finished. Try to type as quickly and accurately as you can!"},{"text":"\n","mode":"key","instructions":"$report"}],"name":"The Home Row","medals":[{"wpm":5,"name":"bronze","accuracy":60},{"wpm":10,"name":"silver","accuracy":75},{"wpm":20,"name":"gold","accuracy":90}],"description":"This lesson teaches you the a, s, d, f, g, h, j, k and l keys \nin the middle of the keyboard.\nThese keys are called the Home Row."}
\ No newline at end of file
diff --git a/lessons/en_US/leftcapital.lesson b/lessons/en_US/leftcapital.lesson
index 65b1039..15df6d1 100644
--- a/lessons/en_US/leftcapital.lesson
+++ b/lessons/en_US/leftcapital.lesson
@@ -1 +1 @@
-{"order":4,"steps":[{"text":"\n","mode":"key","instructions":"Welcome to the Left Hand Capitals lesson!\n\nIn this lesson, you will learn the Q, W, E, R, T, A, S, D, F, G, Z, X, C, V and B keys.  Press the Enter key when you are ready to begin!"},{"text":"Q","mode":"key","instructions":"Press the Q key using your left pinky finger."},{"text":"W","mode":"key","instructions":"Press the W key using your left ring finger."},{"text":"E","mode":"key","instructions":"Press the E key using your left middle finger."},{"text":"R","mode":"key","instructions":"Press the R key using your left index finger."},{"text":"T","mode":"key","instructions":"Press the T key using your left index finger."},{"text":"A","mode":"key","instructions":"Press the A key using your left pinky finger."},{"text":"S","mode":"key","instructions":"Press the S key using your left ring finger."},{"text":"D","mode":"key","instructions":"Press the D key using your left middle finger."},{"text":"F","mode":"key","inst
 ructions":"Press the F key using your left index finger."},{"text":"G","mode":"key","instructions":"Press the G key using your left index finger."},{"text":"Z","mode":"key","instructions":"Press the Z key using your left pinky finger."},{"text":"X","mode":"key","instructions":"Press the X key using your left ring finger."},{"text":"C","mode":"key","instructions":"Press the C key using your left middle finger."},{"text":"V","mode":"key","instructions":"Press the V key using your left index finger."},{"text":"B","mode":"key","instructions":"Press the B key using your left index finger."},{"text":"VV WW CC GG ZZ VV GG FF XX RR DD TT QQ GG AA SS RR XX XX RR BB XX CC GG FF FF TT GG SS EE BB DD DD SS QQ XX XX EE ZZ QQ","mode":"text","instructions":"Practice typing the keys you just learned."},{"text":"WW WW EE RR ZZ EE BB WW ZZ EE VV TT SS ZZ BB EE ZZ GG WW ZZ RR AA FF XX ZZ FF BB DD VV DD VV BB ZZ FF XX RR QQ TT QQ GG","mode":"text","instructions":"Keep practicing the new keys."}
 ,{"text":"SX GA CA BD WA GQ FC CA WR TA FX VX WZ XZ DT TQ SD EE BD CD AE FV BZ WS EQ AV DD DR AZ AC RQ WD TR WC DR AS RA QZ EG VZ FD EA XC QR FG QT RS CS BV ZF","mode":"text","instructions":"Now put the keys together into pairs."},{"text":"EG AF CA FC RR ZB DZ QD RE SC FB DE CC SE CV QZ TZ FQ DD RS FE VG AT QS TT AA QT DD ED RG GS QB BA ZS VC FE GV WB CB FC SD SR TD AW XV VR VW EX QE ED","mode":"text","instructions":"Keep practicing key pairs."},{"text":"RD Wl Fa Az qG Qj XD wF Ww yW GG kB Ck Zh QF RG tA iW RS jE WX sB XS Vi Zu lC Xx Dj TF SW oB RC WE Sa Vd Xk hZ Se Qp SF Xe Fn VV aX Ch Ao xR vB Dz FB","mode":"text","instructions":"Now practice all the keys you know."},{"text":"aB wX BW mR Rn Ai CB oV Tq hC fD SV BW Qh Vd Ta Fy Cw Wr RC xS Sf Fy AF Er SF GX Bz Xy sV GF SR eG BG EW qQ cZ pE nS AA TS CB yS RT cF Zf gS Zd bA GC","mode":"text","instructions":"Almost done.  Keep practicing all the keys you know."},{"text":"XiEg FGQC WAGD ZyGw AGSn FRGT FhBa DyFl DoQi EoCa EfEA Gg
 XC EZAF XvVe RsXz BRWR EQEA VDSs XdTm FnBl QESp FGRG XWXT FuVZ FlDZ GRFe VtXf WiEg EhTf TWXj QTWX TgBb BjRe ZZRd XlQX AzQt WtVX AdDA XbEy XWGc WQWA FBDZ ACVE FwEd FiDb ZqSb BREx CWTk CwBw DwGb XSEc EQSc GlWE CoAq EXDZ SyQc DaBp QqWc WsDb CgXi DuXw FtVi XdAA RVSF ERCc RbCt EhXu FDRC EnZr EVWg ZVTv SjEq TeDZ ASGy RvDu ECDb BjAi ZZBa ZSZe DkGr GzTE GtSS QVCq TrBt WaZR SbTl ZxSX EDTr XbXd AhRA AQWs DxTi XxTo BuRj QGGs QERG XyZd SrDh BoGV TTXu","mode":"text","instructions":"Time to type real words."},{"text":"SmRG QhQQ FTVg CDVv GqXb GuQe DCAQ CaCA FvWi GpVa GhAF ExFV BoCd GZQc XgRV FBCu FyAx SqCk WTSa FwQl QzAT TjXw EVVW TRGg FfZs WkTo SFBX EVSy CwGw ZcZt ViWg XmTk EaWA AXAs WcRT DCVa VuCb AZXn BjRA XcBp WQCT EpDz ZvVB SZRG CzTx RsFi VlBX AxFc ZjCv RCRC SFAR QhRq FSXo GeAQ DfEu SeCG WcSc VBQB VSEe BlQl VwTy TdGi AaXi SAAi XXXx RBTh QyVV CyQo WpBt EaQt QyXe ScZw XWZg QfFW XpWv ClTj EfZf EBWd RTXV ZQRZ SeFc EgAT GCQs FQFs DBGu SVAQ XkVB ZGZl QSSl EgRf GDVW FgRy GDDB EdWZ WsSm DzQC
  GqQT BQVR DCGb ZBCu","mode":"text","instructions":"Keep practicing these words."},{"text":"GFAT WEAt CSBX RWAp BXEB QhAu RZVc CRZa ACDl DWTj ACSd RpFX DSBB TRWy SjVS DjRf WtCw QGFd EvXC QsSl BXXC DtZV SqVp CWSk XZSF RdWC SrSx DGSq XFSQ DQGE DlAG TbSQ SGZx CTEh QfZu ZpAs VrGb RSQF FwCp XiGf BzFs VyFb QDFC FvTb BgAm AdBG QZQf TAEQ VdAX BhSo CRAg EjFb BdFo BVDW ZCAm GmWh RWAD XoGy FaXu RQRb ThZD ZTQk ReTe FiQs RpEm ZcEe ECCb XzRB CEQx CFCz ZXRc QeQA RvCd DpZu EAAm FoBj XCSZ ZsAr DqXA DaAe VyEd BDDS FmZp BdEZ ETTp ZsBA ZXXE XSGj XGGF RABg DhTm QoXB CiAb GBVu EqCq RTDz TSAy GfQG BzEe CWAy XZSz ArBB VDAT DCGG ZCFt CwBV RGWD AZZR AWZX ZdZA AtBs FuRD FGXv DFAW QxAC DCBZ XbET WfQF CjEw FsGe EgRc RrSW CDTi XjAm DjDf DyRx RRDW XpQD QmGa XbQS EsQX BGBE SyXd VrWW ZDEh ZiDd VaSF WXDl XrZo BmWf BmSB XyTm BCTz RDFZ BaZF RlWq RRZf SFCX QcWR AFWp CBFR XjDD AoSh ZtBE CaZE QgAZ XnVF AoFS FBVE SsBj TxZy BrGs DZBF XSBz DuGC TRSV STZE AsSn WGRx XXEx ZRQA CkFS VfEZ ZnRl WsEt BiGQ FTAj BnAT FkQG GQ
 AX SwDX ZWDx DEVB XaXW CvWl ZxFn EFRF EFEZ AmFA FjXu GFRe XaRZ VbSv VuCB XcCs ZdEC CaAe GnWj QyEn ZZBQ","mode":"text","instructions":"Almost finished. Try to type as quickly and accurately as you can!"},{"text":"\n","mode":"key","instructions":"$report"}],"name":"Left Hand Capitals","medals":[{"wpm":5,"name":"bronze","accuracy":60},{"wpm":10,"name":"silver","accuracy":75},{"wpm":20,"name":"gold","accuracy":90}],"description":"This lesson teaches you the CAPITAL letters which are typed by your left hand.\nThese are Q, W, E, R, T, A, S, D, F, G, Z, X, C, V and B."}
\ No newline at end of file
+{"order":4,"steps":[{"text":"\n","mode":"key","instructions":"Welcome to the Left Hand Capitals lesson!\n\nIn this lesson, you will learn the QW, E, R, T, A, S, D, F, G, Z, X, C, V and B keys.  Press the Enter key when you are ready to begin!"},{"text":"Q","mode":"key","instructions":"Press and hold the shift key with your right pinky finger, then press the Q key with your left pinky finger."},{"text":"W","mode":"key","instructions":"Press and hold the shift key with your right pinky finger, then press the W key with your left ring finger."},{"text":"E","mode":"key","instructions":"Press and hold the shift key with your right pinky finger, then press the E key with your left middle finger."},{"text":"R","mode":"key","instructions":"Press and hold the shift key with your right pinky finger, then press the R key with your left index finger."},{"text":"T","mode":"key","instructions":"Press and hold the shift key with your right pinky finger, then press the T key with your left 
 index finger."},{"text":"A","mode":"key","instructions":"Press and hold the shift key with your right pinky finger, then press the A key with your left pinky finger."},{"text":"S","mode":"key","instructions":"Press and hold the shift key with your right pinky finger, then press the S key with your left ring finger."},{"text":"D","mode":"key","instructions":"Press and hold the shift key with your right pinky finger, then press the D key with your left middle finger."},{"text":"F","mode":"key","instructions":"Press and hold the shift key with your right pinky finger, then press the F key with your left index finger."},{"text":"G","mode":"key","instructions":"Press and hold the shift key with your right pinky finger, then press the G key with your left index finger."},{"text":"Z","mode":"key","instructions":"Press and hold the shift key with your right pinky finger, then press the Z key with your left pinky finger."},{"text":"X","mode":"key","instructions":"Press and hold the s
 hift key with your right pinky finger, then press the X key with your left ring finger."},{"text":"C","mode":"key","instructions":"Press and hold the shift key with your right pinky finger, then press the C key with your left middle finger."},{"text":"V","mode":"key","instructions":"Press and hold the shift key with your right pinky finger, then press the V key with your left index finger."},{"text":"B","mode":"key","instructions":"Press and hold the shift key with your right pinky finger, then press the B key with your left index finger."},{"text":"RR RR FF FF GG SS RR ZZ RR TT SS XX SS RR DD XX XX GG SS AA EE BB XX ZZ QQ EE BB VV VV XX TT GG RR AA EE XX ZZ WW GG BB","mode":"text","instructions":"Practice typing the keys you just learned."},{"text":"AA EE ZZ RR DD WW FF EE ZZ BB FF DD FF SS XX CC WW VV EE BB BB EE XX VV TT AA QQ VV RR EE CC DD AA WW CC TT DD SS BB SS","mode":"text","instructions":"Keep practicing the new keys."},{"text":"DS WQ DR DR EV CT SF EF GV AT SR WX 
 TR AV RQ SG TE SQ BZ QA BV WF XF DF GF EV FX QB AV RF VA GF DS XG BC WC AE AG ZW QQ ZT GQ EG WR CX VQ WG TD RE SQ","mode":"text","instructions":"Now put the keys together into pairs."},{"text":"AW CE WV GV FD QX GG TD GF ZF FS WZ BV VB TD AX EA GR AW DT TD CR TW ED FG ER WA BE XQ TT EV SA TD TZ CZ WC VV XB ZZ FQ SC QG XC VT GT ZT BS TE XD CR","mode":"text","instructions":"Keep practicing key pairs."},{"text":"XT qZ Xw zX XF GC Wr uR El qD oR Xc hC QQ oR Cp Tv pV xR aW BZ yR FR WA At TC kD Dc oA QA GT Ao Zz sZ aA AX hX Fx bG TT EZ VC Zq Ar Rv eG yZ SR Eh iD","mode":"text","instructions":"Now practice all the keys you know."},{"text":"Tb TC QB tG FR lA So rG QA Qa FR BS Vr lE Sa GE SR Fk Rg GV Tl nS EC mF dQ jB FB fA QE sQ RR zB Gw Dw Gz Fj yS ZX Am cF aQ uV Vl De Ff Ec XA SZ WB mV","mode":"text","instructions":"Almost done.  Keep practicing all the keys you know."},{"text":"VTEb CrWw CoCf FiZo DSXq GXBe QkWw GdXt RFXv RrVz XsBT ZbVt EsEv TEVn AjWu VZVx WQSv EQCn WjEX EiTA CZT
 Z GkTF SoCy WaAm ArGR XRXm AnWt QiQD TWFy DQGq CBDw XcFz DlWc AAZq WgRb RqBu WBCm VXGq AsRx WzCZ RzQQ VaDZ ACQt EASw DVQr ECDC TQEs CxGg CnQj ArCy DmBB TVEk WCTs RvDy AWFw WFDT GyTD CEEB ZcCj VoGS EvDj ZACn WlWG VRRV ZhSo QjCs ABEp WWRz FeZr EGAi DgWF CzQS VwBb TiEi ZCEd QnRZ DyTC ZqQe RpXv TgTx RnVl QFRj CqCt AXCy DgSs RlBW ZoDX XlSl AeWe CVRv BtXW ZXVr QhCa CTDn SgAA RWAj WVXE TEFB RhCd FfQh","mode":"text","instructions":"Time to type real words."},{"text":"QuBB REFp FFFC SuFa ZzBB RqCy GFSk VmQx TnXZ SiCV CZVQ TDGX QgCy GETA QXEF ZAQc WGXc ZoDA BFFA QBDq DuRW GsFs AcDZ RhEm VfXE AEEm ViRb TSTq CiAb BiAC BpSb ZFZa ZCGo XuXR ACFW VFSD RQVx TzVe TbWw ZjTe ZFSx ESGD AZDW GjTE RGBV SxTD XpXi VrXu XoFo RoQC RrFu ACFA WDFy CCQo WGEC GvZA BdCd GeDE QuWC RtWp ZGGT AZDF EtBj XpDX VhWC FcTW GfAE EtFm SFWb SvSX AwSz QmXl EeEo WXVV AfQg VzEi CvSw GVRh RAZt GCRV RZWp ZjZp WsFq FzWX WEXi XqCu EEZF EBGF SQAh RcTl VGVt QWXX TRRZ WwTs FFZe CQAv CcWh GnVw TzRz RTAj","mode":"text","instructi
 ons":"Keep practicing these words."},{"text":"ARCa ZdGk BGRV ZFAr SdEg GVVi GvZd XxZD GuXw RSVr BEVC RCWG GBRe SFBz FRTV ZnFf DeCo RaVy WRGq ZvAS QnDl QrVm AATf EnRR ZWCF TsSj SDXn VXDf SWAQ EBSE SBVV ECCn WGRw GXWp GSGD TcQZ FVTG RTEp XFEC BiQG TDVA QTDr DGXy GETW BVFf SdBC FSFW QyTq WjVu RbGx BhGb CzFS CBXp WVTo GuVC RvGg WRXw DZGx BCGC FVVn ZvDw ZuEc ZyAx WQZx EDAd VaFi WxDE ZuFQ CcDe FrXb RXTw SjFp CrWt QmVl DaZR FfBu ZrBn ApGj ZeZV EcQy VFTe TxFc ZVDt AwQQ BsAh AEQA CaFb BvFy DbTX WyGj EwAr CZRm SsER FbXh RkRx CfZh EbDy AkQr RxFm ZAGk BGDE VCRp DFXw RuCR AcGQ QqWD ToRD AeDB GlDd ETQl GCFD BGZX VuTg FrGb ZdDD FrCg QeBh ZAXX FGBp CtZW DVWF EkGy ZmDp XvWQ GXGw VcAE FmBc ZxGT ElXw AGAA EhVj SFRC EXFV GiZe WZQo DGWu GyZv TRWS XoQz EwAR EkXD SaRz GGGe ATSE AqZf SSQj AdWu WoZf QdZc EqWy TTGw EhQG SuTp BWBE ZnQh DwCf VbZk RfXi DBGz CwGp DTWG ARSR QtCn ArDG WrTk BrWy RaSr SqED BVSt FWWs XDXx WbAz CRCR AABd ESBX CxTV FtRq EWTm TDGd CuEQ XeAE RyQm ClVS CCXm TbBs VsBe DnZR TkXd XrQ
 R GACr EzRX ASAn XAVB VsVg GCEj EuQx DXZl CeSl TADu QWGk","mode":"text","instructions":"Almost finished. Try to type as quickly and accurately as you can!"},{"text":"\n","mode":"key","instructions":"$report"}],"name":"Left Hand Capitals","medals":[{"wpm":5,"name":"bronze","accuracy":60},{"wpm":10,"name":"silver","accuracy":75},{"wpm":20,"name":"gold","accuracy":90}],"description":"This lesson teaches you the CAPITAL letters which are typed by your left hand.\nThese are Q, W, E, R, T, A, S, D, F, G, Z, X, C, V and B."}
\ No newline at end of file
diff --git a/lessons/en_US/rightcapital.lesson b/lessons/en_US/rightcapital.lesson
index 0efac9e..5035379 100644
--- a/lessons/en_US/rightcapital.lesson
+++ b/lessons/en_US/rightcapital.lesson
@@ -1 +1 @@
-{"order":5,"steps":[{"text":"\n","mode":"key","instructions":"Welcome to the Right Hand Capitals lesson!\n\nIn this lesson, you will learn the Y, U, I, O, P, H, J, K, L, B, N and M keys.  Press the Enter key when you are ready to begin!"},{"text":"Y","mode":"key","instructions":"Press the Y key using your right index finger."},{"text":"U","mode":"key","instructions":"Press the U key using your right index finger."},{"text":"I","mode":"key","instructions":"Press the I key using your right middle finger."},{"text":"O","mode":"key","instructions":"Press the O key using your right ring finger."},{"text":"P","mode":"key","instructions":"Press the P key using your right pinky finger."},{"text":"H","mode":"key","instructions":"Press the H key using your right index finger."},{"text":"J","mode":"key","instructions":"Press the J key using your right index finger."},{"text":"K","mode":"key","instructions":"Press the K key using your right middle finger."},{"text":"L","mode":"key","ins
 tructions":"Press the L key using your right ring finger."},{"text":"B","mode":"key","instructions":"Press the B key using your left index finger."},{"text":"N","mode":"key","instructions":"Press the N key using your right index finger."},{"text":"M","mode":"key","instructions":"Press the M key using your right index finger."},{"text":"JJ NN BB UU BB BB MM NN KK MM OO LL PP MM II OO BB PP LL BB OO OO LL JJ HH II UU KK KK JJ OO HH KK NN PP JJ OO NN BB MM","mode":"text","instructions":"Practice typing the keys you just learned."},{"text":"KK JJ YY BB OO JJ JJ II JJ HH II HH BB YY JJ PP YY PP PP JJ UU II MM UU JJ HH UU MM JJ KK BB II JJ OO KK LL LL UU UU KK","mode":"text","instructions":"Keep practicing the new keys."},{"text":"BI KU JM II KY KI OH IH MJ PP YN HJ NN KN JM PN KH NN HY HH OI YM IK BI LY OI NJ MP LY IL OL PH YK MU IU OJ LO PK BO NY IO JK II KY OH YI NM PB JK KY","mode":"text","instructions":"Now put the keys together into pairs."},{"text":"PB NJ BL UU UI UH OU YB 
 JH HN MB KK PM NL LN MU KK OH IL LJ IY II IM YP MK KM ML UB LY UY JU YN UH HH HU BU MK MK JK HI NB NJ HM UM LN OM BI JN HU IH","mode":"text","instructions":"Keep practicing key pairs."},{"text":"Pt rN oU MU Kt EL eU IN MX PL PZ bP DB dM fP SP UP jU HU Jn qJ KY IJ LB PV HP Pq Jk He MN ZP MO vK XB tB Ha QN tB cM YB WK WU HI KJ NZ rU IL RP Ik Id","mode":"text","instructions":"Now practice all the keys you know."},{"text":"tO nP KK jJ Ot sI JP qN PQ HG CJ OZ rP Ur AP Ki MP JU dB LW gI IQ FK Jx PQ UW Jp Oz OB RM Yy Yd Md uI UL Kh YI mY BZ EJ Me cN tM Bf jO Pa sK OW WI JO","mode":"text","instructions":"Almost done.  Keep practicing all the keys you know."},{"text":"HDJG NLKJ KBPj IGNf KGJO PWMN MDJU MgHc UwOs JXUq MVBv KIOx NVNR LLLN HZOI JENc HcNI ITPM OCPG NmOG UJOy PaHX KTYG JjNd ICMQ IoNl KlOK IbUu PfYJ OyJk BPIL NKJF KVLL ObOD PxHm IhLQ UqLT YqLl MnPn LkJw NMPA PbKG HZPc MhYY MZLm YjNY UdYB JUJC MCBn ODPb JNYT BGYG JaJF YrHh BgPw LMUz BYLH UfNU URPc HDBh LiUQ PBYn NqNI NfPR N
 JKb UyOl UoNy HzYL NDLx HfUx YmIJ KFNt OcBo HdJt IjYA UfUv LMYV KGIQ BNPB KtLe YqYg MhKY BWUI BIBP MLUD LCLS OLYP HDOB JHOT OtML NVJv BeHV JjNf NNBa ObLs HHYp JlUu UEYx BUBZ NXJZ","mode":"text","instructions":"Time to type real words."},{"text":"LBLV PfNq MGBE HcBM YXOs OULM NDPb LHLV LHYG OdOS NtLo PgNF MJBV MtOy JYBd YuIT NhIx NcYI PmKs KIPW UYKy OoLa OLJP LwKT HqUA KIHt MOBw UUNo JuOs IRKh YSMU HSPb PpLm PuMv OUYZ KLBP JyYP LgLS HxMK LpNZ LgJi JyOU OqPL JwLS LOOd URNB MBIl JSYF BwOT IaMM BdHx JOUB OPPq LRNC LgKu NjYd YkBz UQPO BMNW JFJB NVLK PCUU IFJB UWNA OPPi LcUS NEJL MGNv HGJB UOUK BJIU HWHm MMMu KeOC NDUw HsKk PBNS KxNo YbIC JBPl MCHR IhBO JUMz OfPd MKJo OTNk PaKb IkUW JbIg MjUN KYPx BgJy IwOB HLHQ LcUM PDNP LOMs MPNt HPIj JQUr","mode":"text","instructions":"Keep practicing these words."},{"text":"JvOe ObMs BFHY HcOv IGYB OTYb YsLm UVNb JvND PwIn IkJW MpHJ IBHp NSOl LBNU JPUy PsHB JmBp MLPI OCYu MmKO YiJS BbKq UtKA IjYw UdOp NcKo OaUg IGHe MDII BEHr OiYl NzID UfUS Om
 OI LBUX KYPc PWUn UxUn OXNS BDMW LpHz YYOC LCYU PnKt IUBj IXYo YBIZ KPOe IcNp YLIv IxPi JhOQ UrYa LfPU JCLP IhBY HxUi MmYU NtIm MiND PJOJ JTYx BPMS JILq KrHy PWLE IMOJ KaHt UvYR LxLy YALQ JsYB PxOo LzYe BhPL IhJw OPJM InIe IILm LcLS LFUL NdOd NxOw HuNk HEPP LmIX NgIl KjKC JiKW JvHE NfBM NZYe UOOq YEYm UKNa YPMs HRKC YgMm PFJy MrPP ISHW YDYX JYOR LILn LzHT UaIT IDMQ JtYf LsMC YqYb NRPM LCUX BIHe PSUb PrJC HEHL KxYJ NjYC NqPD BxMH UEYr BPYX IwJP UWNp HJMH KuKv JEJd MNOf BxOv NbMv BdPj NeUO BGIC IQIG PWIH LqHu BHMk OkKK YdHy JWPg PbUu NoNw NmBc JCYr UKIr LBYw LoPo HLKV HjLA BtBY LmUH JTOW HbNG UYHb YGUi BUNb NBUw OeNa BwMp KMJe YxYn HZJa NtOJ IVOp BWUO IuPL NJKD JBHl PbIX UjHr YhBN OuMJ UqLr MqOi MEJT LpJy LTHB IlKL YnNG NQUw PNBe KzUV LXBw BiMb MEJR NJOT LcJk ONBi UUMP YdOJ JHBR KRYO BGLL BXBo BlHK MBYE NNLS OyIw HwLH","mode":"text","instructions":"Almost finished. Try to type as quickly and accurately as you can!"},{"text":"\n","mode":"key","instructions":"$report"}],"name":"
 Right Hand Capitals","medals":[{"wpm":5,"name":"bronze","accuracy":60},{"wpm":10,"name":"silver","accuracy":75},{"wpm":20,"name":"gold","accuracy":90}],"description":"This lesson teaches you the CAPITAL letters which are typed by your right hand.\nThese are Y, U, I, O, P, H, J, K, L, B, N, and M."}
\ No newline at end of file
+{"order":5,"steps":[{"text":"\n","mode":"key","instructions":"Welcome to the Right Hand Capitals lesson!\n\nIn this lesson, you will learn the YU, I, O, P, H, J, K, L, B, N and M keys.  Press the Enter key when you are ready to begin!"},{"text":"Y","mode":"key","instructions":"Press and hold the shift key with your left pinky finger, then press the Y key with your right index finger."},{"text":"U","mode":"key","instructions":"Press and hold the shift key with your left pinky finger, then press the U key with your right index finger."},{"text":"I","mode":"key","instructions":"Press and hold the shift key with your left pinky finger, then press the I key with your right middle finger."},{"text":"O","mode":"key","instructions":"Press and hold the shift key with your left pinky finger, then press the O key with your right ring finger."},{"text":"P","mode":"key","instructions":"Press and hold the shift key with your left pinky finger, then press the P key with your right pinky fi
 nger."},{"text":"H","mode":"key","instructions":"Press and hold the shift key with your left pinky finger, then press the H key with your right index finger."},{"text":"J","mode":"key","instructions":"Press and hold the shift key with your left pinky finger, then press the J key with your right index finger."},{"text":"K","mode":"key","instructions":"Press and hold the shift key with your left pinky finger, then press the K key with your right middle finger."},{"text":"L","mode":"key","instructions":"Press and hold the shift key with your left pinky finger, then press the L key with your right ring finger."},{"text":"B","mode":"key","instructions":"Press and hold the shift key with your right pinky finger, then press the B key with your left index finger."},{"text":"N","mode":"key","instructions":"Press and hold the shift key with your left pinky finger, then press the N key with your right index finger."},{"text":"M","mode":"key","instructions":"Press and hold the shift key
  with your left pinky finger, then press the M key with your right index finger."},{"text":"NN OO OO KK HH HH NN UU KK II NN HH HH JJ PP NN KK BB YY KK YY NN YY MM UU KK LL HH HH OO II UU OO JJ MM UU BB MM HH MM","mode":"text","instructions":"Practice typing the keys you just learned."},{"text":"KK MM YY BB LL II HH JJ OO MM OO YY NN JJ KK YY JJ II JJ LL YY HH JJ PP MM HH HH MM UU II OO LL KK KK LL PP JJ HH NN LL","mode":"text","instructions":"Keep practicing the new keys."},{"text":"NO MM BI JH IO NO YH KO MH IH OB BM HU YU JJ KM ON BB MN LU YL OL PM MU BY UI NU JL UP ML UO MI KO PY YM UY JM MY IK MK NN MI HN OB JN IO BO LH HM KB","mode":"text","instructions":"Now put the keys together into pairs."},{"text":"OL MU PI YI LY JY NH UU BL LL PJ YB LJ MI PN LN MK YP MJ OL LJ BU UM MI JJ NH NY ML PU HP HO BU IY HI HN BJ KY BJ LU YM LB OP BH BI UJ JU HM PP UJ HU","mode":"text","instructions":"Keep practicing key pairs."},{"text":"Yv kO wY BA aI GK iJ JB bU Iv PH MT Uq HI zI oL ZB 
 DO Ky oO sI UK CY kY Ys Ny Kb IP JO HN Ij Iq bI HE YU vO He YH tY yM JY Hy IM Lm Nj FI Nr BO jJ mY","mode":"text","instructions":"Now practice all the keys you know."},{"text":"KL sP BM Bb LC UH jI HU PD SU MD MH Kd WO UX RL Ue HD BN EM Ii Uj YJ BD TH mK Ul nH GY BY Mw PF Or Pm PY Js fU HE lL BE Kr UO eL OJ No ZJ qP GU KM GY","mode":"text","instructions":"Almost done.  Keep practicing all the keys you know."},{"text":"KfKE OZYP YWNT HSOj BsUQ MPBD PyBE YEKA YrIo PJLX HEYX PZOu BcMg OBHf PuPH KJIN UVOf OyBg KMJz YgKF UGKq NlLQ NaJp BiNf YJKG HHPd YNHi IxIF JDJe KyKQ LHYS IHHJ OTIe IFBj KQUO JFNQ IFHP BsLs BdKE UBMm InYP NTUQ PnHl NzLZ IKBX MOLl BkBF JBJj YqLD KyMx OsIi OPLC LuNJ BKOX BwIg MJKA ICUC UKLA MOBC KyIk JOKG KFIJ JaNt UwOr YTUe HWHb UgJh NfIz OmBU MENd MLNr YBIa JYLZ NiBn JZOe PZOE NKIo LQOA YRBc MfJH YfYe PvJD PJLy HRYU PgMY JTOu ISLP MRMa LjMj LhMp LBOG KBIN OtLB MCLi BeND OZKt HOOd PIPQ KBJK OeHL","mode":"text","instructions":"Time to type real words."},{"text":"
 UpOj JwPU UHBG YaPJ JVBv JAKS KbNq KQIY LjBG LAIA OHUU PnJp BbPT JBBn OUPQ NbLV KwPn UxIp PSKm YCNL YNYd KNKp IoNN IxOk UgUR HjYk KlNj HBOR UdNY HJID KEBY KPOe JNPm HtIP HuIZ HxIH PnBe OuIS PwBn KSLl HIPd KbLG JIKS IMOn OFJB NIPi MCYU KDJG NXNp PhLn OQLD KAYu IlOb INPA HQUN JNHB JBNE IKKu BoYL LiKi IzHq PlHD BMUk IULB YfPv OyKN MaLT UwHz HyNi ByMI BOPB JfMN YoOG YjUE IaHM IvIZ MIYX JKPz ICYB NUIs MCBu IxYP OPMc HsKS OzYV KhUF NtLF HTYx MVNa LXIl OMKt LsKy HHPS IRJl PXMr LWOH BaIb OhPc JzPM LzNU","mode":"text","instructions":"Keep practicing these words."},{"text":"BHIA HFLH UmPu NCBH PpPB LeKB NaJf IRUO BKMG UTLb HJHW OYLz PbHd IYOk LXYB OBKO UPYd LfMh HGKk JNNA BpMF YCNQ IKYU LwBX IXIE IsJV LaNV LeNS MQUi LnPm UzNt MCYN HGKa UDNA MRYU BmIw IiLN NfBg PtNh YmMW NTMG PFBR OvOF JlKU BrKJ YhBg LtPQ BYIx HvPW MBYk OMIK HtKC UxPU BsLo JBJV PNJd JiKs NzYb UgBa BMNU UBON IrOA KFUQ YmUj NYJp NGNG YCNX JsBS YOMB YDNH UIKK PKPZ KrUw YPUB KyUa MpPU MBJD MiOp YLLv UBPd YrYx BoJG UcLj MbU
 Z HHBh IvYe JuBo UBYd PfMH MNUP BlKK KPLB JBBk LAOv YJOS LuJi UCBe JZPS HVUJ UyIb MQUF NgNa IuMT BYYt BGMn JNHP MrPh YnJs NxIJ JOJS PRBS IvJj OgIh UiIb OgJK PGOH BFHK NFPo KAPd IWOa HjOF BPHc YWBI OqIq OsUP PLIB JKKe IUPW UhJm MBUo HrHs MjIR NzPI HpYM KkIY NlUd MLLp OSJm McMN UdHa KpOD JJYz BHBJ HGMP YQYb UwLh HBJX KeYq LyNh HBKQ YaHu MHBt KNBn HjYb UuHP MeKg JmMp UILi KiOn OONH INKd PBNv LhPB HoIa MEBf JeIx UMMQ PrNw POLe NTMr OcHy OzYo JJLb PlBN YYBX YcLz MyNB OCLn HHHH PeLG PsJR MCMN KSYI BHLP JPIl NPLQ OXUb MnNb KlMx NOHO NUOD HGOg YYBS ObNT OJUf IQHu PnBz OyJs JSJV JSOS","mode":"text","instructions":"Almost finished. Try to type as quickly and accurately as you can!"},{"text":"\n","mode":"key","instructions":"$report"}],"name":"Right Hand Capitals","medals":[{"wpm":5,"name":"bronze","accuracy":60},{"wpm":10,"name":"silver","accuracy":75},{"wpm":20,"name":"gold","accuracy":90}],"description":"This lesson teaches you the CAPITAL letters which are typed by your right hand.
 \nThese are Y, U, I, O, P, H, J, K, L, B, N, and M."}
\ No newline at end of file
diff --git a/lessons/en_US/test.lesson b/lessons/en_US/test.lesson
index f2c52a0..beec5de 100644
--- a/lessons/en_US/test.lesson
+++ b/lessons/en_US/test.lesson
@@ -1 +1 @@
-{"order":-1,"steps":[{"text":"\n","mode":"key","instructions":"Welcome to the Test lesson!\n\nIn this lesson, you will learn the A keys.  Press the Enter key when you are ready to begin!"},{"text":"A","mode":"key","instructions":"Press the A key using your left pinky finger."},{"text":"AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA","mode":"text","instructions":"Practice typing the keys you just learned."},{"text":"AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA","mode":"text","instructions":"Keep practicing the new keys."},{"text":"AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA","mode":"text","instructions":"Now put the keys together into pairs."},{"text":"AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA 
 AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA","mode":"text","instructions":"Keep practicing key pairs."},{"text":"AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA","mode":"text","instructions":"Almost done.  Keep practicing key pairs."},{"text":"AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AA
 AA AAAA AAAA AAAA AAAA AAAA AAAA AAAA","mode":"text","instructions":"Time to type real words."},{"text":"AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA","mode":"text","instructions":"Keep practicing these words."},{"text":"AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAA
 A AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA","mode":"text","instructions":"Almost finished. Try to type as quickly and accurately as you can!"},{"text":"\n","mode":"key","instructions":"$report"}],"name":"Test","medals":[{"wpm":5,"name":"bronze","accuracy":60},{"wpm":10,"name":"silver","accuracy":75},{"wpm":20,"name":"gold","accuracy":90}],"des
 cription":"Quick dummy lesson"}
\ No newline at end of file
+{"order":-1,"steps":[{"text":"\n","mode":"key","instructions":"Welcome to the Test lesson!\n\nIn this lesson, you will learn the A keys.  Press the Enter key when you are ready to begin!"},{"text":"A","mode":"key","instructions":"Press and hold the SHIFT key with your right pinky finger, then press the A key with your left pinky finger."},{"text":"AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA","mode":"text","instructions":"Practice typing the keys you just learned."},{"text":"AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA","mode":"text","instructions":"Keep practicing the new keys."},{"text":"AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA","mode":"text","instructions":"Now put the keys together into pairs."},{"text":"AA AA AA AA 
 AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA","mode":"text","instructions":"Keep practicing key pairs."},{"text":"AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA","mode":"text","instructions":"Almost done.  Keep practicing key pairs."},{"text":"AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA
  AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA","mode":"text","instructions":"Time to type real words."},{"text":"AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA","mode":"text","instructions":"Keep practicing these words."},{"text":"AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA 
 AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA","mode":"text","instructions":"Almost finished. Try to type as quickly and accurately as you can!"},{"text":"\n","mode":"key","instructions":"$report"}],"name":"Test","medals":[{"wpm":5,"name":"bronze","accuracy":60},{"wpm":10,"name":"silv
 er","accuracy":75},{"wpm":20,"name":"gold","accuracy":90}],"description":"Quick dummy lesson"}
\ No newline at end of file
diff --git a/lessons/en_US/toprow.lesson b/lessons/en_US/toprow.lesson
index f2b3c0d..314907f 100644
--- a/lessons/en_US/toprow.lesson
+++ b/lessons/en_US/toprow.lesson
@@ -1 +1 @@
-{"order":2,"steps":[{"text":"\n","mode":"key","instructions":"Welcome to the The Top Row lesson!\n\nIn this lesson, you will learn the q, w, e, r, t, y, u, i, o and p keys.  Press the Enter key when you are ready to begin!"},{"text":"q","mode":"key","instructions":"Press the q key using your left pinky finger."},{"text":"w","mode":"key","instructions":"Press the w key using your left ring finger."},{"text":"e","mode":"key","instructions":"Press the e key using your left middle finger."},{"text":"r","mode":"key","instructions":"Press the r key using your left index finger."},{"text":"t","mode":"key","instructions":"Press the t key using your left index finger."},{"text":"y","mode":"key","instructions":"Press the y key using your right index finger."},{"text":"u","mode":"key","instructions":"Press the u key using your right index finger."},{"text":"i","mode":"key","instructions":"Press the i key using your right middle finger."},{"text":"o","mode":"key","instructions":"Press t
 he o key using your right ring finger."},{"text":"p","mode":"key","instructions":"Press the p key using your right pinky finger."},{"text":"yy uu yy ee uu uu yy ww tt tt oo ww uu rr ww ww qq uu ee rr uu yy oo pp ee oo ii ii qq ww uu qq ii pp oo tt ww ii ii tt","mode":"text","instructions":"Practice typing the keys you just learned."},{"text":"uu rr qq rr uu ee ii qq yy oo oo tt qq pp uu pp tt uu yy ee yy tt rr ww qq tt ii ii pp uu yy rr yy qq uu rr rr qq uu uu","mode":"text","instructions":"Keep practicing the new keys."},{"text":"eo or up et po uq rr ee uu pw io tw yp tu ow qu ti uw rp uu uo wi iq py oo or ru ro ww yo et to ey ut rr tw uy pe qu yo ry er oq rt rq pp tp wo wu rq","mode":"text","instructions":"Now put the keys together into pairs."},{"text":"ur ie ti uq up pu wt ye ie or po uq uy yi ey pe iy oe eq qw ry iw iu ut uu yu ww ir pt ie ru to tw qw ry et tt po or eu uq eu pi wi wt uo ey uw ou et","mode":"text","instructions":"Keep practicing key pairs."},{"text":"dq 
 eq dr ya ku io ji aq wr hi od ly ud dr wy fe ai hr et sw ke ae uk aw sw ul rs gw du og et oq sq lr wa gr hq oj ft rs ug ik tl oo ky ki og os dp ie","mode":"text","instructions":"Now practice all the keys you know."},{"text":"yk ti ii oh pu tt td hp st at iu ey hy do od pl dw te du pf ae yf sy wd sq ap se de ge uw fp iw so dp jo at yw yo hi og au sr ou uo ji wu ae pr ys kr","mode":"text","instructions":"Almost done.  Keep practicing all the keys you know."},{"text":"steely rarity starer outfield oily orris loot deport pig apse tyre jigger papyrus skewed profile girlhood doorstep fluoride forsooth shut kosher oyster doll ripply leapfrog draftee tripper kaput leer dredge groupie hurtful skeet retrial staggers sulfa slightly squawker audit rep peruse suffer thereof sawyer struggle tis whiskey suds druthers foist wall afresh seawards stapler loophole iris leotard jut papillae oasis sly pose rarefy lipid plait tutorial tweeter we pipette flawless pear lark spikes outlook lodestar 
 flawed testify repay friar arroyo forgo grouser grapple gage gird footed silty shally toiler first forgot kiddish parlor studies artiste perjury sled truly aspire aspire","mode":"text","instructions":"Time to type real words."},{"text":"strut louse furthest keg seawall gawk rally fraught leer output those rhea dodder of supposed feature asleep ritually willies alloy rehouse steadily holiday atlas dial tetra tithe jugular parity perjurer erupt usage loll port sought prioress tritely trusty toast thrash rearward whereat guitar kook worsted peep fright spoiler dorky stolid dial tripodal stagger pride egress sludgy loftily plodder tipster fragile forty get perjury spurt litotes quarters asshole stirrup sulfate redeploy huller purl happily feely adrift dishware aerial steal kit upsurge hasheesh dotted wasteful hither whittle earplug afoul haw dowager fraught doodad spoof peppery seated heedless wrest eighty heed uproar papyri","mode":"text","instructions":"Keep practicing these w
 ords."},{"text":"stiletto hearth adorer still karat gargle protege flutter halfway tattle lug quest jawed greed feed potty gospel lieder stripe flaw wrapper grudge treaty luau sarge waders loop starter ploy loofah aught surpass highroad effuse isolated ureter dreadful sitar phrasal adrift rejudge porter slather ellipse hallowed dorky grey doter guilty proudly happy odds re pleurae short ladyship isle dirtily spirited rosewood if portly strop steely reassert whist tragedy apelike lallygag forswear wildlife dowager ghastly artless take eldest already outwore liquefy regrets draw gosh showgirl artistry parade lap agitate raga slithery plough prejudge affair defeater hotdog taiga outside gut apelike oily heartily kaput adept heraldry grippe roadshow sloppy godhood sat hour stupor this wafer eyelid rupture deport tattoo irately wield ode tiler hast toffee utter tallow apt grotto quits diesel yaws hale shell writhe thriller story petite hiker depute fogy shale hadst royally itsy s
 hirr delete asperity thereto sledder huffy guts prostate egad fistula quietude jaws royalty folly raspy sidewalk shears leaper trio stratify gateway piddly tripper girlhood psi dole pastor fraud peewee puffer hug shalt wirehair jittery ogle thirties shed friary pawpaw solute support shirker alkyd paddy sparsity sewage sylph dorsally flattish flower soggy hilltop legal jalousie easily aloud fat fluster","mode":"text","instructions":"Almost finished. Try to type as quickly and accurately as you can!"},{"text":"\n","mode":"key","instructions":"$report"}],"name":"The Top Row","medals":[{"wpm":5,"name":"bronze","accuracy":60},{"wpm":10,"name":"silver","accuracy":75},{"wpm":20,"name":"gold","accuracy":90}],"description":"This lesson teaches you the q, w, e, r, t, y, u, i, o and p keys \non the top row of the keyboard."}
\ No newline at end of file
+{"order":2,"steps":[{"text":"\n","mode":"key","instructions":"Welcome to the The Top Row lesson!\n\nIn this lesson, you will learn the qw, e, r, t, y, u, i, o and p keys.  Press the Enter key when you are ready to begin!"},{"text":"q","mode":"key","instructions":"Press the q key with your left pinky finger."},{"text":"w","mode":"key","instructions":"Press the w key with your left ring finger."},{"text":"e","mode":"key","instructions":"Press the e key with your left middle finger."},{"text":"r","mode":"key","instructions":"Press the r key with your left index finger."},{"text":"t","mode":"key","instructions":"Press the t key with your left index finger."},{"text":"y","mode":"key","instructions":"Press the y key with your right index finger."},{"text":"u","mode":"key","instructions":"Press the u key with your right index finger."},{"text":"i","mode":"key","instructions":"Press the i key with your right middle finger."},{"text":"o","mode":"key","instructions":"Press the o key w
 ith your right ring finger."},{"text":"p","mode":"key","instructions":"Press the p key with your right pinky finger."},{"text":"tt uu uu oo ee qq ee oo tt ii qq pp tt pp ee uu ww ii oo ww ww qq tt ee qq qq pp uu tt yy ww ii pp uu ww ww ww tt qq ee","mode":"text","instructions":"Practice typing the keys you just learned."},{"text":"pp oo pp rr ii pp pp oo ww qq qq rr oo rr uu rr ee pp ee ee ww ee yy oo uu uu yy ww uu tt pp qq yy ee ee ee ii ee ww qq","mode":"text","instructions":"Keep practicing the new keys."},{"text":"eq py tp oq pt pt rp ii wu tt ep rw ro ir uy wr ir iy or uu op iq wi ur tp tp uu ru up tt te yu pe oi wo iy ei op ye wy iu ry ww wr ur uw yp eq ri rw","mode":"text","instructions":"Now put the keys together into pairs."},{"text":"ei oy et tu uu wt ue uy tt iy yp pi uq yo we ee uy er qw rr oq ww pu yo uo ui rp eq tw pe yu wp uu ey wu ee wr rw pp rw ep eu ry or or wr et rt op uu","mode":"text","instructions":"Keep practicing key pairs."},{"text":"ge he tk id th 
 fo di tl li ki eh ip wy rq ii qw rp ji ra ut ew po wk fo py gt dp ok pe yd wr ep pt yi gp eu uf uu il ur si ot ay ij oa ut pl yj lt ph","mode":"text","instructions":"Now practice all the keys you know."},{"text":"eh fp pd pe ya yr gi se yi pa dt ws yu el eg uf os td rq ok tp wu ww wa ei fp iw ot du yi rp uy lp to ro py et wo ir ww up sq oy og wl du os pf oa gr","mode":"text","instructions":"Almost done.  Keep practicing all the keys you know."},{"text":"loath tap freeware goggles orris stale allegro regular peewee glare swathe rigged duds poker holiday protege thud feed hid hydrous depose sallow sylph hill workout espy hose rushy skirt theory fissile triply ruffed aft heedful jotter tigerish refill pager weft pilaster relight footwear quirky lop quip dilute wisp frugally tailor rawhide swell spit pulsate fetal fogey raider triad trail wight try wedgie sylph adder preppie rode hart rooftop healthy rue toughie filter leeward argosy spake use polar appetite restyle peaked fussi
 ly tasteful pass slippery gorilla gotta hotel dowser listless peephole whippet redress squirrel assault defy ashlar goes sorry shire grudge","mode":"text","instructions":"Time to type real words."},{"text":"fleur peaty hotfoot hit sufferer alias flier topsail roadshow urethra frigate requiter stagy redress sore quid thrilled tart hefty griddle stalk autopsy weakly tryst ail goes aorta jarful odd date dilute alley haywire gusset foe retro treadle geode if throttle laud wired reap width twist desist wordless drollery trail strode wall wordless feather roadster reship swagger lipread filthy gyp polio speedway tasseled stopgap psi rawhide leeward lasso pestle daft wield easy depth forefeet freewill huffy detest futile straw hello strafe oldie refresh usage poseur host aphid ellipse third draftee storey for odor yore kissoff opiate pear flatfish strode flyway hire","mode":"text","instructions":"Keep practicing these words."},{"text":"lofty distaff properly derriere tulip hourly p
 arietal leprous rot toed tease pulpit fledged ruled palpate hooky sop sapless outdoors hypo pyrite pat lodger wreathe wrought skylark silage walleyed tailored foggy straggly wader low septa topsoil orate asleep leafage wapiti dosage puppy lethargy lo whet wholly tog thresher together regale soup hurdle rehash gourd stilt likes age salty skiff terror wide flighty outer ashtray loll waste sofa sway shrewd haggler fleurs hype sisal delayer spurred sway fluky palatal pigtail duality afoot word peel studied putout ditty spirits duteous prosy ashlar gritty upholder radius garote deli applique goggle ligate rogue grease halfway wife titular propel lid flu gaiter rustler sludge rashly hayride tallyho jujitsu ukelele luff doll wigwag goddess reread prepaid aloe purdah gathers quits tarry dale pigsty fryer firer ureter faddist heehaw sluggard likewise stirrer pap lawyer dredge freshet wordily audit jagged watery dross assorted rest shill torpedo stare oldie fitful gulp ideal waiter ad
 ult follow partway dogie hurler falsely hightail slipway trip assault lifework wearer karat wild freeware headed euphoria jaded porous adopter treasure fray steep wishy struggle wold slippery roarer rephrase stale here quash sleekly pour dorsally rotor hostess yaw quietly gel thistle pros teller drolly paperer kilo eyrie","mode":"text","instructions":"Almost finished. Try to type as quickly and accurately as you can!"},{"text":"\n","mode":"key","instructions":"$report"}],"name":"The Top Row","medals":[{"wpm":5,"name":"bronze","accuracy":60},{"wpm":10,"name":"silver","accuracy":75},{"wpm":20,"name":"gold","accuracy":90}],"description":"This lesson teaches you the q, w, e, r, t, y, u, i, o and p keys \non the top row of the keyboard."}
\ No newline at end of file
diff --git a/lessonscreen.py b/lessonscreen.py
index b2d46cf..fbe38fd 100644
--- a/lessonscreen.py
+++ b/lessonscreen.py
@@ -266,21 +266,21 @@ class LessonScreen(gtk.VBox):
             self.line_marks[0] = self.lessonbuffer.create_mark(None, self.lessonbuffer.get_end_iter(), True)
             
             # Determine what modifier keys are needed.
-            key, level, group = self.keyboard.find_key_by_letter(self.text[0])
+            key, state, group = self.keyboard.get_key_state_group_for_letter(self.text[0])
 
             if key:
-                state = 0
-                
-                # Insert shift key if positive level.
-                if level > 0:                    
+                if state & gtk.gdk.SHIFT_MASK:
                     shift_key = self.keyboard.find_key_by_label('shift')
                     pixbuf = self.keyboard.get_key_pixbuf(shift_key)
                     self.lessonbuffer.insert_pixbuf(self.lessonbuffer.get_end_iter(), pixbuf)
                     self.lessonbuffer.insert(self.lessonbuffer.get_end_iter(), ' ')
-                    
-                    # This is highly questionable but I don't have better solution yet!
-                    state |= gtk.gdk.SHIFT_MASK
                 
+                if state & gtk.gdk.MOD5_MASK:
+                    altgr_key = self.keyboard.find_key_by_label('altgr')
+                    pixbuf = self.keyboard.get_key_pixbuf(altgr_key)
+                    self.lessonbuffer.insert_pixbuf(self.lessonbuffer.get_end_iter(), pixbuf)
+                    self.lessonbuffer.insert(self.lessonbuffer.get_end_iter(), ' ')
+
                 pixbuf = self.keyboard.get_key_pixbuf(key, state, group)
                 self.lessonbuffer.insert_pixbuf(self.lessonbuffer.get_end_iter(), pixbuf)
             
diff --git a/mainscreen.py b/mainscreen.py
index 82c97a5..f3db6eb 100644
--- a/mainscreen.py
+++ b/mainscreen.py
@@ -175,7 +175,7 @@ class MainScreen(gtk.VBox):
                          "<span size='8000' color='#c0c0c0'>" + lesson['description'] + "</span>")
         
         if medal_type != 'none':
-            hint = _('You earned a medal in this lesson!  Advance  to the next one\nby clicking the red arrow button to the right.')
+            hint = _('You earned a medal in this lesson!  Advance to the next one\nby clicking the arrow button to the right.')
         else:
             hint = ''
                 
-----------------------------------------------------------------------


--
/home/olpc-code/git/activities/typing-turtle


More information about the Commits mailing list