I would start with two text areas and a synchronization mechanism. Something like that,
<script>
window.sync = function(e){
var textarea = document.getElementById("lines");
var source = document.getElementById("some_text_area");
textarea.scrollTop = source.scrollTop;
}
window.populate = function populate(){
if(populate.started){
return;
}
populate.started = true;
var textarea = document.getElementById("lines");
var str = '';
for(var i=0;i < 100;i++){
str = str + (i +'\r\n');
}
textarea.value = str;
}
</script>
<div>
<textarea
style="width:40px;overflow:hidden;height:40px;"
readonly="true"
id="lines"
></textarea>
<textarea
style="width:500px;height:40px;"
id="some_text_area"
onclick="populate()"
onscroll="sync();"
></textarea>
</div>
Ofcourse populate() ( ) , .