This is a 12-button chorded keyboard for Android. Forked from Adellica’s Thumbkeyboard, which is in turn a fork of Alexander Burger’s PentiKeyboard.
Main changes from Adellica’s keyboard:
- Should build in Android Studio.
- New layout, which I think is more efficient.
- Remove special anchor key and blank key, to add more normal keys.
- Show capital letters when shift is pressed.
- Show unicode characters on keyboard.
Adellica’s readme.md
follows. Most of it is still relevant.
The keyboard is fully usable but not very user-friendly. The transparency feature may misfunction in certain apps.
- With only 12 buttons, they can be large and you rarely miss
- With only 12 buttons, you'll need to press multiple buttons simultaneously to access all the 26 letters of the alphabet
- With fewer key misses, you (hopefully) don't need a dictionary
- There are swipe gestures for pretty much all keyboard symbols
- You can define your own layouts
- It is probably very difficult to learn to use proficiently but possibly worth the effort!
I want my keyboard to be useful everywhere:
- When I'm writing on my phone SMS / emails
- When I'm entering URLs into my browser
- When I'm entering
bash
commands into my Termux - Anything
Hacker's Keyboard
can do, I want to be able to do! - Open up for "touch typing" on a touchscreen (tested and possible, but could be improved with tactical feedback)
I want something that'll work reasonable well for everyday use in (hopefully) any language. At least, any phonetic or latin-based language. Currently, the bundled layout has only been tested with:
- English
- Norwegian
- bash / C / Java / JavaScript / Scheme
I don't want to cover the screen with my keyboard. I don't want to cover my screen with my input data - I want to cover it with output data!
The idea is that since we're only dealing with 12 large buttons, they don't need to be decorated in detail and thus can be transparent and leave the enrire screen for your apps. We could make a non-transparent version too.
This project focuses on letter-by-letter input, and aims to should be fast enough on its own. There is therefore currently no dictionary support.
The reason these are needed on soft QWERTY, I suppose, isn't because letter-by-letter typing on touchscreens is slow - but because it's error prone.
Since I'll hopefully be able to use with this emacs
on Termux
,
I'll need lots of key combinations, like M-f
and C-M->
.
I don't know how non-Latin input would work with this, however. I'm currently focusing on Latin and programming input.
There's a very simple stack-based interpreter meant to allow flexible configuration of your keyboard and layout. It's called Thumb Stack Machine (TSM).
Note: Clojure's syntax-highlighting works quite well for this language.
You can run the TSM interpreter without Android like this (after
gradle
or Android Studio build):
➤ rlwrap java -cp app/build/intermediates/classes/debug/ com.adellica.thumbkeyboard.tsm.Reader
Thumb StackMachine (REPL on port 2345)
[ ] 2 3 +
[ 5 ]
This syntax is used for layout configuration. See main.thumb and default.layout.thumb.
TSM has special support for keypresses
. These borrow from the Emacs
syntax, and have some operators:
➤ rlwrap java -cp app/build/intermediates/classes/debug/ com.adellica.thumbkeyboard.tsm.Reader
Thumb StackMachine (REPL on port 2345)
[ ] :C-a ;; this means the keypress "holding control while pressing a"
[ :C-a ] drop
[ ] :x ;; a single-letter means a keypress of that key (here, "pressing x")
[ :x ] shift? ;; is keypress on top of stack holding shift modifier?
[ false ] drop
[ ] :X ;; single-letters are case-sensitive!
[ :X ] shift?
[ true ] drop
[ ] :X false shift! ;; removing shift modifier makes it lowercase (convenience)
[ :x ] drop
[ ] :1
[ :1 ] dup
[ :1 :1 ] shift?
[ :1 false ] not ;; negate!
[ :1 true ] shift! ;; set shift modifier to true on keypress in stack position 2
[ :! ] drop ;; makes sense? holding shift and pressing 1 yields ! (US layout only)
[ ] :@ ;; let's try the other way
[ :@ ] false shift! ;; how does this keypress look like without holding shift?
[ :2 ] drop ;; it looks like :2 (again, it's always US layout)
[ ] :C-M-x ;; would be the keypress for control-alt-x
[ :C-M-x ] alt?
[ true ] drop ;; as expected, we're holding alt (meta) when pressing C-M-x.
[ ] :enter ;; non-single-letter inputs are supported (named keys)
[ :enter ] true shift! ;; they are not case-sensitive
[ :S-enter ] ;; and are always printed in lower-case (explicit shift (S) modifier)
Many of Android's KeyEvents are supported (remove the KEYCODE_
prefix), but some have been renamed (FORWARD_DEL
=> :delete
).
- delete whitespace first before "delete word"
- add \t and \n boundaries for "delete word"
- emoji: find out how they work and support them
- real borders: give each button/box a deadzone/margin so that enter doesn't need two swipes down to not conflict with swipe left.
- a quick and easy way to update/share layouts/strokes
- add a way to switch to other keyboard apps
- add a non-seethrough mode