Bläddra i källkod

adds currentSearchHit to SearchResult

devmil 4 år sedan
förälder
incheckning
c68c288509

+ 12 - 0
lib/terminal/terminal.dart

@@ -738,6 +738,18 @@ class Terminal with Observable implements TerminalUiInteraction {
   @override
   TerminalSearchResult get userSearchResult => _userSearchTask.searchResult;
 
+  @override
+  int get numberOfSearchHits => userSearchResult.allHits.length;
+
+  @override
+  int get currentSearchHit => userSearchResult.currentSearchHit;
+
+  @override
+  void set currentSearchHit(int currentSearchHit) {
+    userSearchResult.currentSearchHit = currentSearchHit;
+    refresh();
+  }
+
   @override
   TerminalSearchOptions get userSearchOptions => _userSearchTask.options;
 

+ 15 - 0
lib/terminal/terminal_isolate.dart

@@ -36,6 +36,7 @@ enum _IsolateCommand {
   updateComposingString,
   updateSearchPattern,
   updateSearchOptions,
+  updateCurrentSearchHit,
 }
 
 enum _IsolateEvent {
@@ -172,6 +173,9 @@ void terminalMain(SendPort port) async {
       case _IsolateCommand.updateSearchOptions:
         _terminal?.userSearchOptions = msg[1];
         break;
+      case _IsolateCommand.updateCurrentSearchHit:
+        _terminal?.currentSearchHit = msg[1];
+        break;
     }
   }
 }
@@ -555,6 +559,17 @@ class TerminalIsolate with Observable implements TerminalUiInteraction {
   TerminalSearchResult get userSearchResult =>
       _lastState?.searchResult ?? TerminalSearchResult.empty();
 
+  @override
+  int get numberOfSearchHits => userSearchResult.allHits.length;
+
+  @override
+  int get currentSearchHit => userSearchResult.currentSearchHit;
+
+  @override
+  void set currentSearchHit(int currentSearchHit) {
+    _sendPort?.send([_IsolateCommand.updateCurrentSearchHit, currentSearchHit]);
+  }
+
   TerminalSearchOptions? _localUserSearchOptionsCache;
 
   @override

+ 15 - 0
lib/terminal/terminal_search.dart

@@ -6,6 +6,7 @@ import 'package:xterm/util/constants.dart';
 class TerminalSearchResult {
   final _hitsByLine = Map<int, List<TerminalSearchHit>>();
   late final _allHits;
+  int _currentSearchHit = 0;
 
   TerminalSearchResult.fromHits(List<TerminalSearchHit> hits) {
     _allHits = hits;
@@ -23,6 +24,11 @@ class TerminalSearchResult {
         _hitsByLine[hit.endLineIndex]!.add(hit);
       }
     }
+    if (_allHits.length > 0) {
+      _currentSearchHit = 1;
+    } else {
+      _currentSearchHit = 0;
+    }
   }
 
   TerminalSearchResult.empty()
@@ -30,6 +36,15 @@ class TerminalSearchResult {
 
   List<TerminalSearchHit> get allHits => _allHits;
 
+  int get currentSearchHit => _currentSearchHit;
+  void set currentSearchHit(int currentSearchHit) {
+    if (_allHits.length <= 0) {
+      _currentSearchHit = 0;
+    } else {
+      _currentSearchHit = currentSearchHit.clamp(1, _allHits.length).toInt();
+    }
+  }
+
   bool hasEntriesForLine(int line) {
     return _hitsByLine.containsKey(line);
   }

+ 9 - 0
lib/terminal/terminal_ui_interaction.dart

@@ -138,6 +138,15 @@ abstract class TerminalUiInteraction with Observable {
   /// returns the list of search hits
   TerminalSearchResult get userSearchResult;
 
+  /// gets the number of search hits
+  int get numberOfSearchHits;
+
+  /// gets the current search hit
+  int get currentSearchHit;
+
+  /// sets the current search hit (gets clamped to the valid bounds)
+  void set currentSearchHit(int currentSearchHit);
+
   /// gets the current user search options
   TerminalSearchOptions get userSearchOptions;