예제 #1
0
        public static void TriggerSignatureHelp(ITextView textView)
        {
            CompletionController.DismissSignatureSession(textView);
            var rcc = RCompletionController.FromTextView(textView);

            rcc.TriggerSignatureHelp();
        }
예제 #2
0
 private CommandResult HandleCtrlUp(RCompletionController controller)
 {
     TextView.Properties.AddProperty(RCompletionController.IsRHistoryRequest, true);
     controller.DismissAllSessions();
     controller.ShowCompletion(false);
     return(CommandResult.Executed);
 }
예제 #3
0
        private void HandleF1Help(RCompletionController controller)
        {
            IVsUIShell uiShell = VsAppShell.Current.GetGlobalService <IVsUIShell>(typeof(SVsUIShell));
            Guid       gmdSet  = RGuidList.RCmdSetGuid;
            object     o       = new object();

            // Post interrupt command which knows if it can interrupt R or not
            uiShell.PostExecCommand(ref gmdSet, RPackageCommandId.icmdHelpOnCurrent, 0, ref o);
        }
예제 #4
0
 private void HandleCancel(RCompletionController controller)
 {
     if (!controller.HasActiveCompletionSession && !controller.HasActiveSignatureSession(TextView))
     {
         Workflow.Operations.CancelAsync().DoNotWait();
         // Post interrupt command which knows if it can interrupt R or not
         Workflow.Shell.PostCommand(RGuidList.RCmdSetGuid, RPackageCommandId.icmdInterruptR);
     }
 }
예제 #5
0
 public static void DismissSession(ITextView textView, bool retrigger = false)
 {
     CompletionController.DismissSignatureSession(textView);
     if (retrigger)
     {
         var rcc = RCompletionController.FromTextView(textView);
         rcc.TriggerSignatureHelp();
     }
 }
예제 #6
0
        public static void TriggerSignatureHelp(ITextView textView, ICoreShell shell)
        {
            CompletionController.DismissSignatureSession(textView, shell);
            var rcc = RCompletionController.FromTextView(textView);

            // Since this call may come async via dispatcher the editor
            // window may be already closed at this point.
            rcc?.TriggerSignatureHelp();
        }
예제 #7
0
        private bool HandleCancel(RCompletionController controller)
        {
            if (controller.HasActiveCompletionSession || controller.HasActiveSignatureSession(TextView))
            {
                controller.DismissAllSessions();
                return(true);
            }

            // If session is reading user input, do not terminate it
            if (!Workflow.RSession.IsReadingUserInput)
            {
                Workflow.Shell.PostCommand(RGuidList.RCmdSetGuid, RPackageCommandId.icmdInterruptR);
            }

            return(false);
        }
예제 #8
0
        public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg)
        {
            if (group == VSConstants.VSStd2K)
            {
                RCompletionController controller = RCompletionController.FromTextView(TextView);
                if (controller != null)
                {
                    if (id == (int)VSConstants.VSStd2KCmdID.RETURN)
                    {
                        return(HandleEnter(controller));
                    }
                    else if (id == (int)VSConstants.VSStd2KCmdID.CANCEL)
                    {
                        HandleCancel(controller);
                        // Allow VS to continue processing cancel
                    }
                }
            }
            else if (group == VSConstants.GUID_VSStandardCommandSet97)
            {
                if (id == (int)VSConstants.VSStd97CmdID.F1Help)
                {
                    RCompletionController controller = RCompletionController.FromTextView(TextView);
                    if (controller != null)
                    {
                        // Translate to R help
                        HandleF1Help(controller);
                        return(CommandResult.Executed);
                    }
                }
            }

            var status = _snippetController.Status(group, id);

            if (status != CommandStatus.NotSupported)
            {
                var result = _snippetController.Invoke(group, id, inputArg, ref outputArg);
                if (result.Status != CommandStatus.NotSupported)
                {
                    return(result);
                }
            }

            return(base.Invoke(group, id, inputArg, ref outputArg));
        }
예제 #9
0
        private CommandResult HandleEnter(RCompletionController controller)
        {
            // If completion is up, commit it
            if (controller.HasActiveCompletionSession)
            {
                // Check for exact match. If applicable span is 'x' and completion is 'x'
                // then we don't complete and rather execute. If span is 'x' while
                // current completion entry is 'X11' then we complete depending on
                // the 'complete on enter' setting.
                try {
                    var    session  = controller.CompletionSession;
                    var    set      = session.SelectedCompletionSet;
                    var    span     = set.ApplicableTo;
                    var    snapshot = span.TextBuffer.CurrentSnapshot;
                    string spanText = snapshot.GetText(span.GetSpan(snapshot));
                    if (spanText != set.SelectionStatus.Completion.InsertionText)
                    {
                        // If selection is does not match typed text,
                        // control completion depending on the editor setting.
                        if (set.SelectionStatus.IsSelected && Services.GetService <IREditorSettings>().CommitOnEnter)
                        {
                            controller.CommitCompletionSession();
                            controller.DismissAllSessions();
                            return(CommandResult.Executed);
                        }
                    }
                } catch (Exception) { }
            }

            controller.DismissAllSessions();
            var broker = Services.GetService <ICompletionBroker>();

            broker.DismissAllSessions(TextView);

            var interactiveWorkflowProvider = Services.GetService <IRInteractiveWorkflowProvider>();
            var ops = interactiveWorkflowProvider.GetOrCreate().Operations as IRInteractiveWorkflowOperationsEx;

            ops.ExecuteCurrentExpression(TextView, FormatReplDocument);
            return(CommandResult.Executed);
        }
예제 #10
0
 private void HandleF1Help(RCompletionController controller)
 => Workflow.Services.PostCommand(RGuidList.RCmdSetGuid, RPackageCommandId.icmdHelpOnCurrent);
예제 #11
0
 public IIntellisenseController TryCreateIntellisenseController(ITextView view, IList <ITextBuffer> subjectBuffers)
 {
     return(RCompletionController.Create(view, subjectBuffers, CompletionBroker, QuickInfoBroker, SignatureHelpBroker));
 }
예제 #12
0
 private void HandleF1Help(RCompletionController controller)
 {
     VsAppShell.Current.PostCommand(RGuidList.RCmdSetGuid, RPackageCommandId.icmdHelpOnCurrent);
 }
예제 #13
0
 private void HandleCancel(RCompletionController controller)
 {
     Workflow.Operations.CancelAsync().DoNotWait();
     // Post interrupt command which knows if it can interrupt R or not
     VsAppShell.Current.PostCommand(RGuidList.RCmdSetGuid, RPackageCommandId.icmdInterruptR);
 }
예제 #14
0
 private void HandleCancel(RCompletionController controller)
 {
     // Post interrupt command which knows if it can interrupt R or not
     VsAppShell.Current.PostCommand(RGuidList.RCmdSetGuid, RPackageCommandId.icmdInterruptR);
 }