diff --git a/src/mode/mode.ts b/src/mode/mode.ts index e58f0754cc4..74deaca68e8 100644 --- a/src/mode/mode.ts +++ b/src/mode/mode.ts @@ -14,7 +14,9 @@ export enum ModeName { } export enum VSCodeVimCursorType { - Native, + Block, + Line, + Underline, TextDecoration } diff --git a/src/mode/modeEasyMotion.ts b/src/mode/modeEasyMotion.ts index 67623b239b2..90a6cd8d51f 100644 --- a/src/mode/modeEasyMotion.ts +++ b/src/mode/modeEasyMotion.ts @@ -5,7 +5,7 @@ import { VSCodeVimCursorType } from './mode'; export class EasyMotionMode extends Mode { public text = "EasyMotion Mode"; - public cursorType = VSCodeVimCursorType.Native; + public cursorType = VSCodeVimCursorType.Block; constructor() { super(ModeName.EasyMotionMode); diff --git a/src/mode/modeHandler.ts b/src/mode/modeHandler.ts index 706e644de4e..1eb62df673d 100644 --- a/src/mode/modeHandler.ts +++ b/src/mode/modeHandler.ts @@ -1694,11 +1694,17 @@ export class ModeHandler implements vscode.Disposable { .update("cursorBlinking", this.currentMode.name !== ModeName.Insert ? "solid" : "blink", true); } - // Use native block cursor if possible. - let cursorStyle = this.currentMode.cursorType === VSCodeVimCursorType.Native && - this.currentMode.name !== ModeName.VisualBlockInsertMode && - this.currentMode.name !== ModeName.Insert ? - vscode.TextEditorCursorStyle.Block : vscode.TextEditorCursorStyle.Line; + // Use native cursor if possible. Default to Block. + let cursorStyle = vscode.TextEditorCursorStyle.Block; + switch (this.currentMode.cursorType) { + case VSCodeVimCursorType.TextDecoration: + case VSCodeVimCursorType.Line: + cursorStyle = vscode.TextEditorCursorStyle.Line; + break; + case VSCodeVimCursorType.Underline: + cursorStyle = vscode.TextEditorCursorStyle.Underline; + break; + } let options = vscode.window.activeTextEditor.options; options.cursorStyle = cursorStyle; @@ -1707,12 +1713,19 @@ export class ModeHandler implements vscode.Disposable { // TODO xconverge: temporary workaround for vscode bug not changing cursor style properly // https://github.com/Microsoft/vscode/issues/17472 // https://github.com/Microsoft/vscode/issues/17513 - if (options.cursorStyle === vscode.TextEditorCursorStyle.Block) { - vscode.window.activeTextEditor.options.cursorStyle = vscode.TextEditorCursorStyle.Line; - vscode.window.activeTextEditor.options.cursorStyle = vscode.TextEditorCursorStyle.Block; - } else if (options.cursorStyle === vscode.TextEditorCursorStyle.Line) { - vscode.window.activeTextEditor.options.cursorStyle = vscode.TextEditorCursorStyle.Block; - vscode.window.activeTextEditor.options.cursorStyle = vscode.TextEditorCursorStyle.Line; + switch (options.cursorStyle) { + case vscode.TextEditorCursorStyle.Block: + vscode.window.activeTextEditor.options.cursorStyle = vscode.TextEditorCursorStyle.Line; + vscode.window.activeTextEditor.options.cursorStyle = vscode.TextEditorCursorStyle.Block; + break; + case vscode.TextEditorCursorStyle.Line: + vscode.window.activeTextEditor.options.cursorStyle = vscode.TextEditorCursorStyle.Block; + vscode.window.activeTextEditor.options.cursorStyle = vscode.TextEditorCursorStyle.Line; + break; + case vscode.TextEditorCursorStyle.Underline: + vscode.window.activeTextEditor.options.cursorStyle = vscode.TextEditorCursorStyle.Block; + vscode.window.activeTextEditor.options.cursorStyle = vscode.TextEditorCursorStyle.Underline; + break; } if (this.currentMode.cursorType === VSCodeVimCursorType.TextDecoration && diff --git a/src/mode/modeInsert.ts b/src/mode/modeInsert.ts index 636aa72d7b3..476214616ed 100644 --- a/src/mode/modeInsert.ts +++ b/src/mode/modeInsert.ts @@ -5,7 +5,7 @@ import { VSCodeVimCursorType } from './mode'; export class InsertMode extends Mode { public text = "Insert Mode"; - public cursorType = VSCodeVimCursorType.Native; + public cursorType = VSCodeVimCursorType.Line; constructor() { super(ModeName.Insert); diff --git a/src/mode/modeInsertVisualBlock.ts b/src/mode/modeInsertVisualBlock.ts index 79aded8aaa0..aa0fcfaa218 100644 --- a/src/mode/modeInsertVisualBlock.ts +++ b/src/mode/modeInsertVisualBlock.ts @@ -5,7 +5,7 @@ import { VSCodeVimCursorType } from './mode'; export class InsertVisualBlockMode extends Mode { public text = "Visual Block Insert Mode"; - public cursorType = VSCodeVimCursorType.Native; + public cursorType = VSCodeVimCursorType.Line; public isVisualMode = true; constructor() { diff --git a/src/mode/modeNormal.ts b/src/mode/modeNormal.ts index 276935d2ea3..852f2b0841b 100644 --- a/src/mode/modeNormal.ts +++ b/src/mode/modeNormal.ts @@ -8,7 +8,7 @@ export class NormalMode extends Mode { private _modeHandler: ModeHandler; public text = "Normal Mode"; - public cursorType = VSCodeVimCursorType.Native; + public cursorType = VSCodeVimCursorType.Block; constructor(modeHandler: ModeHandler) { super(ModeName.Normal); diff --git a/src/mode/modeReplace.ts b/src/mode/modeReplace.ts index 76d9c1e488c..07fc2b697df 100644 --- a/src/mode/modeReplace.ts +++ b/src/mode/modeReplace.ts @@ -5,7 +5,7 @@ import { VSCodeVimCursorType } from './mode'; export class ReplaceMode extends Mode { public text = "Replace"; - public cursorType = VSCodeVimCursorType.TextDecoration; + public cursorType = VSCodeVimCursorType.Underline; constructor() { super(ModeName.Replace); diff --git a/src/mode/modeSearchInProgress.ts b/src/mode/modeSearchInProgress.ts index d182d6c66ff..e81f320819d 100644 --- a/src/mode/modeSearchInProgress.ts +++ b/src/mode/modeSearchInProgress.ts @@ -5,7 +5,7 @@ import { VSCodeVimCursorType } from './mode'; export class SearchInProgressMode extends Mode { public text = "Search In Progress"; - public cursorType = VSCodeVimCursorType.Native; + public cursorType = VSCodeVimCursorType.Block; constructor() { super(ModeName.SearchInProgressMode); diff --git a/src/mode/modeVisual.ts b/src/mode/modeVisual.ts index 8b2edd0d18e..7542bae356c 100644 --- a/src/mode/modeVisual.ts +++ b/src/mode/modeVisual.ts @@ -5,7 +5,7 @@ import { VSCodeVimCursorType } from './mode'; export class VisualMode extends Mode { public text = "Visual Mode"; - public cursorType = VSCodeVimCursorType.TextDecoration; + public cursorType = VSCodeVimCursorType.Block; public isVisualMode = true; constructor() { diff --git a/src/mode/modeVisualLine.ts b/src/mode/modeVisualLine.ts index 9c1be20c93d..198458fe4c1 100644 --- a/src/mode/modeVisualLine.ts +++ b/src/mode/modeVisualLine.ts @@ -5,7 +5,7 @@ import { VSCodeVimCursorType } from './mode'; export class VisualLineMode extends Mode { public text = "Visual Line Mode"; - public cursorType = VSCodeVimCursorType.TextDecoration; + public cursorType = VSCodeVimCursorType.Block; public isVisualMode = true; constructor() { diff --git a/src/mode/surroundInputMode.ts b/src/mode/surroundInputMode.ts index 9ef1b0c3da9..474882cbf85 100644 --- a/src/mode/surroundInputMode.ts +++ b/src/mode/surroundInputMode.ts @@ -5,7 +5,7 @@ import { VSCodeVimCursorType } from './mode'; export class SurroundInputMode extends Mode { public text = "Surround Input Mode"; - public cursorType = VSCodeVimCursorType.Native; + public cursorType = VSCodeVimCursorType.Block; constructor() { super(ModeName.SurroundInputMode);