I often type the same words in several applications:
- Editor (emacs, vi)
- Webbrowser
- Shells
It would be great to have an autocomplete of the words I typed during the last week available in all the above applications.
Each of them has a way to improve the typing speed. But something at desktop level would be the best.
Example: "Continuous Integration". I want a fast way to type this word without changing the program which receives the input.
Is there already something like this?
The solution to your request is Input Method.
What you have described is something familiar to most CJK language users. Let's review how input method works in current Linux systems.
The Input Method system
Here's a simple architecture for a common input method system:
NOTE: I snapshot this image from The X Input Method Protocol. Some of the arrows are irrelevant to following discussion.
Historically, XIM (the X Input Method protocol) was the only protocol. It's overly complex and lacks some desired features. So it's mostly abandoned, though compatibility is still provided by popular toolkits like GTK, Qt.
A modern input method system contains several parts:
Client-side library support
/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/
)How do these parts fit together?
A user types a key. X server receives the hardware event from evdev interface, composes a XEvent and sends to the application under keyboard focus. The application toolkit (GTK, Qt) input method module intercepts the event and passed the info to input method server. The input method server figures what the user may want and passes some text back to the IM module.
Now, let's talk about the architecture of the IM server.
An IM server typically consists of two parts:
All in all, what an IM does is to transform what you type to something different and optionally provide predictions.
An example
We use
ibus-pinyin
here to type some Chinese characters.The romanization of 汉语拼音 is
han yu pin yin
. At, first you need to type all these letters to get the four Chinese characters. But after a few times, you just need to type the four initial charactersh y p y
to get the Chinese character.In the
ibus-pinyin
case,han yu pin yin
is shortened toh y p y
.More advanced IM engines utilize statistical learning techniques to provide better prediction. Nothing can stop you from writing a English input method engine to provide a typing boost.
As a bonus, all toolkits have input method support except some plain old X programs. So this is a quite universal solution.
Thanks to Anders F. U. Kiær. Features / Typing-Booster | Fedora Project Wiki should be the answer
Take a look at my script, TextSuggest.
In action:
Installation:
Install the following packages:
xdotool
xclip
suckless-tools
(fordmenu
)Then assign 2 keyboard shortcuts:
python3 /path/to/TextSuggest.py
The first one will simply provide a searchable list of all words. Use the second when you have some text selected, and want to get suggestions/completions for it.
The accepted suggestions are stored as history (and are then suggested first) in the file
~/.textsuggest_history.txt
.You can define custom words and expansions/aliases at
~/.Custom_Words.txt
.Take a look at Autokey. It might fit your needs. C/P from their site: