2014-05-19 16 views
9

Sto lavorando alla personalizzazione del codemirror per la mia nuova lingua. Come parte di questa nuova implementazione della modalità, sto scrivendo una nuova barra degli strumenti in cui l'utente può selezionare del testo e dire inserire. Questo comando dovrebbe inserire il testo in cui l'utente stava digitando prima di fare clic sulla barra degli strumenti.Inserimento di un nuovo testo nella posizione del cursore data

Non sono riuscito a trovare alcun supporto di livello API per farlo. Se c'è un altro modo, qualcuno può darmi una mano su questo?

In pratica, ottenere il numero di posizione attuale del cursore e la posizione in corrispondenza della quale il cursore è attualmente presente. Può essere un oggetto di posizione

API per l'inserimento di un testo, qualcosa come insertText("Text", PositionObject)

risposta

3

Si desidera utilizzare la funzione replaceRange. Anche se il nome dice "replace", funge anche da "insert" a seconda degli argomenti. Dalla documentazione al momento in cui scrivo:

Sostituire la parte del documento da e verso la stringa . da e a deve essere {line, ch} oggetti. per poter essere lasciato a basta inserire la stringa in posizione da. Quando viene fornita l'origine, lo stesso viene inviato a "modifica" degli eventi e la sua prima lettera sarà utilizzata per determinare se questa modifica può essere unita agli eventi precedenti della cronologia , nel modo descritto per le origini di selezione.

9

Per aggiungere la nuova riga alla fine -

function updateCodeMirror(data){ 
    var cm = $('.CodeMirror')[0].CodeMirror; 
    var doc = cm.getDoc(); 
    var cursor = doc.getCursor(); // gets the line number in the cursor position 
    var line = doc.getLine(cursor.line); // get the line contents 
    var pos = { // create a new object to avoid mutation of the original selection 
     line: cursor.line, 
     ch: line.length - 1 // set the character position to the end of the line 
    } 
    doc.replaceRange('\n'+data+'\n', pos); // adds a new line 
} 

funzione di chiamata

updateCodeMirror("This is new line"); 
3

Ecco come ho fatto:

function insertTextAtCursor(editor, text) { 
    var doc = editor.getDoc(); 
    var cursor = doc.getCursor(); 
    doc.replaceRange(text, cursor); 
} 
1

funzione finale da inserire testo all'attuale cursore positi su in un modo performante. Spero che aiuti.

function insertStringInTemplate(str) 
{ 
    var doc = editor_template.getDoc(); 
    var cursor = doc.getCursor(); 

    var pos = { 
     line: cursor.line, 
     ch: cursor.ch 
    } 

    doc.replaceRange(str, pos); 
} 
1

migliorata funzione che, se la selezione presente, sostituisce il testo, se non, inserti in posizione corrente

function insertString(editor,str){ 

     var selection = editor.getSelection(); 

     if(selection.length>0){ 
      editor.replaceSelection(str); 
     } 
     else{ 

      var doc = editor.getDoc(); 
      var cursor = doc.getCursor(); 

      var pos = { 
       line: cursor.line, 
       ch: cursor.ch 
      } 

      doc.replaceRange(str, pos); 

     } 

    } 
+0

Si prega di non aggiungere una risposta extra quando si migliora quella esistente. Modifica il primo invece – YakovL

Problemi correlati