1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2025-02-25 02:46:01 +01:00

Move some logic to RegisterConsumer

This commit is contained in:
filipp 2024-02-23 14:16:38 +02:00
parent 6741120f19
commit 1d9514a205
2 changed files with 60 additions and 19 deletions
vim-engine/src/main/kotlin/com/maddyhome/idea/vim

View File

@ -39,6 +39,7 @@ import com.maddyhome.idea.vim.key.consumers.CharArgumentConsumer
import com.maddyhome.idea.vim.key.consumers.CommandCountConsumer
import com.maddyhome.idea.vim.key.consumers.DeleteCommandConsumer
import com.maddyhome.idea.vim.key.consumers.EditorResetConsumer
import com.maddyhome.idea.vim.key.consumers.RegisterConsumer
import com.maddyhome.idea.vim.state.KeyHandlerState
import com.maddyhome.idea.vim.state.VimStateMachine
import com.maddyhome.idea.vim.state.mode.Mode
@ -54,7 +55,7 @@ import javax.swing.KeyStroke
* actions. This is a singleton.
*/
public class KeyHandler {
private val keyConsumers: List<KeyConsumer> = listOf(MappingProcessor, CommandCountConsumer(), DeleteCommandConsumer(), EditorResetConsumer(), CharArgumentConsumer())
private val keyConsumers: List<KeyConsumer> = listOf(MappingProcessor, CommandCountConsumer(), DeleteCommandConsumer(), EditorResetConsumer(), CharArgumentConsumer(), RegisterConsumer())
public var keyHandlerState: KeyHandlerState = KeyHandlerState()
private set
@ -139,12 +140,7 @@ public class KeyHandler {
}
if (!isProcessed) {
LOG.trace("Mappings processed, continue processing key.")
if (editorState.isRegisterPending) {
LOG.trace("Pending mode.")
commandBuilder.addKey(key)
handleSelectRegister(editorState, chKey, processBuilder.state)
isProcessed = true
} else if (!handleDigraph(editor, key, processBuilder)) {
if (!handleDigraph(editor, key, processBuilder)) {
LOG.debug("Digraph is NOT processed")
// Ask the key/action tree if this is an appropriate key at this point in the command and if so,
@ -296,18 +292,6 @@ public class KeyHandler {
}
}
private fun handleSelectRegister(vimStateMachine: VimStateMachine, chKey: Char, keyState: KeyHandlerState) {
LOG.trace("Handle select register")
vimStateMachine.resetRegisterPending()
if (injector.registerGroup.isValid(chKey)) {
LOG.trace("Valid register")
keyState.commandBuilder.pushCommandPart(chKey)
} else {
LOG.trace("Invalid register, set command state to BAD_COMMAND")
keyState.commandBuilder.commandState = CurrentCommandState.BAD_COMMAND
}
}
private fun handleDigraph(
editor: VimEditor,
key: KeyStroke,

View File

@ -0,0 +1,57 @@
/*
* 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.key.consumers
import com.maddyhome.idea.vim.KeyHandler
import com.maddyhome.idea.vim.KeyProcessResult
import com.maddyhome.idea.vim.api.VimEditor
import com.maddyhome.idea.vim.api.injector
import com.maddyhome.idea.vim.diagnostic.vimLogger
import com.maddyhome.idea.vim.helper.vimStateMachine
import com.maddyhome.idea.vim.key.KeyConsumer
import java.awt.event.KeyEvent
import javax.swing.KeyStroke
public class RegisterConsumer : KeyConsumer {
private companion object {
private val logger = vimLogger<CharArgumentConsumer>()
}
override fun consumeKey(
key: KeyStroke,
editor: VimEditor,
allowKeyMappings: Boolean,
mappingCompleted: Boolean,
keyProcessResultBuilder: KeyProcessResult.KeyProcessResultBuilder,
shouldRecord: KeyHandler.MutableBoolean,
): Boolean {
if (!editor.vimStateMachine.isRegisterPending) return false
logger.trace("Pending mode.")
keyProcessResultBuilder.state.commandBuilder.addKey(key)
val chKey: Char = if (key.keyChar == KeyEvent.CHAR_UNDEFINED) 0.toChar() else key.keyChar
handleSelectRegister(editor, chKey, keyProcessResultBuilder)
return true
}
private fun handleSelectRegister(editor: VimEditor, chKey: Char, processBuilder: KeyProcessResult.KeyProcessResultBuilder) {
logger.trace("Handle select register")
editor.vimStateMachine.resetRegisterPending()
if (injector.registerGroup.isValid(chKey)) {
logger.trace("Valid register")
processBuilder.state.commandBuilder.pushCommandPart(chKey)
} else {
processBuilder.addExecutionStep { lambdaKeyState, lambdaEditor, _ ->
logger.trace("Invalid register, set command state to BAD_COMMAND")
KeyHandler.getInstance().setBadCommand(lambdaEditor, lambdaKeyState)
}
}
}
}