AutoHotkey Community

It is currently May 27th, 2012, 5:18 am

All times are UTC [ DST ]




Post new topic Reply to topic  [ 6 posts ] 
Author Message
PostPosted: August 18th, 2005, 6:49 pm 
Offline

Joined: December 15th, 2004, 10:24 pm
Posts: 303
Location: United States
EDIT: The latest version, 1.1.5, is here. Save as a .ahk file to use it.

I've been pondering for a while, what would be a systematic, easily configurable way for one-handed typing. This is what i've come up with, the 7KAT (7-key alternative typing) system.

If you output only alphanumeric keys and make no typo mistakes, then you will only be using 5 keys of the keyboard, to output all letters/numbers, as well as Shifting/space/return and the common punctuation of comma/period. But we all make typo errors, so the 6th key is used for Backspace. Additionally, the 7th key is used for symbols. The script will prompt you to choose 7 keys (which can be any alphanumeric or symbol key), and then dynamically sets up the hotkeys according to the keys selected, to accomplish the 26 letters, 10 numbers, punctuation/space/return/Esc/Backspace/symbols, and Shifting/CapsLock. Any keyboard key, outside the 7 keys, remains as normal usage, so this provides a great deal of flexibility. You can change the layout any time, and also toggle/Suspend the typing mode to restore normal keyboard use (even leaving the rest of your script's hotkeys intact in the case it contains this script). While there is still room for improvement, i believe this is the most systematic, efficient, and flexible method available for one-hand typing.

1 = thumb

a/ei/ou................1 + 2/3/4
bc/df/gh..............2 + 2/3/4
jk/lm/np..............3 + 2/3/4
q/r/s/t/v..............4 + 1/2/3//5
w/x/yz................5 + 2/3/4

backspace..........5b ; 6th key is used
Space.................1
Enter..................3 + 1
./Tab/,................5 + 1(x1/2/3)
CapsLock...........2 + 5
CapsNext...........2 + 1

numbers/Esc.......1 + 5(x1/hold)
0.........................1
1/2/3...................2(x1/2/3)
4/5/6...................3(x1/2/3)
7/8/9...................4(x1/2/3)

change layout......3 + 5

+-*/=\(){}[]........1+7 repeat as needed
!@#$%^&...........7+1 repeat as needed
;:"`_|?<>............5+7 repeat as needed

Code:
;-------------------------------------------------------
; 7-Key Alternative Typing System 1.1.2
; by Decarlo

hotkeySuspend = ^#s    ; change to preference

; The next value affects how fast to press a key to output different letters.
; 100 - 400 is the optimal range; for faster typers, lower the number.
; You might need to tweak the Keyboard character repeat settings.
; The control panel Accessibility Options > FilterKeys also has related settings.
; Default is 300 for new users to more easily adapt.
; You can also hold the key pressed instead of pressing it more than once.

typingSpeedSetting = 300   ; millisec window range for output change

; Several keys can output more than one character.

; a/ei/ou   1 + 2/3/4   ; 1 = thumb.
; bc/df/gh   2 + 2/3/4
; jk/lm/np   3 + 2/3/4
; q/r/s/t/v   4 + 1/2/3/4/5
; w/x/yz   5 + 2/3/4

; backspace   5b  ; 6th key is used
; Space/./,   5 + 1(x1/2/3)
; Enter      3 + 1

; Esc/numbers   1 + 5(x1/hold)
; 0      1
; 1/2/3      2(x1/2/3)
; 4/5/6      3(x1/2/3)
; 7/8/9      4(x1/2/3)

; change layout   3 + 5

AutoTrim, off
Suspend      ; necessary for re-configuration upon reload

Msgbox,4096, 7-Key Alternative Typing 1.1.2,
(
After this msgbox, press and release, thumb being first,`n
each of the 5 main keys you wish to use, `n
and the 6th key which will be used for Backspace.`n
The 7th key is not yet implemented.
It will be for symbols and options.
)
SplashTextOn,,, select your keys
Input, 7keys, L6

StringMid, 7k_1, 7keys, 1, 1
if 7k_1 = %A_Space%
   7k_1 = Space
StringMid, 7k_2, 7keys, 2, 1
StringMid, 7k_3, 7keys, 3, 1
StringMid, 7k_4, 7keys, 4, 1
StringMid, 7k_5, 7keys, 5, 1
StringMid, 7k_6, 7keys, 6, 1
; StringMid, 7k_7, 7keys, 7, 1   ; for symbols & other options, not yet implemented.
SplashTextOff

msgbox, 4097, 7-Key Alternative Typing,
(
keys selected:`n`n%7k_1%, %7k_2%, %7k_3%, %7k_4%, %7k_5%, %7k_6%`n
To change this, Cancel.`n`n`nSpace+F7 will show the Menu.`n`n
)
ifMsgbox, Cancel, RELOAD

Hotkey, %7k_3% & %7k_5%, 7K_Reload

Hotkey, %7k_5% & %7k_1%, 7K_space_period_comma
Hotkey, %7k_6%, 7K_backspace
Hotkey, %7k_3% & %7k_1%, 7K_Enter
Hotkey, %7k_1% & %7k_5%, 7K_Esc_Numbers
Hotkey, %7k_1%, 7K_0

Hotkey, %7k_1% & %7k_2%, 7K_a
Hotkey, %7k_1% & %7k_3%, 7K_e_i
Hotkey, %7k_1% & %7k_4%, 7K_o_u

Hotkey, %7k_2%, 7K_b_c_123
Hotkey, %7k_2% & %7k_3%, 7K_d_f
Hotkey, %7k_2% & %7k_4%, 7K_g_h

Hotkey, %7k_3% & %7k_2%, 7K_j_k
Hotkey, %7k_3%, 7K_l_m_456
Hotkey, %7k_3% & %7k_4%, 7K_n_p

Hotkey, %7k_4% & %7k_1%, 7K_q
Hotkey, %7k_4% & %7k_2%, 7K_r
Hotkey, %7k_4% & %7k_3%, 7K_s
Hotkey, %7k_4%, 7K_t_789
Hotkey, %7k_4% & %7k_5%, 7K_v

Hotkey, %7k_5% & %7k_2%, 7K_w
Hotkey, %7k_5% & %7k_3%, 7K_x
Hotkey, %7k_5% & %7k_4%, 7K_y_z

Hotkey, %hotkeySuspend%, 7K_Suspend

Suspend, off
SplashTextOn,700,70, script updated, `n7-Key Alternative Typing 1.1.2`nReady
Sleep, 300
SplashTextOff

Return


;-----------------------------------------------

7KAT(char1,char2,char3="")
{
   global typingSpeedSetting
   static 7KAT_index

   if ( A_TimeSincePriorHotkey < typingSpeedSetting ) OR ( A_TimeSincePriorHotkey = -1 )
      7KAT_index += 1
   else
      7KAT_index = 1

   if 7KAT_index = 1
      send %char1%
   else if 7KAT_index = 2
      send {backspace}%char2%
   else if char3
      send {backspace}%char3%
}


7K_Suspend:
suspend
return


7K_Reload:
RELOAD


7K_backspace:
if GetKeyState(7k_6, "p")
   send {backspace}
return


7K_Enter:
send {Enter}
return


7K_space_period_comma:
7KAT("{Space}",".",",")
return


7K_Esc_Numbers:
Loop 15
{
   sleep 20
   if not GetKeyState(7k_5, "p")
   {
      send {Esc}
      BREAK
   }
   if A_Index = 15
   {
      if 7K_numbers
      {
         SplashText("Numbers off", "300")
         7K_numbers =
      }
      else
      {
         SplashText("Numbers on", "300")
         7K_numbers = 1
      }
   }
}
return


7K_a:
send a
return

7K_e_i:
7KAT("e","i")
return

7K_o_u:
7KAT("o","u")
return
 

7K_0:
if 7K_numbers
   send {ASC 48}   ; number 0
return

7K_b_c_123:
if 7K_numbers
   7KAT("{ASC 49}","{ASC 50}","{ASC 51}")   ; numbers 1,2,3
else if ( A_TimeSincePriorHotkey > 300 ) OR ( A_TimeSincePriorHotkey = -1 )
   send b
else
   send {backspace}c
return

7K_d_f:
7KAT("d","f")
return

7K_g_h:
7KAT("g","h")
return


7K_j_k:
7KAT("j","k")
return

7K_l_m_456:
if 7K_numbers
   7KAT("{ASC 52}","{ASC 53}","{ASC 54}")   ; numbers 4,5,6
else if ( A_TimeSincePriorHotkey > 300 ) OR ( A_TimeSincePriorHotkey = -1 )
   send l
else
   send {backspace}m
return

7K_n_p:
if ( A_TimeSincePriorHotkey > 400 ) OR ( A_TimeSincePriorHotkey = -1 )
   send n
else
   send {backspace}{ASC 0112}   ;letter p
return


7K_q:
send q
return

7K_r:
send r
return

7K_s:
send s
return

7K_t_789:
if 7K_numbers
   7KAT("{ASC 55}","{ASC 56}","{ASC 57}")   ; numbers 7,8,9
else if ( A_TimeSincePriorHotkey < 300 )
   send t
return

7K_v:
send v
return


7K_w:
send w
return

7K_x:
send x
return

7K_y_z:
if ( A_TimeSincePriorHotkey > 300 ) OR ( A_TimeSincePriorHotkey = -1 )
   send y
else
   send {backspace}z
return

Space & F7::
Msgbox, 8192, 7-Key Alternative Typing 1.1.2,
(
(1 = thumb)

a/ei/ou      1 + 2/3/4
bc/df/gh      2 + 2/3/4
jk/lm/np      3 + 2/3/4
q/r/s/t/v      4 + 1/2/3/4/5
w/x/yz      5 + 2/3/4

backspace   5b  ; 6th key is used
Space/./,      5 + 1(x1/2/3)
Enter      3 + 1

Esc/numbers   1 + 5(x1/hold)
0      1
1/2/3      2(x1/2/3)
4/5/6      3(x1/2/3)
7/8/9      4(x1/2/3)

suspend script   %hotkeySuspend%

current layout:`t%7k_1%, %7k_2%, %7k_3%, %7k_4%, %7k_5%, %7k_6%

change layout   3 + 5

Use a layout which you are comfortable with,
and change it as needed to prevent hand stress.

Thanks for using the 7KAT system. -Decarlo L.
)
return


;------------------------------------

SplashText(title="", timeout="", width="", height="", text="")   ; default timeout 700
{
   SplashTextOn, %Width%, %Height%, %Title%, %Text%
   if timeout =
      sleep 700
   else
      sleep %timeout%
   SplashTextOff
   return
}

;------------------------------------

_________________
1) The Open Source Definition http://www.opensource.org/docs/definition_plain.php

2) Intuitive. Logical. Versatile. Adaptable. <<AutoHotkey>>


Last edited by Decarlo110 on December 24th, 2005, 10:16 pm, edited 3 times in total.

Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: December 22nd, 2005, 5:24 pm 
Offline

Joined: December 15th, 2004, 10:24 pm
Posts: 303
Location: United States
Code:
; history, recent topmost:
; added the 7th key, used for symbols (see menu for chart)
; added CapsLock, CapsNext(capitalizes next letter), and Tab functionality
; switched priority of Esc/Numbers to Numbers/Esc (fingers 1+5) for faster number input
; fixed issues with cancelling change-layout and toggling typing-mode using last settings
; solved workaround to simulate dynamic #UseHook with Hotkey command
; added use of Send {Blind} to preserve Caps/Alt/Win/Shift/Ctrl states in output
; added pause to Backspace and Enter for better typing control
; fixed activation to skip toggle if hotkeys are not initialised
; fixed change-layout routine to toggle 7K_ hotkeys off before re-assignment
; fixed hotkey usage of typingSpeedSetting variable
; changed activation/toggleSuspend hotkey from +^F7 to !F7
; added Suspend specific to typing-mode instead of all hotkeys (allows script integration)
; improved change-layout routine from simple reload to having ability to cancel selection
; added alternate-typing in-use indicator (tooltip at bottom left)
; changed Space substitution to one key (1/thumb) instead of two keys (5+1)

Link is at first post.

_________________
1) The Open Source Definition http://www.opensource.org/docs/definition_plain.php

2) Intuitive. Logical. Versatile. Adaptable. <<AutoHotkey>>


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: July 24th, 2006, 8:28 am 
Offline

Joined: July 24th, 2006, 8:00 am
Posts: 4
I cannot get it to work with the numeric keys of the numpad in numeric or arrow mode. The keys are not recognized and registered. Perhaps defining the keys in a seperate ini file would help.


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: July 24th, 2006, 10:00 am 
Offline

Joined: January 7th, 2006, 1:38 pm
Posts: 47
Location: Oslo, Norway
Wow, great idea! I agree with the ini-suggestion. Also, I'd like to see option to suspend the script IF Scroll Lock is off, so that by default the keyboard is "normal" while when Scroll Lock is on, the 7KAT-keys are toggled on.


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: June 8th, 2008, 9:31 pm 
nice program,

i found a part to correct: if you use space for space (^^), it doesn't run. maybe if you replace at the input ' ' to '{space}'.

sorrry for the bad english,

nice program!!

jabi


Report this post
Top
  
Reply with quote  
 Post subject:
PostPosted: July 4th, 2009, 4:52 am 
Excellent! Not difficult to pick up at all!


Report this post
Top
  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 6 posts ] 

All times are UTC [ DST ]


Who is online

Users browsing this forum: Exabot [Bot], Google Feedfetcher and 12 guests


You can post new topics in this forum
You can reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Powered by phpBB® Forum Software © phpBB Group