You may not post on this forum because you're not logged in.

#1 26-Nov-2008 11:35:33

ezuk
Member
Registered: 12-Jul-2008
Posts: 75

Rega: Type faster by typing slower

This script is the literal imlementation of "to run, you have to walk first".

When learning to touch-type, or when learning a new keyboard layout (such as Colemak), I sometimes hit the wrong key. Instead of slowing down and correcting myself (and consciuosly learning from my mistake), I tend to quickly try all surrounding keys one after the other until I happen to hit the right one. And then I go and make the same typo again a few minutes later.

So, what this script does is slow you down every time you hit Backspace (or Caps Lock, on Colemak). It forces you to carefully choose the next key to hit, making you think about it in the process.

All intervals are configurable. Not all features are implemented yet (most notably, locale is completely missing - it forces you to type in English).

What do you think about it?

MakeFasterBy := 50            ; how much to reduce from the delay of the keys, in ms
MakeFasterEvery := 250        ; interval between each time the delay is reduced, in ms
MakeSlowerBy := 500           ; how much slower to make key entry every time there is a mistake, in ms
MaxDelay := 1000              ; maximum delay between keys
KeyDelay := 0                 ; initial key delay, in ms
GraceKeys := 4               ; how many keys have to be typed correctly in a row, before the delay is cancelled
CorrectlyTyped := 0


#MaxThreadsPerHotkey 1
;Register all keys as hotkeys.
k_ASCII = 42
Loop {
    Transform k_char, Chr, %k_ASCII%
    ;StringUpper k_char, k_char
    if k_char not in <,>,^,~, ,`,
        Hotkey $%k_char%, k_KeyPress
        Hotkey $+%k_char%, k_KeyPress
    if k_ASCII = 93
        break
    k_ASCII++
}

Hotkey,~Backspace,MakeSlower
Hotkey,~CapsLock,MakeSlower
~^2::Suspend, off
~^3::Suspend, on


k_KeyPress:    ; This is the main key capture routine
    StringTrimLeft k_ThisHotkey, A_ThisHotkey, 1    ; Remove ~*
    TypeAndSleep(k_ThisHotkey)
Return

k_deadkey:    ; What to do when no keypresses should be processed.
Return


MakeFaster:
Tooltip %KeyDelay%
If (KeyDelay <= 0) {
  ToolTip
  KeyDelay:=0
  SetTimer,MakeFaster,off
}
KeyDelay := KeyDelay-MakeFasterBy
Return

MakeSlower:
If (KeyDelay+MakeSlowerBy <= MaxDelay) {
  KeyDelay := KeyDelay+MakeSlowerBy
} Else {
  KeyDelay := 1000+MakeFasterBy
}
CorrectlyTyped := 0
SetTimer,MakeFaster,%MakeFasterEvery%
Return

/*
CheckToActivate:
  ThreadID:=DllCall("GetWindowThreadProcessId", "Int", WinID, "Int", 0)
  InputLocaleID:=DllCall("GetKeyboardLayout", "Int", ThreadID)
  If (InputLocaleID = InputLocaleCode) {
    Suspend,off
  } Else {
  Suspend, on
  }
  ToolTip %InputLocaleID%
return
*/

TypeAndSleep(KeyToType)
{
  Global
  CorrectlyTyped +=1
  If (GetKeyState("Shift", "P") or GetKeyState("Capslock", "T")){
  StringUpper KeyToType, KeyToType
  } 
  Else {
  StringLower KeyToType, KeyToType
  }
  
  if (CorrectlyTyped=Gracekeys) {
    KeyDelay = 0
    }
  if (KeyDelay > 0)
  {
    Blockinput,on
    k_ASCII = 42  
    Loop {
    Transform k_char, Chr, %k_ASCII%
    ;StringUpper k_char, k_char
    if k_char not in <,>,^,~, ,`,
        Hotkey $%k_char%, k_deadkey
        Hotkey $+%k_char%, k_deadkey
    if k_ASCII = 93
        break
    k_ASCII++
}
   
    
    Send, ?
    sleep KeyDelay
    Send {backspace}
  
    k_ASCII = 42  
    Loop {
      Transform k_char, Chr, %k_ASCII%
        ;StringUpper k_char, k_char
        if k_char not in <,>,^,~, ,`,
            Hotkey $%k_char%, k_KeyPress
            Hotkey $+%k_char%, k_KeyPress
        if k_ASCII = 93
            break
        k_ASCII++
  }
        
    Blockinput,off
  }
  Send %KeyToType%
  return
}

Offline

#2 26-Nov-2008 13:19:54

DreymaR
Member
From: Bærum, Norway
Registered: 13-Dec-2006
Posts: 2,091
Website

Re: Rega: Type faster by typing slower

Interesting. Doesn't it make you want to hit your computer though?  ;)


Better burden you cannot carry than man-wisdom much  --  Hávamál
Check out my Big Bag of Keyboard Tricks! For XKB (Linux) and for PKL (Win).

Online

#3 30-Nov-2008 20:02:35

ezuk
Member
Registered: 12-Jul-2008
Posts: 75

Re: Rega: Type faster by typing slower

Not at all. It puts me in a calmer mindset, actually. It's all in how I take it. And also, the delays are can be tweaked endlessly. If they're wrong, it can be a hassle. But when they're right for you, it is just a gentle reminder to type mindfully. :)

Offline

#4 05-Dec-2008 02:05:46

nathan
Member
Registered: 18-Mar-2008
Posts: 19

Re: Rega: Type faster by typing slower

Nice job naming it 'wait' in hebrew...

Offline

Board footer