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:
parent
6741120f19
commit
1d9514a205
vim-engine/src/main/kotlin/com/maddyhome/idea/vim
@ -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,
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user