mouse_mode.dart 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import 'package:xterm/mouse/position.dart';
  2. import 'package:xterm/terminal/terminal.dart';
  3. abstract class MouseMode {
  4. const MouseMode();
  5. static const none = MouseModeNone();
  6. // static const x10 = MouseModeX10();
  7. // static const vt200 = MouseModeX10();
  8. // static const buttonEvent = MouseModeX10();
  9. void onTap(Terminal terminal, Position offset);
  10. void onPanStart(Terminal terminal, Position offset) {}
  11. void onPanUpdate(Terminal terminal, Position offset) {}
  12. }
  13. class MouseModeNone extends MouseMode {
  14. const MouseModeNone();
  15. @override
  16. void onTap(Terminal terminal, Position offset) {
  17. terminal.debug.onMsg('tap: $offset');
  18. }
  19. @override
  20. void onPanStart(Terminal terminal, Position offset) {
  21. terminal.selection.init(offset);
  22. }
  23. @override
  24. void onPanUpdate(Terminal terminal, Position offset) {
  25. terminal.selection.update(offset);
  26. }
  27. }
  28. class MouseModeX10 extends MouseMode {
  29. const MouseModeX10();
  30. @override
  31. void onTap(Terminal terminal, Position offset) {
  32. final btn = 1;
  33. final px = offset.x + 1;
  34. final py = terminal.buffer.convertRawLineToViewLine(offset.y) + 1;
  35. final buffer = StringBuffer();
  36. buffer.writeCharCode(0x1b);
  37. buffer.write('[M');
  38. buffer.writeCharCode(btn + 32);
  39. buffer.writeCharCode(px + 32);
  40. buffer.writeCharCode(py + 32);
  41. terminal.backend?.write(buffer.toString());
  42. }
  43. }