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