xuty 5 лет назад
Родитель
Сommit
f2856b7da0
4 измененных файлов с 24 добавлено и 8 удалено
  1. 11 7
      lib/terminal/osc.dart
  2. 8 0
      lib/terminal/platform.dart
  3. 3 0
      lib/terminal/terminal.dart
  4. 2 1
      lib/xterm.dart

+ 11 - 7
lib/terminal/osc.dart

@@ -1,19 +1,23 @@
 import 'package:async/async.dart';
 import 'package:xterm/terminal/terminal.dart';
 
-bool _isOscTerminator(int codePoint) {
-  const terminator = {0x07, 0x5c, 0x00};
-  return terminator.contains(codePoint);
-}
+// bool _isOscTerminator(int codePoint) {
+//   final terminator = {0x07, 0x00};
+//   // final terminator = {0x07, 0x5c};
+//   return terminator.contains(codePoint);
+// }
 
-Future<List<String>> _parseOsc(StreamQueue<int> queue) async {
+Future<List<String>> _parseOsc(
+  StreamQueue<int> queue,
+  Set<int> terminators,
+) async {
   final params = <String>[];
   final param = StringBuffer();
 
   while (true) {
     final char = await queue.next;
 
-    if (_isOscTerminator(char)) {
+    if (terminators.contains(char)) {
       params.add(param.toString());
       break;
     }
@@ -32,7 +36,7 @@ Future<List<String>> _parseOsc(StreamQueue<int> queue) async {
 }
 
 Future<void> oscHandler(StreamQueue<int> queue, Terminal terminal) async {
-  final params = await _parseOsc(queue);
+  final params = await _parseOsc(queue, terminal.platform.oscTerminators);
   terminal.debug.onOsc(params);
 
   if (params.isEmpty) {

+ 8 - 0
lib/terminal/platform.dart

@@ -0,0 +1,8 @@
+class PlatformBehavior {
+  const PlatformBehavior({this.oscTerminators});
+
+  final Set<int> oscTerminators;
+
+  static const unix = PlatformBehavior(oscTerminators: {0x07, 0x5c});
+  static const windows = PlatformBehavior(oscTerminators: {0x07, 0x00});
+}

+ 3 - 0
lib/terminal/terminal.dart

@@ -13,6 +13,7 @@ import 'package:xterm/input/keytab/keytab_escape.dart';
 import 'package:xterm/input/keytab/keytab_record.dart';
 import 'package:xterm/mouse/mouse_mode.dart';
 import 'package:xterm/terminal/ansi.dart';
+import 'package:xterm/terminal/platform.dart';
 import 'package:xterm/terminal/sbc.dart';
 import 'package:xterm/terminal/tabs.dart';
 import 'package:xterm/utli/debug_handler.dart';
@@ -29,6 +30,7 @@ class Terminal with Observable {
     this.onBell,
     this.onTitleChange,
     this.onIconChange,
+    this.platform = PlatformBehavior.unix,
     int maxLines,
   }) {
     _maxLines = maxLines;
@@ -113,6 +115,7 @@ class Terminal with Observable {
   final BellHandler onBell;
   final TitleChangeHandler onTitleChange;
   final IconChangeHandler onIconChange;
+  final PlatformBehavior platform;
 
   void close() {
     _input.close();

+ 2 - 1
lib/xterm.dart

@@ -1,3 +1,4 @@
 library xterm;
 
-export 'terminal/terminal.dart';
+export 'terminal/terminal.dart';
+export 'terminal/platform.dart';