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

Add an editor to the action executor

This commit is contained in:
Alex Plate 2022-12-02 11:52:39 +02:00
parent 27be351636
commit 42eefb763b
No known key found for this signature in database
GPG Key ID: 0B97153C8FFEC09F
11 changed files with 28 additions and 31 deletions
src/main/java/com/maddyhome/idea/vim
vim-engine/src/main/kotlin/com/maddyhome/idea/vim

View File

@ -137,7 +137,7 @@ class NerdTree : VimExtension {
class IjCommandHandler(private val actionId: String) : CommandAliasHandler { class IjCommandHandler(private val actionId: String) : CommandAliasHandler {
override fun execute(command: String, ranges: Ranges, editor: VimEditor, context: ExecutionContext) { override fun execute(command: String, ranges: Ranges, editor: VimEditor, context: ExecutionContext) {
callAction(actionId, context) callAction(editor, actionId, context)
} }
} }
@ -148,7 +148,7 @@ class NerdTree : VimExtension {
if (toolWindow.isVisible) { if (toolWindow.isVisible) {
toolWindow.hide() toolWindow.hide()
} else { } else {
callAction("ActivateProjectToolWindow", context) callAction(editor, "ActivateProjectToolWindow", context)
} }
} }
} }
@ -210,7 +210,7 @@ class NerdTree : VimExtension {
val action = nextNode.actionHolder val action = nextNode.actionHolder
when (action) { when (action) {
is NerdAction.ToIj -> callAction(action.name, e.dataContext.vim) is NerdAction.ToIj -> callAction(null, action.name, e.dataContext.vim)
is NerdAction.Code -> e.project?.let { action.action(it, e.dataContext, e) } is NerdAction.Code -> e.project?.let { action.action(it, e.dataContext, e) }
} }
} }
@ -348,7 +348,7 @@ class NerdTree : VimExtension {
currentWindow?.split(SwingConstants.VERTICAL, true, file, true) currentWindow?.split(SwingConstants.VERTICAL, true, file, true)
// FIXME: 22.01.2021 This solution bouncing a bit // FIXME: 22.01.2021 This solution bouncing a bit
callAction("ActivateProjectToolWindow", context.vim) callAction(null, "ActivateProjectToolWindow", context.vim)
} }
) )
registerCommand( registerCommand(
@ -359,7 +359,7 @@ class NerdTree : VimExtension {
val currentWindow = splitters.currentWindow val currentWindow = splitters.currentWindow
currentWindow?.split(SwingConstants.HORIZONTAL, true, file, true) currentWindow?.split(SwingConstants.HORIZONTAL, true, file, true)
callAction("ActivateProjectToolWindow", context.vim) callAction(null, "ActivateProjectToolWindow", context.vim)
} }
) )
registerCommand( registerCommand(
@ -497,20 +497,17 @@ class NerdTree : VimExtension {
private val LOG = logger<NerdTree>() private val LOG = logger<NerdTree>()
fun callAction(name: String, context: ExecutionContext) { fun callAction(editor: VimEditor?, name: String, context: ExecutionContext) {
val action = ActionManager.getInstance().getAction(name) ?: run { val action = ActionManager.getInstance().getAction(name) ?: run {
VimPlugin.showMessage(MessageHelper.message("action.not.found.0", name)) VimPlugin.showMessage(MessageHelper.message("action.not.found.0", name))
return return
} }
val application = ApplicationManager.getApplication() val application = ApplicationManager.getApplication()
if (application.isUnitTestMode) { if (application.isUnitTestMode) {
injector.actionExecutor.executeAction(action.vim, context) injector.actionExecutor.executeAction(editor, action.vim, context)
} else { } else {
runAfterGotFocus { runAfterGotFocus {
injector.actionExecutor.executeAction( injector.actionExecutor.executeAction(editor, action.vim, context)
action.vim,
context,
)
} }
} }
} }

View File

@ -383,7 +383,7 @@ public class ChangeGroup extends VimChangeGroupBase {
Function0<Unit> actionExecution = () -> { Function0<Unit> actionExecution = () -> {
NativeAction joinLinesAction = VimInjectorKt.getInjector().getNativeActionManager().getIndentLines(); NativeAction joinLinesAction = VimInjectorKt.getInjector().getNativeActionManager().getIndentLines();
if (joinLinesAction != null) { if (joinLinesAction != null) {
VimInjectorKt.getInjector().getActionExecutor().executeAction(joinLinesAction, context); VimInjectorKt.getInjector().getActionExecutor().executeAction(editor, joinLinesAction, context);
} }
return null; return null;
}; };

View File

@ -62,7 +62,7 @@ class IjActionExecutor : VimActionExecutor {
* @param ijAction The action to execute * @param ijAction The action to execute
* @param context The context to run it in * @param context The context to run it in
*/ */
override fun executeAction(action: NativeAction, context: ExecutionContext): Boolean { override fun executeAction(editor: VimEditor?, action: NativeAction, context: ExecutionContext): Boolean {
val ijAction = (action as IjNativeAction).action val ijAction = (action as IjNativeAction).action
val event = AnActionEvent( val event = AnActionEvent(
null, context.ij, ActionPlaces.KEYBOARD_SHORTCUT, ijAction.templatePresentation.clone(), null, context.ij, ActionPlaces.KEYBOARD_SHORTCUT, ijAction.templatePresentation.clone(),
@ -138,7 +138,7 @@ class IjActionExecutor : VimActionExecutor {
override fun executeAction(name: @NonNls String, context: ExecutionContext): Boolean { override fun executeAction(name: @NonNls String, context: ExecutionContext): Boolean {
val aMgr = ActionManager.getInstance() val aMgr = ActionManager.getInstance()
val action = aMgr.getAction(name) val action = aMgr.getAction(name)
return action != null && executeAction(IjNativeAction(action), context) return action != null && executeAction(null, IjNativeAction(action), context)
} }
override fun executeCommand( override fun executeCommand(

View File

@ -16,7 +16,7 @@ import com.maddyhome.idea.vim.api.injector
fun NativeAction?.execute(context: ExecutionContext) { fun NativeAction?.execute(context: ExecutionContext) {
if (this == null) return if (this == null) return
injector.actionExecutor.executeAction(this, context) injector.actionExecutor.executeAction(null, this, context)
} }
val VisualPosition.vim: VimVisualPosition val VisualPosition.vim: VimVisualPosition

View File

@ -34,7 +34,7 @@ class CtrlDownAction : VimActionHandler.SingleExecution() {
val keyStroke = keySet.first().first() val keyStroke = keySet.first().first()
val actions = injector.keyGroup.getKeymapConflicts(keyStroke) val actions = injector.keyGroup.getKeymapConflicts(keyStroke)
for (action in actions) { for (action in actions) {
if (injector.actionExecutor.executeAction(action, context)) break if (injector.actionExecutor.executeAction(editor, action, context)) break
} }
return true return true
} }
@ -55,7 +55,7 @@ class CtrlUpAction : VimActionHandler.SingleExecution() {
val keyStroke = keySet.first().first() val keyStroke = keySet.first().first()
val actions = injector.keyGroup.getKeymapConflicts(keyStroke) val actions = injector.keyGroup.getKeymapConflicts(keyStroke)
for (action in actions) { for (action in actions) {
if (injector.actionExecutor.executeAction(action, context)) break if (injector.actionExecutor.executeAction(editor, action, context)) break
} }
return true return true
} }

View File

@ -34,7 +34,7 @@ class SelectDeleteAction : VimActionHandler.SingleExecution() {
val enterKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0) val enterKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0)
val actions = injector.keyGroup.getActions(editor, enterKeyStroke) val actions = injector.keyGroup.getActions(editor, enterKeyStroke)
for (action in actions) { for (action in actions) {
if (injector.actionExecutor.executeAction(action, context)) { if (injector.actionExecutor.executeAction(editor, action, context)) {
break break
} }
} }

View File

@ -37,7 +37,7 @@ class LookupDownAction : VimActionHandler.SingleExecution() {
val keyStroke = keySet.first().first() val keyStroke = keySet.first().first()
val actions = injector.keyGroup.getKeymapConflicts(keyStroke) val actions = injector.keyGroup.getKeymapConflicts(keyStroke)
for (action in actions) { for (action in actions) {
if (injector.actionExecutor.executeAction(action, context)) break if (injector.actionExecutor.executeAction(editor, action, context)) break
} }
} }
return true return true

View File

@ -37,7 +37,7 @@ class LookupUpAction : VimActionHandler.SingleExecution() {
val keyStroke = keySet.first().first() val keyStroke = keySet.first().first()
val actions = injector.keyGroup.getKeymapConflicts(keyStroke) val actions = injector.keyGroup.getKeymapConflicts(keyStroke)
for (action in actions) { for (action in actions) {
if (injector.actionExecutor.executeAction(action, context)) break if (injector.actionExecutor.executeAction(editor, action, context)) break
} }
} }
return true return true

View File

@ -27,7 +27,7 @@ interface VimActionExecutor {
* @param action The action to execute * @param action The action to execute
* @param context The context to run it in * @param context The context to run it in
*/ */
fun executeAction(action: NativeAction, context: ExecutionContext): Boolean fun executeAction(editor: VimEditor?, action: NativeAction, context: ExecutionContext): Boolean
/** /**
* Execute an action by name * Execute an action by name

View File

@ -231,7 +231,7 @@ abstract class VimChangeGroupBase : VimChangeGroup {
for (lastStroke in myLastStrokes) { for (lastStroke in myLastStrokes) {
when (lastStroke) { when (lastStroke) {
is NativeAction -> { is NativeAction -> {
injector.actionExecutor.executeAction(lastStroke, context) injector.actionExecutor.executeAction(editor, lastStroke, context)
strokes.add(lastStroke) strokes.add(lastStroke)
} }
@ -478,7 +478,7 @@ abstract class VimChangeGroupBase : VimChangeGroup {
val action = injector.nativeActionManager.enterAction val action = injector.nativeActionManager.enterAction
if (action != null) { if (action != null) {
strokes.add(action) strokes.add(action)
injector.actionExecutor.executeAction(action, context) injector.actionExecutor.executeAction(editor, action, context)
} }
} }
} }
@ -490,7 +490,7 @@ abstract class VimChangeGroupBase : VimChangeGroup {
val action = injector.nativeActionManager.createLineAboveCaret val action = injector.nativeActionManager.createLineAboveCaret
if (action != null) { if (action != null) {
strokes.add(action) strokes.add(action)
injector.actionExecutor.executeAction(action, context) injector.actionExecutor.executeAction(editor, action, context)
} }
} }
} }
@ -590,7 +590,7 @@ abstract class VimChangeGroupBase : VimChangeGroup {
val enterKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0) val enterKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0)
val actions = injector.keyGroup.getActions(editor, enterKeyStroke) val actions = injector.keyGroup.getActions(editor, enterKeyStroke)
for (action in actions) { for (action in actions) {
if (injector.actionExecutor.executeAction(action, context)) { if (injector.actionExecutor.executeAction(editor, action, context)) {
break break
} }
} }
@ -796,7 +796,7 @@ abstract class VimChangeGroupBase : VimChangeGroup {
for (i in 0 until executions) { for (i in 0 until executions) {
val joinLinesAction = injector.nativeActionManager.joinLines val joinLinesAction = injector.nativeActionManager.joinLines
if (joinLinesAction != null) { if (joinLinesAction != null) {
injector.actionExecutor.executeAction(joinLinesAction, context) injector.actionExecutor.executeAction(editor, joinLinesAction, context)
} }
} }
return true return true
@ -841,7 +841,7 @@ abstract class VimChangeGroupBase : VimChangeGroup {
} }
val joinLinesAction = injector.nativeActionManager.joinLines val joinLinesAction = injector.nativeActionManager.joinLines
if (joinLinesAction != null) { if (joinLinesAction != null) {
injector.actionExecutor.executeAction(joinLinesAction, context) injector.actionExecutor.executeAction(editor, joinLinesAction, context)
} }
editor.nativeCarets().forEach { caret: VimCaret -> editor.nativeCarets().forEach { caret: VimCaret ->
caret.removeSelection() caret.removeSelection()

View File

@ -33,14 +33,14 @@ data class ActionCommand(val ranges: Ranges, val argument: String) : Command.Sin
val actionName = argument.trim() val actionName = argument.trim()
val action = injector.actionExecutor.getAction(actionName) ?: throw ExException(injector.messages.message("action.not.found.0", actionName)) val action = injector.actionExecutor.getAction(actionName) ?: throw ExException(injector.messages.message("action.not.found.0", actionName))
if (injector.application.isUnitTest()) { if (injector.application.isUnitTest()) {
executeAction(action, context) executeAction(editor, action, context)
} else { } else {
injector.application.runAfterGotFocus { executeAction(action, context) } injector.application.runAfterGotFocus { executeAction(editor, action, context) }
} }
return ExecutionResult.Success return ExecutionResult.Success
} }
private fun executeAction(action: NativeAction, context: ExecutionContext) { private fun executeAction(editor: VimEditor, action: NativeAction, context: ExecutionContext) {
injector.actionExecutor.executeAction(action, context) injector.actionExecutor.executeAction(editor, action, context)
} }
} }