<div dir="ltr">Hi Guys,<div><br></div><div>I've been working on a personal project to implement one-handed touch typing as an accessibility feature.</div><div><br></div><div>There are software solutions for this available for Win/MacOS <a href="http://www.onehandkeyboard.org">http://www.onehandkeyboard.org</a>, and an (expensive)</div><div>hardware solution available. There is also a solution which uses xkb mappings to utilise the caps-lock as a modifier,</div><div>but this didn't meet my needs; along with a couple of outdated other linux alternatives mentioned at </div><div><a href="http://www.onehandkeyboard.org/linux-one-handed-keyboards/">http://www.onehandkeyboard.org/linux-one-handed-keyboards/</a></div><div><br></div><div>I had originally started this using XLib hooks to capture all keyboard input and re-introduce keys through XTest.</div><div>This wasn't the best solution however, and while reading up on wayland, I discovered libinput provides a good</div><div>location for this work. And using the xf86-input-libinput wrapper for X I'm now using it on my laptop.</div><div><br></div><div>Anyway, I thought I had got to a stage where I could share some code (although this is still a work in progress)</div><div><br></div><div>I'd love to hear your feedback as to whether this is something that you would like to integrate, or for me to continue working on.</div><div>(I'll continue to use it for personal use, but if its desired, I can work on improvements to upstream it)</div><div><br></div><div>My current work is on github, and includes updates to the xf86-input-libinput wrapper to enable the feature from xorg.conf.d</div><div><br></div><div>Rebased today in the forks at :</div><div><br></div><div><a href="https://github.com/kbingham/libinput.git">https://github.com/kbingham/libinput.git</a> : branch halfkey<br></div><div><a href="https://github.com/kbingham/xf86-input-libinput.git">https://github.com/kbingham/xf86-input-libinput.git</a> : branch halfkey<br></div><div><br></div><div>Currently implemented:</div><div> * Functioning halfkey support using the space bar as a modifier</div><div> * Test cases in test/keyboard-halfkey.c</div><div> * Property to enable support with : Option "Halfkey" "on"</div><div><br></div><div>Todo List:<br></div><div> * Customisable Modifier (use caps-lock/tab etc instead)</div><div> * Customisable or device specific mirror mappings</div><div> * Testing on non-qwerty / UK keyboards and layouts (I have used only my keyboard so far)</div><div> * Add a "RELEASE" state to track pressed keys after modifier released (Current work in progress)</div><div> * Introduce halfkey pressed keys on a different seat as if it was a separate keyboard</div><div>   (due to failing test case .. halfkey_test_corner_cases )</div><div> * Probably some updates to the debug tooling in tools/</div><div> * Some more documentation and state diagrams?</div><div> * Add timeout on space down to insert (repeating) spaces.</div><div> * Tidy up the patches :)</div><div><br></div><div>Warning: If you run this live, and press a key down followed by its mirror equivalent down at the same time, libinput will fire an assertion and your X-session will restart !</div><div>( This is the bug failing in halfkey_test_corner_cases )</div><div><br></div><div><br></div><div>Look forward to hearing from you.</div><div><br></div><div>Regards</div><div><br></div><div>Kieran Bingham</div><div><br></div></div>