This document is intended to give an overview of the main keyboard technologies currently available on various platforms, particularly in terms of meeting requirements to enter text for complex scripts.
For more ScriptSource entries about keyboarding, see scriptsource.org/topic/keyboards.
Standard keyboard systems work mainly by mapping a single keystroke (with or without a modifier like Shift) to a single character on screen. This works fine for simple scripts, but more complex or larger scripts cannot be handled this way, so additional features are needed within the keyboarding systems to meet these needs - for example typing e then ‘ to output é.
An introduction to keyboard design theory, whilst out of date in implementation details, gives an excellent technical overview of various issues to consider when creating complex keyboards.
On most platforms there are now multiple keyboarding systems available, so a choice has to be made about which is appropriate for a particular situation. This article gives a summary of the main systems available, and will be improved with more details over time. There are many other keyboard systems available; here we aim to cover those most likely to be useful for handling more complex scripts.
In addition to the “systems” described below, there are also other input methods suitable for entering small amounts of text - for example web-based pickers can be used on any operating system to write text in complex scripts in a browser which can then be copied and pasted into an application.
At the end of this document there are comparison charts between some of the systems.
Clearly, to enter text for a complex script, a font needs to be installed that supports that script, but font issues are not covered here.
Windows systems
MSKLC (Microsoft Keyboard Layout Creator)
MSKLC is a freeware Microsoft tool for creating new keyboard layouts using the Windows-native keyboard file format, and so gives seamless integration with Windows systems. It can use an existing Windows keyboard as a starting point. However, it is limited in its ability to cope with more complex scripts.
Keyman
Keyman is a powerful, commercial tool from
Keyman for creating keyboard input methods. It allows for more complex input processing than MSKLC and so meets a wider range of needs. It does not use the Windows keyboard driver format, so a separate client needs to be installed on each computer using the keyboard. There are many existing Keyman keyboards available. More information on Keyman can be found on SIL's
NRSI site. There are now other keyboarding systems which can work with Keyman .kmn source files.
InKey
Inkey is based on
Autohotkey, an open source macro-creation and automation tool. The language used by InKey (and Autohotkey underneath) provides great flexibility and allows complex keyboard behaviours to be programmed. The separate open source Inkey Keyboard Creator is available to facilitate the initial creation of the keyboard, including an option to import Keyman .kmn files. More complex tasks have to be done by editing the Inkey .ahk source file directly, after which the keyboard creator cannot be used to make further changes.
Inkey is currently under private beta release, but the authors have indicated that the next version will be released under a free, open source license.
Ekaya
Ekaya is an open source keyboarding system that uses the open source KMFL library to parse the Keyman .kmn files, so keyboards developed with Keyman should work with Ekaya as an alternative to the Keyman client. (Note that Ekaya may not offer the exact same functionality as the latest Keyman desktop version).
Keymagic
Keymagic is an open source keyboarding system which works on several platforms. Whilst similar to KMFL, it uses its own source format rather than Keyman .kmn files.
MAC OS X systems
Ukelele
Ukelele is a freeware keyboard layout editor for OS X which provides a graphical interface for .keylayout files (the standard keyboard format for OS X).
Keyman
Keyman is now available on Mac OS X! This beta release of Keyman brings the power of Keyman Desktop and its extensive library of keyboards for over 1,000 languages to Mac OS X. Use all the keyboards you are familiar with on Windows on Mac OS X. You can even create your own custom keyboards with Keyman Developer 9.0 (a Windows product).
Keymagic
Keymagic is also available for OS X - the Keymagic section under Windows systems has more information.
Linux Systems (including Ubuntu)
Most standard Linux installations include X Windows and the XKB keyboard manager (see below) which includes many keyboards. In addition, the
iBus input method framework (IME) can be turned on and configured, and more keyboards/IMEs are available through that. So it is worth looking through standard XKB and iBus keyboards prior to considering developing your own.
XKB (X windows KeyBoard extension)
XKB is the underlying (pre-installed) keyboard manager for X windows, the standard windows system on Linux (Ubuntu included). This means that a completed keyboard can be submitted for inclusion in all future platforms and devices using X. The user need not install any additional software to use the keyboard. See
linux.lsdev.sil.org/wiki/index.php/Category:XKB_Keyboards for some documentation on using XKB including creating new keyboards for this system.
KMFL (Keyboard Mapping for Linux)
KMFL is an open source keyboarding system for Linux systems, particularly Ubuntu, which is compatible with Keyman 7 (or earlier) .kmn source files, so brings the power of Keyman keyboarding to a Linux environment. Although designed for Linux/Unix systems in general, full downloads and instructions are currently only available for Ubuntu.
Keymagic
Keymagic is also available for Ubuntu - the Keymagic section under Windows systems has more information.
Android systems
Devices running Android provide a choice of languages and input methods. Extra input methods and separate language packs can be installed from the Google Play store.
Multiling is one of the possible solutions to explore for extending writing systems support.
Keyman has developed a product,
Keyman for Android, which includes a free edition.
Note that, as with all systems, for each keyboard there needs to be an appropriate font available; on Android, facilities to add new fonts to be used for all applications are very limited (and currently only possible when rooting/jail-breaking the device). Some applications come bundled with fonts to extend their own functionality, but they will only work within the particular application.
Web-based systems
This covers web-based keyboarding systems that allow users to type in different scripts/languages without installing keyboard layouts or software on their computers, but directly, through web applications in the browser.
KeymanWeb
Keymanweb is a commercial subscription-based keyboard system which can be built into websites.
Google Virtual Keyboards
The status of these is unclear. The
Google Developers website states that they are deprecated, but provides no information about alternative plans for them.
Other Input Methods
This section covers other ways of entering Unicode text that fall short of being a full keyboarding system.
Such alternative input methods can be useful if you do not know a script well enough to use the native keyboard, or if the native keyboard is not available. For longer runs of texts these alternative approaches are not ideal.
Web-based pickers
With these, the text is entered in a text box within the picker, running directly in a browser. The text can then be copied into any document/application that supports Unicode. These can be used with any operating system provided the corresponding fonts are available (and smart rendering is available for certain advanced scripts).
For examples, see Richard Ishida's
Unicode character pickers, branah.com's
virtual keyboards or Tomasz Szynalski's
TypeIt where pickers are available per language or script, and laid out in such a way as to help with identifying the characters required. Some of these pickers provide a search feature or allow an existing string of text to be analysed.
Character Pickers
There are various utilities available to search for, copy and paste an extended character from one of the Unicode blocks.
For example, for Windows there are
BabelPad and
Unibook, for Ubuntu
Gucharmap, and for OS X
Font_Book.
Cross-platform applications such as
Libreoffice.org also provide glyph palettes (or “Insert special characters”) to find, copy and paste the characters you need.
USV entry methods
Some operating systems also provide a way to type in a character directly using its Unicode Scalar Value (USV).
On Windows, this is achieved by holding down the Alt key and entering "+" followed by the USV number using the numeric keypad in a text area. On Ubuntu this is achieved by holding down Shift and Ctrl, and entering 'U' followed by the USV number in a text area.
This method of finding characters is sometimes referred to as “using Alt Codes”. The drawback is that you need to know the numerical value corresponding to the character you are looking for. Making use of a character picker when the existing collection of characters is searchable is usually a more useful solution.
Keyboard Systems comparison charts
These charts are designed to assist with comparison of some of the main systems. There are separate tables for usage (ie what the keyboard can do) and keyboard development.
More systems will be added to the charts as research continues.
Keyboard usage comparison chart
| Features | MSKLC | Keyman | Inkey | Ekaya | XKB | KMFL | Ukelele | |
|---|---|---|---|---|---|---|---|---|
| Operating system | W | W/M | W | W | L | L | M | |
Input options |
||||||||
| a) Map a single key to an output (including the use of modifiers) | Y | Y | Y | Y | Y | Y | Y | |
| b) Use deadkeys (which are not output) | Y | Y | Y | Y | Y | Y | Y | |
| c) Rotors to cycle through options | N | N | Y | N | N | N | N | |
| d) Mnemonic and/or positional layouts | P | MP | M | MP | P | MP | P | |
Output options |
||||||||
| e) Output multiple values from one input | Y | Y | Y | Y | ? | Y | Y | |
| f) Map to Unicode code points above Plane 0 | Y | Y | Y | Y | Y | Y | Y | |
| g) Replace previously output characters | N | Y | Y | Y | N | Y | N | |
| h) Context sensitive output | N | Y | Y | Y | N | Y | N | |
| i) Store in different order from input | N | Y | Y | Y | N | Y | Y | |
| j) Enforce normalization in keyboard | N | Y | Y | Y | ? | Y | Y | |
| k) Keep track of original keystroke order | N | Y | Y | Y | N | Y | N | |
| l) Advanced backspace handling | N | Y | Y | Y | N | Y | N | |
Other options |
||||||||
| m) Freely downloadable | Y | N | Y | Y | Y | Y | Y | |
| n) On-screen keyboard available | Y | Y | N | N | Y | N | Y | |
| o) Can include user-selectable options for keyboard | N | Y | Y | N | Y | N | N |
Notes:
- The letter at the start of each feature is a link to the fuller Feature Descriptions table. Similarly that table has links back to this chart.
- Operating systems: Microsoft Windows (W), Mac OS X (M), Linux (L), Android (A). See detailed entries about individual systems for operating system versions etc
- For MSKLC and Ukelele this is really a list of what the underlying operating system keyboard system can do since that is what they produce
Feature descriptions
| Feature | Example |
|---|---|
Usage: Input options |
|
| a) Can map a single key to one of the outputs this system supports. This includes using keys with modifiers like shift and alt | 'd' -> U+0E01 |
| b) Use deadkeys - any key can be designated as a deadkey (which is not displayed on screen) and any single key following the deadkey can be mapped for output | '-r' -> U+024D |
| c) Rotors - can cycle through a number of possible output variants - for example by repeatedly pressing a key | |
| d) Is input based on the hardware positon (P) of the key or the mnemonic code (M) transmitted after processing by the operating system keyboard layout | (If keyboards can be written both ways, MP is shown) |
Usage: Output options |
|
| e) The output from a single input option can be multiple Unicode values | '&' -> U+0E31 U+0E48 |
| f) Can map inputs to Unicode code points above Plane 0 (the application must also be able to handle Plane 0 and higher) | |
| g) Can replace previously output characters | 'r' -> 'r' and 'r-' -> U+024D |
| h) The output can be based on the context - eg previously output characters | '0' -> U+02E9 if after another pitch character |
| i) Can do reordering, for example so that a prevowel is typed before a consonant but stored after it | Users want to type U+1031 before U+1000 even though they are stored in the opposite order |
| j) Can enforce normalization in keyboard so that data is stored in a canonical form even if entered in different order | |
| k) Keep track of original keystroke order so that, even if output is reordered, then system can track keystroke order - eg for backspace handling or double-press detection | |
| l) Has options for advanced backspace handling | With "e" + "'" -> é, can choose if backspace just deletes the accent or whole character |
Usage: Other options |
|
| m) Freely downloadable - there is no cost to use the software | |
| n) An on-screen keyboard can be displayed to show the keyboard layout and optionally used for input | |
| o) Can include features to change the behaviour of the keyboard which can be selected by the user after installation |
Keyboard development comparison chart
Notes:
- Inkey here refers to the combination of the Inkey keyboarding system and the separate Inkey Keyboard Creator
| Contributor | David Raymond |