Untitled

9 min read Original article ↗
# VIP (=: flat T) # 30nov25 Software Lab. Alexander Burger StenoBoard ========== StenoBoard is a virtual keyboard for Android, which allows to input any character (letter, digit, punctuation or control) and function or navigation key with a single stroke or tap. A "stroke" is a movement on one of nine fields on the screen, in one of eight directions over a certain minimal distance, ending in one of four gestures. This gives a total of 297 possible keys (288 strokes plus 9 taps, see below). It is not necessary to draw a stroke exactly inside a field. It can be smaller or bigger, relevant is only that its center is inside the intended field. The nine fields are the center field plus the surrounding eight modifier fields: | | P | D | S | | -------+-------+------- | | CP | | SA | | -------+-------+------- | | C | F | A | | S: Shift P: Punctuation D: Digit A: AltGr C: Control F: Function CP: Control + Punctuation SA: Shift + AltGr The eight directions are E: East SE: South East S: South SW: South West W: West NW: North West N: North NE: North East and the terminating gestures are * Lift the finger up * Deviate a bit to the right * Deviate a bit to the left * Move a bit back If the finger is not moved, but lifted up immediately, it is a "tap" and generates some often-used keys: | | 3 | ESC | 321 | | -------+-------+------- | | BS | 1 | TAB | | -------+-------+------- | | 2 | RET | 21 | | Tabulator, Return, Backspace or Escape, or some repetitions of previous keys. Pressing a little longer will start an auto-repeat. Otherwise, after moving that minimal distance, it is considered as the beginning of a stroke. To indicate that to the user, a short vibration gives haptic feedback. If now the finger is lifted up, the key is immediately generated. If the movement deviates from the original direction more than a certain threshold, or moves back more than a certain distance, a second feedback and another key is generated. The haptic feedback is quite helpful for a precise input of the strokes. Thus it is strongly recommended to switch on "Vibration and haptics" in the system settings. You can abort a stroke by touching the screen anywhere with a second finger. Touching the screen outside the input fields area temporarily hides StenoBoard. You can now perform normal operations like selecting, copying, scrolling, or clicking on buttons in the underlying application. Swiping the screen horizontally or vertically, by starting in the "pad" area, which will generate the left, right, up and down Arrow keys. The pad area is invisible, but has the the same size as - and is directly above, below or besides - the input fields: +---------------------+ | | | | | | | +- - - - -+ | | : : | | : Pad : | +---------------------------------+ | : : | | | | : : | | | | +- - - - -+ | | | | | | +- - - - -+ | | | | | | : : | | | | ---+---+--- | | : Pad : ---+---+--- | | | | | | : : | | | | ---+---+--- | | : : ---+---+--- | | | | | | +- - - - -+ | | | | | | | +---------------------+ +---------------------------------+ Swiping vertically outside the fields and pad area adjusts the display brightness, and swiping horizontally adjusts the audio volume. To enable these two, the "Modify settings" permission must be granted to the StenoBoard App. The hardware volume keys (and the gyroscope sensor during long presses) generate special sequences, starting with a "Δ" character. They can be used for mouse emulation. "Normal" keys are written in the center field. They are the lower case letters a-z, space, plus the often used characters ",", ".", "?", "(" and ")". Shift ----- The Shift field generates upper case versions of the normal characters, with the exception that comma, dot and question mark are the same, and "(" becomes "{" and ")" becomes "}". Punctuation ----------- The characters written in the Punctuation field are easy to memorize: & [A]mpersand \ [B]ackslash ^ [C]aret " [D]ouble quote = [E]qual sign ` [G]rave accent # [H]ash @ Atmar[k], [K]lammeraffe < [L]ess > [M]ore | [O]r % [P]ercent ' [Q]uote $ Dollar [S] ~ [T]ilde _ [U]nderscore ; [,] : [.] ! [?] [ [(] ] [)] AltGr ----- Some language specific characters and a few emojis are generated in the AltGr field. Typical ones are: ä A-A Ä SA-A ö A-O Ö SA-O ü A-U Ü SA-U ß A-S € A-E Euro § A-P Paragraph ² A-2 ³ A-3 😰 A-B [B]ad 😎 A-C [C]ool ☺ A-L [L]augh ♥ A-R Hea[r]t 👍 A-T [T]humb 👉 A-( Right 👈 A-) Left Function Keys ------------- Writing a digit 1-9 in the Function field generates function keys F1-F9, a "V" generates F11 and a "W" generates F12. A Comma generates INS, "D" generates DEL, and "Q" generates BREAK. Navigation Keys --------------- Navigation keys are also generated in the Function field: * Plain strokes right (East), down (South), left (West) or up (North) generate the Arrow keys * Plain strokes South East or North East generate PAGE DOWN or PAGE UP, respectively * Plain strokes South West or North West generate END or HOME, respectively Control ------- In addition to the normal control keys "^A" through "^Z", the keys for space, ",", ".", "?", "(" and ")" are also assigned. Ctrl-space toggles candidate input on/off (e.g. Japanese or language-specific letters, but also some emojis via "$"). Typing text will then display matching candidates in the top row of the screen. This list can be scrolled forward with TAB and backward with BS. Either tap on one of them to use it, tap RET to use the first one, tap ESC to directly use the text entered so far, or type Ctrl-space again to close the candidate input. Typing PASTE (see below) in candidate input adds the current paste buffer contents to the candidates database, either directly, or with the characters typed so far as the key. Typing DEL in candidate input deletes the combination of the key typed so far and the first match from the candidates database. The five remaining five keys generate sequences useful only in the TMUX terminal multiplexer: , ^B DOWN Change to the pane below . ^B [ 0 UP Enter copy mode and scroll one line up ? ^B [ 0 PGUP Enter copy mode and scroll one page up ( ^B p Change to the previous window ) ^B n Change to the next window Special Keys ------------ The following keys control StenoBoard itself, and are all generated in the Digit field: * Plain strokes South East, South West, North West or North East move the whole layout on the screen to the bottom right (BOT-R), bottom left (BOT-L), top left (TOP-L) or top right (TOP-R), respectively. * A stroke down (South) hides StenoBoard (QUIT). * A stroke left (West) starts numeric input (NUM) as a decimal number, allowing to generate any Unicode character. * A stroke up (North) pastes the system clipboard (or the last element from the PASTE queue if not empty), by sending it as a sequence of keys (PASTE). * "P" (PUSH) pushes the system clipboard to the PASTE queue. * "M" (MIC) allows voice input via Google Speech Recognition, until the finger is lifted up. Requires the "Microphone" permission in the App Settings. * "W" (WIPE) erases the text generated with the last input. Useful to undo an unintentional paste, or a failed voice recognition. * "V" (VERS) displays the current version. * Finally, "D" (DOC) pops up a help screen (see below). Repeat Taps ----------- A tap in the center field repeats the last key. A tap in the bottom left field (2) repeats the second last, and the top left field (3) the third last one. The bottom right field (21) repeats the two last keys, and the top right field (321) the three last ones. A long press in those fields starts an auto-repeat. Documentation ------------- There is a Cheat Sheet "cheat.pdf" in the "StenoBoard.tgz" release file (see the "Download" section below), outlining the strokes for the individual keys. If you write a stroke North-Back (a "D" for "documentation") in the Digit field, a help screen is displayed. It shows the stroke in the first column (in the form of a direction like "N" or "NW", possibly followed by a hyphen and a terminating gesture "R" (right), "L" (left) or "B" (back)), and the generated keys or actions in the following columns. Download -------- StenoBoard can be installed from PlayStore, or built locally. Sources https://software-lab.de/StenoBoard.tgz https://github.com/Akahige/StenoBoard APK https://software-lab.de/stenoBoard.apk Docs https://software-lab.de/StenoBoard/README https://software-lab.de/StenoBoard/cheat.svg https://software-lab.de/StenoBoard/cheat.pdf Building StenoBoard ------------------- First make sure to have Java-11 installed $ update-alternatives --config java Then create a directory "android_sdk" in some convenient place $ mkdir android_sdk $ cd android_sdk Download Android Command Line Tools for Linux. For this, go to https://developer.android.com/studio and download commandlinetools-linux-_latest.zip for Linux from the "Command line tools onl" section, unpack it, $ unzip commandlinetools-linux-_latest.zip and use the SDK Manager to install the following packages: $ cmdline-tools/bin/sdkmanager --sdk_root=. "platform-tools" $ cmdline-tools/bin/sdkmanager --sdk_root=. "platforms;android-34" $ cmdline-tools/bin/sdkmanager --sdk_root=. "tools" To build an app bundle, we need "bundletool": $ mkdir bundle-tools $ cd bundle-tools/ Get AAPT2 from Google's Maven repository (https://maven.google.com): Currently, the latest is https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/8.8.0-alpha04-12006047/aapt2-8.8.0-alpha04-12006047-linux.jar Download and unpackage the downloaded JAR file. You will need to create your own keystore with two keys for signing the APK and Bundles later $ keytool -genkeypair -alias appkey -keystore key.jks -keyalg RSA -keysize 2048 -validity 10000 $ keytool -genkeypair -alias bndkey -keystore key.jks -keyalg RSA -keysize 2048 -validity 10000 Fetch StenoBoard.tgz from software-lab.de and extract it $ tar xfz StenoBoard.tgz Then change to this directory, and build the StenoBoard APK: $ cd StenoBoard/ $ ./mk.stenoBoard This results in an installable APK file "stenoBoard.apk". Contact ------- Alexander Burger Software Lab. / 7fach GmbH Bahnhofstr. 24a, D-86462 Langweid abu@software-lab.de @abu:7fach.de You also can ask life questions about StenoBoard at our weekly PicoLisp meetings Fridays for Functions every Friday 9:00-17:00 UTC on Jitsi https://meeting.itship.ch/picolisp