internal static Result <VsCommandTarget> Create( IVimBufferCoordinator vimBufferCoordinator, IVsTextView vsTextView, ITextManager textManager, IVsAdapter adapter, IDisplayWindowBroker broker, IKeyUtil keyUtil, IVimApplicationSettings vimApplicationSettings, ReadOnlyCollection <ICommandTargetFactory> commandTargetFactoryList) { var vsCommandTarget = new VsCommandTarget(vimBufferCoordinator, textManager, adapter, broker, keyUtil, vimApplicationSettings); var hresult = vsTextView.AddCommandFilter(vsCommandTarget, out IOleCommandTarget nextCommandTarget); if (ErrorHandler.Failed(hresult)) { return(Result.CreateError(hresult)); } var commandTargets = commandTargetFactoryList .Select(x => x.CreateCommandTarget(nextCommandTarget, vimBufferCoordinator)) .Where(x => x != null) .ToReadOnlyCollection(); vsCommandTarget.CompleteInit(nextCommandTarget, commandTargets); return(Result.CreateSuccess(vsCommandTarget)); }
/// <summary> /// Custom process the insert command if possible. This is handled by VsCommandTarget /// </summary> public override bool TryCustomProcess(ITextView textView, InsertCommand command) { if (VsCommandTarget.TryGet(textView, out VsCommandTarget vsCommandTarget)) { return(vsCommandTarget.TryCustomProcess(command)); } return(false); }
private void ConnectToOleCommandTarget(IVimBuffer vimBuffer, ITextView textView, IVsTextView vsTextView) { var broker = _displayWindowBrokerFactoryServcie.GetDisplayWindowBroker(textView); var vimBufferCoordinator = _bufferCoordinatorFactory.GetVimBufferCoordinator(vimBuffer); var result = VsCommandTarget.Create(vimBufferCoordinator, vsTextView, _textManager, _adapter, broker, _keyUtil, _vimApplicationSettings, _commandTargetFactoryList); if (result.IsSuccess) { // Store the value for debugging _vimBufferToCommandTargetMap[vimBuffer] = result.Value; } // Try and install the IVsFilterKeys adapter. This cannot be done synchronously here // because Venus projects are not fully initialized at this state. Merely querying // for properties cause them to corrupt internal state and prevents rendering of the // view. Occurs for aspx and .js pages void install() => VsFilterKeysAdapter.TryInstallFilterKeysAdapter(_adapter, vimBuffer); _protectedOperations.BeginInvoke(install); }
internal static bool TryGet(ITextView textView, out VsCommandTarget vsCommandTarget) { return textView.Properties.TryGetPropertySafe(s_key, out vsCommandTarget); }
internal static Result<VsCommandTarget> Create( IVimBufferCoordinator vimBufferCoordinator, IVsTextView vsTextView, ITextManager textManager, IVsAdapter adapter, IDisplayWindowBroker broker, IKeyUtil keyUtil, IVimApplicationSettings vimApplicationSettings, ReadOnlyCollection<ICommandTargetFactory> commandTargetFactoryList) { var vsCommandTarget = new VsCommandTarget(vimBufferCoordinator, textManager, adapter, broker, keyUtil, vimApplicationSettings); IOleCommandTarget nextCommandTarget; var hresult = vsTextView.AddCommandFilter(vsCommandTarget, out nextCommandTarget); if (ErrorHandler.Failed(hresult)) { return Result.CreateError(hresult); } var commandTargets = commandTargetFactoryList .Select(x => x.CreateCommandTarget(nextCommandTarget, vimBufferCoordinator)) .Where(x => x != null) .ToReadOnlyCollection(); vsCommandTarget.CompleteInit(nextCommandTarget, commandTargets); return Result.CreateSuccess(vsCommandTarget); }
internal static bool TryGet(ITextView textView, out VsCommandTarget vsCommandTarget) { return(textView.Properties.TryGetPropertySafe(s_key, out vsCommandTarget)); }