A compose key (sometimes called multi key) is a key on a computer keyboard that indicates that the following (usually 2 or more) keystrokes trigger the insertion of an alternate character, typically a precomposed character or a symbol.
For instance, typing Compose followed by ~ and then n will insert ñ.
The Compose Character key was introduced by engineers at Digital Equipment Corporation (DEC) on the LK201 keyboard, available since 1983 with the VT220 terminal. The keyboard included an LED indicating that a Compose sequence is on-going. While the LK201 introduced the group of command keys between the alphanumerical block and the numerical keypad, and the "inverted T" arrangement of arrow keys, which have become standard, the compose key by contrast did not become a standard.
In 1987, Sun Microsystems released the Sun4, the first dedicated Unix workstation that had a compose key. On the keyboards of Sun Type 5 and 6 workstations, the Compose LED is placed in the keycap (see picture below).
ISO/IEC 9995-7 designed a graphical symbol for this key, in ISO/IEC 9995-7 as symbol 15 "Compose Character", and in ISO 7000 "Graphical symbols for use on equipment" as symbol ISO-7000-2021. This symbol is encoded in Unicode as U+2384 ⎄ COMPOSITION SYMBOL.
Because Microsoft Windows and macOS do not support a compose key by default, the key does not exist on most keyboards designed for modern PC hardware. When software supports compose key behaviour, some other key is used. Common examples are the right-hand Windows key, the AltGr key, or one of the Ctrl keys.
If the Compose key is not also a modifier, then key rollover means the compose key does not really have to be released before the subsequent keystrokes. This makes it possible for experienced typists to enter composed characters rapidly.
Earlier versions of compose sequences followed handwriting and the overstrike technique by putting the letter first and diacritics second. For example Composen~ produced the character ñ. This order is still in use, however the inverse order known from accent-mark dead keys present on the last typewriters is used today: Compose~n for ñ. This allows multiple diacritics, for instance typing Compose^'a for ấ.
Non-accented characters are generally constructed from letters that when overtyped or sequenced would produce something like the character. For instance Composeoc will produce the copyright symbol ©, and ComposeAE will produce Æ.
There is no intrinsic limit on sequence length, which should respect both the rules of mnemonics and ergonomics, and feasibility within a comprehensive compose tree. For example, U+278C ➌ DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE might be inserted by Compose@%$3, where @ indicates circled characters, % indicates inverse, $ indicates sans-serif, and 3 indicates the final character.
Compared to other input methods
The primary advantage of a compose key is that the entire sequence used to select the character is made up of any letters and numbers and symbols available on the keyboard. This allows the sequence to be more mnemonic, so it is easier to remember, possible to guess at if unknown, and can support far greater numbers of characters.
For instance if a dead key system where all the dead keys are marked with diacritics might require ¨S for ß, the compose key requires typing ComposeSS, matching the common substitution with "SS" for the character. Another example is ⅔ which is entered by Compose23, whereas a single dead key solution turns out to be something like ~W (as ~3 would be used for ⅓).
Modifier keys (such as used on OS/X) are even more limited as typically only one key from the keyboard is used to select the character.
Alt codes could almost be considered a compose key, but with unintuitive numbers, instead of mnemonics, as the selector.
Modern GUI character choosers often require a search function that is not much different than the compose sequences to locate a character quickly.
The primary disadvantage is that compose sequences always require at least one more keystroke. Inconvenient placement of the compose key can also slow typing.
X Window System
X header files call the Compose Key the "Multi_key". On Xorg the default Compose Key is ⇧ Shift+AltGr, (while pressing AltGr before ⇧ Shift is the "fourth keyboard level modifier", a different key). As this is rather inconvenient (especially for keyboards without an AltGr) it is common to select a keyboard layout where another key such as the right-hand Ctrl or ⊞ Win is mapped to the compose key, this option is normally available in the settings of the desktop environment. The X keyboard driver does not allow the key used for Compose to also function as a modifier. On modern systems a vast number of compose sequences are supported.
Under DOS, compose key support depends on the running application. For example, Lotus 1-2-3 used Alt+F1 as compose key to allow easier input of many special characters of the Lotus International Character Set (LICS) and Lotus Multi-Byte Character Set (LMBCS).
On Microsoft Windows a few programs such as PuTTY provide compose-key support. To emulate the compose key for all software, keyboard shortcut utilities are often involved. There are also a number of open-source utilities (such as WinCompose, AllChars, Compose-Keys, or Compose). Installable keyboard layouts (such as KbdEdit) are available that contain a compose key assigned to one of the keys like Ctrl or AltGr. They work by using the dead-key chaining feature that is more commonly used to input letters with multiple diacritics. Such keyboard layouts can also be programmed directly in C (the language Windows drivers are written in), compiled using the free-of-charge Windows Driver Kit, and packaged using the free-of-charge Microsoft Keyboard Layout Creator 1.4, compatible up to the latest versions of the OS.
Although the Cocoa text input system allows entry of many alternate and accented characters natively in macOS, a true compose-key solution isn't built in. At least one has been implemented using the Karabiner utility. That works with all applications, as does the use of keyboard drivers where Compose is implemented using the dead key chaining feature.
Common compose combinations
The table shown below contains the current default common compositions for X.Org 7. Other compositions may work, based on the de facto Sun/DEC/Falco standard. For modern systems which support customizable compose sequences and Unicode, the table below is far from complete.
- "Linux Keyboard Text Symbols: Compose-Key Shortcuts". FSymbols. 2013-07-24. Retrieved 2015-07-07.
- "p1060628". WickensOnline. 2007. Retrieved 2015-07-07.
- "LK201_large_keycodes.jpg" (JPEG). The NetBSD Project. Retrieved 2015-07-09.
- "Add a Virtual Compose Key to Your PC". Windows.Appstorm. Retrieved 2015-07-07.
- "p1060631". WickensOnline. 2007. Retrieved 2015-07-07.
- Burrows, Jim (2009-09-21). "Inverse-T History". Nerd Corner. Retrieved 2015-07-09.
- "Compose Key on Windows". Earthwithsun.com. Retrieved 2015-07-07.
- "Setting up a Real Compose Key on Mac OS X". Lol Engine. 2012-06-18. Retrieved 2015-07-07.
- "Enter european accented characters on an american keyboard". ZoneO Software. June 2006. Retrieved 2015-07-07.
- @ is suggested for circlad characters, rather than o, so that Compose@c can yield U+24D2 ⓒ CIRCLED LATIN SMALL LETTER C, while Composeoc yields U+00A9 © COPYRIGHT SIGN.
- "Compose Key". Ubuntu. Retrieved 2012-07-10.
- Monniaux, David. "UTF-8 (Unicode) compose sequence". Retrieved 2015-07-15.
- "Appendix F". HP 95LX User's Guide (PDF) (2 ed.). Corvallis, OR, USA: Hewlett-Packard Company, Corvallis Division. June 1991 [March 1991]. F0001-90003. Archived (PDF) from the original on 2016-11-27. Retrieved 2016-11-27.
- Compose Key for Windows – GitHub.
- AllChars – SourceForge.net.
- Compose Keys – GitHub.
- Compose – GitHub.
- KbdEdit – Emulating Compose key using chained dead keys.
- Windows Driver Kit Version 7.1.0 – Official Microsoft Download Center.
- Microsoft Keyboard Layout Creator 1.4 – Official Microsoft Download Center.
- Wust, J. 'Mach' (2015-06-29). "U.S. custom Keyboard Layout". SourceForge. Retrieved 2015-07-07.
- Linux Compose Key Sequences with equivalent Unicode mappings