diff --git a/lib/ace/edit_session.js b/lib/ace/edit_session.js index 9754f1b4..544a635c 100644 --- a/lib/ace/edit_session.js +++ b/lib/ace/edit_session.js @@ -441,6 +441,17 @@ var EditSession = function(text, mode) { return new Range(row, start, row, end); }; + // Gets the range of a word including its right whitespace + this.getAWordRange = function(row, column) { + var wordRange = this.getWordRange(row, column); + var line = this.getLine(wordRange.end.row); + + while (line.charAt(wordRange.end.column).match(/[ \t]/)) { + wordRange.end.column += 1; + } + return wordRange; + }; + this.setNewLineMode = function(newLineMode) { this.doc.setNewLineMode(newLineMode); }; diff --git a/lib/ace/selection.js b/lib/ace/selection.js index 88a7bd64..4f0474d9 100644 --- a/lib/ace/selection.js +++ b/lib/ace/selection.js @@ -45,11 +45,11 @@ var Range = require("./range").Range; /** * Keeps cursor position and the text selection of an edit session. - * + * * The row/columns used in the selection are in document coordinates * representing ths coordinates as thez appear in the document * before applying soft wrap and folding. - */ + */ var Selection = function(session) { this.session = session; this.doc = session.getDocument(); @@ -123,7 +123,7 @@ var Selection = function(session) { }; var anchor = this.getSelectionAnchor(); - var lead = this.getSelectionLead(); + var lead = this.getSelectionLead(); var isBackwards = this.isBackwards(); @@ -253,6 +253,13 @@ var Selection = function(session) { this.setSelectionRange(range); }; + // Selects a word including its right whitespace + this.selectAWord = function() { + var cursor = this.getCursor(); + var range = this.session.getAWordRange(cursor.row, cursor.column); + this.setSelectionRange(range); + }; + this.selectLine = function() { var rowStart = this.selectionLead.row; var rowEnd; @@ -440,10 +447,10 @@ var Selection = function(session) { this.selectionLead.row, this.selectionLead.column ); - + var screenCol = (chars === 0 && this.$desiredColumn) || screenPos.column; var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenCol); - + // move the cursor and update the desired column this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0); }; @@ -459,11 +466,11 @@ var Selection = function(session) { row = fold.start.row; column = fold.start.column; } - + this.$preventUpdateDesiredColumnOnChange = true; this.selectionLead.setPosition(row, column); this.$preventUpdateDesiredColumnOnChange = false; - + if (!preventUpdateDesiredColumn) this.$updateDesiredColumn(this.selectionLead.column); };