Как отследить курсор / курсор в contenteditable?

Я бы хотел отследить движение курсора / курсора в contenteditable. Однако я не уверен, что это лучший способ сделать это.

В данный момент я прослушиваю щелчки, нажатия клавиш, нажатия клавиш. (Разумеется, нажатие клавиши не срабатывает даже при использовании клавиш со стрелками или ctrl-x.)

Хотя щелчок работает нормально, проблема с нажатием клавиши заключается в том, что он срабатывает до того, как каретка фактически перемещается, поэтому, когда я запрашиваю текущий диапазон выбора документа, я получаю старую позицию, а не новую. Но если я полагаюсь на keyup для получения обновленной позиции, она срабатывает слишком поздно: каретка перемещается, как только нажимается клавиша, но клавиша отпускается через произвольное время спустя.

Это должно быть возможно, потому что такие вещи, как CKeditor, могут это сделать. Есть намеки?