xuty 4 лет назад
Родитель
Сommit
74765b298c
2 измененных файлов с 12 добавлено и 5 удалено
  1. 3 1
      lib/terminal/sbc.dart
  2. 9 4
      lib/terminal/terminal.dart

+ 3 - 1
lib/terminal/sbc.dart

@@ -2,11 +2,13 @@ import 'package:xterm/terminal/terminal.dart';
 
 typedef SbcHandler = void Function(int, Terminal);
 
+const sbcMaxCodepoint = 0x0f;
+
 final sbcHandlers = _sbcHandlers();
 
 // build single byte character lookup table
 List<SbcHandler?> _sbcHandlers() {
-  final result = List<SbcHandler?>.filled(0x0f, null);
+  final result = List<SbcHandler?>.filled(sbcMaxCodepoint + 1, null);
   result[0x05] = _voidHandler;
   result[0x07] = _bellHandler;
   result[0x08] = _backspaceReturnHandler;

+ 9 - 4
lib/terminal/terminal.dart

@@ -224,14 +224,19 @@ class Terminal with Observable {
   }
 
   void _processChar(int codePoint) {
-    final sbcHandler = sbcHandlers[codePoint];
+    // If the character doesn't have special effect. Write it directly to the
+    // buffer.
+    if (codePoint > sbcMaxCodepoint) {
+      debug.onChar(codePoint);
+      _buffer.writeChar(codePoint);
+      return;
+    }
 
+    // The character may have special effect.
+    final sbcHandler = sbcHandlers[codePoint];
     if (sbcHandler != null) {
       debug.onSbc(codePoint);
       sbcHandler(codePoint, this);
-    } else {
-      debug.onChar(codePoint);
-      _buffer.writeChar(codePoint);
     }
   }