My last update talked about better visual feedback for Compose sequences in GTK’s input methods. I did not explicitly mention dead keys back then, but historically, X11 has treated dead keys and Compose sequences in exactly the same way.
Dead keys are a feature of certain keyboard layouts where you can hit a key that does not produce a character by itself, but modifies the next key you type. Typically, this is used for accents that can be combined with different base characters. For example, type
<dead_acute> <a> to produce á or
<dead_acute> <o> to produce ó.
Traditionally, dead keys were really dead – you didn’t get any visual feedback before the final result appears. With the improvements described in the last update, we now show dead keys as they are entered:
The shared treatment of Compose sequences and dead keys has some implications: one is that entering a non-existing sequence such as
<dead_grave> <x> will produce a beep, and no output. That is acceptable for a Compose sequence that you explicitly started with the Compose key, but not so great when you maybe meant to enter `x.
The people who decided to use Compose sequences for dead keys foresaw the need to actually enter spacing accents every now and then, and added sequences such as
<dead_grave> <space> and
<dead_grave> <dead_grave> for producing a single ` character.
While that is a nice thought, it is still pretty inconvenient, since you need to type
<dead_grave> six time to produce ```, e.g. for entering code examples in markdown.
After thinking about this for a while and comparing what other systems do, we’ve made two changes, that will hopefully make dead keys as convenient to use as any other keys on your keyboard.
- When a
<dead key> <key>sequence does not match one of our Compose sequences, commit the individual keys
- When a
<dead key>follows another
<dead key>, commit the first one, and treat the second as the beginning of a new Compose sequence