Cómo crear un editor que no rompa la composición del coreano
Cuando escribes textos largos en coreano, llega un momento en que la última sílaba desaparece o una palabra se parte. No es un error tipográfico, sino un problema relacionado con el lugar donde el editor procesa la composición.

# aparece tenuemente, y los caracteres conservan el tamaño y el grosor del título.Al escribir en coreano, a veces ocurren cosas extrañas. Un carácter desaparece al final de una línea y, al volver de otra ventana, la última sílaba se introduce dos veces. A veces, mientras escribes, el cursor también se mueve a un lugar inesperado.
Al principio es fácil pensar que ha sido un error propio. Pero casi nunca es un problema de las manos. Ocurre porque el editor no gestiona correctamente la «composición» del coreano.
Para introducir un solo carácter coreano, hay que pulsar varias consonantes y vocales. Hasta que la sílaba se completa, aparece en la pantalla, pero todavía no es un carácter confirmado. Este estado se llama composición.
Es un estado poco frecuente en inglés, pero al escribir en coreano se está componiendo casi todo el tiempo. Por eso, incluso un pequeño problema en el procesamiento de la composición supone una gran molestia para quienes escriben en coreano.
Basta con mirar las incidencias públicas. Typora tiene una incidencia en macOS en la que las palabras coreanas se introducen partidas (#4251) y otra en la que el cursor salta durante la composición (#788). Obsidian tiene una incidencia en la que los caracteres coreanos se omiten aleatoriamente en Ubuntu (#79528), otra en la que no es posible escribir en coreano en Wayland (#84391) y una publicación en el foro que señala que la entrada se ignora en los puntos de salto de línea (#114224).
Aunque las aplicaciones eran distintas, el lugar donde ocurría era parecido. El editor reinterpretaba los eventos de composición sobre el motor del navegador.
Los caracteres no confirmados no se introducen en el documento
El shell de Linux de mote no interpreta directamente la composición del coreano. La tarea de convertir consonantes y vocales en sílabas se deja en manos del método de entrada del sistema operativo.
Los caracteres que se están componiendo solo se muestran en la pantalla. No entran en el documento hasta que la sílaba queda confirmada.
Con este único principio desaparecieron varios problemas.
No se crea una entrada en el historial de deshacer cada vez que se compone un carácter. El guardado automático tampoco escribe en el archivo una sílaba que aún no está completa. Y las funciones de Markdown tampoco intentan aplicar formato a caracteres que todavía no están confirmados.
La diferencia resulta aún más clara cuando se piensa en el guardado automático. Al escribir en coreano, una sílaba puede seguir en composición incluso durante una breve pausa. Si el carácter que se está componiendo entrara en el documento, podría guardarse una sílaba a medio formar. Y al pulsar una vez Deshacer, podría borrarse únicamente una letra jamo.
Si la composición se mantiene fuera del documento, no es necesario tratar estas excepciones por separado. Porque un carácter no confirmado todavía no forma parte del documento.
La pantalla tampoco se sacude mientras escribes
Al principio eliminamos todo el formato de Markdown de la línea donde se estaba realizando la composición. Parecía seguro, pero surgió un nuevo problema.
Al escribir en coreano dentro de un título, la línea se reducía de repente al tamaño del texto normal. Solo volvía a convertirse en un título al terminar de escribir. Como quienes escriben en coreano componen caracteres continuamente, la altura de la línea también subía y bajaba durante todo el proceso de escritura.
Ahora calculamos el carácter que se está componiendo tal como aparece integrado en la línea. Al escribir un título, el estilo del título se mantiene también en la sílaba que se está componiendo. Aunque se escriba dentro de un texto en negrita, el grosor no cambia. Los símbolos ocultos de Markdown tampoco cubren el carácter que se está componiendo.
También eliminamos el subrayado azul que aparecía debajo del carácter en composición. Lo hicimos porque parecía que la parte inferior de la frase parpadeaba durante todo el tiempo que se escribía en coreano. La función de composición sigue funcionando igual aunque no haya subrayado.
No se trata de un simple efecto visual. Aunque se introduzcan todos los caracteres, si la línea se sacude continuamente se interrumpe el flujo de escritura. La pantalla tiene que permanecer tranquila para poder concentrarse en la frase.

** aparecen en gris, y «굵게», situado entre ellos, conserva su grosor.Comprobamos el funcionamiento real en lugar de decir «compatible con el coreano»
Decir simplemente «es compatible con el coreano» no es suficiente.
No permite saber si basta con que se introduzcan los caracteres o si la pantalla también debe permanecer estable mientras se escribe. También resulta difícil comprobar si, después de pasar a otra ventana y volver, la última sílaba no desaparece ni se introduce dos veces.
Por eso, mote convirtió una promesa vaga en una serie de comprobaciones concretas. En cada lanzamiento escribimos directamente en coreano usando un método de entrada real y una pantalla real. Comprobamos 12 condiciones en 9 situaciones, y un script guarda los resultados en un archivo. En la ejecución más reciente se superaron las 12 condiciones.
Los elementos de comprobación tampoco se inventaron a partir de situaciones imaginarias. Se definieron tomando como base los problemas de entrada de coreano publicados para otros editores y las pantallas de mote en las que podían producirse problemas reales.
Comprobamos que el cursor no se mueva al escribir dentro de texto enfatizado. También verificamos que, después de pasar a otra ventana y volver, la última sílaba se confirme exactamente una vez. Asimismo, comprobamos la situación en la que se escribe en coreano en la ventana de búsqueda y luego se vuelve a la pantalla de edición. Y repetimos el mismo proceso en las celdas de las tablas, en la línea siguiente de una lista y en los títulos.
Las comprobaciones son concretas. Por ejemplo, si se pulsa Enter mientras se está componiendo una sílaba, la sílaba completada debe permanecer en la primera línea y solo el nuevo jamo introducido debe pasar a la segunda. Y si se pulsa una vez Backspace mientras se está componiendo «한», en lugar de desaparecer el carácter entero, debe convertirse en «하».
Si se confunden los jamo con los caracteres completados, la prueba falla de inmediato.

No afirmamos que los entornos que no hemos comprobado sean compatibles
El entorno que comprobamos directamente en cada lanzamiento es la combinación de X11 e ibus en el shell de Linux.
En Wayland y fcitx5 comprobamos el funcionamiento básico de la composición en ocho entornos experimentales distintos. Sin embargo, el alcance de las comprobaciones no es el mismo. Los shells de macOS y Windows todavía están en desarrollo. No afirmamos que los métodos de entrada de cada sistema operativo sean compatibles hasta haber terminado de verificarlos.
También hay problemas que mote no puede solucionar. Un ejemplo representativo es el comportamiento por el que el método de entrada comienza en modo inglés cada vez que se abre un nuevo campo de entrada. Después de cerrar la ventana de búsqueda y volver a la pantalla de edición, puede ser necesario pulsar de nuevo la tecla de cambio entre coreano e inglés.
Este problema aparece de forma generalizada en las aplicaciones GTK y puede modificarse en la configuración del método de entrada. No describimos como un error nuestro algo que no lo es. En su lugar, indicamos dónde se encuentra la configuración correspondiente.
Un editor en el que se puede introducir coreano no es lo mismo que un editor en el que resulta agradable escribir en coreano.
En el primero entran los caracteres. En el segundo, el texto no se sacude ni siquiera mientras se escribe.