mouse_mode.dart 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. terminal.selection.clear();
  19. }
  20. @override
  21. void onPanStart(Terminal terminal, Position offset) {
  22. terminal.selection.init(offset);
  23. }
  24. @override
  25. void onPanUpdate(Terminal terminal, Position offset) {
  26. terminal.selection.update(offset);
  27. }
  28. }
  29. class MouseModeX10 extends MouseMode {
  30. const MouseModeX10();
  31. @override
  32. void onTap(Terminal terminal, Position offset) {
  33. final btn = 1;
  34. final px = offset.x + 1;
  35. final py = terminal.buffer.convertRawLineToViewLine(offset.y) + 1;
  36. final buffer = StringBuffer();
  37. buffer.writeCharCode(0x1b);
  38. buffer.write('[M');
  39. buffer.writeCharCode(btn + 32);
  40. buffer.writeCharCode(px + 32);
  41. buffer.writeCharCode(py + 32);
  42. if (terminal.onInput != null) {
  43. terminal.onInput(buffer.toString());
  44. }
  45. }
  46. }