uno de los tanto errores que aun faltan por corregir, es que cuando le pego con click derecho al final o cualquier parte del texto que debe quedar fijo deja parte de ese texto

Código HTML :

<div>
   <textarea id="sup" rows="4"></textarea><br>
   <!-- texto que se mantendra estatico -->
   <div style="display: none" id="textfijo"> prueba de texto fijo</div>
   <div id="alert"></div>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript">
    $('#sup').focus();
    function autorun(){
         $('div').on('mousedown', '#sup', function(e){
            var ele = document.getElementById ("sup");
         if ('selectionStart' in ele) {
            if(ele.selectionStart > $(this).val().length-$('#textfijo').text().length){
               document.oncontextmenu = function(){return false}
               ele.selectionStart = $(this).val().length-$('#textfijo').text().length;
               ele.selectionEnd = $(this).val().length-$('#textfijo').text().length;
            }else{
               document.oncontextmenu = function(){return true}
            }
         }
         });
         $('div').on('click', '#sup', function(e){
         var ele = document.getElementById ("sup");
         if ('selectionStart' in ele) {
            if(ele.selectionStart > $(this).val().length-$('#textfijo').text().length){
               ele.selectionStart = $(this).val().length-$('#textfijo').text().length;
               ele.selectionEnd = $(this).val().length-$('#textfijo').text().length;
            }
         }
         });
         $('div').on('keydown', '#sup', function(e){
            var ele = document.getElementById ("sup");
         if ('selectionStart' in ele) {
               if(e.keyCode!=37 && e.keyCode!=38 && e.keyCode!=39 && e.keyCode!=40){
                  $('#alert').text(ele.selectionStart);
                if (ele.selectionStart > $(this).val().length-$('#textfijo').text().length) {
                   $(this).val($(this).val().substring(0, $(this).val().length-$('#textfijo').text().length));
                }
                ele.focus ();
            }else{
            }
           }
        });
        $('div').on('keyup', '#sup', function(e){
           var ele = document.getElementById ("sup");
         if ('selectionStart' in ele) {
              if(e.keyCode!=37 && e.keyCode!=38 && e.keyCode!=39 && e.keyCode!=40 && e.keyCode!=35){
               if (ele.selectionStart > $(this).val().length-$('#textfijo').text().length){
                  $(this).val($(this).val()+$('#textfijo').text());
                   ele.selectionStart = $(this).val().length-$('#textfijo').text().length;
                   ele.selectionEnd = $(this).val().length-$('#textfijo').text().length;
                   // $('#alert').text($(this).val().replace(/hola/g, '')); 
                   ele.focus ();
               }
            }else{
               if(ele.selectionStart > $(this).val().length-$('#textfijo').text().length){
                  ele.selectionStart = $(this).val().length-$('#textfijo').text().length;
               }
            }
           }
        });
      }
      if (document.addEventListener) document.addEventListener("DOMContentLoaded", autorun, false);
      else if (document.attachEvent) document.attachEvent("onreadystatechange", autorun);
      else window.onload = autorun;
    </script>