List of usage examples for com.intellij.openapi.editor EditorModificationUtil deleteSelectedText
public static void deleteSelectedText(Editor editor)
From source file:com.intellij.codeInsight.editorActions.BackspaceHandler.java
License:Apache License
public static void deleteToTargetPosition(@NotNull Editor editor, @NotNull LogicalPosition pos) { final int offset = editor.getCaretModel().getOffset(); final int targetOffset = editor.logicalPositionToOffset(pos); editor.getSelectionModel().setSelection(targetOffset, offset); EditorModificationUtil.deleteSelectedText(editor); editor.getCaretModel().moveToLogicalPosition(pos); }
From source file:com.intellij.codeInsight.editorActions.CompletionAutoPopupHandler.java
License:Apache License
@Override public Result checkAutoPopup(char charTyped, final Project project, final Editor editor, final PsiFile file) { CompletionPhase oldPhase = CompletionServiceImpl.getCompletionPhase(); if (oldPhase instanceof CompletionPhase.CommittingDocuments && ((CompletionPhase.CommittingDocuments) oldPhase).isRestartingCompletion()) { oldPhase.indicator.scheduleRestart(); return Result.STOP; }/*from ww w . j av a2 s .c o m*/ LookupImpl lookup = (LookupImpl) LookupManager.getActiveLookup(editor); if (lookup != null) { if (editor.getSelectionModel().hasSelection()) { lookup.performGuardedChange(new Runnable() { @Override public void run() { EditorModificationUtil.deleteSelectedText(editor); } }); } return Result.STOP; } if (Character.isLetter(charTyped) || charTyped == '_') { AutoPopupController.getInstance(project).scheduleAutoPopup(editor); return Result.STOP; } if (CompletionServiceImpl.isPhase(CompletionPhase.CommittingDocuments.class)) { CompletionServiceImpl.setCompletionPhase(CompletionPhase.NoCompletion); } return Result.CONTINUE; }
From source file:com.intellij.codeInsight.editorActions.CutHandler.java
License:Apache License
@Override public void executeWriteAction(final Editor editor, Caret caret, DataContext dataContext) { assert caret == null : "Invocation of 'cut' operation for specific caret is not supported"; Project project = CommonDataKeys.PROJECT .getData(DataManager.getInstance().getDataContext(editor.getContentComponent())); if (project == null) { if (myOriginalHandler != null) { myOriginalHandler.execute(editor, null, dataContext); }/*from w w w.ja va 2 s . c o m*/ return; } final PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()); if (file == null) { if (myOriginalHandler != null) { myOriginalHandler.execute(editor, null, dataContext); } return; } final SelectionModel selectionModel = editor.getSelectionModel(); if (!selectionModel.hasSelection(true) && !selectionModel.hasBlockSelection()) { if (Registry.is(CopyAction.SKIP_COPY_AND_CUT_FOR_EMPTY_SELECTION_KEY)) { return; } editor.getCaretModel().runForEachCaret(new CaretAction() { @Override public void perform(Caret caret) { selectionModel.selectLineAtCaret(); } }); if (!selectionModel.hasSelection(true)) return; } int start = selectionModel.getSelectionStart(); int end = selectionModel.getSelectionEnd(); final List<TextRange> selections = new ArrayList<TextRange>(); if (editor.getCaretModel().supportsMultipleCarets()) { editor.getCaretModel().runForEachCaret(new CaretAction() { @Override public void perform(Caret caret) { selections.add( new TextRange(selectionModel.getSelectionStart(), selectionModel.getSelectionEnd())); } }); } EditorActionManager.getInstance().getActionHandler(IdeActions.ACTION_EDITOR_COPY).execute(editor, null, dataContext); if (editor.getCaretModel().supportsMultipleCarets()) { Collections.reverse(selections); final Iterator<TextRange> it = selections.iterator(); editor.getCaretModel().runForEachCaret(new CaretAction() { @Override public void perform(Caret caret) { TextRange range = it.next(); editor.getCaretModel().moveToOffset(range.getStartOffset()); selectionModel.removeSelection(); editor.getDocument().deleteString(range.getStartOffset(), range.getEndOffset()); } }); editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE); } else { if (start != end) { // There is a possible case that 'sticky selection' is active. It's automatically removed on copying then, so, we explicitly // remove the text. editor.getDocument().deleteString(start, end); } else { EditorModificationUtil.deleteSelectedText(editor); } } }
From source file:com.intellij.codeInsight.editorActions.EnterHandler.java
License:Apache License
private void executeWriteActionInner(Editor editor, Caret caret, DataContext dataContext, Project project) { CodeInsightSettings settings = CodeInsightSettings.getInstance(); if (project == null) { myOriginalHandler.execute(editor, caret, dataContext); return;// w w w . ja va 2 s.c om } final Document document = editor.getDocument(); final PsiFile file = PsiUtilBase.getPsiFileInEditor(editor, project); if (file == null) { myOriginalHandler.execute(editor, caret, dataContext); return; } CommandProcessor.getInstance().setCurrentCommandName(CodeInsightBundle.message("command.name.typing")); EditorModificationUtil.deleteSelectedText(editor); int caretOffset = editor.getCaretModel().getOffset(); CharSequence text = document.getCharsSequence(); int length = document.getTextLength(); if (caretOffset < length && text.charAt(caretOffset) != '\n') { int offset1 = CharArrayUtil.shiftBackward(text, caretOffset, " \t"); if (offset1 < 0 || text.charAt(offset1) == '\n') { int offset2 = CharArrayUtil.shiftForward(text, offset1 + 1, " \t"); boolean isEmptyLine = offset2 >= length || text.charAt(offset2) == '\n'; if (!isEmptyLine) { // we are in leading spaces of a non-empty line myOriginalHandler.execute(editor, caret, dataContext); return; } } } final PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project); documentManager.commitDocument(document); boolean forceIndent = false; boolean forceSkipIndent = false; Ref<Integer> caretOffsetRef = new Ref<Integer>(caretOffset); Ref<Integer> caretAdvanceRef = new Ref<Integer>(0); final EnterHandlerDelegate[] delegates = Extensions.getExtensions(EnterHandlerDelegate.EP_NAME); for (EnterHandlerDelegate delegate : delegates) { EnterHandlerDelegate.Result result = delegate.preprocessEnter(file, editor, caretOffsetRef, caretAdvanceRef, dataContext, myOriginalHandler); if (caretOffsetRef.get() > document.getTextLength()) { throw new AssertionError("Wrong caret offset change by " + delegate); } if (result == EnterHandlerDelegate.Result.Stop) { return; } if (result != EnterHandlerDelegate.Result.Continue) { if (result == EnterHandlerDelegate.Result.DefaultForceIndent) { forceIndent = true; } else if (result == EnterHandlerDelegate.Result.DefaultSkipIndent) { forceSkipIndent = true; } break; } } text = document.getCharsSequence(); // update after changes done in preprocessEnter() caretOffset = caretOffsetRef.get().intValue(); boolean isFirstColumn = caretOffset == 0 || text.charAt(caretOffset - 1) == '\n'; final boolean insertSpace = !isFirstColumn && !(caretOffset >= text.length() || text.charAt(caretOffset) == ' ' || text.charAt(caretOffset) == '\t'); editor.getCaretModel().moveToOffset(caretOffset); myOriginalHandler.execute(editor, caret, dataContext); if (!editor.isInsertMode() || forceSkipIndent) { return; } if (settings.SMART_INDENT_ON_ENTER || forceIndent) { caretOffset += 1; caretOffset = CharArrayUtil.shiftForward(editor.getDocument().getCharsSequence(), caretOffset, " \t"); } else { caretOffset = editor.getCaretModel().getOffset(); } documentManager.commitAllDocuments(); final DoEnterAction action = new DoEnterAction(file, editor, document, dataContext, caretOffset, !insertSpace, caretAdvanceRef.get(), project); action.setForceIndent(forceIndent); action.run(); documentManager.commitDocument(document); for (EnterHandlerDelegate delegate : delegates) { if (delegate.postProcessEnter(file, editor, dataContext) == EnterHandlerDelegate.Result.Stop) { break; } } documentManager.commitDocument(document); }
From source file:com.intellij.codeInsight.lookup.impl.LookupImpl.java
License:Apache License
private void insertLookupString(LookupElement item, final int prefix) { final Document document = myEditor.getDocument(); final String lookupString = getCaseCorrectedLookupString(item); if (myEditor.getSelectionModel().hasBlockSelection()) { LogicalPosition blockStart = myEditor.getSelectionModel().getBlockStart(); LogicalPosition blockEnd = myEditor.getSelectionModel().getBlockEnd(); assert blockStart != null && blockEnd != null; int minLine = Math.min(blockStart.line, blockEnd.line); int maxLine = Math.max(blockStart.line, blockEnd.line); int minColumn = Math.min(blockStart.column, blockEnd.column); int maxColumn = Math.max(blockStart.column, blockEnd.column); int caretLine = document.getLineNumber(myEditor.getCaretModel().getOffset()); for (int line = minLine; line <= maxLine; line++) { int bs = myEditor.logicalPositionToOffset(new LogicalPosition(line, minColumn)); int start = bs - prefix; int end = myEditor.logicalPositionToOffset(new LogicalPosition(line, maxColumn)); if (start > end) { LOG.error("bs=" + bs + "; start=" + start + "; end=" + end + "; blockStart=" + blockStart + "; blockEnd=" + blockEnd + "; line=" + line + "; len=" + (document.getLineEndOffset(line) - document.getLineStartOffset(line))); }//from w w w.j a v a2s . co m document.replaceString(start, end, lookupString); } LogicalPosition start = new LogicalPosition(minLine, minColumn - prefix); LogicalPosition end = new LogicalPosition(maxLine, start.column + lookupString.length()); myEditor.getSelectionModel().setBlockSelection(start, end); myEditor.getCaretModel().moveToLogicalPosition(new LogicalPosition(caretLine, end.column)); } else { final Editor hostEditor = InjectedLanguageUtil.getTopLevelEditor(myEditor); hostEditor.getCaretModel().runForEachCaret(new CaretAction() { @Override public void perform(Caret caret) { EditorModificationUtil.deleteSelectedText(hostEditor); final int caretOffset = hostEditor.getCaretModel().getOffset(); int lookupStart = Math.max(caretOffset - prefix, 0); int len = hostEditor.getDocument().getTextLength(); LOG.assertTrue(lookupStart >= 0 && lookupStart <= len, "ls: " + lookupStart + " caret: " + caretOffset + " prefix:" + prefix + " doc: " + len); LOG.assertTrue(caretOffset >= 0 && caretOffset <= len, "co: " + caretOffset + " doc: " + len); hostEditor.getDocument().replaceString(lookupStart, caretOffset, lookupString); int offset = lookupStart + lookupString.length(); hostEditor.getCaretModel().moveToOffset(offset); hostEditor.getSelectionModel().removeSelection(); } }); } myEditor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE); }
From source file:com.intellij.codeInsight.lookup.impl.LookupImpl.java
License:Apache License
public void replacePrefix(final String presentPrefix, final String newPrefix) { if (!performGuardedChange(new Runnable() { @Override/*from ww w . java 2 s . com*/ public void run() { EditorModificationUtil.deleteSelectedText(myEditor); int offset = myEditor.getCaretModel().getOffset(); final int start = offset - presentPrefix.length(); myEditor.getDocument().replaceString(start, offset, newPrefix); Map<LookupElement, PrefixMatcher> newMatchers = new HashMap<LookupElement, PrefixMatcher>(); for (LookupElement item : getItems()) { if (item.isValid()) { PrefixMatcher matcher = itemMatcher(item).cloneWithPrefix(newPrefix); if (matcher.prefixMatches(item)) { newMatchers.put(item, matcher); } } } myMatchers.clear(); myMatchers.putAll(newMatchers); myOffsets.clearAdditionalPrefix(); myEditor.getCaretModel().moveToOffset(start + newPrefix.length()); } })) { return; } synchronized (myList) { myPresentableArranger.prefixChanged(this); } refreshUi(true, true); }
From source file:com.intellij.codeInsight.lookup.impl.LookupTypedHandler.java
License:Apache License
@SuppressWarnings("AssignmentToStaticFieldFromInstanceMethod") @Override// w ww. j a va 2 s . c o m public Result beforeCharTyped(final char charTyped, Project project, final Editor editor, PsiFile file, FileType fileType) { final LookupImpl lookup = (LookupImpl) LookupManager.getActiveLookup(editor); if (lookup == null) { return Result.CONTINUE; } if (charTyped == ' ' && ChooseItemAction.hasTemplatePrefix(lookup, TemplateSettings.SPACE_CHAR)) { return Result.CONTINUE; } final CharFilter.Result result = getLookupAction(charTyped, lookup); if (lookup.isLookupDisposed()) { return Result.CONTINUE; } if (!lookup.performGuardedChange(new Runnable() { @Override public void run() { EditorModificationUtil.deleteSelectedText(editor); } })) { return Result.STOP; } if (result == CharFilter.Result.ADD_TO_PREFIX) { Document document = editor.getDocument(); long modificationStamp = document.getModificationStamp(); if (!lookup.performGuardedChange(new Runnable() { @Override public void run() { EditorModificationUtil.typeInStringAtCaretHonorMultipleCarets(editor, String.valueOf(charTyped), true); } })) { return Result.STOP; } lookup.appendPrefix(charTyped); if (lookup.isStartCompletionWhenNothingMatches() && lookup.getItems().isEmpty()) { final CompletionProgressIndicator completion = CompletionServiceImpl.getCompletionService() .getCurrentCompletion(); if (completion != null) { completion.scheduleRestart(); } else { AutoPopupController.getInstance(editor.getProject()).scheduleAutoPopup(editor); } } AutoHardWrapHandler.getInstance().wrapLineIfNecessary(editor, DataManager.getInstance().getDataContext(editor.getContentComponent()), modificationStamp); final CompletionProgressIndicator completion = CompletionServiceImpl.getCompletionService() .getCurrentCompletion(); if (completion != null) { completion.prefixUpdated(); } return Result.STOP; } if (result == CharFilter.Result.SELECT_ITEM_AND_FINISH_LOOKUP && lookup.isFocused()) { LookupElement item = lookup.getCurrentItem(); if (item != null) { if (completeTillTypedCharOccurrence(charTyped, lookup, item)) { return Result.STOP; } FeatureUsageTracker.getInstance() .triggerFeatureUsed(CodeCompletionFeatures.EDITING_COMPLETION_FINISH_BY_DOT_ETC); lookup.finishLookup(charTyped); return Result.STOP; } } lookup.hide(); TypedHandler.autoPopupCompletion(editor, charTyped, project, file); return Result.CONTINUE; }
From source file:com.intellij.codeInsight.template.impl.TemplateManagerImpl.java
License:Apache License
private void startTemplate(final Editor editor, final String selectionString, final Template template, boolean inSeparateCommand, TemplateEditingListener listener, final PairProcessor<String, String> processor, final Map<String, String> predefinedVarValues) { final TemplateState templateState = initTemplateState(editor); //noinspection unchecked templateState.getProperties().put(ExpressionContext.SELECTION, selectionString); if (listener != null) { templateState.addTemplateStateListener(listener); }/*w w w.j ava2 s. c o m*/ Runnable r = new Runnable() { @Override public void run() { if (selectionString != null) { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { EditorModificationUtil.deleteSelectedText(editor); } }); } else { editor.getSelectionModel().removeSelection(); } templateState.start((TemplateImpl) template, processor, predefinedVarValues); } }; if (inSeparateCommand) { CommandProcessor.getInstance().executeCommand(myProject, r, CodeInsightBundle.message("insert.code.template.command"), null); } else { r.run(); } if (shouldSkipInTests()) { if (!templateState.isFinished()) templateState.gotoEnd(); } }
From source file:com.intellij.ide.actions.PasteReferenceProvider.java
License:Apache License
private static void insert(final String fqn, final PsiElement element, final Editor editor, final QualifiedNameProvider provider) { final Project project = editor.getProject(); if (project == null) return;//from w ww .j a va2s . c o m final PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project); documentManager.commitDocument(editor.getDocument()); final PsiFile file = documentManager.getPsiFile(editor.getDocument()); if (!FileModificationService.getInstance().prepareFileForWrite(file)) return; CommandProcessor.getInstance().executeCommand(project, new Runnable() { @Override public void run() { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { Document document = editor.getDocument(); documentManager.doPostponedOperationsAndUnblockDocument(document); documentManager.commitDocument(document); EditorModificationUtil.deleteSelectedText(editor); provider.insertQualifiedName(fqn, element, editor, project); } }); } }, IdeBundle.message("command.pasting.reference"), null); }
From source file:com.vladsch.MissingInActions.actions.character.BackspaceToWordStartNotEolActionHandler.java
License:Apache License
@Override public void executeWriteAction(Editor editor, Caret caret, DataContext dataContext) { CommandProcessor.getInstance().setCurrentCommandGroupId(EditorActionUtil.DELETE_COMMAND_GROUP); CopyPasteManager.getInstance().stopKillRings(); if (editor.getSelectionModel().hasSelection()) { EditorModificationUtil.deleteSelectedText(editor); return;/*from w w w . j av a 2 s .com*/ } backspaceToWordStart(editor); }