From 3c4a9592b3dc758fa5b03706f5947fd39c40d313 Mon Sep 17 00:00:00 2001 From: rebornix Date: Fri, 2 Dec 2016 16:06:38 -0800 Subject: [PATCH] Align transpose with Sublime Text 3 --- .../linesOperations/common/linesOperations.ts | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/vs/editor/contrib/linesOperations/common/linesOperations.ts b/src/vs/editor/contrib/linesOperations/common/linesOperations.ts index 02d486da45f..9c7cddbc254 100644 --- a/src/vs/editor/contrib/linesOperations/common/linesOperations.ts +++ b/src/vs/editor/contrib/linesOperations/common/linesOperations.ts @@ -507,12 +507,12 @@ export class JoinLinesAction extends EditorAction { } @editorAction -class TransposeAction extends EditorAction { +export class TransposeAction extends EditorAction { constructor() { super({ id: 'editor.action.transpose', - label: nls.localize('editor.transpose', "Transpose characters or words around the cursor"), - alias: 'Transpose characters or words around the cursor', + label: nls.localize('editor.transpose', "Transpose characters around the cursor"), + alias: 'Transpose characters around the cursor', precondition: EditorContextKeys.Writable }); } @@ -522,22 +522,24 @@ class TransposeAction extends EditorAction { let model = editor.getModel(); let commands: ICommand[] = []; - selections.forEach((selection) => { + for (let i = 0, len = selections.length; i < len; i++) { + let selection = selections[i]; if (selection.isEmpty) { let cursor = selection.getStartPosition(); - // transpose characters or words around the cursor - if (cursor.column === 1 || cursor.column > model.getLineContent(cursor.lineNumber).length) { + if (cursor.column > model.getLineContent(cursor.lineNumber).length) { return; } - let wordRange = model.getWordAtPosition(cursor); - if (!wordRange || (cursor.column > wordRange.startColumn && cursor.column < wordRange.endColumn)) { - // transpose characters - let deleteSelection = new Range(cursor.lineNumber, cursor.column - 1, cursor.lineNumber, cursor.column + 1); - let chars = model.getValueInRange(deleteSelection).split('').reverse().join(''); - commands.push(new ReplaceCommandThatPreservesSelection(deleteSelection, chars, selection)); - } + let deleteSelection = new Range(cursor.lineNumber, Math.max(1, cursor.column - 1), cursor.lineNumber, cursor.column + 1); + let chars = model.getValueInRange(deleteSelection).split('').reverse().join(''); + commands.push(new ReplaceCommandThatPreservesSelection(deleteSelection, chars, + new Selection(cursor.lineNumber, cursor.column + 1, cursor.lineNumber, cursor.column + 1))); } + } + + editor.executeCommands(this.id, commands); + } +} }); editor.executeCommands(this.id, commands);