Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Half-QWERTY: One-handed Typing


  • Please log in to reply
175 replies to this topic
ZeroCool42
  • Members
  • 123 posts
  • Last active: Dec 24 2011 10:40 PM
  • Joined: 25 Apr 2009
Oh my! This is a surprise, I just finished working on a solution to release not a month ago! Didn't ever occur to me that someone else might have got there before me (or in this case WAAAAAAY before me). Kudos jonny!

I will post my version below as, if nothing else, it's certainly written differently, whether or not the functionality is different I don't know! For easy reference, let's just say it's *ahem* VERY heavily based off this solution http://half-qwerty.com/, see the demo flash software for exact functionality guide as it mimics this exactly, including flipping punctuation when the shift key is used to toggle this.

#SingleInstance force
#InstallKeybdHook
#Persistent  ; Keep the script running until the user exits it.

Menu, tray, NoStandard
Menu, tray, add, &Reload, MenuReload
Menu, tray, add, &Suspend, MenuSuspend ;Needs to be a toggle!!!!!!
Menu, tray, add  
Menu, tray, add, &Diagnostics, MenuDiagnostics
Menu, tray, add  ; Creates a separator line.
Menu, tray, add, &Exit, MenuExit ; Creates a new menu item.

;Syntax: ToasterPopup(["Title"],["Message"],["Title Font Color"],["Title Font Size"],["Font Color"],["Font Size"],["Background Color"],[Lifetime in MS (0 to persist until clicked)]

ToasterPopup("Loading Succesful", "Half-Qwerty loaded succesfully", "Blue", "12", "Black", "10", "White", 2000)

Return

;;;;;;;;;;;; End of auto-execute section ;;;;;;;;;;;;

MenuReload:
Reload
Return

MenuSuspend:
Suspend, Toggle
If A_IsSuspended = 1
{
menu, tray, Check, &Suspend
}
Else
{
menu, tray, Uncheck, &Suspend
}
Return

MenuDiagnostics:
KeyHistory
Return

MenuExit:
ExitApp
Return

Space::
Send {Space}
Return

!Space::
Send !{Space}
Return

^Space::
Send ^{Space}
Return

Shift::
Send {Blind}{Capslock} 
Return
/*
When {Blind} is the first item in the string, the program avoids releasing Alt/Control/Shift/Win if they started out in the down position. For example, the hotkey +s::Send {Blind}abc would send ABC rather than abc because the user is holding down the Shift key. {Blind} also causes SetStoreCapslockMode to be ignored; that is, the state of Capslock is not changed.
*/

Space & SC029::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send ¬	
}
Else
{
 Send -
}
Return

Space & 1::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send )
}	
Else
{
Send 0
}
Return

Space & 2::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send (
}	
Else
{
Send 9
}
Return

Space & 3::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send *
}	
Else
{
Send 8
}
Return

Space & 4::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send &
}	
Else
{
Send 7
}
Return

Space & 5::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send {^}
}
Else
{
Send 6
}
Return

Space & 6::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send `%
}	
Else
{
Send 5
}
Return

Space & 7::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send {$}
}	
Else
{
Send 4
}
Return

Space & 8::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send £
}	
Else
{
Send 3
}
Return

Space & 9::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send {"}
}	
Else
{
Send 2
}
Return

Space & 0::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send {!}
}	
Else
{
Send 1
}
Return

Space & -::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send {_}
}	
Else
{
Send ``
}
Return

Space & Tab::
Send {Backspace}
Return

Space & q::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send P
}	
Else
{
Send p
}
Return

Space & w::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send O
}	
Else
{
Send o
}
Return

Space & e::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send I
}	
Else
{
Send i
}
Return

Space & r::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send U
}	
Else
{
Send u
}
Return

Space & t::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send Y
}	
Else
{
Send y
}
Return

Space & y::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send T
}	
Else
{
Send t
}
Return

Space & u::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send R
}	
Else
{
Send r
}
Return

Space & i::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send E
}	
Else
{
Send e
}
Return

Space & o::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send W
}	
Else
{
Send w
}
Return

Space & p::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send Q
}	
Else
{
Send q
}
Return

Space & [::
Send {Tab}
Return

Space & ]::
Send {Tab}
Return

/*
Space & \::      ; Correct for UK keyboard?
Send {Tab}
Return
*/

Space & Capslock::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send @
}	
Else
{
Send '
}
Return

Space & a::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send {:}
}	
Else
{
Send {;}
}
Return

Space & s::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send L
}	
Else
{
Send l
}
Return

Space & d::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send K
}	
Else
{
Send k
}
Return

Space & f::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send J
}	
Else
{
Send j
}
Return

Space & g::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send H
}	
Else
{
Send h
}
Return

Space & h::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send G
}	
Else
{
Send g
}
Return

Space & j::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send F
}	
Else
{
Send f
}
Return

Space & k::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send D
}	
Else
{
Send d
}
Return

Space & l::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send S
}	
Else
{
Send s
}
Return

Space & `;::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send A
}	
Else
{
Send a
}
Return

Space & z::
Send /
Return

Space & x::
Send .
Return

Space & c::
Send `,
Return

Space & v::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send M
}	
Else
{
Send m
}
Return

Space & b::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send N
}	
Else
{
Send n
}
Return

Space & n::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send B
}	
Else
{
Send b
}
Return

Space & m::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send V
}	
Else
{
Send v
}
Return

Space & ,::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send C
}	
Else
{
Send c
}
Return

Space & .::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send X
}	
Else
{
Send x
}
Return

Space & /::
GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise. 
If state := GetKeyState("Capslock", "T") ; True if CapsLock is ON, false otherwise.
{
Send Z
}	
Else
{
Send z
}
Return

ToasterPopup(TP_Title, TP_Message, TP_TitleFontColor, TP_TitleFontSize, TP_FontColor, TP_FontSize, TP_BGColor, TP_Lifespan)
{
   DetectHiddenWindows, On
   SysGet, Workspace, MonitorWorkArea
   Gui, 89:-Caption +ToolWindow +LastFound +AlwaysOnTop +Border
   Gui, 89:Color, %TP_BGColor%
   Gui, 89:Font, s%TP_TitleFontSize% c%TP_TitleFontColor%
   Gui, 89:Add, Text, gTP_Fade, %TP_Title%
   Gui, 89:Font, s%TP_FontSize% c%TP_FontColor%
   Gui, 89:Add, Text, gTP_Fade xs y30, %TP_Message%
   Gui, 89:Show, Hide
   Global GUI_ID ;Is this the proper way to use Global? I need it for TP_Fade...
   GUI_ID := WinExist()
   WinGetPos, GUIX, GUIY, GUIWidth, GUIHeight, ahk_id %GUI_ID%
   NewX := WorkSpaceRight-GUIWidth-5
   NewY := WorkspaceBottom-GUIHeight-5
   Gui, 89:Show, Hide x%NewX% y%NewY%

   DllCall("AnimateWindow","UInt",GUI_ID,"Int",500,"UInt","0x00040008") ; TOAST!
   If (TP_Lifespan=0)
   Return
   Else
   {
      Sleep, %TP_Lifespan%
      GoSub, TP_Fade
      Return
   }

TP_Fade:
DllCall("AnimateWindow","UInt",GUI_ID,"Int",1000,"UInt","0x90000") ; Fade out when clicked
Return
}

Note: The above code includes a slightly modified (purely for cosmetic purposes) version of Rhys et al's Toaster Popup function.

Please note: If you have any problems with my code, or if I've 'borrowed' code and forgotten to credit you (Sorry in advance, I'm really bad at that!), or want to talk about any part of the script or possible modifications, just PM or e-mail me :D

yralih
  • Guests
  • Last active:
  • Joined: --
Okay. I'm sure this is addressed somewhere, but I'm not finding it, and since this is the script I need, I'm asking here. Feel free to send me to a more appropriate place.

I had halfqwerty running fine on my desktop machine, but I got a new one and I can't get it to work there or on my netbook. I'm sure it's operator malfunction. Here's what I've done so far:
1)downladed AHK.
2)copy/pasted script from page 1 of this forum to a Notepad window
3) Saved file as halfqwerty.ahk to my desktop.
4) clicked on that file on my desktop
5) tested shift + letter key to no effect.

Now, as I recall, all I had to do to start it on the computer where it worked was to click on the script file and I'd be off to the races. (I never could get it to start automatically on bootup, even when I put it in my Start folder. I'm one-handed, so I know I'll be using it every time, but that's an issue for another time.)

Any suggestions?

yralih
  • Guests
  • Last active:
  • Joined: --

Okay. I'm sure this is addressed somewhere, but I'm not finding it, and since this is the script I need, I'm asking here. Feel free to send me to a more appropriate place.

I had halfqwerty running fine on my desktop machine, but I got a new one and I can't get it to work there or on my netbook. I'm sure it's operator malfunction. Here's what I've done so far:
1)downladed AHK.
2)copy/pasted script from page 1 of this forum to a Notepad window
3) Saved file as halfqwerty.ahk to my desktop.
4) clicked on that file on my desktop
5) tested shift + letter key to no effect.

Now, as I recall, all I had to do to start it on the computer where it worked was to click on the script file and I'd be off to the races. (I never could get it to start automatically on bootup, even when I put it in my Start folder. I'm one-handed, so I know I'll be using it every time, but that's not an issue unless I can get it working manually.)

Any suggestions?



SoLong&Thx4AllTheFish
  • Members
  • 4999 posts
  • Last active:
  • Joined: 27 May 2007

3) Saved file as halfqwerty.ahk to my desktop.


Are you sure it isn't saved as halfqwerty.ahk.txt for example? Is the green AutoHotkey icon in you systray after you run it?

AAC
  • Members
  • 11 posts
  • Last active: Feb 05 2013 08:56 PM
  • Joined: 25 May 2006
Have you downloaded Autohotkey?

If not do so. You can then run Half-QWERTY from the *.ahk file or compile it as and *.exe.

If it is compiled as an executable file it willrun "stand alone".

Please ask if you need more details.

Mike

Kega
  • Guests
  • Last active:
  • Joined: --
Hello.

I'm using the script from the first page, and have a few questions. Hope someone can help me out.

I'm using a danish keyboard so I have a different key setup.
I using this left handed so I'm missing a key - backspace. I would like to add it to the key commonly know as tilde (~) (the key left of 1), but don't know what it's called in AutoHotKey scripting. On my danish keyboard its has the following symbols on it ½ and §. I have tried writing "mirror_½ = Backspace" but the ½ key keeps its original function. When using ~ i get a load error from AutoHotKey.

The same goes for the key left of Z, what is that called when scripting? The symbols on it < and > and \.

And finally, is it possible to change the mirror key? Space is fine, but I would like to try and use Caps Lock. Then I'm not using a key, that I use when typing normally. Maybe have the mirror effect as a toggle function - don't know if that will be weird and horrible. I have to try to find out :)

Thanks in advance for any help

- Sorry for the bad english, hope you can understand.

AAC
  • Members
  • 11 posts
  • Last active: Feb 05 2013 08:56 PM
  • Joined: 25 May 2006
Hi Kega,


When using Lefthanded keyboard Backspace is Tab.

There are at least 4 or 5 different versions of Half-QWERTY: One-handed Typing on the Autohotkey site. I believe there is one that that does other languages. Lets see....yes

#SingleInstance

; HalfKeyboard invented by Matias Corporation between 1992 and 1996
; Originally coded in AutoHotkey by jonny in 2004
; Many thanks to Chris for helping him out with this script.
; Capslock hacks and `~ remap to '" by Watcher
; This implementation was done by mbirth in 2007

Menu Tray, Icon, HalfKeyboard.ico
Menu Tray, Tip, HalfKeyboard emulator
Menu Tray, Add, E&xit, MenuExit
Menu Tray, NoStandard
FileInstall HK_dn.gif, HalfKeyboard_help.gif

RegRead KLang, HKEY_CURRENT_USER, Keyboard Layout\Preload, 1
StringRight KLang, KLang, 4
If (!KLang)
  KLang := A_Language

If (KLang = "0407") {
  ; 0407 DE_de QWERTZ mirror set
  original := "^12345qwertasdfgyxcvb"
  mirrored := "ß09876poiuzölkjh-.,mn"
} Else If (KLang = "040c" || KLang = "040C") {
  ; 040c FR_fr AZERTY mirror set         
  original := "²&é" . """" . "'(azertqsdfgwxcvb"   ; split up string for better
  mirrored := ")àç" . "_"  . "è-poiuymlkjh!:;,n"   ; human readability
} Else {
  ; 0409 US_us QWERTY mirror set
  original := "``" . "12345qwertasdfgzxcvb"   ; split up string for better
  mirrored := "'"  . "09876poiuy;lkjh/.,mn"   ; human readability
}

; Now define all hotkeys
Loop % StrLen(original)
{
  c1 := SubStr(original, A_Index, 1)
  c2 := SubStr(mirrored, A_Index, 1)
  Hotkey Space & %c1%, DoHotkey
  Hotkey Space & %c2%, DoHotkey
}

return


; This key may help, as the space-on-up may get annoying, especially if you type fast.
Control & Space::Suspend

; Not exactly mirror but as close as we can get, Capslock enter, Tab backspace.
Space & CapsLock::Send {Enter}
Space & Tab::Send {Backspace}

; If spacebar didn't modify anything, send a real space keystroke upon release.
+Space::Send {Space}
Space::Send {Space}
  
; Define special key combos here (took them from RG's mod):
^1::Send {Home}
^2::Send {End}
^3::Send {Del}

; General purpose
DoHotkey:
  StringRight ThisKey, A_ThisHotkey, 1
  i1 := InStr(original, ThisKey)
  i2 := InStr(mirrored, ThisKey)
  If (i1+i2 = 0) {
    MirrorKey := ThisKey
  } Else If (i1 > 0) {
    MirrorKey := SubStr(mirrored, i1, 1)
  } Else {
    MirrorKey := SubStr(original, i2, 1)
  }
  
  Modifiers := ""
  If (GetKeyState("LWin") || GetKeyState("RWin")) {
    Modifiers .= "#"
  }
  If (GetKeyState("Control")) {
    Modifiers .= "^"
  }
  If (GetKeyState("Alt")) {
    Modifiers .= "!"
  }
  If (GetKeyState("Shift") + GetKeyState("CapsLock", "T") = 1) {
    ; only add if Shift is held OR CapsLock is on (XOR) (both held down would result in value of 2)
    Modifiers .= "+"
  }
  Send %Modifiers%{%MirrorKey%}
return

Space & F1::
  ; Help-screen using SplashImage
  CoordMode Caret, Screen
  y := A_CaretY + 20
  If (y > A_ScreenHeight-100)
    y := A_CaretY - 20 - 100
  SplashImage HalfKeyboard_help.gif, B X%A_CaretX% Y%y%
  Sleep 5000
  SplashImage OFF
return

MenuExit:
  ExitApp
return

This is my version - take your pick.

; Left Hand Keyboard for Touch Typists.
; Date: 03-08-2006 
; Michael Seaman, ACWC, Bridgepoint Hospital

; To make Shift/Ctrl/Alt keys "sticky" Thanks Titan!
; Thanks to everyone else as well!

Loop, % 255 - 165
   end := end . ",{" . Chr(A_Index + 32) . "}"

Shift::
Input, key, B L1 *, %end%
StringReplace, key, ErrorLevel, EndKey:
Send {Shift Down}{%key%}{Shift Up}
Return

Ctrl::
Input, key, B L1 *, %end%
StringReplace, key, ErrorLevel, EndKey:
Send {Ctrl Down}{%key%}{Ctrl Up}
Return

Alt::
Input, key, B L1 *, %end%
StringReplace, key, ErrorLevel, EndKey:
Send {Alt Down}{%key%}{Alt Up}
Return

; Without this capslock would shift only letters.
+CapsLock::   ; Must catch capslock and Shift capslock to make this work.

CapsLock::
  if CapsState = D
  {
    CapsState = U
    Send {LShift Up}
  }
  else
  {
    CapsState = D
    Send {LShift Down}
  }
  return

;Consider the following example, which makes Space into a prefix key.
Space & q::Send,{p}
Space & w::Send,{o}
Space & e::Send,{i}
Space & r::Send,{u}
Space & t::Send,{y}

Space & a::Send,{:}
Space & s::Send,{l}
Space & d::Send,{k}
Space & f::Send,{j}
Space & g::Send,{h}

Space & z::Send,{?}
Space & x::Send,{.}
Space & c::Send,{,}
Space & v::Send,{m}
Space & b::Send,{n}

Space & `::send,{-}
Space & 1::Send,{0}
Space & 2::Send,{9}
Space & 3::Send,{8}
Space & 4::Send,{7}
Space & 5::Send,{6}

Space & Tab::Send,{BS}
Space & CapsLock::Send,{Enter}

;To make the Space bar send a real "Space" keystroke whenever it isn't used to launch a hotkey.
$Space::
Send, {Space down}
Sleep 250
Send {Space up}
Return

;The $ prefix is needed to prevent a warning dialog about an infinite loop (since the hotkey
;"sends itself").In addition, the above action occurs at the time the key is released.

Remember this program was originally written for Touch Typists who lost the use of one hand.

Kega
  • Guests
  • Last active:
  • Joined: --
Thanks for the quick answer.

I'm a total newcomer to AutoHotKey, so I'm still learning the scripting and I'm properly horrible wrong in my next comment.
But the different scripts I have seen, feel the same. Space mirrors the keys, after that it's very small changes the scripts have from each other. Although the way people script is significantly different. So it's not a new script that I need, I think :)

And I don't know how I missed the "Backspace" function, as it is bind to Caps Lock in the script on the first page.

I would still love to know how to call the key left of 1 and left of Z, on my danish keyboard. As it feels as a wast not to use them :)

Again, thanks for the quick answer - I'm really grateful.

- Sorry for the bad english

DreymaR
  • Members
  • 89 posts
  • Last active: Jun 19 2013 08:03 AM
  • Joined: 24 May 2009
The upper left-hand key is called OEM_3 on your Scandinavian keyboard (or you can use SC029).

The lower left-hand key is called OEM_102 (SC056).

Otherwise, there are some useful tricks here:
<!-- m -->http://www.autohotke...ocs/KeyList.htm<!-- m -->
Better burden you cannot carry than man-wisdom much -- Hávamál

Kega
  • Guests
  • Last active:
  • Joined: --
A great - thank you. But sadly there are no change to the functions of these keys.
Doesn't matter if I use OEM_3 or SC029, I still get the default key. Weird :(

And thanks for the link, I read it a couple of days ago (yes I am a noob :) ) - and it has been really helpful, but didn't find a list over special key (I hope I didn't overlook it).

specter333
  • Members
  • 627 posts
  • Last active: Oct 07 2016 07:43 AM
  • Joined: 15 Jan 2007
This is Terrific. I sit in a recliner with a keyboard in my lap or on the table beside me. I've been getting pretty good at reaching over and using the entire keyboard with one hand, this is much easier. It's not near as hard to get used to as one would think.

Thank you for sharing.

brulez
  • Guests
  • Last active:
  • Joined: --
Has anyone been able to get a dictionary to work with this script? I have been using it for awhile but it'd be much faster if you didn't have to use the modifier keys and it seems like it'd be able to figure out most words.

jabobian
  • Members
  • 29 posts
  • Last active: Feb 03 2011 03:46 AM
  • Joined: 13 Apr 2010
Hi, all.

I have devised a new method termed as "Numpad-QWERTY" for single-hand QWERTY typing without using spacebar. Please visit http://jabobian.blog.com for more information. There are also other interested tools there (such as Taggie-and-Tagging for file tagging and searching).

Source code will be published here soon. See :arrow: http://www.autohotke...p=417971#417971

jabobian
  • Members
  • 29 posts
  • Last active: Feb 03 2011 03:46 AM
  • Joined: 13 Apr 2010
Please leave some comments on http://jabobian.blog.com if you can. Many thanks! :)
Numpad-QWERTY, Taggie-and-Tagging, refer to http://jabobian.blog.com

Dave N
  • Guests
  • Last active:
  • Joined: --
Some comments as of 20 FEB 2011 for those who don't wish to read ten pages of thread:

I have tried both Markus' 3a script and ZeroCool42's script. These appear to be the most developed scripts in the thread.

The images that the 3a script calls are no longer available, so those lines need to be commented out to get the script to run:
;Menu Tray, Icon, HalfKeyboard.ico
;Menu Tray, Tip, HalfKeyboard emulator
;Menu Tray, Add, E&xit, MenuExit
;Menu Tray, NoStandard
;FileInstall HK_dn.gif, HalfKeyboard_help.gif

I found the hold-for-caps feature in the 3a script to be an incredibly handy feature; however, the 1 second delay was a bit long for my tastes. I recommend changing the following line to suit your tastes:
UpperDelay = 1000
I currently have mine set for 500ms, though with practice I suspect I may want that even shorter.

The space+caps lock = return is another nice feature in the 3a script, though it comes at the cost of moving the apostrophe and double-quotes to the tilda key. Not a terrible tradeoff, all things considered.

Both scripts have the problem that if you hold the space key down before realizing you don't need it for a letter, you'll still type a space character. A request that was made in the thread was for no space character to be produced after holding the space for more some delay. This is apparently difficult or impossible to implement in AHK, and neither script does it.

So given these differences in features, the 3a script (with the modifications I mention above) is currently the better choice of the two, though that may change in the future.

For newbies like me: installing AutoHotKeys, then copying the scripts into .ahk files using notepad was a piece of cake. It took me less than 5 minutes.

Also: I'm finding that it really is true that the left hand intuitively knows where to find the right hand letters. This kind of typing is incredibly easy to learn!