public Package GetPackage() { try { return(ExposedObject.From(ServiceProvider).ServiceProvider as Package); } catch { return(null); } }
private void SetFsiToolWindowCompletionSetVisibilty(bool displayed) { if (fsiToolWindow != null) { dynamic source = ExposedObject.From(fsiToolWindow).source; if (source != null) { dynamic completionSet = ExposedObject.From(source).CompletionSet; if (completionSet != null) { dynamic completionSetExp = ExposedObject.From(completionSet); completionSetExp.displayed = displayed; } } } }
private Object GetSession() { try { var providerGlobal = (IOleServiceProvider)Package.GetGlobalService(typeof(IOleServiceProvider)); var provider = new ServiceProvider(providerGlobal); dynamic fsiLanguageService = ExposedObject.From(provider.GetService(fsiLanguageServiceType)); dynamic sessions = fsiLanguageService.sessions; if (sessions != null) { dynamic sessionsValue = ExposedObject.From(sessions).Value; dynamic sessionR = ExposedObject.From(sessionsValue).sessionR; dynamic sessionRValue = ExposedObject.From(sessionR).Value; dynamic sessionRValueValue = ExposedObject.From(sessionRValue).Value; dynamic exitedE = ExposedObject.From(sessionRValueValue).exitedE; MethodInfo methodInfo = fsiAssembly.GetType("Microsoft.VisualStudio.FSharp.Interactive.Session+Session").GetMethod("get_Exited"); IObservable <EventArgs> exited = methodInfo.Invoke(sessionRValueValue, null); IObserver <EventArgs> obsvr = Observer.Create <EventArgs>( x => { // RegisterAutocompleteServer(); }, ex => { }, () => { }); exited.Subscribe(obsvr); return(sessionRValueValue); } } catch (Exception ex) { Debug.WriteLine(ex); } return(null); }
public static T Cast <T>(ExposedObject t) { return((T)t.m_object); }
private CommandChainNodeWrapper(Object commandChainNode) { this.commandChainNode = ExposedObject.From(commandChainNode); }
public int Exec(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut) { if (autocompleteMode == AutocompleteModeType.Off || VsShellUtilities.IsInAutomationFunction(m_provider.ServiceProvider)) { return(m_nextCommandHandler.Exec(ref pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut)); } //make a copy of this so we can look at it after forwarding some commands uint commandID = nCmdID; char typedChar = char.MinValue; //make sure the input is a char before getting it if (pguidCmdGroup == VSConstants.VSStd2K && nCmdID == (uint)VSConstants.VSStd2KCmdID.TYPECHAR) { typedChar = (char)(ushort)Marshal.GetObjectForNativeVariant(pvaIn); } //check for a commit character if (nCmdID == (uint)VSConstants.VSStd2KCmdID.RETURN || nCmdID == (uint)VSConstants.VSStd2KCmdID.TAB || char.IsPunctuation(typedChar) && typedChar != '.') { //check for a a selection if (m_session != null && !m_session.IsDismissed) { //if the selection is fully selected, commit the current session if (m_session.SelectedCompletionSet.SelectionStatus.IsSelected) { m_session.Commit(); //also, don't add the character to the buffer if (typedChar != '.') { return(VSConstants.S_OK); } } else { //if there is no selection, dismiss the session m_session.Dismiss(); } } } // Dismiss session when whitespace is pressed. if (char.IsWhiteSpace(typedChar) && m_session != null && !m_session.IsDismissed) { m_session.Dismiss(); } //pass along the command so the char is added to the buffer int retVal = m_nextCommandHandler.Exec(ref pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut); bool handled = false; if (!typedChar.Equals(char.MinValue) && (char.IsLetterOrDigit(typedChar) || typedChar == '.')) { if ((m_session == null || m_session.IsDismissed) && autocompleteMode == AutocompleteModeType.Automatic) // If there is no active session, bring up completion { this.TriggerCompletion(); if (m_session != null && typedChar != '.') { m_session.Filter(); } } else //the completion session is already active, so just filter { if (m_session.SelectedCompletionSet != null && m_session.SelectedCompletionSet.Completions != null && m_session.SelectedCompletionSet.Completions.Count > 0 && m_session.SelectedCompletionSet.Completions[0].InsertionText.StartsWith(".")) { // For sorm reason m_session.Filter() filters by DisplayName, not InsertionText no matter what. // Probbly need to remimplement it in order to work properly, otherwise just restarting completion session. m_session.Dismiss(); this.TriggerCompletion(); } else { m_session.Filter(); } } if (m_session != null && m_session.Presenter != null) { handled = true; dynamic presenter = ExposedObject.From(m_session.Presenter); IIntellisensePresenter intelisensePresenter = m_session.Presenter; System.Windows.Controls.ContentControl surfaceElement = (System.Windows.Controls.ContentControl)presenter.SurfaceElement; surfaceElement.Focus(); } } else if ((autocompleteMode == AutocompleteModeType.Automatic || autocompleteMode == AutocompleteModeType.CtrlSpace) && (commandID == (uint)VSConstants.VSStd2KCmdID.AUTOCOMPLETE || commandID == (uint)VSConstants.VSStd2KCmdID.COMPLETEWORD)) { // Trigger completion on Ctrl + Space if (m_session == null || m_session.IsDismissed) // If there is no active session, bring up completion { this.TriggerCompletion(); if (m_session != null && GetLastTypedCharter() != '.') { m_session.Filter(); } } } else if (commandID == (uint)VSConstants.VSStd2KCmdID.BACKSPACE || //redo the filter if there is a deletion commandID == (uint)VSConstants.VSStd2KCmdID.DELETE) { if (m_session != null && !m_session.IsDismissed) { m_session.Filter(); } handled = true; } if (handled) { return(VSConstants.S_OK); } return(retVal); }