| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import 'package:flutter/services.dart';
- import 'package:flutter/widgets.dart';
- import 'package:xterm/src/terminal.dart';
- import 'package:xterm/src/ui/controller.dart';
- import 'package:xterm/src/ui/selection_mode.dart';
- class TerminalActions extends StatelessWidget {
- const TerminalActions({
- super.key,
- required this.terminal,
- required this.controller,
- required this.child,
- });
- final Terminal terminal;
- final TerminalController controller;
- final Widget child;
- @override
- Widget build(BuildContext context) {
- return Actions(
- actions: {
- PasteTextIntent: CallbackAction<PasteTextIntent>(
- onInvoke: (intent) async {
- final data = await Clipboard.getData(Clipboard.kTextPlain);
- final text = data?.text;
- if (text != null) {
- terminal.paste(text);
- controller.clearSelection();
- }
- return null;
- },
- ),
- CopySelectionTextIntent: CallbackAction<CopySelectionTextIntent>(
- onInvoke: (intent) async {
- final selection = controller.selection;
- if (selection == null) {
- return;
- }
- final text = terminal.buffer.getText(selection);
- await Clipboard.setData(ClipboardData(text: text));
- return null;
- },
- ),
- SelectAllTextIntent: CallbackAction<SelectAllTextIntent>(
- onInvoke: (intent) {
- controller.setSelection(
- terminal.buffer.createAnchor(
- 0,
- terminal.buffer.height - terminal.viewHeight,
- ),
- terminal.buffer.createAnchor(
- terminal.viewWidth,
- terminal.buffer.height - 1,
- ),
- mode: SelectionMode.line,
- );
- return null;
- },
- ),
- },
- child: child,
- );
- }
- }
|