public bool ExecuteCommand(MoveLastCaretDownCommandArgs args, CommandExecutionContext executionContext) { var broker = args.TextView.GetMultiSelectionBroker(); if (broker.HasMultipleSelections) { Selection toRemove = FindLastSelection(broker); var addNextArgs = new InsertNextMatchingCaretCommandArgs(args.TextView, args.SubjectBuffer); if (ExecuteCommand(addNextArgs, executionContext)) { if (broker.TryRemoveSelection(toRemove)) { return(broker.TryEnsureVisible(FindLastSelection(broker), EnsureSpanVisibleOptions.None)); } } } return(false); }
public CommandState GetCommandState(InsertNextMatchingCaretCommandArgs args) { return(CommandState.Available); }
public bool ExecuteCommand(InsertNextMatchingCaretCommandArgs args, CommandExecutionContext executionContext) { var broker = args.TextView.GetMultiSelectionBroker(); if (broker.PrimarySelection.IsEmpty) { broker.TryPerformActionOnSelection(broker.PrimarySelection, PredefinedSelectionTransformations.SelectCurrentWord, out _); return(true); } var navigator = TextSearchNavigatorFactoryService.CreateSearchNavigator(args.TextView.TextViewModel.EditBuffer); var primaryRegion = broker.PrimarySelection; string searchString = primaryRegion.Extent.GetText(); // Intentionally look at all whitespace here if (!string.IsNullOrEmpty(searchString)) { navigator.SearchTerm = searchString; navigator.SearchOptions = FindOptions.MatchCase | FindOptions.Multiline; var regionArray = broker.AllSelections.ToArray(); int primaryIndex = 0; for (; primaryIndex < regionArray.Length; primaryIndex++) { if (regionArray[primaryIndex] == broker.PrimarySelection) { break; } } if (primaryIndex != 0) { var wrappedLastRegion = regionArray[primaryIndex - 1]; navigator.StartPoint = wrappedLastRegion.End.Position; var spanStart = wrappedLastRegion.End.Position; var spanLength = primaryRegion.Start.Position - spanStart; navigator.SearchSpan = args.TextView.TextViewModel.EditBuffer.CurrentSnapshot.CreateTrackingSpan( new Span(spanStart, spanLength), SpanTrackingMode.EdgeInclusive); } else { navigator.StartPoint = broker.SelectionExtent.End.Position; navigator.SearchSpan = args.TextView.TextViewModel.EditBuffer.CurrentSnapshot.CreateTrackingSpan( new Span(0, args.TextView.TextViewModel.EditBuffer.CurrentSnapshot.Length), SpanTrackingMode.EdgeInclusive); navigator.SearchOptions = navigator.SearchOptions | FindOptions.Wrap; } if (navigator.Find()) { var found = navigator.CurrentResult.Value; if (!broker.SelectedSpans.OverlapsWith(found)) { var outliningManager = OutliningManagerService.GetOutliningManager(args.TextView); if (outliningManager != null) { outliningManager.ExpandAll(found, collapsible => true); } var addedRegion = InsertDiscoveredMatchRegion(broker, primaryRegion, found); broker.TryEnsureVisible(addedRegion, EnsureSpanVisibleOptions.None); return(true); } } } return(false); }