Merge pull request #1479 from Bigous/master

Implementation of editor.action.insertCursorAtEndOfEachSelectedLine
This commit is contained in:
Alexandru Dima
2016-01-25 09:18:51 +02:00
@@ -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<boolean> {
let selection = this.editor.getSelection();
if(!selection.isEmpty()) {
let model = this.editor.getModel();
let newSelections = new Array<EditorCommon.ISelection>();
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
}));