From 47f69deed8f3401e7d9f909d93c89f84d7da9f42 Mon Sep 17 00:00:00 2001 From: Richard Natal Date: Sat, 19 Dec 2015 13:42:57 -0200 Subject: [PATCH 1/2] Implementation of editor.action.insertCursorAsEndOfEachSelectedLine - inspired by issue #950 and pull #961 - the same behaviour of Sublime Text ctrl+shift+l command... Signed-off-by: Richard Natal --- .../contrib/multicursor/common/multicursor.ts | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/src/vs/editor/contrib/multicursor/common/multicursor.ts b/src/vs/editor/contrib/multicursor/common/multicursor.ts index cc257a8daeb..c62cf631f2c 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 InsertCursorsFromLineSelection extends EditorAction { + static ID = 'editor.action.insertCursorAtEndOfEachLineSelected'; + + constructor(descriptor:EditorCommon.IEditorActionDescriptorData, editor:EditorCommon.ICommonCodeEditor, @INullService ns) { + super(descriptor, editor); + } + + public run(): TPromise { + let sel = this.editor.getSelection(); + if(!sel.isEmpty()) { + let model = this.editor.getModel(); + let sels = new Array(); + let sStart = sel.getStartPosition(); + let sEnd = sel.getEndPosition(); + for (var i = sStart.lineNumber; i <= sEnd.lineNumber; i++) { + if(i !== sEnd.lineNumber) { + let lEnd = model.getLineMaxColumn(i); + sels.push({ + selectionStartLineNumber: i, + selectionStartColumn: lEnd, + positionLineNumber: i, + positionColumn: lEnd + }); + } else if( sEnd.column > 0 ) { + sels.push({ + selectionStartLineNumber: sEnd.lineNumber, + selectionStartColumn: sEnd.column, + positionLineNumber: sEnd.lineNumber, + positionColumn: sEnd.column + }); + } + } + this.editor.setSelections(sels); + } + 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(InsertCursorsFromLineSelection, InsertCursorsFromLineSelection.ID, nls.localize('mutlicursor.insertAtEndOfEachLineSelected', "Create multiple cursors from selected lines"), { + context: ContextKey.EditorTextFocus, + primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_I +})); From 37a95d0fcd4c929984bfc1a00bd54e3943aa05d4 Mon Sep 17 00:00:00 2001 From: Richard Natal Date: Sat, 19 Dec 2015 22:19:34 -0200 Subject: [PATCH 2/2] Rename variable and class to be more meaningfull Signed-off-by: Richard Natal --- .../contrib/multicursor/common/multicursor.ts | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/vs/editor/contrib/multicursor/common/multicursor.ts b/src/vs/editor/contrib/multicursor/common/multicursor.ts index c62cf631f2c..757b68ad3fc 100644 --- a/src/vs/editor/contrib/multicursor/common/multicursor.ts +++ b/src/vs/editor/contrib/multicursor/common/multicursor.ts @@ -28,7 +28,7 @@ class InsertCursorBelow extends HandlerEditorAction { } } -class InsertCursorsFromLineSelection extends EditorAction { +class InsertCursorAtEndOfEachLineSelected extends EditorAction { static ID = 'editor.action.insertCursorAtEndOfEachLineSelected'; constructor(descriptor:EditorCommon.IEditorActionDescriptorData, editor:EditorCommon.ICommonCodeEditor, @INullService ns) { @@ -36,31 +36,31 @@ class InsertCursorsFromLineSelection extends EditorAction { } public run(): TPromise { - let sel = this.editor.getSelection(); - if(!sel.isEmpty()) { + let selection = this.editor.getSelection(); + if(!selection.isEmpty()) { let model = this.editor.getModel(); - let sels = new Array(); - let sStart = sel.getStartPosition(); - let sEnd = sel.getEndPosition(); - for (var i = sStart.lineNumber; i <= sEnd.lineNumber; i++) { - if(i !== sEnd.lineNumber) { - let lEnd = model.getLineMaxColumn(i); - sels.push({ + 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: lEnd, + selectionStartColumn: currentLineMaxColumn, positionLineNumber: i, - positionColumn: lEnd + positionColumn: currentLineMaxColumn }); - } else if( sEnd.column > 0 ) { - sels.push({ - selectionStartLineNumber: sEnd.lineNumber, - selectionStartColumn: sEnd.column, - positionLineNumber: sEnd.lineNumber, - positionColumn: sEnd.column + } else if( selectionEnd.column > 0 ) { + newSelections.push({ + selectionStartLineNumber: selectionEnd.lineNumber, + selectionStartColumn: selectionEnd.column, + positionLineNumber: selectionEnd.lineNumber, + positionColumn: selectionEnd.column }); } } - this.editor.setSelections(sels); + this.editor.setSelections(newSelections); } return TPromise.as(true); } @@ -84,7 +84,7 @@ CommonEditorRegistry.registerEditorAction(new EditorActionDescriptor(InsertCurso secondary: [KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.DownArrow] } })); -CommonEditorRegistry.registerEditorAction(new EditorActionDescriptor(InsertCursorsFromLineSelection, InsertCursorsFromLineSelection.ID, nls.localize('mutlicursor.insertAtEndOfEachLineSelected', "Create multiple cursors from selected lines"), { +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 }));