Skip to content

Commit

Permalink
Fix(VIM-3580): New terminal switches editor to insert mode
Browse files Browse the repository at this point in the history
  • Loading branch information
lippfi committed Aug 12, 2024
1 parent 44749b6 commit 7d68d41
Showing 1 changed file with 13 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ package com.maddyhome.idea.vim.listener

import com.intellij.execution.impl.ConsoleViewImpl
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.editor.EditorKind
import com.maddyhome.idea.vim.KeyHandler
import com.maddyhome.idea.vim.VimPlugin
Expand All @@ -31,8 +32,8 @@ import com.maddyhome.idea.vim.state.mode.Mode
*/
class IJEditorFocusListener : EditorListener {
override fun focusGained(editor: VimEditor) {
val editorInFocus = KeyHandler.getInstance().editorInFocus
if (editorInFocus != null && editorInFocus.ij == editor.ij) return
val oldEditor = KeyHandler.getInstance().editorInFocus
if (oldEditor != null && oldEditor.ij == editor.ij) return

KeyHandler.getInstance().editorInFocus = editor

Expand Down Expand Up @@ -63,13 +64,9 @@ class IJEditorFocusListener : EditorListener {
val context: ExecutionContext = injector.executionContextManager.getEditorExecutionContext(editor)
VimPlugin.getChange().insertBeforeCursor(editor, context)
}
if (!ijEditor.isViewer &&
!EditorHelper.isFileEditor(ijEditor) &&
ijEditor.document.isWritable &&
!ijEditor.inInsertMode && ijEditor.editorKind != EditorKind.DIFF
) {
if (isTerminal(ijEditor) && !ijEditor.inInsertMode) {
switchToInsertMode.run()
} else if (!ijEditor.document.isWritable) {
} else if (ijEditor.isInsertMode && ((oldEditor != null && isTerminal(oldEditor.ij)) || !ijEditor.document.isWritable)) {
val context: ExecutionContext = injector.executionContextManager.getEditorExecutionContext(editor)
val mode = injector.vimState.mode
when (mode) {
Expand All @@ -86,4 +83,12 @@ class IJEditorFocusListener : EditorListener {
}
KeyHandler.getInstance().reset(editor)
}

// By "terminal" we refer to some editor that should switch to INSERT mode on focus
private fun isTerminal(ijEditor: Editor): Boolean {
return !ijEditor.isViewer &&
!EditorHelper.isFileEditor(ijEditor) &&
ijEditor.document.isWritable &&
ijEditor.editorKind != EditorKind.DIFF
}
}

0 comments on commit 7d68d41

Please sign in to comment.