mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2025-04-30 13:34:04 +02:00
Update creation of execution context
This commit is contained in:
parent
897d393342
commit
0e96819e86
.idea/codeStyles
src/main/java/com/maddyhome/idea/vim
extension/replacewithregister
group
ChangeGroup.javaEditorGroup.javaFileGroup.javaMotionGroup.ktProcessGroup.javaSearchGroup.javaWindowGroup.java
helper
newapi
ui
vim-engine/src/main/kotlin/com/maddyhome/idea/vim
api
handler
key
vimscript/model/commands
@ -191,6 +191,10 @@
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="kotlin">
|
||||
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
</code_scheme>
|
||||
</component>
|
@ -35,7 +35,7 @@ import com.maddyhome.idea.vim.helper.mode
|
||||
import com.maddyhome.idea.vim.helper.subMode
|
||||
import com.maddyhome.idea.vim.helper.vimStateMachine
|
||||
import com.maddyhome.idea.vim.key.OperatorFunction
|
||||
import com.maddyhome.idea.vim.newapi.IjExecutionContext
|
||||
import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext
|
||||
import com.maddyhome.idea.vim.newapi.IjVimEditor
|
||||
import com.maddyhome.idea.vim.newapi.ij
|
||||
import com.maddyhome.idea.vim.newapi.vim
|
||||
@ -169,7 +169,7 @@ class ReplaceWithRegister : VimExtension {
|
||||
ClipboardOptionHelper.IdeaputDisabler().use {
|
||||
VimPlugin.getPut().putText(
|
||||
IjVimEditor(editor),
|
||||
IjExecutionContext(EditorDataContext.init(editor)),
|
||||
IjEditorExecutionContext(EditorDataContext.init(editor)),
|
||||
putData,
|
||||
operatorArguments = OperatorArguments(
|
||||
editor.vimStateMachine?.isOperatorPending ?: false,
|
||||
|
@ -45,8 +45,8 @@ import com.maddyhome.idea.vim.helper.*;
|
||||
import com.maddyhome.idea.vim.icons.VimIcons;
|
||||
import com.maddyhome.idea.vim.key.KeyHandlerKeeper;
|
||||
import com.maddyhome.idea.vim.listener.VimInsertListener;
|
||||
import com.maddyhome.idea.vim.newapi.IjExecutionContext;
|
||||
import com.maddyhome.idea.vim.newapi.IjExecutionContextKt;
|
||||
import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext;
|
||||
import com.maddyhome.idea.vim.newapi.IjEditorExecutionContextKt;
|
||||
import com.maddyhome.idea.vim.newapi.IjVimCaret;
|
||||
import com.maddyhome.idea.vim.newapi.IjVimEditor;
|
||||
import com.maddyhome.idea.vim.options.OptionConstants;
|
||||
@ -99,7 +99,7 @@ public class ChangeGroup extends VimChangeGroupBase {
|
||||
@Override
|
||||
public void type(@NotNull VimEditor vimEditor, @NotNull ExecutionContext context, char key) {
|
||||
Editor editor = ((IjVimEditor) vimEditor).getEditor();
|
||||
DataContext ijContext = IjExecutionContextKt.getIj(context);
|
||||
DataContext ijContext = IjEditorExecutionContextKt.getIj(context);
|
||||
final Document doc = ((IjVimEditor) vimEditor).getEditor().getDocument();
|
||||
CommandProcessor.getInstance().executeCommand(editor.getProject(), () -> ApplicationManager.getApplication()
|
||||
.runWriteAction(() -> KeyHandlerKeeper.getInstance().getOriginalHandler().execute(editor, key, ijContext)), "", doc,
|
||||
@ -116,7 +116,7 @@ public class ChangeGroup extends VimChangeGroupBase {
|
||||
final @NotNull Argument argument,
|
||||
boolean isChange,
|
||||
@NotNull OperatorArguments operatorArguments) {
|
||||
final TextRange range = MotionGroup.getMotionRange2(((IjVimEditor) editor).getEditor(), ((IjVimCaret) caret).getCaret(), ((IjExecutionContext) context).getContext(), argument, operatorArguments);
|
||||
final TextRange range = MotionGroup.getMotionRange2(((IjVimEditor) editor).getEditor(), ((IjVimCaret) caret).getCaret(), ((IjEditorExecutionContext) context).getContext(), argument, operatorArguments);
|
||||
if (range == null) return null;
|
||||
|
||||
// Delete motion commands that are not linewise become linewise if all the following are true:
|
||||
@ -210,7 +210,7 @@ public class ChangeGroup extends VimChangeGroupBase {
|
||||
|
||||
final int lineLength = EngineEditorHelperKt.lineLength(editor, line);
|
||||
if (column < VimMotionGroupBase.LAST_COLUMN && lineLength < column) {
|
||||
final String pad = EditorHelper.pad(((IjVimEditor) editor).getEditor(), ((IjExecutionContext) context).getContext(), line, column);
|
||||
final String pad = EditorHelper.pad(((IjVimEditor) editor).getEditor(), ((IjEditorExecutionContext) context).getContext(), line, column);
|
||||
final int offset = editor.getLineEndOffset(line);
|
||||
insertText(editor, caret, offset, pad);
|
||||
}
|
||||
@ -436,7 +436,7 @@ public class ChangeGroup extends VimChangeGroupBase {
|
||||
// Remember the current caret column
|
||||
final int intendedColumn = caret.getVimLastColumn();
|
||||
|
||||
IndentConfig indentConfig = IndentConfig.create(((IjVimEditor) editor).getEditor(), ((IjExecutionContext) context).getContext());
|
||||
IndentConfig indentConfig = IndentConfig.create(((IjVimEditor) editor).getEditor(), ((IjEditorExecutionContext) context).getContext());
|
||||
|
||||
final int sline = editor.offsetToBufferPosition(range.getStartOffset()).getLine();
|
||||
final BufferPosition endLogicalPosition = editor.offsetToBufferPosition(range.getEndOffset());
|
||||
|
@ -23,7 +23,7 @@ import com.maddyhome.idea.vim.VimPlugin;
|
||||
import com.maddyhome.idea.vim.api.VimEditor;
|
||||
import com.maddyhome.idea.vim.api.VimEditorGroup;
|
||||
import com.maddyhome.idea.vim.helper.*;
|
||||
import com.maddyhome.idea.vim.newapi.IjExecutionContext;
|
||||
import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext;
|
||||
import com.maddyhome.idea.vim.newapi.IjVimEditor;
|
||||
import com.maddyhome.idea.vim.options.LocalOptionChangeListener;
|
||||
import com.maddyhome.idea.vim.options.OptionConstants;
|
||||
@ -36,7 +36,6 @@ import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -215,7 +214,7 @@ public class EditorGroup implements PersistentStateComponent<Element>, VimEditor
|
||||
if (!EditorHelper.isFileEditor(editor) &&
|
||||
editor.getDocument().isWritable() &&
|
||||
!CommandStateHelper.inInsertMode(editor)) {
|
||||
VimPlugin.getChange().insertBeforeCursor(new IjVimEditor(editor), new IjExecutionContext(EditorDataContext.init(editor, null)));
|
||||
VimPlugin.getChange().insertBeforeCursor(new IjVimEditor(editor), new IjEditorExecutionContext(EditorDataContext.init(editor, null)));
|
||||
KeyHandler.getInstance().reset(new IjVimEditor(editor));
|
||||
}
|
||||
updateCaretsVisualAttributes(editor);
|
||||
|
@ -37,7 +37,7 @@ import com.maddyhome.idea.vim.helper.EditorHelperRt;
|
||||
import com.maddyhome.idea.vim.helper.MessageHelper;
|
||||
import com.maddyhome.idea.vim.helper.SearchHelper;
|
||||
import com.maddyhome.idea.vim.newapi.ExecuteExtensionKt;
|
||||
import com.maddyhome.idea.vim.newapi.IjExecutionContext;
|
||||
import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext;
|
||||
import com.maddyhome.idea.vim.newapi.IjVimEditor;
|
||||
import com.maddyhome.idea.vim.vimscript.services.IjOptionConstants;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@ -54,7 +54,7 @@ public class FileGroup extends VimFileBase {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("openFile(" + filename + ")");
|
||||
}
|
||||
final Project project = PlatformDataKeys.PROJECT.getData(((IjExecutionContext) context).getContext()); // API change - don't merge
|
||||
final Project project = PlatformDataKeys.PROJECT.getData(((IjEditorExecutionContext) context).getContext()); // API change - don't merge
|
||||
if (project == null) return false;
|
||||
|
||||
VirtualFile found = findFile(filename, project);
|
||||
@ -165,7 +165,7 @@ public class FileGroup extends VimFileBase {
|
||||
*/
|
||||
@Override
|
||||
public void closeFile(int number, @NotNull ExecutionContext context) {
|
||||
final Project project = PlatformDataKeys.PROJECT.getData(((IjExecutionContext) context).getContext());
|
||||
final Project project = PlatformDataKeys.PROJECT.getData(((IjEditorExecutionContext) context).getContext());
|
||||
if (project == null) return;
|
||||
final FileEditorManagerEx fileEditorManager = FileEditorManagerEx.getInstanceEx(project);
|
||||
final EditorWindow window = fileEditorManager.getCurrentWindow();
|
||||
@ -207,7 +207,7 @@ public class FileGroup extends VimFileBase {
|
||||
*/
|
||||
@Override
|
||||
public boolean selectFile(int count, @NotNull ExecutionContext context) {
|
||||
final Project project = PlatformDataKeys.PROJECT.getData(((IjExecutionContext) context).getContext());
|
||||
final Project project = PlatformDataKeys.PROJECT.getData(((IjEditorExecutionContext) context).getContext());
|
||||
if (project == null) return false;
|
||||
FileEditorManager fem = FileEditorManager.getInstance(project); // API change - don't merge
|
||||
VirtualFile[] editors = fem.getOpenFiles();
|
||||
@ -227,7 +227,7 @@ public class FileGroup extends VimFileBase {
|
||||
* Selects then next or previous editor.
|
||||
*/
|
||||
public void selectNextFile(int count, @NotNull ExecutionContext context) {
|
||||
Project project = PlatformDataKeys.PROJECT.getData(((IjExecutionContext) context).getContext());
|
||||
Project project = PlatformDataKeys.PROJECT.getData(((IjEditorExecutionContext) context).getContext());
|
||||
if (project == null) return;
|
||||
FileEditorManager fem = FileEditorManager.getInstance(project); // API change - don't merge
|
||||
VirtualFile[] editors = fem.getOpenFiles();
|
||||
|
@ -66,7 +66,7 @@ import com.maddyhome.idea.vim.helper.isEndAllowed
|
||||
import com.maddyhome.idea.vim.helper.vimLastColumn
|
||||
import com.maddyhome.idea.vim.listener.AppCodeTemplates
|
||||
import com.maddyhome.idea.vim.mark.Mark
|
||||
import com.maddyhome.idea.vim.newapi.IjExecutionContext
|
||||
import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext
|
||||
import com.maddyhome.idea.vim.newapi.IjVimCaret
|
||||
import com.maddyhome.idea.vim.newapi.IjVimEditor
|
||||
import com.maddyhome.idea.vim.newapi.ij
|
||||
@ -366,7 +366,7 @@ class MotionGroup : VimMotionGroupBase() {
|
||||
val motion = action.getHandlerOffset(
|
||||
editor.vim,
|
||||
caret.vim,
|
||||
IjExecutionContext(context!!),
|
||||
IjEditorExecutionContext(context!!),
|
||||
cmd.argument,
|
||||
operatorArguments.withCount0(raw)
|
||||
)
|
||||
@ -387,7 +387,7 @@ class MotionGroup : VimMotionGroupBase() {
|
||||
} else if (cmd.action is TextObjectActionHandler) {
|
||||
val action = cmd.action as TextObjectActionHandler
|
||||
val range =
|
||||
action.getRange(editor.vim, caret.vim, IjExecutionContext(context!!), cnt, raw, cmd.argument) ?: return null
|
||||
action.getRange(editor.vim, caret.vim, IjEditorExecutionContext(context!!), cnt, raw, cmd.argument) ?: return null
|
||||
start = range.startOffset
|
||||
end = range.endOffset
|
||||
if (cmd.isLinewiseMotion()) end--
|
||||
|
@ -34,7 +34,7 @@ import com.maddyhome.idea.vim.command.VimStateMachine;
|
||||
import com.maddyhome.idea.vim.ex.ExException;
|
||||
import com.maddyhome.idea.vim.ex.InvalidCommandException;
|
||||
import com.maddyhome.idea.vim.helper.UiHelper;
|
||||
import com.maddyhome.idea.vim.newapi.IjExecutionContext;
|
||||
import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext;
|
||||
import com.maddyhome.idea.vim.newapi.IjVimEditor;
|
||||
import com.maddyhome.idea.vim.options.OptionConstants;
|
||||
import com.maddyhome.idea.vim.ui.ex.ExEntryPanel;
|
||||
@ -84,7 +84,7 @@ public class ProcessGroup extends VimProcessGroupBase {
|
||||
String initText = getRange(((IjVimEditor) editor).getEditor(), cmd);
|
||||
VimStateMachine.getInstance(editor).pushModes(VimStateMachine.Mode.CMD_LINE, VimStateMachine.SubMode.NONE);
|
||||
ExEntryPanel panel = ExEntryPanel.getInstance();
|
||||
panel.activate(((IjVimEditor) editor).getEditor(), ((IjExecutionContext) context).getContext(), ":", initText, 1);
|
||||
panel.activate(((IjVimEditor) editor).getEditor(), ((IjEditorExecutionContext) context).getContext(), ":", initText, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -159,7 +159,7 @@ public class ProcessGroup extends VimProcessGroupBase {
|
||||
String initText = getRange(((IjVimEditor) editor).getEditor(), cmd) + "!";
|
||||
VimStateMachine.getInstance(editor).pushModes(VimStateMachine.Mode.CMD_LINE, VimStateMachine.SubMode.NONE);
|
||||
ExEntryPanel panel = ExEntryPanel.getInstance();
|
||||
panel.activate(((IjVimEditor) editor).getEditor(), ((IjExecutionContext) context).getContext(), ":", initText, 1);
|
||||
panel.activate(((IjVimEditor) editor).getEditor(), ((IjEditorExecutionContext) context).getContext(), ":", initText, 1);
|
||||
}
|
||||
|
||||
private @NotNull String getRange(Editor editor, @NotNull Command cmd) {
|
||||
|
@ -33,7 +33,7 @@ import com.maddyhome.idea.vim.ex.ExException;
|
||||
import com.maddyhome.idea.vim.ex.ranges.LineRange;
|
||||
import com.maddyhome.idea.vim.helper.*;
|
||||
import com.maddyhome.idea.vim.history.HistoryConstants;
|
||||
import com.maddyhome.idea.vim.newapi.IjExecutionContext;
|
||||
import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext;
|
||||
import com.maddyhome.idea.vim.newapi.IjVimCaret;
|
||||
import com.maddyhome.idea.vim.newapi.IjVimEditor;
|
||||
import com.maddyhome.idea.vim.options.OptionChangeListener;
|
||||
@ -803,7 +803,7 @@ public class SearchGroup extends VimSearchGroupBase implements PersistentStateCo
|
||||
if (expression != null) {
|
||||
try {
|
||||
match = expression
|
||||
.evaluate(editor, new IjExecutionContext(EditorDataContext.init(((IjVimEditor) editor).getEditor(), null)), parent)
|
||||
.evaluate(editor, new IjEditorExecutionContext(EditorDataContext.init(((IjVimEditor) editor).getEditor(), null)), parent)
|
||||
.toInsertableString();
|
||||
} catch (Exception e) {
|
||||
exceptions.add((ExException) e);
|
||||
|
@ -20,7 +20,7 @@ import com.maddyhome.idea.vim.VimPlugin;
|
||||
import com.maddyhome.idea.vim.api.ExecutionContext;
|
||||
import com.maddyhome.idea.vim.helper.MessageHelper;
|
||||
import com.maddyhome.idea.vim.helper.RWLockLabel;
|
||||
import com.maddyhome.idea.vim.newapi.IjExecutionContext;
|
||||
import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@ -51,7 +51,7 @@ public class WindowGroup extends WindowGroupBase {
|
||||
}
|
||||
|
||||
public void closeAll(@NotNull ExecutionContext context) {
|
||||
getFileEditorManager(((IjExecutionContext) context).getContext()).closeAllFiles();
|
||||
getFileEditorManager(((IjEditorExecutionContext) context).getContext()).closeAllFiles();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -31,6 +31,7 @@ import com.maddyhome.idea.vim.api.ExecutionContext
|
||||
import com.maddyhome.idea.vim.api.NativeAction
|
||||
import com.maddyhome.idea.vim.api.VimActionExecutor
|
||||
import com.maddyhome.idea.vim.api.VimEditor
|
||||
import com.maddyhome.idea.vim.api.injector
|
||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||
import com.maddyhome.idea.vim.handler.EditorActionHandlerBase
|
||||
import com.maddyhome.idea.vim.newapi.IjNativeAction
|
||||
@ -163,7 +164,7 @@ class IjActionExecutor : VimActionExecutor {
|
||||
CommandProcessor.getInstance()
|
||||
.executeCommand(
|
||||
editor.ij.project,
|
||||
{ cmd.execute(editor, EditorDataContext.init(editor.ij, context.ij).vim, operatorArguments) },
|
||||
{ cmd.execute(editor, injector.executionContextManager.onEditor(editor, context), operatorArguments) },
|
||||
cmd.id, DocCommandGroupId.noneGroupId(editor.ij.document), UndoConfirmationPolicy.DEFAULT,
|
||||
editor.ij.document
|
||||
)
|
||||
|
@ -19,7 +19,7 @@ import com.maddyhome.idea.vim.api.getLineStartForOffset
|
||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||
import com.maddyhome.idea.vim.command.VimStateMachine
|
||||
import com.maddyhome.idea.vim.listener.SelectionVimListenerSuppressor
|
||||
import com.maddyhome.idea.vim.newapi.IjExecutionContext
|
||||
import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext
|
||||
import com.maddyhome.idea.vim.newapi.IjVimCaret
|
||||
import com.maddyhome.idea.vim.newapi.IjVimEditor
|
||||
import com.maddyhome.idea.vim.newapi.vim
|
||||
@ -76,5 +76,5 @@ fun VimEditor.exitSelectMode(adjustCaretPosition: Boolean) {
|
||||
}
|
||||
|
||||
fun Editor.exitInsertMode(context: DataContext, operatorArguments: OperatorArguments) {
|
||||
VimPlugin.getChange().processEscape(IjVimEditor(this), IjExecutionContext(context), operatorArguments)
|
||||
VimPlugin.getChange().processEscape(IjVimEditor(this), IjEditorExecutionContext(context), operatorArguments)
|
||||
}
|
||||
|
@ -13,14 +13,16 @@ import com.maddyhome.idea.vim.api.ExecutionContext
|
||||
import com.maddyhome.idea.vim.api.VimEditor
|
||||
import com.maddyhome.idea.vim.helper.EditorDataContext
|
||||
|
||||
class IjExecutionContext(override val context: DataContext) : ExecutionContext {
|
||||
open class IjEditorExecutionContext(override val context: DataContext) : ExecutionContext.Editor {
|
||||
override fun updateEditor(editor: VimEditor): ExecutionContext {
|
||||
return IjExecutionContext(EditorDataContext.init((editor as IjVimEditor).editor, context))
|
||||
return IjEditorExecutionContext(EditorDataContext.init((editor as IjVimEditor).editor, context))
|
||||
}
|
||||
}
|
||||
|
||||
val DataContext.vim
|
||||
get() = IjExecutionContext(this)
|
||||
class IjCaretAndEditorExecutionContext(override val context: DataContext) : IjEditorExecutionContext(context), ExecutionContext.CaretAndEditor
|
||||
|
||||
val DataContext.vim: ExecutionContext
|
||||
get() = IjEditorExecutionContext(this)
|
||||
|
||||
val ExecutionContext.ij: DataContext
|
||||
get() = (this as IjExecutionContext).context
|
||||
get() = (this as IjEditorExecutionContext).context
|
@ -15,22 +15,20 @@ import com.maddyhome.idea.vim.api.ExecutionContextManagerBase
|
||||
import com.maddyhome.idea.vim.api.VimCaret
|
||||
import com.maddyhome.idea.vim.api.VimEditor
|
||||
import com.maddyhome.idea.vim.helper.EditorDataContext
|
||||
import com.maddyhome.idea.vim.options.helpers.StrictMode
|
||||
|
||||
@Service
|
||||
class IjExecutionContextManager : ExecutionContextManagerBase() {
|
||||
override fun onEditor(editor: VimEditor, prevContext: ExecutionContext?): ExecutionContext {
|
||||
return IjExecutionContext(EditorDataContext.init((editor as IjVimEditor).editor, prevContext?.ij))
|
||||
override fun onEditor(editor: VimEditor, prevContext: ExecutionContext?): ExecutionContext.Editor {
|
||||
if (prevContext is ExecutionContext.CaretAndEditor) {
|
||||
StrictMode.fail("You should not create context on editor from the context on caret and editor")
|
||||
prevContext.updateEditor(editor)
|
||||
return prevContext
|
||||
}
|
||||
return IjEditorExecutionContext(EditorDataContext.init((editor as IjVimEditor).editor, prevContext?.ij))
|
||||
}
|
||||
|
||||
override fun onCaret(caret: VimCaret, prevContext: ExecutionContext): ExecutionContext {
|
||||
return IjExecutionContext(CaretSpecificDataContext.create(prevContext.ij, caret.ij))
|
||||
}
|
||||
|
||||
override fun createCaretSpecificDataContext(context: ExecutionContext, caret: VimCaret): ExecutionContext {
|
||||
return IjExecutionContext(CaretSpecificDataContext.create(context.ij, caret.ij))
|
||||
}
|
||||
|
||||
override fun createEditorDataContext(editor: VimEditor, context: ExecutionContext): ExecutionContext {
|
||||
return EditorDataContext.init(editor.ij, context.ij).vim
|
||||
override fun onCaret(caret: VimCaret, prevContext: ExecutionContext.Editor): ExecutionContext.CaretAndEditor {
|
||||
return IjCaretAndEditorExecutionContext(CaretSpecificDataContext.create(prevContext.ij, caret.ij))
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ import com.intellij.util.IJSwingUtilities;
|
||||
import com.maddyhome.idea.vim.KeyHandler;
|
||||
import com.maddyhome.idea.vim.VimPlugin;
|
||||
import com.maddyhome.idea.vim.helper.*;
|
||||
import com.maddyhome.idea.vim.newapi.IjExecutionContext;
|
||||
import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext;
|
||||
import com.maddyhome.idea.vim.newapi.IjVimEditor;
|
||||
import com.maddyhome.idea.vim.options.OptionConstants;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
@ -296,7 +296,7 @@ public class ExOutputPanel extends JPanel {
|
||||
final List<KeyStroke> keys = new ArrayList<>(1);
|
||||
keys.add(key);
|
||||
KeyHandler.getInstance().getKeyStack().addKeys(keys);
|
||||
VimPlugin.getMacro().playbackKeys(new IjVimEditor(myEditor), new IjExecutionContext(EditorDataContext.init(myEditor, null)),
|
||||
VimPlugin.getMacro().playbackKeys(new IjVimEditor(myEditor), new IjEditorExecutionContext(EditorDataContext.init(myEditor, null)),
|
||||
1);
|
||||
}
|
||||
});
|
||||
|
@ -12,16 +12,17 @@ package com.maddyhome.idea.vim.api
|
||||
* This would be ideal if we could provide a typed solution, but sofar this is just a holder
|
||||
*/
|
||||
|
||||
interface ExecutionContext {
|
||||
sealed interface ExecutionContext {
|
||||
val context: Any
|
||||
|
||||
// TODO: 10.02.2022 Not sure about this method
|
||||
fun updateEditor(editor: VimEditor): ExecutionContext
|
||||
|
||||
interface Editor : ExecutionContext
|
||||
interface CaretAndEditor : Editor
|
||||
}
|
||||
|
||||
interface ExecutionContextManager {
|
||||
fun onEditor(editor: VimEditor, prevContext: ExecutionContext? = null): ExecutionContext
|
||||
fun onCaret(caret: VimCaret, prevContext: ExecutionContext): ExecutionContext
|
||||
fun createCaretSpecificDataContext(context: ExecutionContext, caret: VimCaret): ExecutionContext
|
||||
fun createEditorDataContext(editor: VimEditor, context: ExecutionContext): ExecutionContext
|
||||
fun onEditor(editor: VimEditor, prevContext: ExecutionContext? = null): ExecutionContext.Editor
|
||||
fun onCaret(caret: VimCaret, prevContext: ExecutionContext.Editor): ExecutionContext.CaretAndEditor
|
||||
}
|
||||
|
@ -19,19 +19,11 @@ class ExecutionContextManagerStub : ExecutionContextManager {
|
||||
vimLogger<ExecutionContextManagerStub>().warn("ExecutionContextManagerStub is used. Please replace it with your own implementation of ExecutionContextManager.")
|
||||
}
|
||||
|
||||
override fun onEditor(editor: VimEditor, prevContext: ExecutionContext?): ExecutionContext {
|
||||
override fun onEditor(editor: VimEditor, prevContext: ExecutionContext?): ExecutionContext.Editor {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun onCaret(caret: VimCaret, prevContext: ExecutionContext): ExecutionContext {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun createCaretSpecificDataContext(context: ExecutionContext, caret: VimCaret): ExecutionContext {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun createEditorDataContext(editor: VimEditor, context: ExecutionContext): ExecutionContext {
|
||||
override fun onCaret(caret: VimCaret, prevContext: ExecutionContext.Editor): ExecutionContext.CaretAndEditor {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
}
|
||||
|
@ -74,7 +74,7 @@ abstract class EditorActionHandlerBase(private val myRunForEachCaret: Boolean) {
|
||||
operatorArguments: OperatorArguments,
|
||||
): Boolean
|
||||
|
||||
fun execute(editor: VimEditor, context: ExecutionContext, operatorArguments: OperatorArguments) {
|
||||
fun execute(editor: VimEditor, context: ExecutionContext.Editor, operatorArguments: OperatorArguments) {
|
||||
val action = { caret: VimCaret -> doExecute(editor, caret, context, operatorArguments) }
|
||||
if (myRunForEachCaret) {
|
||||
editor.forEachCaret(action)
|
||||
@ -83,7 +83,7 @@ abstract class EditorActionHandlerBase(private val myRunForEachCaret: Boolean) {
|
||||
}
|
||||
}
|
||||
|
||||
private fun doExecute(editor: VimEditor, caret: VimCaret, context: ExecutionContext, operatorArguments: OperatorArguments) {
|
||||
private fun doExecute(editor: VimEditor, caret: VimCaret, context: ExecutionContext.Editor, operatorArguments: OperatorArguments) {
|
||||
if (!injector.enabler.isEnabled()) return
|
||||
|
||||
logger.debug("Execute command with handler: " + this.javaClass.name)
|
||||
|
@ -243,7 +243,7 @@ class ToActionMappingInfo(
|
||||
override fun execute(editor: VimEditor, context: ExecutionContext) {
|
||||
LOG.debug("Executing 'ToAction' mapping...")
|
||||
val editorDataContext = injector.executionContextManager.onEditor(editor, context)
|
||||
val dataContext = injector.executionContextManager.createCaretSpecificDataContext(editorDataContext, editor.currentCaret())
|
||||
val dataContext = injector.executionContextManager.onCaret(editor.currentCaret(), editorDataContext)
|
||||
injector.actionExecutor.executeAction(action, dataContext)
|
||||
}
|
||||
|
||||
|
@ -36,7 +36,7 @@ data class EditFileCommand(val ranges: Ranges, val argument: String) : Command.S
|
||||
|
||||
// Don't open a choose file dialog under a write action
|
||||
injector.application.invokeLater {
|
||||
injector.actionExecutor.executeAction("OpenFile", injector.executionContextManager.createEditorDataContext(editor, context))
|
||||
injector.actionExecutor.executeAction("OpenFile", injector.executionContextManager.onEditor(editor, context))
|
||||
}
|
||||
|
||||
return ExecutionResult.Success
|
||||
|
Loading…
Reference in New Issue
Block a user