# Compose Key Combinations

The jstools applications have builtin support for the use of the Compose key to generate characters that may not appear on ASCII keyboards. The mechanism is that you press the Compose key, and then the next two characters you type, instead of being inserted separately, combine to form a different character, which is inserted. For instance, typing Compose-/-o would insert the character ``ø`'. It doesn't matter what order you type the two characters in; Compose-o-/ works just as well.

Generally the characters you type to compose a character are as mnemonic as possible, but sometimes they may require a stretch of the imagination; for instance, the section symbol `§' can be typed as Compose-o-s. (It would have been nice to support Compose-S-S for this character, but that's already taken for the German `ß' character.)

## Interaction with X Servers

The composekey combinations described here are interpreted by the jstools libraries (in particular, by the jbindtext.tcl, jbindentry.tcl, jcompose.tcl and jlatin1.tcl libraries), but you should be aware that some X displays intercept composekey combinations and convert them to appropriate characters before a program sees them. If you're sitting at an X terminal that does this, then when you press Compose and then `/', the application you're typing into won't be told that you pressed any keys at all, and then when you type `o', the application will be told that you pressed the ``ø`' key, even though you may not actually have such a key on your keyboard. So if you discover that the compose key works slightly differently on your workstation or X terminal from what's described below, it's probably because it's being interpreted by your X display server, and the jstools libraries are never seeing it. In that case, you should consult the documentation for your X Window System server to determine the exact composekey combinations available.

Another possible problem is that many keyboards don't actually have a Compose key. The jbindtext.tcl and jbindentry.tcl libraries use the key whose X keysym is `Multi_key`; many keyboards don't have a key that corresponds to that keysym. If your keyboard doesn't, and you want to use the composekey combinations, you can get around this by using the `xmodmap`(1) command to redefine some key on your keyboard as `Multi_key`. For instance, if you decided that you could do without the F12 key and wanted to use it as Compose, you could issue the command
`xmodmap -e "keysym F12 = Multi_key"
` to redefine it. (You'd normally put this command in an X startup file so that it would be executed for you whenever you started X or logged in.)

## Character Set

Currently, the libraries that implement compose-key combinations are hardcoded with the assumption that you're using the Latin 1 character set, ISO standard 8859-1, which supports (among others) the languages of Western Europe and the Americas. In the future, I hope to support other character sets as well. (For these characters to display properly, you'll need to be using fonts that support ISO 8859-1. Most fonts distributed with modern X Window System implementations are appropriate; you can use the command ``xlsfonts -fn "*-iso8859-1"`' to get a list of them.)

## ComposeKey Combinations for Latin 1

`(nobreakspace): space+space
¡ (exclamdown): `!'+`!'
¢ (cent): `/'+`c', `c'+`|'
£ (sterling): `-'+`L', `='+`L', `L'+`L', `#'+`#'
¤ (currency): `o'+`x', `$'+`$'
¥ (yen): `='+`Y', `-'+`Y'
¦ (brokenbar): `|'+`|'
§ (section): `O'+`S', `S'+`o', `o'+`s'
¨ (diaeresis): `"'+`"'
© (copyright): `c'+`o', `O'+`c', `C'+`O'
ª (ordfeminine): `-'+`a', `_'+`a'
« (guillemotleft): `<'+`<'
¬ (notsign): `-'+`|', `,'+`-'
(hyphen): `-'+`-'
® (registered): `o'+`r', `O'+`r', `O'+`R'
¯ (macron): `-'+`^', `^'+`_', `_'+`_'
° (degree): `o'+`o', `0'+`^', `0'+`0'
± (plusminus): `+'+`-', `+'+`_'
² (twosuperior): `2'+`^', `2'+`2'
³ (threesuperior): `3'+`^', `3'+`3'
´ (acute): `''+`'', `\'+`\'
µ (mu): `/'+`u', `u'+`|', `m'+`u'
¶ (paragraph): `P'+`P'
· (periodcentered): `.'+`.', `*'+`+', `+'+`o', `*'+`.'
¸ (cedilla): `,'+`,'
¹ (onesuperior): `1'+`^', `1'+`1'
º (masculine): `-'+`o', `_'+`o'
» (guillemotright): `>'+`>'
¼ (onequarter): `1'+`4'
½ (onehalf): `1'+`2'
¾ (threequarters): `3'+`4'
¿ (questiondown): `?'+`?'
À (Agrave): `A'+``'
Á (Aacute): `''+`A'
Â (Acircumflex): `A'+`^'
Ã (Atilde): `A'+`~'
Ä (Adiaeresis): `"'+`A'
Å (Aring): `A'+`o', `A'+`O', `*'+`A', `A'+`A'
Æ (AE): `A'+`E'
Ç (Ccedilla): `,'+`C', `C'+`C'
È (Egrave): `E'+``'
É (Eacute): `''+`E'
Ê (Ecircumflex): `E'+`^'
Ë (Ediaeresis): `"'+`E'
Ì (Igrave): `I'+``'
Í (Iacute): `''+`I'
Î (Icircumflex): `I'+`^'
Ï (Idiaeresis): `"'+`I'
Ð (ETH): `D'+`H', `D'+`D',`-'+`D',`/'+`D',`''+`D'` `(1)``
Ñ (Ntilde): `N'+`~', `N'+`N'
Ò (Ograve): `O'+``'
Ó (Oacute): `''+`O'
Ô (Ocircumflex): `O'+`^'
Õ (Otilde): `O'+`~'
Ö (Odiaeresis): `"'+`O'
× (multiply): `x'+`x', `*'+`*'
Ø (Ooblique): `/'+`O'
Ù (Ugrave): `U'+``'
Ú (Uacute): `''+`U'
Û (Ucircumflex): `U'+`^'
Ü (Udiaeresis): `"'+`U'
Ý (Yacute): `''+`Y'
Þ (THORN): `H'+`T', `T'+`T',`B'+`P'` `(1)``
ß (ssharp): `s'+`s', `S'+`S'
à (agrave): ``'+`a'
á (aacute): `''+`a'
â (acircumflex): `^'+`a'
ã (atilde): `a'+`~'
ä (adiaeresis): `"'+`a'
å (aring): `a'+`o', `*'+`a', `a'+`a'
æ (ae): `a'+`e'
ç (ccedilla): `,'+`c', `c'+`c'
è (egrave): ``'+`e'
é (eacute): `''+`e'
ê (ecircumflex): `^'+`e'
ë (ediaeresis): `"'+`e'
ì (igrave): ``'+`i'
í (iacute): `''+`i'
î (icircumflex): `^'+`i'
ï (idiaeresis): `"'+`i'
ð (eth): `d'+`h', `d'+`d', `/'+`d', `-'+`d', `''+`d'
ñ (ntilde): `n'+`~', `n'+`n'
ò (ograve): ``'+`o'
ó (oacute): `''+`o'
ô (ocircumflex): `^'+`o'
õ (otilde): `o'+`~'
ö (odiaeresis): `"'+`o'
÷ (division): `-'+`:', `/'+`/'
ø (oslash): `/'+`o'
ù (ugrave): ``'+`u'
ú (uacute): `''+`u'
û (ucircumflex): `^'+`u'
ü (udiaeresis): `"'+`u'
ý (yacute): `''+`y'
þ (thorn): `h'+`t', `b'+`p', `t'+`t'
ÿ (ydiaeresis): `"'+`y'
`

## Footnote

(1) Combinations of one lowercase letter and one capital letter also work.

## See Also

Mouse Bindings
Basic Bindings
Emacs Bindings
vi Bindings

If you're using `jedit`, the following may also be useful:
The Characters SubMenu under The Format Menu in `jedit`
`
`