public void CopySelection() { if (VisualComponent == null) { return; } if (!HasSelectedEntries) { _editorOperations.CopySelection(); return; } var selectedEntries = GetSelectedHistoryEntrySpans(); var normalizedCollection = new NormalizedSnapshotSpanCollection(selectedEntries); var text = GetSelectedText(); var rtf = _rtfBuilderService.GenerateRtf(normalizedCollection, VisualComponent.TextView); var data = new DataObject(); data.SetText(text, TextDataFormat.Text); data.SetText(text, TextDataFormat.UnicodeText); data.SetText(rtf, TextDataFormat.Rtf); data.SetData(DataFormats.StringFormat, text); Clipboard.SetDataObject(data, false); }
public void Copy() => editorOperations.CopySelection();
int IOleCommandTarget.Exec(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut) { var eval = _interactive.Evaluator; // preprocessing if (pguidCmdGroup == VSConstants.GUID_VSStandardCommandSet97) { switch ((VSConstants.VSStd97CmdID)nCmdID) { case VSConstants.VSStd97CmdID.Cut: if (_editorOps.CutSelection()) { return(VSConstants.S_OK); } break; case VSConstants.VSStd97CmdID.Copy: if (_editorOps.CopySelection()) { return(VSConstants.S_OK); } break; case VSConstants.VSStd97CmdID.Paste: string pasting = eval.FormatClipboard(); if (pasting != null) { PasteReplCode( _interactive, pasting, (eval as PythonInteractiveEvaluator)?.LanguageVersion ?? PythonLanguageVersion.None ).DoNotWait(); return(VSConstants.S_OK); } break; } } else if (pguidCmdGroup == CommonConstants.Std2KCmdGroupGuid) { //switch ((VSConstants.VSStd2KCmdID)nCmdID) { //} } else if (pguidCmdGroup == GuidList.guidPythonToolsCmdSet) { switch (nCmdID) { case PkgCmdIDList.comboIdReplScopes: ScopeComboBoxHandler(pvaIn, pvaOut); return(VSConstants.S_OK); case PkgCmdIDList.comboIdReplEvaluators: EvaluatorComboBoxHandler(pvaIn, pvaOut); return(VSConstants.S_OK); case PkgCmdIDList.comboIdReplScopesGetList: ScopeComboBoxGetList(pvaOut); return(VSConstants.S_OK); case PkgCmdIDList.comboIdReplEvaluatorsGetList: EvaluatorComboBoxGetList(pvaOut); return(VSConstants.S_OK); case PkgCmdIDList.cmdidNewInteractiveWindow: return(CloneInteractiveWindow()); case PkgCmdIDList.cmdidOpenInteractiveScopeInEditor: var path = GetCurrentScopeSourcePath(); if (!string.IsNullOrEmpty(path)) { PythonToolsPackage.NavigateTo(_serviceProvider, path, Guid.Empty, 0); return(VSConstants.S_OK); } break; } } return(_next.Exec(pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut)); }
public CommandResult Invoke(Guid group, int id, object args, ref object outargs) { CommandResult result = _braceCompletionTarget.Invoke(group, id, args, ref outargs); if (result.WasExecuted) { return(result); } if (group == VSConstants.VSStd2K) { switch (id) { case (int)VSConstants.VSStd2KCmdID.TYPECHAR: string text; if (args is char) { text = args.ToString(); } else { text = Char.ConvertFromUtf32((System.UInt16)args); } result = this.PerformEditAction(() => _editorOperations.InsertText(text)); break; case (int)VSConstants.VSStd2KCmdID.BACKSPACE: result = this.PerformEditAction(() => _editorOperations.Backspace()); break; case (int)VSConstants.VSStd2KCmdID.DELETE: result = this.PerformEditAction(() => _editorOperations.Delete()); break; case (int)VSConstants.VSStd2KCmdID.CANCEL: _editorOperations.ResetSelection(); break; case (int)VSConstants.VSStd2KCmdID.DOWN_EXT: _editorOperations.MoveLineDown(true); break; case (int)VSConstants.VSStd2KCmdID.DOWN: _editorOperations.MoveLineDown(false); break; case (int)VSConstants.VSStd2KCmdID.RIGHT_EXT: _editorOperations.MoveToNextCharacter(true); break; case (int)VSConstants.VSStd2KCmdID.RIGHT: _editorOperations.MoveToNextCharacter(false); break; case (int)VSConstants.VSStd2KCmdID.LEFT_EXT: _editorOperations.MoveToPreviousCharacter(true); break; case (int)VSConstants.VSStd2KCmdID.LEFT: _editorOperations.MoveToPreviousCharacter(false); break; case (int)VSConstants.VSStd2KCmdID.UP_EXT: _editorOperations.MoveLineUp(true); break; case (int)VSConstants.VSStd2KCmdID.UP: _editorOperations.MoveLineUp(false); break; case (int)VSConstants.VSStd2KCmdID.HOME_EXT: _editorOperations.MoveToHome(true); break; case (int)VSConstants.VSStd2KCmdID.HOME: _editorOperations.MoveToHome(false); break; case (int)VSConstants.VSStd2KCmdID.PAGEUP_EXT: _editorOperations.PageUp(true); break; case (int)VSConstants.VSStd2KCmdID.PAGEUP: _editorOperations.PageUp(false); break; case (int)VSConstants.VSStd2KCmdID.PAGEDN_EXT: _editorOperations.PageDown(true); break; case (int)VSConstants.VSStd2KCmdID.PAGEDN: _editorOperations.PageDown(false); break; case (int)VSConstants.VSStd2KCmdID.END_EXT: _editorOperations.MoveToEndOfLine(true); break; case (int)VSConstants.VSStd2KCmdID.END: _editorOperations.MoveToEndOfLine(false); break; case (int)VSConstants.VSStd2KCmdID.BACKTAB: result = this.PerformEditAction(() => _editorOperations.Unindent()); break; case (int)VSConstants.VSStd2KCmdID.TAB: result = this.PerformEditAction(() => _editorOperations.Indent()); break; case (int)VSConstants.VSStd2KCmdID.RETURN: result = this.PerformEditAction(() => _editorOperations.InsertNewLine()); break; case (int)VSConstants.VSStd2KCmdID.CTLMOVERIGHT: _editorOperations.MoveToNextWord(true); break; case (int)VSConstants.VSStd2KCmdID.CTLMOVELEFT: _editorOperations.MoveToPreviousWord(true); break; case (int)VSConstants.VSStd2KCmdID.TOPLINE_EXT: _editorOperations.MoveToStartOfDocument(true); break; case (int)VSConstants.VSStd2KCmdID.BOTTOMLINE_EXT: _editorOperations.MoveToEndOfDocument(true); break; case (int)VSConstants.VSStd2KCmdID.INSERT: bool isEnabled = _editorOperations.Options.IsOverwriteModeEnabled(); _editorOperations.Options.SetOptionValue(DefaultTextViewOptions.OverwriteModeId, !isEnabled); break; case (int)VSConstants.VSStd2KCmdID.DELETEWORDLEFT: result = this.PerformEditAction(() => _editorOperations.DeleteWordToLeft()); break; case (int)VSConstants.VSStd2KCmdID.DELETEWORDRIGHT: result = this.PerformEditAction(() => _editorOperations.DeleteWordToRight()); break; case (int)VSConstants.VSStd2KCmdID.SELECTALL: _editorOperations.SelectAll(); break; case (int)VSConstants.VSStd2KCmdID.SELECTCURRENTWORD: _editorOperations.SelectCurrentWord(); break; case (int)VSConstants.VSStd2KCmdID.WORDNEXT: _editorOperations.MoveToNextWord(false); break; case (int)VSConstants.VSStd2KCmdID.WORDPREV: _editorOperations.MoveToPreviousWord(false); break; case (int)VSConstants.VSStd2KCmdID.TOPLINE: _editorOperations.MoveToStartOfDocument(false); break; case (int)VSConstants.VSStd2KCmdID.BOTTOMLINE: _editorOperations.MoveToEndOfDocument(false); break; case (int)VSConstants.VSStd2KCmdID.SCROLLUP: _editorOperations.ScrollUpAndMoveCaretIfNecessary(); break; case (int)VSConstants.VSStd2KCmdID.SCROLLDN: _editorOperations.ScrollDownAndMoveCaretIfNecessary(); break; case (int)VSConstants.VSStd2KCmdID.COPY: _editorOperations.CopySelection(); break; case (int)VSConstants.VSStd2KCmdID.CUT: return(this.PerformEditAction(() => _editorOperations.CutSelection())); case (int)VSConstants.VSStd2KCmdID.PASTE: string pastedText = args as string; if (pastedText != null) { return(this.PerformEditAction(() => _editorOperations.InsertText(pastedText))); } else { return(this.PerformEditAction(() => _editorOperations.Paste())); } case (int)VSConstants.VSStd2KCmdID.UNDO: if (UndoManager != null && UndoManager.TextBufferUndoHistory.CanUndo) { UndoManager.TextBufferUndoHistory.Undo(1); break; } return(CommandResult.Disabled); case (int)VSConstants.VSStd2KCmdID.REDO: if (UndoManager != null && UndoManager.TextBufferUndoHistory.CanRedo) { UndoManager.TextBufferUndoHistory.Redo(1); break; } return(CommandResult.Disabled); default: return(CommandResult.NotSupported); } _braceCompletionTarget.PostProcessInvoke(CommandResult.Executed, group, id, args, ref outargs); return(result); } return(CommandResult.NotSupported); }
/// <summary> /// Called from VS when we should handle a command or pass it on. /// </summary> public int Exec(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut) { // preprocessing if (pguidCmdGroup == VSConstants.GUID_VSStandardCommandSet97) { PythonReplEvaluator eval; switch ((VSConstants.VSStd97CmdID)nCmdID) { case VSConstants.VSStd97CmdID.Cut: if (_textView.Properties.TryGetProperty(typeof(PythonReplEvaluator), out eval)) { if (_editorOps.CutSelection()) { return(VSConstants.S_OK); } } break; case VSConstants.VSStd97CmdID.Copy: if (_textView.Properties.TryGetProperty(typeof(PythonReplEvaluator), out eval)) { if (_editorOps.CopySelection()) { return(VSConstants.S_OK); } } break; case VSConstants.VSStd97CmdID.Paste: if (_textView.Properties.TryGetProperty(typeof(PythonReplEvaluator), out eval)) { string pasting = eval.FormatClipboard() ?? Clipboard.GetText(); if (pasting != null) { PasteReplCode(eval, pasting); return(VSConstants.S_OK); } } else { string updated = RemoveReplPrompts(_pyService, _textView.Options.GetNewLineCharacter()); if (updated != null) { _editorOps.ReplaceSelection(updated); return(VSConstants.S_OK); } } break; case VSConstants.VSStd97CmdID.GotoDefn: return(GotoDefinition()); case VSConstants.VSStd97CmdID.FindReferences: return(FindAllReferences()); } } else if (pguidCmdGroup == CommonConstants.Std2KCmdGroupGuid) { OutliningTaggerProvider.OutliningTagger tagger; switch ((VSConstants.VSStd2KCmdID)nCmdID) { case VSConstants.VSStd2KCmdID.FORMATDOCUMENT: FormatCode(new SnapshotSpan(_textView.TextBuffer.CurrentSnapshot, 0, _textView.TextBuffer.CurrentSnapshot.Length), false); return(VSConstants.S_OK); case VSConstants.VSStd2KCmdID.FORMATSELECTION: FormatCode(_textView.Selection.StreamSelectionSpan.SnapshotSpan, true); return(VSConstants.S_OK); case VSConstants.VSStd2KCmdID.SHOWMEMBERLIST: case VSConstants.VSStd2KCmdID.COMPLETEWORD: var controller = _textView.Properties.GetProperty <IntellisenseController>(typeof(IntellisenseController)); if (controller != null) { IntellisenseController.ForceCompletions = true; try { controller.TriggerCompletionSession( (VSConstants.VSStd2KCmdID)nCmdID == VSConstants.VSStd2KCmdID.COMPLETEWORD, true ); } finally { IntellisenseController.ForceCompletions = false; } return(VSConstants.S_OK); } break; case VSConstants.VSStd2KCmdID.QUICKINFO: controller = _textView.Properties.GetProperty <IntellisenseController>(typeof(IntellisenseController)); if (controller != null) { controller.TriggerQuickInfo(); return(VSConstants.S_OK); } break; case VSConstants.VSStd2KCmdID.PARAMINFO: controller = _textView.Properties.GetProperty <IntellisenseController>(typeof(IntellisenseController)); if (controller != null) { controller.TriggerSignatureHelp(); return(VSConstants.S_OK); } break; case VSConstants.VSStd2KCmdID.OUTLN_STOP_HIDING_ALL: tagger = _textView.GetOutliningTagger(); if (tagger != null) { tagger.Disable(); } // let VS get the event as well break; case VSConstants.VSStd2KCmdID.OUTLN_START_AUTOHIDING: tagger = _textView.GetOutliningTagger(); if (tagger != null) { tagger.Enable(); } // let VS get the event as well break; case VSConstants.VSStd2KCmdID.COMMENT_BLOCK: case VSConstants.VSStd2KCmdID.COMMENTBLOCK: if (_textView.CommentOrUncommentBlock(comment: true)) { return(VSConstants.S_OK); } break; case VSConstants.VSStd2KCmdID.UNCOMMENT_BLOCK: case VSConstants.VSStd2KCmdID.UNCOMMENTBLOCK: if (_textView.CommentOrUncommentBlock(comment: false)) { return(VSConstants.S_OK); } break; case VSConstants.VSStd2KCmdID.EXTRACTMETHOD: ExtractMethod(); return(VSConstants.S_OK); case VSConstants.VSStd2KCmdID.RENAME: RefactorRename(); return(VSConstants.S_OK); } } else if (pguidCmdGroup == GuidList.guidPythonToolsCmdSet) { switch (nCmdID) { case PkgCmdIDList.comboIdReplScopes: ScopeComboBoxHandler(pvaIn, pvaOut); return(VSConstants.S_OK); case PkgCmdIDList.comboIdReplScopesGetList: ScopeComboBoxGetList(pvaOut); return(VSConstants.S_OK); case PkgCmdIDList.cmdidRefactorRenameIntegratedShell: RefactorRename(); return(VSConstants.S_OK); case PkgCmdIDList.cmdidExtractMethodIntegratedShell: ExtractMethod(); return(VSConstants.S_OK); } } return(_next.Exec(pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut)); }
// Helped by source of Microsoft.VisualStudio.Text.Editor.DragDrop.DropHandlerBase.cs in assembly Microsoft.VisualStudio.Text.UI.Wpf, Version=14.0.0.0 public static int HandleCommand(IWpfTextView textView, IClassifier classifier, IOleCommandTarget commandTarget, IEditorOperations editorOperations, bool shiftPressed = false) { //Guid cmdGroup = VSConstants.VSStd2K; var isSingleLine = false; var selectedText = editorOperations.SelectedText; ITrackingPoint trackingPoint = null; if (selectedText.Length == 0) // if nothing is selected, we can consider the current line as a selection { var virtualBufferPosition = editorOperations.TextView.Caret.Position.VirtualBufferPosition; trackingPoint = textView.TextSnapshot.CreateTrackingPoint(virtualBufferPosition.Position, PointTrackingMode.Negative); editorOperations.SelectLine(textView.Caret.ContainingTextViewLine, false); isSingleLine = true; } if (isSingleLine) { editorOperations.CopySelection(); editorOperations.MoveToNextCharacter(false); editorOperations.Paste(); editorOperations.MoveToPreviousCharacter(false); textView.Caret.MoveTo(new VirtualSnapshotPoint(trackingPoint.GetPoint(textView.TextSnapshot)).TranslateTo(textView.TextSnapshot)); if (!shiftPressed) { editorOperations.MoveLineDown(false); } } else { var selection = textView.Selection; var isReversed = selection.IsReversed; var text = selectedText; var textSnapshot = textView.TextSnapshot; var list = new List <ITrackingSpan>(); //var shiftKeyPressed=textVie foreach (SnapshotSpan snapshotSpan in selection.SelectedSpans) { list.Add(textSnapshot.CreateTrackingSpan(snapshotSpan, SpanTrackingMode.EdgeExclusive)); } if (!selection.IsEmpty) { selection.Clear(); } if (list.Count < 2) { var offset = 0; var virtualBufferPosition = editorOperations.TextView.Caret.Position.VirtualBufferPosition; var point = editorOperations.TextView.Caret.Position.BufferPosition; virtualBufferPosition = isReversed && !shiftPressed ? new VirtualSnapshotPoint(point.Add(text.Length)) : !isReversed && shiftPressed ? new VirtualSnapshotPoint(point.Add(-text.Length)) : virtualBufferPosition; trackingPoint = textSnapshot.CreateTrackingPoint(virtualBufferPosition.Position, PointTrackingMode.Negative); if (virtualBufferPosition.IsInVirtualSpace) { offset = editorOperations.GetWhitespaceForVirtualSpace(virtualBufferPosition).Length; } textView.Caret.MoveTo(virtualBufferPosition.TranslateTo(textView.TextSnapshot)); editorOperations.InsertText(text); var insertionPoint = trackingPoint.GetPoint(textView.TextSnapshot); if (offset != 0) { insertionPoint = insertionPoint.Add(offset); } var virtualSnapshotPoint1 = new VirtualSnapshotPoint(insertionPoint); var virtualSnapshotPoint2 = new VirtualSnapshotPoint(insertionPoint.Add(text.Length)); if (isReversed) { editorOperations.SelectAndMoveCaret(virtualSnapshotPoint2, virtualSnapshotPoint1, TextSelectionMode.Stream); } else { editorOperations.SelectAndMoveCaret(virtualSnapshotPoint1, virtualSnapshotPoint2, TextSelectionMode.Stream); } } else { var trackingPointOffsetList = new List <Tuple <ITrackingPoint, int, int> >(); //Insert Text! if (isReversed) { list.Reverse(); } foreach (var trackingSpan in list) { var span = trackingSpan.GetSpan(textSnapshot); text = trackingSpan.GetText(textSnapshot); var offset = 0; var insertionPoint = !isReversed?trackingSpan.GetEndPoint(span.Snapshot) : trackingSpan.GetStartPoint(span.Snapshot); var virtualBufferPosition = new VirtualSnapshotPoint(insertionPoint); virtualBufferPosition = isReversed && !shiftPressed ? new VirtualSnapshotPoint(insertionPoint.Add(text.Length)) : !isReversed && shiftPressed ? new VirtualSnapshotPoint(insertionPoint.Add(-text.Length)) : virtualBufferPosition; trackingPoint = textSnapshot.CreateTrackingPoint(virtualBufferPosition.Position, PointTrackingMode.Negative); if (virtualBufferPosition.IsInVirtualSpace) { offset = editorOperations.GetWhitespaceForVirtualSpace(virtualBufferPosition).Length; } trackingPointOffsetList.Add(new Tuple <ITrackingPoint, int, int>(trackingPoint, offset, text.Length)); textView.Caret.MoveTo(virtualBufferPosition.TranslateTo(textView.TextSnapshot)); editorOperations.InsertText(text); } //Make Selections { var trackingPointOffset = trackingPointOffsetList.First(); var insertionPoint = trackingPointOffset.Item1.GetPoint(textView.TextSnapshot); if (trackingPointOffset.Item2 != 0) { insertionPoint = insertionPoint.Add(trackingPointOffset.Item2); } var virtualSnapshotPoint1 = new VirtualSnapshotPoint(insertionPoint.Add(!isReversed ? 0 : trackingPointOffset.Item3)); trackingPointOffset = trackingPointOffsetList.Last(); insertionPoint = trackingPointOffset.Item1.GetPoint(textView.TextSnapshot); if (trackingPointOffset.Item2 != 0) { insertionPoint = insertionPoint.Add(trackingPointOffset.Item2); } var virtualSnapshotPoint2 = new VirtualSnapshotPoint(insertionPoint.Add(isReversed ? 0 : trackingPointOffset.Item3)); editorOperations.SelectAndMoveCaret(virtualSnapshotPoint1, virtualSnapshotPoint2, TextSelectionMode.Box); } } } return(VSConstants.S_OK); }