¿Cómo rastrear caret / cursor en contenteditable?

Me gustaría rastrear el movimiento del cursor / cursor en un contenteditable. Sin embargo, no estoy seguro de cuál es la mejor manera de hacer esto.

Actualmente estoy escuchando click, keydown, keyup. (la pulsación de teclas, por supuesto, ni siquiera se dispara para cosas como las teclas de flecha o ctrl-x).

Si bien el clic funciona bien, el problema con el keydown es que se dispara antes de que realmente se mueva el cursor, así que cuando pregunto el rango de selección del documento actual, obtengo la posición anterior y no la nueva. Pero si confío en Keyup para obtener la posición actualizada, se dispara demasiado tarde: el cursor se mueve tan pronto como se presiona la tecla, pero la tecla se suelta un tiempo arbitrario más tarde.

Esto debe ser posible porque cosas como CKeditor pueden hacer esto. ¿Alguna pista?

Respuestas a la pregunta(4)

Su respuesta a la pregunta