mouse_mode.dart 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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 onDoubleTap(Terminal terminal, Position offset) {}
  11. void onPanStart(Terminal terminal, Position offset) {}
  12. void onPanUpdate(Terminal terminal, Position offset) {}
  13. }
  14. class MouseModeNone extends MouseMode {
  15. const MouseModeNone();
  16. @override
  17. void onTap(Terminal terminal, Position offset) {
  18. terminal.debug.onMsg('tap: $offset');
  19. }
  20. @override
  21. void onDoubleTap(Terminal terminal, Position offset) {
  22. terminal.selectWordOrRow(offset);
  23. }
  24. @override
  25. void onPanStart(Terminal terminal, Position offset) {
  26. terminal.selection!.init(offset);
  27. }
  28. @override
  29. void onPanUpdate(Terminal terminal, Position offset) {
  30. terminal.selection!.update(offset);
  31. }
  32. }
  33. class MouseModeX10 extends MouseMode {
  34. const MouseModeX10();
  35. @override
  36. void onTap(Terminal terminal, Position offset) {
  37. final btn = 1;
  38. final px = offset.x + 1;
  39. final py = terminal.buffer.convertRawLineToViewLine(offset.y) + 1;
  40. final buffer = StringBuffer();
  41. buffer.writeCharCode(0x1b);
  42. buffer.write('[M');
  43. buffer.writeCharCode(btn + 32);
  44. buffer.writeCharCode(px + 32);
  45. buffer.writeCharCode(py + 32);
  46. terminal.backend?.write(buffer.toString());
  47. }
  48. }