Ergonomic Arabic Keyboard layout. See website for details.
Although optimized for the Arabic language it should be possible to create
layouts for other (non-RTL) languages as well. Here’s how to proceed: First,
create a data file my-layout.yaml
that contains all key to character
mappings the new layout should have. Look at lulua/data/layouts
for
examples. Then create statistics for your corpus. For plain-text files use:
cat corpus.txt \
| lulua-write my-layout.yaml file text \
| lulua-analyze combine \
> stats.pickle
Now you can optimize your layout using:
lulua-optimize -n 30000 --triad-limit=30000 -r -l my-layout.yaml \
< stats.pickle \
> evolved.yaml
To get a pretty picture (SVG) of your layout render it:
lulua-render -l evolved.yaml svg evolved.svg
It is highly recommended to use PyPy 3 instead of CPython and a powerful machine with lots of RAM (at least 16 GB).
This essentially means building the website and reproducing my results. You’ll need to obtain the corpora from me, which are not public due to copyright issues. Also the following software is required:
- Python/PyPy 3
- Ninja (for the build process)
- GNU autotools and a host C compiler (for
3rdparty/osmctools
) - GNU bash and zip (for
makezip.sh
) - librsvg (
rsvg-convert
is used to create PDF’s from SVG images) - MinGW (to compile the Windows keyboard driver)
Then simply run
./gen.sh > build.ninja && ninja
to run the analysis and create pretty pictures as well as statistics in
_build/report
.
This software is using an extended version of carpalx by Martin Krzywinski for optimizing layouts.