1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2025-06-01 10:34:05 +02:00

Create KeyHandlerState

We do not need multiple commandBuilder, digraphSequence or mappingState and this class will be a singleton containing them
This commit is contained in:
filipp 2024-02-03 23:22:54 +02:00
parent 5fc2f04224
commit 7966a6dc91
4 changed files with 42 additions and 5 deletions
src/testFixtures/kotlin/org/jetbrains/plugins/ideavim
vim-engine/src/main/kotlin/com/maddyhome/idea/vim

View File

@ -73,7 +73,6 @@ import com.maddyhome.idea.vim.options.helpers.GuiCursorOptionHelper
import com.maddyhome.idea.vim.options.helpers.GuiCursorType
import com.maddyhome.idea.vim.state.mode.Mode
import com.maddyhome.idea.vim.state.mode.inBlockSelection
import com.maddyhome.idea.vim.state.mode.mode
import com.maddyhome.idea.vim.ui.ex.ExEntryPanel
import com.maddyhome.idea.vim.vimscript.model.CommandLineVimLContext
import com.maddyhome.idea.vim.vimscript.model.datatypes.VimFuncref
@ -119,6 +118,7 @@ abstract class VimTestCase {
if (editor != null) {
KeyHandler.getInstance().fullReset(editor.vim)
}
KeyHandler.getInstance().keyState.reset(Mode.NORMAL())
VimPlugin.getOptionGroup().resetAllOptionsForTesting()
VimPlugin.getKey().resetKeyMappings()
VimPlugin.getSearch().resetState()

View File

@ -34,6 +34,7 @@ import com.maddyhome.idea.vim.key.CommandNode
import com.maddyhome.idea.vim.key.CommandPartNode
import com.maddyhome.idea.vim.key.KeyStack
import com.maddyhome.idea.vim.key.Node
import com.maddyhome.idea.vim.state.KeyHandlerState
import com.maddyhome.idea.vim.state.VimStateMachine
import com.maddyhome.idea.vim.state.mode.Mode
import com.maddyhome.idea.vim.state.mode.ReturnTo
@ -48,6 +49,7 @@ import javax.swing.KeyStroke
* actions. This is a singleton.
*/
public class KeyHandler {
public val keyState: KeyHandlerState = KeyHandlerState()
private var handleKeyRecursionCount = 0

View File

@ -7,8 +7,8 @@
*/
package com.maddyhome.idea.vim.impl.state
import com.maddyhome.idea.vim.KeyHandler
import com.maddyhome.idea.vim.api.VimEditor
import com.maddyhome.idea.vim.api.injector
import com.maddyhome.idea.vim.command.Command
import com.maddyhome.idea.vim.command.CommandBuilder
import com.maddyhome.idea.vim.command.CommandFlags
@ -27,10 +27,10 @@ import javax.swing.KeyStroke
* Used to maintain state before and while entering a Vim command (operator, motion, text object, etc.)
*/
public class VimStateMachineImpl : VimStateMachine {
override val commandBuilder: CommandBuilder = CommandBuilder(injector.keyGroup.getKeyRoot(MappingMode.NORMAL))
override val commandBuilder: CommandBuilder = KeyHandler.getInstance().keyState.commandBuilder
override var mode: Mode = Mode.NORMAL()
override val mappingState: MappingState = MappingState()
override val digraphSequence: DigraphSequence = DigraphSequence()
override val mappingState: MappingState = KeyHandler.getInstance().keyState.mappingState
override val digraphSequence: DigraphSequence = KeyHandler.getInstance().keyState.digraphSequence
override var isDotRepeatInProgress: Boolean = false
override var isRegisterPending: Boolean = false
override var isReplaceCharacter: Boolean = false

View File

@ -0,0 +1,35 @@
/*
* Copyright 2003-2024 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
package com.maddyhome.idea.vim.state
import com.maddyhome.idea.vim.api.injector
import com.maddyhome.idea.vim.command.CommandBuilder
import com.maddyhome.idea.vim.command.MappingMode
import com.maddyhome.idea.vim.command.MappingState
import com.maddyhome.idea.vim.common.DigraphSequence
import com.maddyhome.idea.vim.impl.state.toMappingMode
import com.maddyhome.idea.vim.state.mode.Mode
public class KeyHandlerState {
public val mappingState: MappingState = MappingState()
public val digraphSequence: DigraphSequence = DigraphSequence()
public val commandBuilder: CommandBuilder = CommandBuilder(injector.keyGroup.getKeyRoot(MappingMode.NORMAL))
public fun partialReset(mode: Mode) {
digraphSequence.reset()
mappingState.resetMappingSequence()
commandBuilder.resetInProgressCommandPart(injector.keyGroup.getKeyRoot(mode.toMappingMode()))
}
public fun reset(mode: Mode) {
digraphSequence.reset()
mappingState.resetMappingSequence()
commandBuilder.resetAll(injector.keyGroup.getKeyRoot(mode.toMappingMode()))
}
}