/** * Inserts text into the document * * @param editor The editor to insert into * @param caret The caret to start insertion in * @param str The text to insert */ public void insertText(@NotNull Editor editor, @NotNull Caret caret, @NotNull String str) { int start = caret.getOffset(); editor.getDocument().insertString(start, str); caret.moveToOffset(start + str.length()); VimPlugin.getMark().setMark(editor, MarkGroup.MARK_CHANGE_POS, start); }
caret.moveToOffset(offset + 1); insertText(editor, caret, space); int slen = space.length(); slen++; caret.moveToOffset(offset + slen);
caret.moveToOffset(range.getStartOffset() + number.length() - 1);
@Override public boolean apply(@NotNull Editor editor, @NotNull DataContext context, @NotNull SelectionType selectionType) { final char c = getChar(editor); if (c == 0) { return true; } final Pair<String, String> pair = getOrInputPair(c, editor); if (pair == null) { return false; } // XXX: Will it work with line-wise or block-wise selections? final TextRange range = getSurroundRange(editor); if (range == null) { return false; } WriteAction.run(() -> { final ChangeGroup change = VimPlugin.getChange(); final String leftSurround = pair.getFirst(); final Caret primaryCaret = editor.getCaretModel().getPrimaryCaret(); primaryCaret.moveToOffset(range.getStartOffset()); change.insertText(editor, primaryCaret, leftSurround); primaryCaret.moveToOffset(range.getEndOffset() + leftSurround.length()); change.insertText(editor, primaryCaret, pair.getSecond()); // Jump back to start executeNormal(parseKeys("`["), editor); }); return true; }
@Override public boolean execute(@NotNull Editor editor, @NotNull DataContext context, @NotNull ExCommand cmd) throws ExException { final String arg = cmd.getArgument(); final boolean nonEmptyArg = arg.trim().length() > 0; final boolean reverse = nonEmptyArg && arg.contains("!"); final boolean ignoreCase = nonEmptyArg && arg.contains("i"); final boolean number = nonEmptyArg && arg.contains("n"); final Comparator<String> lineComparator = new LineComparator(ignoreCase, number, reverse); if (CommandState.getInstance(editor).getSubMode() == CommandState.SubMode.VISUAL_BLOCK) { final Caret primaryCaret = editor.getCaretModel().getPrimaryCaret(); final LineRange range = getLineRange(editor, primaryCaret, context, cmd); final boolean worked = VimPlugin.getChange().sortRange(editor, range, lineComparator); primaryCaret.moveToOffset(VimPlugin.getMotion().moveCaretToLineStartSkipLeading(editor, range.getStartLine())); return worked; } boolean worked = true; for (Caret caret : editor.getCaretModel().getAllCarets()) { final LineRange range = getLineRange(editor, caret, context, cmd); if (!VimPlugin.getChange().sortRange(editor, range, lineComparator)) { worked = false; } caret.moveToOffset(VimPlugin.getMotion().moveCaretToLineStartSkipLeading(editor, range.getStartLine())); } return worked; }
public static void moveCaret(@NotNull Editor editor, @NotNull Caret caret, int offset, boolean forceKeepVisual) { if (offset >= 0 && offset <= editor.getDocument().getTextLength()) { final boolean keepVisual = forceKeepVisual || keepVisual(editor); if (caret.getOffset() != offset) { caret.moveToOffset(offset); CaretData.setLastColumn(editor, caret, caret.getVisualPosition().column); if (caret == editor.getCaretModel().getPrimaryCaret()) { scrollCaretIntoView(editor); } } if (keepVisual) { VimPlugin.getMotion().updateSelection(editor, caret, offset); } else { editor.getSelectionModel().removeSelection(); } } }
final String pad = EditorHelper.pad(editor, context, line, column); final int offset = editor.getDocument().getLineEndOffset(line); caret.moveToOffset(offset); insertText(editor, caret, pad); caret.moveToOffset(editor.logicalPositionToOffset(new LogicalPosition(line, column)));
caret.moveToOffset(start);
if (pad.length() > 0) { final int offset = editor.getDocument().getLineEndOffset(logicalLine + i); caret.moveToOffset(offset); insertText(editor, caret, pad); caret.moveToOffset(VimPlugin.getMotion().moveCaretToLineEnd(editor, logicalLine + i, true)); repeatInsertText(editor, context, started ? (i == 0 ? count : count + 1) : count);
private void updateBlockSelection(@NotNull Editor editor, int offset) { EditorData.setVisualBlockEnd(editor, offset); EditorData.setVisualBlockOffset(editor, offset); int start = EditorData.getVisualBlockStart(editor); int end = EditorData.getVisualBlockEnd(editor); LogicalPosition blockStart = editor.offsetToLogicalPosition(start); LogicalPosition blockEnd = editor.offsetToLogicalPosition(end); if (blockStart.column < blockEnd.column) { blockEnd = new LogicalPosition(blockEnd.line, blockEnd.column + 1); } else { blockStart = new LogicalPosition(blockStart.line, blockStart.column + 1); } editor.getSelectionModel().setBlockSelection(blockStart, blockEnd); for (Caret caret : editor.getCaretModel().getAllCarets()) { int line = caret.getLogicalPosition().line; int lineEndOffset = EditorHelper.getLineEndOffset(editor, line, true); if (CaretData.getLastColumn(editor.getCaretModel().getPrimaryCaret()) >= MotionGroup.LAST_COLUMN) { caret.setSelection(caret.getSelectionStart(), lineEndOffset); } if (!EditorHelper.isLineEmpty(editor, line, false)) { caret.moveToOffset(caret.getSelectionEnd() - 1); } } editor.getCaretModel().getPrimaryCaret().moveToOffset(end); VimPlugin.getMark().setVisualSelectionMarks(editor, new TextRange(start, end)); }
public boolean selectPreviousVisualMode(@NotNull Editor editor) { final SelectionType lastSelectionType = EditorData.getLastSelectionType(editor); if (lastSelectionType == null) { return false; } final TextRange visualMarks = VimPlugin.getMark().getVisualSelectionMarks(editor); if (visualMarks == null) { return false; } editor.getCaretModel().removeSecondaryCarets(); CommandState.getInstance(editor) .pushState(CommandState.Mode.VISUAL, lastSelectionType.toSubMode(), MappingMode.VISUAL); Caret primaryCaret = editor.getCaretModel().getPrimaryCaret(); CaretData.setVisualStart(primaryCaret, visualMarks.getStartOffset()); CaretData.setVisualEnd(primaryCaret, visualMarks.getEndOffset()); CaretData.setVisualOffset(primaryCaret, visualMarks.getEndOffset()); updateSelection(editor, primaryCaret, visualMarks.getEndOffset()); primaryCaret.moveToOffset(visualMarks.getEndOffset()); editor.getScrollingModel().scrollToCaret(ScrollType.CENTER); return true; }
public boolean swapVisualSelections(@NotNull Editor editor) { final SelectionType lastSelectionType = EditorData.getLastSelectionType(editor); final TextRange lastVisualRange = EditorData.getLastVisualRange(editor); if (lastSelectionType == null || lastVisualRange == null) { return false; } final SelectionType selectionType = SelectionType.fromSubMode(CommandState.getInstance(editor).getSubMode()); EditorData.setLastSelectionType(editor, selectionType); editor.getCaretModel().removeSecondaryCarets(); Caret primaryCaret = editor.getCaretModel().getPrimaryCaret(); CaretData.setVisualStart(primaryCaret, lastVisualRange.getStartOffset()); CaretData.setVisualEnd(primaryCaret, lastVisualRange.getEndOffset()); CaretData.setVisualOffset(primaryCaret, lastVisualRange.getEndOffset()); CommandState.getInstance(editor).setSubMode(lastSelectionType.toSubMode()); updateSelection(editor, primaryCaret, lastVisualRange.getEndOffset()); primaryCaret.moveToOffset(lastVisualRange.getEndOffset()); editor.getScrollingModel().scrollToCaret(ScrollType.CENTER); return true; }
if (len > from) { LogicalPosition spos = new LogicalPosition(l, from); caret.moveToOffset(editor.logicalPositionToOffset(spos)); insertText(editor, caret, indent);
protected void doTestWorldSelector() { initWithFileSmartWithoutErrors(); List<Integer> offsets = getAndRemoveCarets(); List<Pair<Integer, String>> macroses = new ArrayList<>(); Caret currentCaret = getEditor().getCaretModel().getCurrentCaret(); for (Integer offset : offsets) { currentCaret.moveToOffset(offset); new SelectWordHandler(null).execute(getEditor(), currentCaret, getEditorDataContext()); addCaretInfo(currentCaret, macroses); currentCaret.removeSelection(); } UsefulTestCase.assertSameLinesWithFile(getTestResultsFilePath(), getEditorTextWithMacroses(macroses)); }