From d9446222ec1615ca3ea5986d58040001d8a53aa5 Mon Sep 17 00:00:00 2001 From: aioute Gao Date: Tue, 13 Jun 2017 12:52:20 +0900 Subject: [PATCH 1/2] Save active text editor reference when entering Insert mode. --- src/Modes/Insert.ts | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/Modes/Insert.ts b/src/Modes/Insert.ts index dd2d175c..aa291a49 100644 --- a/src/Modes/Insert.ts +++ b/src/Modes/Insert.ts @@ -1,4 +1,4 @@ -import {window, Position} from 'vscode'; +import {window, TextEditor, Position} from 'vscode'; import {Mode, ModeID} from './Mode'; import {MatchResultKind} from '../Mappers/Generic'; import {CommandMap} from '../Mappers/Command'; @@ -46,9 +46,13 @@ export class ModeInsert extends Mode { }); } + private textEditor?: TextEditor; + enter(): void { super.enter(); + this.textEditor = window.activeTextEditor; + this.startRecord(); } @@ -95,24 +99,22 @@ export class ModeInsert extends Mode { return; } - const activeTextEditor = window.activeTextEditor; - if (! activeTextEditor) { + if (! this.textEditor) { return; } this.isRecording = true; - this.recordStartPosition = activeTextEditor.selection.active; - this.recordStartLineText = activeTextEditor.document.lineAt(this.recordStartPosition.line).text; + this.recordStartPosition = this.textEditor.selection.active; + this.recordStartLineText = this.textEditor.document.lineAt(this.recordStartPosition.line).text; this._recordedCommandMaps = []; } private processRecord(): void { - const activeTextEditor = window.activeTextEditor; - if (! activeTextEditor) { + if (! this.textEditor) { return; } - const currentLineText = activeTextEditor.document.lineAt(this.recordStartPosition.line).text; + const currentLineText = this.textEditor.document.lineAt(this.recordStartPosition.line).text; let deletionCountBefore = 0; let deletionCountAfter = 0; @@ -226,25 +228,23 @@ export class ModeInsert extends Mode { } if (map.keys === '\n') { - const activeTextEditor = window.activeTextEditor; - if (! activeTextEditor) { + if (! this.textEditor) { return Promise.resolve(false); } - this.recordStartPosition = activeTextEditor.selection.active; - this.recordStartLineText = activeTextEditor.document.lineAt(this.recordStartPosition.line).text; + this.recordStartPosition = this.textEditor.selection.active; + this.recordStartLineText = this.textEditor.document.lineAt(this.recordStartPosition.line).text; } return Promise.resolve(true); } onDidChangeTextEditorSelection(): void { - const activeTextEditor = window.activeTextEditor; - if (! activeTextEditor) { + if (! this.textEditor) { return; } - if (activeTextEditor.selection.active.line !== this.recordStartPosition.line) { + if (this.textEditor.selection.active.line !== this.recordStartPosition.line) { this.endRecord(); } } From d465e041be7146bf320f5322978ca2db3fb01122 Mon Sep 17 00:00:00 2001 From: aioute Gao Date: Tue, 13 Jun 2017 12:52:43 +0900 Subject: [PATCH 2/2] Don't move cursor when exiting Insert mode if active text editor changed. --- src/Modes/Insert.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Modes/Insert.ts b/src/Modes/Insert.ts index aa291a49..94adcb19 100644 --- a/src/Modes/Insert.ts +++ b/src/Modes/Insert.ts @@ -61,7 +61,9 @@ export class ModeInsert extends Mode { this.endRecord(); - ActionMoveCursor.byMotions({ motions: [ MotionCharacter.left() ] }); + if (this.textEditor === window.activeTextEditor) { + ActionMoveCursor.byMotions({ motions: [ MotionCharacter.left() ] }); + } } input(key: string, args: {replaceCharCnt?: number} = {}): MatchResultKind {