diff --git a/src/vs/editor/contrib/multicursor/common/multicursor.ts b/src/vs/editor/contrib/multicursor/common/multicursor.ts index cc257a8daeb..757b68ad3fc 100644 --- a/src/vs/editor/contrib/multicursor/common/multicursor.ts +++ b/src/vs/editor/contrib/multicursor/common/multicursor.ts @@ -6,7 +6,8 @@ import nls = require('vs/nls'); import {CommonEditorRegistry, ContextKey, EditorActionDescriptor} from 'vs/editor/common/editorCommonExtensions'; -import {HandlerEditorAction} from 'vs/editor/common/editorAction'; +import {TPromise} from 'vs/base/common/winjs.base'; +import {EditorAction, HandlerEditorAction} from 'vs/editor/common/editorAction'; import EditorCommon = require('vs/editor/common/editorCommon'); import {INullService} from 'vs/platform/instantiation/common/instantiation'; import {KeyMod, KeyCode} from 'vs/base/common/keyCodes'; @@ -27,6 +28,44 @@ class InsertCursorBelow extends HandlerEditorAction { } } +class InsertCursorAtEndOfEachLineSelected extends EditorAction { + static ID = 'editor.action.insertCursorAtEndOfEachLineSelected'; + + constructor(descriptor:EditorCommon.IEditorActionDescriptorData, editor:EditorCommon.ICommonCodeEditor, @INullService ns) { + super(descriptor, editor); + } + + public run(): TPromise { + let selection = this.editor.getSelection(); + if(!selection.isEmpty()) { + let model = this.editor.getModel(); + let newSelections = new Array(); + let selectionStart = selection.getStartPosition(); + let selectionEnd = selection.getEndPosition(); + for (var i = selectionStart.lineNumber; i <= selectionEnd.lineNumber; i++) { + if(i !== selectionEnd.lineNumber) { + let currentLineMaxColumn = model.getLineMaxColumn(i); + newSelections.push({ + selectionStartLineNumber: i, + selectionStartColumn: currentLineMaxColumn, + positionLineNumber: i, + positionColumn: currentLineMaxColumn + }); + } else if( selectionEnd.column > 0 ) { + newSelections.push({ + selectionStartLineNumber: selectionEnd.lineNumber, + selectionStartColumn: selectionEnd.column, + positionLineNumber: selectionEnd.lineNumber, + positionColumn: selectionEnd.column + }); + } + } + this.editor.setSelections(newSelections); + } + return TPromise.as(true); + } +} + // register actions CommonEditorRegistry.registerEditorAction(new EditorActionDescriptor(InsertCursorAbove, InsertCursorAbove.ID, nls.localize('mutlicursor.insertAbove', "Add Cursor Above"), { @@ -45,3 +84,7 @@ CommonEditorRegistry.registerEditorAction(new EditorActionDescriptor(InsertCurso secondary: [KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.DownArrow] } })); +CommonEditorRegistry.registerEditorAction(new EditorActionDescriptor(InsertCursorAtEndOfEachLineSelected, InsertCursorAtEndOfEachLineSelected.ID, nls.localize('mutlicursor.insertAtEndOfEachLineSelected', "Create multiple cursors from selected lines"), { + context: ContextKey.EditorTextFocus, + primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_I +}));