/// <inheritdoc/> public ITrackingPoint Show(ITextView textView, AddInlineCommentTag tag) { Guard.ArgumentNotNull(tag, nameof(tag)); var lineAndtrackingPoint = GetLineAndTrackingPoint(textView, tag); var line = lineAndtrackingPoint.Item1; var trackingPoint = lineAndtrackingPoint.Item2; var options = new PeekSessionCreationOptions( textView, InlineCommentPeekRelationship.Instance.Name, trackingPoint, defaultHeight: 0); ExpandCollapsedRegions(textView, line.Extent); var session = peekBroker.TriggerPeekSession(options); var item = session.PeekableItems.OfType <InlineCommentPeekableItem>().FirstOrDefault(); if (item != null) { var placeholder = item.ViewModel.Thread.Comments.Last(); placeholder.CancelEdit.Take(1).Subscribe(_ => session.Dismiss()); } return(trackingPoint); }
/// <inheritdoc/> public ITrackingPoint Show(ITextView textView, AddInlineCommentTag tag) { Guard.ArgumentNotNull(tag, nameof(tag)); var line = textView.TextSnapshot.GetLineFromLineNumber(tag.LineNumber); var trackingPoint = textView.TextSnapshot.CreateTrackingPoint(line.Start.Position, PointTrackingMode.Positive); ExpandCollapsedRegions(textView, line.Extent); var session = peekBroker.TriggerPeekSession(textView, trackingPoint, InlineCommentPeekRelationship.Instance.Name); var item = session.PeekableItems.OfType <InlineCommentPeekableItem>().FirstOrDefault(); if (item != null) { var placeholder = item.ViewModel.Thread.Comments.Last(); placeholder.CancelEdit.Take(1).Subscribe(_ => session.Dismiss()); } return(trackingPoint); }
/// <inheritdoc/> public ITrackingPoint Show(ITextView textView, DiffSide side, int lineNumber) { var lineAndtrackingPoint = GetLineAndTrackingPoint(textView, side, lineNumber); var line = lineAndtrackingPoint.Item1; var trackingPoint = lineAndtrackingPoint.Item2; var options = new PeekSessionCreationOptions( textView, relationship, trackingPoint, defaultHeight: 0); ExpandCollapsedRegions(textView, line.Extent); var session = peekBroker.TriggerPeekSession(options); var item = session.PeekableItems.OfType <IClosable>().FirstOrDefault(); item?.Closed.Take(1).Subscribe(_ => session.Dismiss()); return(trackingPoint); }
private void HandlePeekHelp() { PeekSessionCreationOptions options = new PeekSessionCreationOptions(_textView, PeekHelpRelationship.Instance.Name); if (_textView.Roles.Contains(PredefinedTextViewRoles.EmbeddedPeekTextView)) { ITextView containingTextView; if (_textView.Properties.TryGetProperty("PeekContainingTextView", out containingTextView) && containingTextView != null) { IPeekSession session = _peekBroker.GetPeekSession(containingTextView); if (session != null) { _peekBroker.TriggerNestedPeekSession(options, session); } } } else { _peekBroker.TriggerPeekSession(options); } _telemetrySession.PostEvent("VS/PPT-PeekHelp/PeekF1CommandInvoked"); }
public int Exec(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut) { if (pguidCmdGroup == VSConstants.GUID_VSStandardCommandSet97) { switch ((VSConstants.VSStd97CmdID)nCmdID) { case VSConstants.VSStd97CmdID.GotoDefn: if (TryGoToDefinition()) { return(VSConstants.S_OK); } break; } } else if (pguidCmdGroup == VSConstants.VsStd12) { switch ((VSConstants.VSStd12CmdID)nCmdID) { case VSConstants.VSStd12CmdID.PeekDefinition: if (!_textView.Roles.Contains(PredefinedTextViewRoles.EmbeddedPeekTextView) && !_textView.Roles.Contains(PredefinedTextViewRoles.CodeDefinitionView)) { _peekBroker.TriggerPeekSession(_textView, PredefinedPeekRelationships.Definitions.Name); return(VSConstants.S_OK); } break; } } var res = Next.Exec(pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut); if (pguidCmdGroup == VSConstants.VSStd2K && _signatureConfig != null && _signatureConfig.Enabled) { switch ((VSConstants.VSStd2KCmdID)nCmdID) { case VSConstants.VSStd2KCmdID.TYPECHAR: var ch = GetTypeChar(pvaIn); if (ch == _signatureConfig.TriggerInstructionSignatureChar || ch == _signatureConfig.TriggerFunctionSignatureChar) { StartSignatureSession(); } else if (ch == _signatureConfig.DismissSignatureChar) { CancelSignatureSession(); } else if (ch == _signatureConfig.TriggerParameterChar) { ChangeParameterSignatureSession(); } break; case VSConstants.VSStd2KCmdID.BACKSPACE: case VSConstants.VSStd2KCmdID.DELETE: case VSConstants.VSStd2KCmdID.DELETETOEOL: case VSConstants.VSStd2KCmdID.DELETEWORDLEFT: case VSConstants.VSStd2KCmdID.LEFT: case VSConstants.VSStd2KCmdID.RIGHT: ChangeParameterSignatureSession(); break; case VSConstants.VSStd2KCmdID.DELETELINE: case VSConstants.VSStd2KCmdID.DELETETOBOL: case VSConstants.VSStd2KCmdID.RETURN: case VSConstants.VSStd2KCmdID.CANCEL: CancelSignatureSession(); break; } } if (_signatureConfig != null && !_signatureConfig.Enabled) { CancelSignatureSession(); } return(res); }
public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg) { _peekBroker.TriggerPeekSession(TextView, PredefinedPeekRelationships.Definitions.Name); return(CommandResult.Executed); }
bool TryPeek() { return(peekBroker.TriggerPeekSession(wpfTextView, PredefinedPeekRelationships.Definitions.Name) != null); }
private int ExecWorker(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut) { // preprocessing if (pguidCmdGroup == VSConstants.GUID_VSStandardCommandSet97) { switch ((VSConstants.VSStd97CmdID)nCmdID) { case VSConstants.VSStd97CmdID.Paste: if (!_pyService.AdvancedOptions.PasteRemovesReplPrompts) { // Not stripping prompts, so don't use our logic break; } var beforePaste = _textView.TextSnapshot; if (_editorOps.Paste()) { var afterPaste = _textView.TextSnapshot; var um = _undoManagerProvider.GetTextBufferUndoManager(afterPaste.TextBuffer); using (var undo = um.TextBufferUndoHistory.CreateTransaction(Strings.RemoveReplPrompts)) { if (ReplPromptHelpers.RemovePastedPrompts(beforePaste, afterPaste)) { undo.Complete(); } } return(VSConstants.S_OK); } break; case VSConstants.VSStd97CmdID.GotoDefn: GotoDefinition(); return(VSConstants.S_OK); case VSConstants.VSStd97CmdID.FindReferences: FindAllReferences(); return(VSConstants.S_OK); } } else if (pguidCmdGroup == VSConstants.VsStd12) { switch ((VSConstants.VSStd12CmdID)nCmdID) { case VSConstants.VSStd12CmdID.PeekDefinition: if (_peekBroker != null && !_textView.Roles.Contains(PredefinedTextViewRoles.EmbeddedPeekTextView) && !_textView.Roles.Contains(PredefinedTextViewRoles.CodeDefinitionView)) { _peekBroker.TriggerPeekSession(_textView, PredefinedPeekRelationships.Definitions.Name); return(VSConstants.S_OK); } break; } } else if (pguidCmdGroup == CommonConstants.Std2KCmdGroupGuid) { SnapshotPoint?pyPoint; switch ((VSConstants.VSStd2KCmdID)nCmdID) { case VSConstants.VSStd2KCmdID.RETURN: pyPoint = _textView.GetPythonCaret(); if (pyPoint != null) { // https://github.com/Microsoft/PTVS/issues/241 // If the current line is a full line comment and we // are splitting the text, automatically insert the // comment marker on the new line. var line = pyPoint.Value.GetContainingLine(); var lineText = pyPoint.Value.Snapshot.GetText(line.Start, pyPoint.Value - line.Start); int comment = lineText.IndexOf('#'); if (comment >= 0 && pyPoint.Value < line.End && line.Start + comment < pyPoint.Value && string.IsNullOrWhiteSpace(lineText.Remove(comment)) ) { int extra = lineText.Skip(comment + 1).TakeWhile(char.IsWhiteSpace).Count() + 1; using (var edit = line.Snapshot.TextBuffer.CreateEdit()) { edit.Insert( pyPoint.Value.Position, _textView.Options.GetNewLineCharacter() + lineText.Substring(0, comment + extra) ); edit.Apply(); } return(VSConstants.S_OK); } } break; case VSConstants.VSStd2KCmdID.FORMATDOCUMENT: pyPoint = _textView.GetPythonCaret(); if (pyPoint != null) { FormatCode(new SnapshotSpan(pyPoint.Value.Snapshot, 0, pyPoint.Value.Snapshot.Length), false); } return(VSConstants.S_OK); case VSConstants.VSStd2KCmdID.FORMATSELECTION: foreach (var span in _textView.BufferGraph.MapDownToFirstMatch( _textView.Selection.StreamSelectionSpan.SnapshotSpan, SpanTrackingMode.EdgeInclusive, EditorExtensions.IsPythonContent )) { FormatCode(span, 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: _textView.GetOutliningTagger()?.Disable(_textView.TextSnapshot); // let VS get the event as well break; case VSConstants.VSStd2KCmdID.OUTLN_START_AUTOHIDING: _textView.GetOutliningTagger()?.Enable(_textView.TextSnapshot); // 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.cmdidRefactorRenameIntegratedShell: RefactorRename(); return(VSConstants.S_OK); case PkgCmdIDList.cmdidExtractMethodIntegratedShell: ExtractMethod(); return(VSConstants.S_OK); case CommonConstants.StartDebuggingCmdId: case CommonConstants.StartWithoutDebuggingCmdId: PythonToolsPackage.LaunchFile(_serviceProvider, _textView.GetFilePath(), nCmdID == CommonConstants.StartDebuggingCmdId, true); return(VSConstants.S_OK); } } return(_next.Exec(pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut)); }