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.pickleNow you can optimize your layout using:
lulua-optimize -n 30000 --triad-limit=30000 -r -l my-layout.yaml \
< stats.pickle \
> evolved.yamlTo get a pretty picture (SVG) of your layout render it:
lulua-render -l evolved.yaml svg evolved.svgIt 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-convertis used to create PDF’s from SVG images) - MinGW (to compile the Windows keyboard driver)
Then simply run
./gen.sh > build.ninja && ninjato 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.