Forráskód Böngészése

customize selection word separators

jun.zhou 3 éve
szülő
commit
0095b47bdf
2 módosított fájl, 24 hozzáadás és 7 törlés
  1. 8 4
      lib/src/core/buffer/buffer.dart
  2. 16 3
      lib/src/terminal.dart

+ 8 - 4
lib/src/core/buffer/buffer.dart

@@ -18,10 +18,13 @@ class Buffer {
 
   final bool isAltBuffer;
 
+  Set<int>? wordSeparators;
+
   Buffer(
     this.terminal, {
     required this.maxLines,
     required this.isAltBuffer,
+    this.wordSeparators,
   }) {
     for (int i = 0; i < terminal.viewHeight; i++) {
       lines.push(_newEmptyLine());
@@ -464,12 +467,12 @@ class Buffer {
     return line;
   }
 
-  static final _kWordSeparators = <int>{
+  static final _defaultWordSeparators = <int>{
     0,
     r' '.codeUnitAt(0),
     r'.'.codeUnitAt(0),
     r':'.codeUnitAt(0),
-    // r'-'.codeUnitAt(0),
+    r'-'.codeUnitAt(0),
     r'\'.codeUnitAt(0),
     r'"'.codeUnitAt(0),
     r'*'.codeUnitAt(0),
@@ -479,6 +482,7 @@ class Buffer {
   };
 
   BufferRangeLine? getWordBoundary(CellOffset position) {
+    var separators = wordSeparators ?? _defaultWordSeparators;
     if (position.y >= lines.length) {
       return null;
     }
@@ -492,7 +496,7 @@ class Buffer {
         break;
       }
       final char = line.getCodePoint(start - 1);
-      if (_kWordSeparators.contains(char)) {
+      if (separators.contains(char)) {
         break;
       }
       start--;
@@ -503,7 +507,7 @@ class Buffer {
         break;
       }
       final char = line.getCodePoint(end);
-      if (_kWordSeparators.contains(char)) {
+      if (separators.contains(char)) {
         break;
       }
       end++;

+ 16 - 3
lib/src/terminal.dart

@@ -62,6 +62,8 @@ class Terminal with Observable implements TerminalState, EscapeHandler {
   /// Flag to toggle os specific behaviors.
   final TerminalTargetPlatform platform;
 
+  Set<int>? wordSeparators;
+
   Terminal({
     this.maxLines = 1000,
     this.onBell,
@@ -73,6 +75,7 @@ class Terminal with Observable implements TerminalState, EscapeHandler {
     this.inputHandler = defaultInputHandler,
     this.mouseHandler = defaultMouseHandler,
     this.reflowEnabled = true,
+    this.wordSeparators,
   });
 
   late final _parser = EscapeParser(this);
@@ -81,9 +84,19 @@ class Terminal with Observable implements TerminalState, EscapeHandler {
 
   late var _buffer = _mainBuffer;
 
-  late final _mainBuffer = Buffer(this, maxLines: maxLines, isAltBuffer: false);
-
-  late final _altBuffer = Buffer(this, maxLines: maxLines, isAltBuffer: true);
+  late final _mainBuffer = Buffer(
+    this,
+    maxLines: maxLines,
+    isAltBuffer: false,
+    wordSeparators: wordSeparators,
+  );
+
+  late final _altBuffer = Buffer(
+    this,
+    maxLines: maxLines,
+    isAltBuffer: true,
+    wordSeparators: wordSeparators,
+  );
 
   final _tabStops = TabStops();