¿Mover la posición del cursor con Javascript?

Estoy buscando mover el cursor exactamente cuatro espacios por delante de su posición actual para poder insertar una pestaña correctamente. Ya tengo funcionando la inserción de HTML en la posición del cursor, pero cuando inserto el HTML, el cursor se queda atrás. He pasado la última hora más o menos buscando varias formas de hacer esto y he probado muchas de ellas, pero no consigo que ninguna de ellas trabaje para mí. Aquí está el método más reciente que he probado:

function moveCaret(input, distance) {
    if(input.setSelectionRange) {
        input.focus();
        input.setSelectionRange(distance, distance);
    } else if(input.createTextRange) {
        var range = input.createTextRange();
        range.collapse(true);
        range.moveEnd(distance);
        range.moveStart(distance);
        range.select();
    }
}

No hace absolutamente nada: no mueve el cursor, no lanza ningún error ni nada. Esto me deja desconcertado. Y sí, sé que el conjunto de métodos anterior (se supone que debe hacerlo) establece el cursor en una posición determinada desde el principio del nodo especificado (es decir,input), pero incluso eso no funciona. Entonces, ¿qué es exactamente lo que estoy haciendo mal y cómo puedo hacerlo bien?

Edición: Basado en los enlaces que o.v. siempre que logré improvisar algo que finalmente está haciendo algo: lanzar un error. ¡Hurra! Aquí está el nuevo código:

this.moveCaret = function(distance) {
    if(that.win.getSelection) {
        var range = that.win.getSelection().getRangeAt(0);
        range.setStart(range.startOffset + distance);
    } else if (that.win.document.selection) {
        var range = that.win.document.selection.createRange();
        range.setStart(range.startOffset + distance);
    }
}

Ahora, esto da el error.Uncaught Error: NOT_FOUND_ERR: DOM Exception 8. ¿Alguna idea de por qué?

Respuestas a la pregunta(1)

Su respuesta a la pregunta