Git Product home page Git Product logo

terminalstudio / xterm.dart Goto Github PK

View Code? Open in Web Editor NEW
454.0 454.0 93.0 6.56 MB

๐Ÿ’ป xterm.dart is a fast and fully-featured terminal emulator for Flutter, with support for mobile and desktop platforms.

Home Page: https://pub.dev/packages/xterm

License: MIT License

Dart 90.51% Kotlin 0.02% Swift 0.31% Objective-C 0.01% CMake 3.53% C++ 4.31% C 0.26% HTML 0.33% Python 0.08% Shell 0.13% Ruby 0.51%
dart emulator flutter terminal terminal-emulator vte

xterm.dart's People

Contributors

devmil avatar djnalluri avatar domesticmouse avatar jpnurmi avatar linhanyu avatar lucasaschenbach avatar mengyanshou avatar michaellee8 avatar nuc134r avatar seriousbusiness100 avatar tauu avatar timburks avatar xtyxtyx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xterm.dart's Issues

TerminalIsolate will block on start()

When using TerminalIsolate:

Future<TerminalIsolate> _ensureTerminalStarted() async {
    print("start");
    if (terminal == null) {
      terminal = TerminalIsolate(
        backend: FakeTerminalBackend(),
        maxLines: 10000,
        theme: widget.theme,
      );
    }

    if (!terminal!.isReady) {
      await terminal!.start(); // block here
    }
    print("end");
    return terminal!;
  }

the code will block on start().

Doctor summary (to see all details, run flutter doctor -v):
[โœ“] Flutter (Channel stable, 2.5.3, on macOS 12.1 21C52 darwin-arm, locale zh-Hans-CN)
[!] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    โœ— cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    โœ— Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
[โœ“] Xcode - develop for iOS and macOS
[โœ“] Chrome - develop for the web
[โœ“] Android Studio (version 2020.3)
[โœ“] IntelliJ IDEA Ultimate Edition (version 2021.2.1)
[โœ“] VS Code (version 1.63.2)
[โœ“] Connected device (2 available)

! Doctor found issues in 1 category.

Scroll not working

When you add text to the terminal (Terminal.write), then scroll, you start in a weird position.

about focus disable

Press the up,down, left and right keys on the keyboard, will cause the automatic focus other widget.
ex.
press "Arrow Down" key, TerminalView's focus disable, the focus will appears on the button.

keyfocus

Paste and copy inside of terminal using keyboard

Just a quick question, is it possible to copy/paste text inside of the Terminalview? If yes what's the keyboard shortcut?
I tried the following combinations which didn't work on my Macbook:

  • ctrl + v
  • ctrl + shift + v
  • command + v
  • command + shift + v

none of them worked

Crash in mobile platform when use vim or tmux

image

frontend/terminal_view.dart

this api would trigger reflow and finally run into setScrollOffsetFromBottom, which refresh and make rebuild again. [rebuild in rebuild progress] is not allow so it cause crash in flutter. which happened in vim or tmux application.

image

I think it should be carefully use rebuild api in builder: )

Uncaught error if TerminalView is placed inside a Column widget

Running as a macOS app, I'm getting the following error:

โ•โ•โ•ก EXCEPTION CAUGHT BY WIDGETS LIBRARY โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
The following UnsupportedError was thrown building LayoutBuilder:
Unsupported operation: Infinity or NaN toInt

The relevant error-causing widget was:
  LayoutBuilder
  LayoutBuilder:file:///Users/pouriamellati/.pub-cache/hosted/pub.dartlang.org/xterm-2.6.0/lib/frontend/terminal_view.dart:187:16

When the exception was thrown, this was the stack:
#0      double.toInt (dart:core-patch/double.dart)
#1      double.floor (dart:core-patch/double.dart:201:34)
#2      _TerminalViewState.updateTerminalSize (package:xterm/frontend/terminal_view.dart:393:58)
#3      _TerminalViewState.onWidgetSize (package:xterm/frontend/terminal_view.dart:382:5)
#4      _TerminalViewState.build.<anonymous closure> (package:xterm/frontend/terminal_view.dart:188:11)
#5      _LayoutBuilderElement._layout.layoutCallback (package:flutter/src/widgets/layout_builder.dart:122:31)
#6      BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2600:19)
#7      _LayoutBuilderElement._layout (package:flutter/src/widgets/layout_builder.dart:156:12)
#8      RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1997:59)
#9      PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:918:15)
#10     RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1997:14)
#11     RenderConstrainedLayoutBuilder.rebuildIfNecessary (package:flutter/src/widgets/layout_builder.dart:230:7)
#12     _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:319:5)
#13     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#14     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#15     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#16     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#17     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#18     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:56:11)
#19     RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:829:43)
#20     RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:931:32)
#21     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#22     RenderPositionedBox.performLayout (package:flutter/src/rendering/shifted_box.dart:437:14)
#23     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#24     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:12)
#25     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1005:7)
#26     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:240:7)
#27     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:403:14)
#28     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#29     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#30     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#31     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#32     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1376:11)
#33     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#34     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#35     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#36     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#37     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#38     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#39     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#40     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:56:11)
#41     RenderStack._computeSize (package:flutter/src/rendering/stack.dart:570:43)
#42     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:597:12)
#43     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#44     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#45     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#46     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#47     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#48     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#49     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#50     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#51     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#52     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#53     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#54     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#55     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#56     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#57     RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3430:13)
#58     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#59     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#60     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#61     _RenderTheatre.performLayout (package:flutter/src/widgets/overlay.dart:751:15)
#62     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#63     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#64     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#65     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#66     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#67     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#68     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#69     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#70     RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:545:11)
#71     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#72     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#73     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#74     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#75     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#76     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#77     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#78     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#79     RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
#80     RenderView.performLayout (package:flutter/src/rendering/view.dart:165:14)
#81     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1731:7)
#82     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:887:18)
#83     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:497:19)
#84     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:883:13)
#85     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:363:5)
#86     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15)
#87     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1081:9)
#88     SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:862:7)
(elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)

โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

Another exception was thrown: A RenderFlex overflowed by 99456 pixels on the bottom.

Minimal code to reproduce this is:

import 'package:flutter/material.dart';
import 'package:xterm/xterm.dart';
import 'package:xterm/flutter.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.teal,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final terminal = Terminal(
    maxLines: 10000,
  );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Hello, terminal!"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: <Widget>[
            TerminalView(
              terminal: terminal,
              style: const TerminalStyle(fontFamily: ['Cascadia Mono']),
            ),
          ],
        ),
      ),
    );
  }
}

Cursor movement wrong in some situations

There are some situations where the cursor movement is wrong.
I have recorded an example (using Tab to get command suggestions).

First try (works): entering "cmatr", then Tab (only one hit) => cmatrix is written โœ”๏ธ
Second try (breaks): entering "cm", then Tab (3 hits) => Cursor is in the wrong line and writes "cm" over the result โ—

ReproductionSample

Custom FontFamily in TerminalStyle

I would like to set the terminal font using GoogleFonts but in order to do this I would need to pass a TextStyle rather than a font name. Is there a reason why the TerminalStyle does not accept a TextStyle? I can contribute a PR if you would be open to the change and if there are no other blockers. Thank you

Basis Keys and Shortcuts as Input not working

Platform: Android

Any Key that is not printable is not working... How should a terminal be used if we can't use things like backspace, Ctr-....

So i wrapped a RawKeyboardListener around the TerminalView and implemented some basic stuff based on the ASCII-Table:
https://github.com/flutter/flutter_web/blob/master/packages/flutter_web/lib/src/services/keyboard_maps.dart
http://www.physics.udel.edu/~watson/scen103/ascii.html

onKey: (event) {
  if (event.runtimeType.toString() == "RawKeyDownEvent") {
    RawKeyEventDataAndroid data = event.data as RawKeyEventDataAndroid;
    if (!_keyDownBuffer.contains(data.keyCode)) _keyDownBuffer.add(data.keyCode);
  }else if (event.runtimeType.toString() == "RawKeyUpEvent") {
    List<int> bytes;
    if (_keyDownBuffer.length == 1) {
      switch (_keyDownBuffer[0]) {
        case 19: bytes = [0x1b, 0x5b, 0x41]; break; // arrow up
        case 20: bytes = [0x1b, 0x5b, 0x42]; break; // arrow down
        case 21: bytes = [0x1b, 0x5b, 0x44]; break; // arrow left
        case 22: bytes = [0x1b, 0x5b, 0x43]; break; // arrow right
        case 61: bytes = [0x9]; break; // tab
        case 67: bytes = [0x8]; break; // backspace
      }
    } else if (_keyDownBuffer.length == 2) {
      switch (_keyDownBuffer[0]) {
        case 113: // Ctrl
          switch (_keyDownBuffer[1]) {
            case 29: bytes = [0x1]; break; // A (start of heading)
            case 30: bytes = [0x2]; break; // B (start of text)
            case 31: bytes = [0x3]; break; // C (end of text)
            case 32: bytes = [0x4]; break; // D (end of xmit)
            case 33: bytes = [0x5]; break; // E (enquiry)
            case 34: bytes = [0x6]; break; // F (acknowledge)
            case 35: bytes = [0x7]; break; // G (bell)
            case 36: bytes = [0x8]; break; // H (backspace)
            case 37: bytes = [0x9]; break; // I (horizontal tab)
            case 38: bytes = [0x10]; break; // J (line feed)
            case 39: bytes = [0x11]; break; // K (vertical tab)
            case 40: bytes = [0x12]; break; // L (form feed)
            case 41: bytes = [0x13]; break; // M (carriage feed)
            case 42: bytes = [0x14]; break; // N (shift out)
            case 43: bytes = [0x15]; break; // O (shift in)
            case 44: bytes = [0x16]; break; // P (data line escape)
            case 45: bytes = [0x17]; break; // Q (device control 1)
            case 46: bytes = [0x18]; break; // R (device control 2)
            case 47: bytes = [0x19]; break; // S (device control 3)
            case 48: bytes = [0x20]; break; // T (device control 4)
            case 49: bytes = [0x21]; break; // U (neg acknowledge)
            case 50: bytes = [0x22]; break; // V (synchronous idel)
            case 51: bytes = [0x23]; break; // W (end of xmit block)
            case 52: bytes = [0x18]; break; // X (cancel)
            case 53: bytes = [0x19]; break; // Y (end of medium)
            case 54: bytes = [0x1a]; break; // Z (substitute)
          }
          break;
      }
    }
    // send to serial
    _keyDownBuffer.clear();
    if (bytes != null && bytes.length != 0) globals.platform.invokeMethod("sendBytes", Uint8List.fromList(bytes));
  }
}

Could we get a listener like the onInput were we can just send the bytes with non printable stuff to the backend? This solution is really bad since also flutter reacts to some stuff and the keyboard disappears or the focus get's lost...

How can I disable console input?

Hello, I am implementing a console for a very specific purpose.

I have 2 questions.

Can I disable the cursor (and entire input system) so that I can implement my own input?
or
Is there an easy way to retrieve text on submit instead of every character inputted?

Xterm input_map file produces an error when building android application

Since I added the xterm plugin to my app, it produces an error when building the input_map.dart file:

`../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:5:22: Error: Member not found: 'none'.
LogicalKeyboardKey.none.keyId: TerminalKey.none,
^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:11:22: Error: Member not found: 'turbo'.
LogicalKeyboardKey.turbo.keyId: TerminalKey.turbo,
^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:12:22: Error: Member not found: 'privacyScreenToggle'.
LogicalKeyboardKey.privacyScreenToggle.keyId: TerminalKey.privacyScreenToggle,
^^^^^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:15:22: Error: Member not found: 'displayToggleIntExt'.
LogicalKeyboardKey.displayToggleIntExt.keyId: TerminalKey.displayToggleIntExt,
^^^^^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:16:22: Error: Member not found: 'usbReserved'.
LogicalKeyboardKey.usbReserved.keyId: TerminalKey.usbReserved,
^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:17:22: Error: Member not found: 'usbErrorRollOver'.
LogicalKeyboardKey.usbErrorRollOver.keyId: TerminalKey.usbErrorRollOver,
^^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:18:22: Error: Member not found: 'usbPostFail'.
LogicalKeyboardKey.usbPostFail.keyId: TerminalKey.usbPostFail,
^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:19:22: Error: Member not found: 'usbErrorUndefined'.
LogicalKeyboardKey.usbErrorUndefined.keyId: TerminalKey.usbErrorUndefined,
^^^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:158:22: Error: Member not found: 'numpadBackspace'.
LogicalKeyboardKey.numpadBackspace.keyId: TerminalKey.numpadBackspace,
^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:159:22: Error: Member not found: 'numpadMemoryStore'.
LogicalKeyboardKey.numpadMemoryStore.keyId: TerminalKey.numpadMemoryStore,
^^^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:160:22: Error: Member not found: 'numpadMemoryRecall'.
LogicalKeyboardKey.numpadMemoryRecall.keyId: TerminalKey.numpadMemoryRecall,
^^^^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:161:22: Error: Member not found: 'numpadMemoryClear'.
LogicalKeyboardKey.numpadMemoryClear.keyId: TerminalKey.numpadMemoryClear,
^^^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:162:22: Error: Member not found: 'numpadMemoryAdd'.
LogicalKeyboardKey.numpadMemoryAdd.keyId: TerminalKey.numpadMemoryAdd,
^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:163:22: Error: Member not found: 'numpadMemorySubtract'.
LogicalKeyboardKey.numpadMemorySubtract.keyId:
^^^^^^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:165:22: Error: Member not found: 'numpadSignChange'.
LogicalKeyboardKey.numpadSignChange.keyId: TerminalKey.numpadSignChange,
^^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:166:22: Error: Member not found: 'numpadClear'.
LogicalKeyboardKey.numpadClear.keyId: TerminalKey.numpadClear,
^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:167:22: Error: Member not found: 'numpadClearEntry'.
LogicalKeyboardKey.numpadClearEntry.keyId: TerminalKey.numpadClearEntry,
^^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:180:22: Error: Member not found: 'brightnessToggle'.
LogicalKeyboardKey.brightnessToggle.keyId: TerminalKey.brightnessToggle,
^^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:181:22: Error: Member not found: 'brightnessMinimum'.
LogicalKeyboardKey.brightnessMinimum.keyId: TerminalKey.brightnessMinimum,
^^^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:182:22: Error: Member not found: 'brightnessMaximum'.
LogicalKeyboardKey.brightnessMaximum.keyId: TerminalKey.brightnessMaximum,
^^^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:183:22: Error: Member not found: 'brightnessAuto'.
LogicalKeyboardKey.brightnessAuto.keyId: TerminalKey.brightnessAuto,
^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:186:22: Error: Member not found: 'programGuide'.
LogicalKeyboardKey.programGuide.keyId: TerminalKey.programGuide,
^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:201:22: Error: Member not found: 'bassBoost'.
LogicalKeyboardKey.bassBoost.keyId: TerminalKey.bassBoost,
^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:202:22: Error: Member not found: 'mediaSelect'.
LogicalKeyboardKey.mediaSelect.keyId: TerminalKey.mediaSelect,
^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:208:22: Error: Member not found: 'launchApp2'.
LogicalKeyboardKey.launchApp2.keyId: TerminalKey.launchApp2,
^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:209:22: Error: Member not found: 'launchApp1'.
LogicalKeyboardKey.launchApp1.keyId: TerminalKey.launchApp1,
^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:210:22: Error: Member not found: 'launchInternetBrowser'.
LogicalKeyboardKey.launchInternetBrowser.keyId:
^^^^^^^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:213:22: Error: Member not found: 'lockScreen'.
LogicalKeyboardKey.lockScreen.keyId: TerminalKey.lockScreen,
^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:215:22: Error: Member not found: 'selectTask'.
LogicalKeyboardKey.selectTask.keyId: TerminalKey.selectTask,
^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:216:22: Error: Member not found: 'launchDocuments'.
LogicalKeyboardKey.launchDocuments.keyId: TerminalKey.launchDocuments,
^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:218:22: Error: Member not found: 'launchKeyboardLayout'.
LogicalKeyboardKey.launchKeyboardLayout.keyId:
^^^^^^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:222:22: Error: Member not found: 'launchAudioBrowser'.
LogicalKeyboardKey.launchAudioBrowser.keyId: TerminalKey.launchAudioBrowser,
^^^^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:241:22: Error: Member not found: 'keyboardLayoutSelect'.
LogicalKeyboardKey.keyboardLayoutSelect.keyId:
^^^^^^^^^^^^^^^^^^^^
../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:243:22: Error: Member not found: 'showAllWindows'.
LogicalKeyboardKey.showAllWindows.keyId: TerminalKey.showAllWindows,
^^^^^^^^^^^^^^

FAILURE: Build failed with an exception.

  • Where:
    Script '/home/lecomte/snap/flutter/common/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 1100

  • What went wrong:
    Execution failed for task ':app:compileFlutterBuildDebug'.

Process 'command '/home/lecomte/snap/flutter/common/flutter/bin/flutter'' finished with non-zero exit value 1

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 35s
Exception: Gradle task assembleDebug failed with exit code 1`

In addition, I check this file on Github, and I see that this is not the same version.

Do you have a solution ?

Vim dosen't render properly

Use vim to open a text file. First, move cursor to the file bottom, then, move cursor up. When cursor hit the top of screen, vim dose not scroll up properly. Only first line content changed, other lines remain unchanged.

Support dartssh2

Hi,

in your example you are using an old version of dartssh2. If i try to use the latest version of dartssh2, it stucks on connecting unfortunately and the xterm doesn't refresh. Is possibile to use the latest version of xterm with the latest version of dartssh2? In particular, i mean the SSH implementation. The SSH implementation is totally different on dartssh2 page. On your example is reported totally differently

Backspace not working

OS: Linux (Manjaro)
Flutter version: 1.26.0-1.0.pre
Dart version: 2.10.5
xterm version: 1.1.1+1

I created a brand new app and reproduced the exact code that is in the example section. The app ran but every time I try to delete a character with the backspace key, it adds an empty space char.

example ssh.dart: crash when opening text file with vim

open a text file on linux server, hen a line of text file has thousands of characters, exception occurred:

flutter: ssh://xxx:22: ssh negotiated { [email protected], hostkey=ssh-ed25519, cipher=aes128-ctr, mac=hmac-sha1, compress=none }
[ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: RangeError: Invalid value: Not in inclusive range 0..44: 45
#0      CircularList.[]
package:xterm/util/circular_list.dart:58
#1      Buffer.getViewLine
package:xterm/buffer/buffer.dart:127
#2      Buffer.currentLine
package:xterm/buffer/buffer.dart:131
#3      Buffer.writeChar
package:xterm/buffer/buffer.dart:100
#4      Terminal._processChar
package:xterm/terminal/terminal.dart:293
#5      Terminal._processInput
package:xterm/terminal/terminal.dart:284
#6      Terminal.write
package:xterm/terminal/terminal.dart:243
#7      _rootRunUnary (dart:async/zone.dart:1436:47)
#8      _CustomZone.runUnary (dart:async/zone.dart:1335:19)
#9      _CustomZone.runUnaryGuarded (dart:async/zone.dart:1244:7)
#10     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:341:11)
#11     _DelayedData.perform (dart:async/stream_impl.dart:591:14)
#12     _StreamImplEvents.handleNext (dart:async/stream_impl.dart:706:11)
#13     _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:663:7)
#14     _rootRun (dart:async/zone.dart:1420:47)
#15     _CustomZone.run (dart:async/zone.dart:1328:19)
#16     _CustomZone.runGuarded (dart:async/zone.dart:1236:7)
#17     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1276:23)
#18     _rootRun (dart:async/zone.dart:1428:13)
#19     _CustomZone.run (dart:async/zone.dart:1328:19)

flutter doctor:

Doctor summary (to see all details, run flutter doctor -v):
[โœ“] Flutter (Channel stable, 2.5.3, on macOS 12.1 21C52 darwin-arm, locale zh-Hans-CN)
[!] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    โœ— cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    โœ— Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
[โœ“] Xcode - develop for iOS and macOS
[โœ“] Chrome - develop for the web
[โœ“] Android Studio (version 2020.3)
[โœ“] IntelliJ IDEA Ultimate Edition (version 2021.2.1)
[โœ“] VS Code (version 1.63.2)
[โœ“] Connected device (2 available)

! Doctor found issues in 1 category.

Can the xterm package run on Chrome?

I have git-cloned the repository of xterm and set the host, username and password parameters of /example/lib/ssh.dart.

The example/lib/ssh.dart runs smoothly on Android emulator (API 30) (except for the physical BACKSPACE key of my bluetooth keyboard which does not work).

But the very same example/lib/ssh.dart does not run on Chrome (web-javascript). It is stuck to "connecting ssh://my.host.com:my_port..."

It is said in the xterm package description at pub.dev: "(...) with support for mobile and desktop platforms." Perhaps web platform is not supported yet?

Accents not working

When I try to insert a letter with accents it looks as if I had pressed the button 2 times.

image

Flutter doctor:

Doctor summary (to see all details, run flutter doctor -v):
[โœ“] Flutter (Channel dev, 2.3.0-12.1.pre, on Arch Linux 5.12.5-arch1-1, locale en_US.UTF-8)
[โœ“] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[โœ—] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
[โœ“] Linux toolchain - develop for Linux desktop
[โœ“] Android Studio (version 4.1)
[โœ“] Connected device (2 available)

Xterm 2.0.0 Help

Can you tell me how to solve the problem below?

dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
xterm: ^2.0.0

Failed to build iOS app
Error output from Xcode build:
โ†ณ
** BUILD FAILED **

Xcode's output:
โ†ณ
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:5:22: Error: Member not found: 'none'.
LogicalKeyboardKey.none.keyId: TerminalKey.none,
^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:11:22: Error: Member not found: 'turbo'.
LogicalKeyboardKey.turbo.keyId: TerminalKey.turbo,
^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:12:22: Error: Member not found: 'privacyScreenToggle'.
LogicalKeyboardKey.privacyScreenToggle.keyId: TerminalKey.privacyScreenToggle,
^^^^^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:15:22: Error: Member not found: 'displayToggleIntExt'.
LogicalKeyboardKey.displayToggleIntExt.keyId: TerminalKey.displayToggleIntExt,
^^^^^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:16:22: Error: Member not found: 'usbReserved'.
LogicalKeyboardKey.usbReserved.keyId: TerminalKey.usbReserved,
^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:17:22: Error: Member not found: 'usbErrorRollOver'.
LogicalKeyboardKey.usbErrorRollOver.keyId: TerminalKey.usbErrorRollOver,
^^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:18:22: Error: Member not found: 'usbPostFail'.
LogicalKeyboardKey.usbPostFail.keyId: TerminalKey.usbPostFail,
^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:19:22: Error: Member not found: 'usbErrorUndefined'.
LogicalKeyboardKey.usbErrorUndefined.keyId: TerminalKey.usbErrorUndefined,
^^^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:158:22: Error: Member not found: 'numpadBackspace'.
LogicalKeyboardKey.numpadBackspace.keyId: TerminalKey.numpadBackspace,
^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:159:22: Error: Member not found: 'numpadMemoryStore'.
LogicalKeyboardKey.numpadMemoryStore.keyId: TerminalKey.numpadMemoryStore,
^^^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:160:22: Error: Member not found: 'numpadMemoryRecall'.
LogicalKeyboardKey.numpadMemoryRecall.keyId: TerminalKey.numpadMemoryRecall,
^^^^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:161:22: Error: Member not found: 'numpadMemoryClear'.
LogicalKeyboardKey.numpadMemoryClear.keyId: TerminalKey.numpadMemoryClear,
^^^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:162:22: Error: Member not found: 'numpadMemoryAdd'.
LogicalKeyboardKey.numpadMemoryAdd.keyId: TerminalKey.numpadMemoryAdd,
^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:163:22: Error: Member not found: 'numpadMemorySubtract'.
LogicalKeyboardKey.numpadMemorySubtract.keyId:
^^^^^^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:165:22: Error: Member not found: 'numpadSignChange'.
LogicalKeyboardKey.numpadSignChange.keyId: TerminalKey.numpadSignChange,
^^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:166:22: Error: Member not found: 'numpadClear'.
LogicalKeyboardKey.numpadClear.keyId: TerminalKey.numpadClear,
^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:167:22: Error: Member not found: 'numpadClearEntry'.
LogicalKeyboardKey.numpadClearEntry.keyId: TerminalKey.numpadClearEntry,
^^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:180:22: Error: Member not found: 'brightnessToggle'.
LogicalKeyboardKey.brightnessToggle.keyId: TerminalKey.brightnessToggle,
^^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:181:22: Error: Member not found: 'brightnessMinimum'.
LogicalKeyboardKey.brightnessMinimum.keyId: TerminalKey.brightnessMinimum,
^^^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:182:22: Error: Member not found: 'brightnessMaximum'.
LogicalKeyboardKey.brightnessMaximum.keyId: TerminalKey.brightnessMaximum,
^^^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:183:22: Error: Member not found: 'brightnessAuto'.
LogicalKeyboardKey.brightnessAuto.keyId: TerminalKey.brightnessAuto,
^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:186:22: Error: Member not found: 'programGuide'.
LogicalKeyboardKey.programGuide.keyId: TerminalKey.programGuide,
^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:201:22: Error: Member not found: 'bassBoost'.
LogicalKeyboardKey.bassBoost.keyId: TerminalKey.bassBoost,
^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:202:22: Error: Member not found: 'mediaSelect'.
LogicalKeyboardKey.mediaSelect.keyId: TerminalKey.mediaSelect,
^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:208:22: Error: Member not found: 'launchApp2'.
LogicalKeyboardKey.launchApp2.keyId: TerminalKey.launchApp2,
^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:209:22: Error: Member not found: 'launchApp1'.
LogicalKeyboardKey.launchApp1.keyId: TerminalKey.launchApp1,
^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:210:22: Error: Member not found: 'launchInternetBrowser'.
LogicalKeyboardKey.launchInternetBrowser.keyId:
^^^^^^^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:213:22: Error: Member not found: 'lockScreen'.
LogicalKeyboardKey.lockScreen.keyId: TerminalKey.lockScreen,
^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:215:22: Error: Member not found: 'selectTask'.
LogicalKeyboardKey.selectTask.keyId: TerminalKey.selectTask,
^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:216:22: Error: Member not found: 'launchDocuments'.
LogicalKeyboardKey.launchDocuments.keyId: TerminalKey.launchDocuments,
^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:218:22: Error: Member not found: 'launchKeyboardLayout'.
LogicalKeyboardKey.launchKeyboardLayout.keyId:
^^^^^^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:222:22: Error: Member not found: 'launchAudioBrowser'.
LogicalKeyboardKey.launchAudioBrowser.keyId: TerminalKey.launchAudioBrowser,
^^^^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:241:22: Error: Member not found: 'keyboardLayoutSelect'.
LogicalKeyboardKey.keyboardLayoutSelect.keyId:
^^^^^^^^^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xterm-2.0.0/lib/frontend/input_map.dart:243:22: Error: Member not found: 'showAllWindows'.
LogicalKeyboardKey.showAllWindows.keyId: TerminalKey.showAllWindows,
^^^^^^^^^^^^^^

Documentation

This package is fantastic! I love it!

I was wondering if it was possible to have some more detailed documentation? Most of the API is pretty self-explanatory but some of it I wasn't sure about. For example, Terminal.newLineMode is a bool but it's not clear what true or false mean. Same with Terminal.originMode.

mac os error

i clone your project ,and run local.dart with command 'flutter run -d macos',and error like that:

The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
Break on THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC() to debug.

Cannot build application on windows platform

Error Log:

$ flutter run -d windows
Launching lib\main.dart on Windows in debug mode...
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(5,22): error G3824A48C: Getter not found: 'none'. [D:\workspace\git\APITe
ster\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(11,22): error G3824A48C: Getter not found: 'turbo'. [D:\workspace\git\API
Tester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(12,22): error G3824A48C: Getter not found: 'privacyScreenToggle'. [D:\wor
kspace\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(15,22): error G3824A48C: Getter not found: 'displayToggleIntExt'. [D:\wor
kspace\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(16,22): error G3824A48C: Getter not found: 'usbReserved'. [D:\workspace\g
it\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(17,22): error G3824A48C: Getter not found: 'usbErrorRollOver'. [D:\worksp
ace\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(18,22): error G3824A48C: Getter not found: 'usbPostFail'. [D:\workspace\g
it\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(19,22): error G3824A48C: Getter not found: 'usbErrorUndefined'. [D:\works
pace\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(158,22): error G3824A48C: Getter not found: 'numpadBackspace'. [D:\worksp
ace\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(159,22): error G3824A48C: Getter not found: 'numpadMemoryStore'. [D:\work
space\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(160,22): error G3824A48C: Getter not found: 'numpadMemoryRecall'. [D:\wor
kspace\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(161,22): error G3824A48C: Getter not found: 'numpadMemoryClear'. [D:\work
space\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(162,22): error G3824A48C: Getter not found: 'numpadMemoryAdd'. [D:\worksp
ace\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(163,22): error G3824A48C: Getter not found: 'numpadMemorySubtract'. [D:\w
orkspace\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(165,22): error G3824A48C: Getter not found: 'numpadSignChange'. [D:\works
pace\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(166,22): error G3824A48C: Getter not found: 'numpadClear'. [D:\workspace\
git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(167,22): error G3824A48C: Getter not found: 'numpadClearEntry'. [D:\works
pace\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(180,22): error G3824A48C: Getter not found: 'brightnessToggle'. [D:\works
pace\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(181,22): error G3824A48C: Getter not found: 'brightnessMinimum'. [D:\work
space\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(182,22): error G3824A48C: Getter not found: 'brightnessMaximum'. [D:\work
space\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(183,22): error G3824A48C: Getter not found: 'brightnessAuto'. [D:\workspa
ce\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(186,22): error G3824A48C: Getter not found: 'programGuide'. [D:\workspace
\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(201,22): error G3824A48C: Getter not found: 'bassBoost'. [D:\workspace\gi
t\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(202,22): error G3824A48C: Getter not found: 'mediaSelect'. [D:\workspace\
git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(208,22): error G3824A48C: Getter not found: 'launchApp2'. [D:\workspace\g
it\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(209,22): error G3824A48C: Getter not found: 'launchApp1'. [D:\workspace\g
it\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(210,22): error G3824A48C: Getter not found: 'launchInternetBrowser'. [D:\
workspace\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(213,22): error G3824A48C: Getter not found: 'lockScreen'. [D:\workspace\g
it\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(215,22): error G3824A48C: Getter not found: 'selectTask'. [D:\workspace\g
it\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(216,22): error G3824A48C: Getter not found: 'launchDocuments'. [D:\worksp
ace\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(218,22): error G3824A48C: Getter not found: 'launchKeyboardLayout'. [D:\w
orkspace\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(222,22): error G3824A48C: Getter not found: 'launchAudioBrowser'. [D:\wor
kspace\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(241,22): error G3824A48C: Getter not found: 'keyboardLayoutSelect'. [D:\w
orkspace\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
/C:/Users/Zhanghuifeng/AppData/Local/Pub/Cache/hosted/pub.flutter-io.cn/xterm-2.0.0/lib/frontend/input_map.dart(243,22): error G3824A48C: Getter not found: 'showAllWindows'. [D:\workspa
ce\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(238,5): error MSB8066: โ€œD:\workspace\git\APITester\build\windows\CMa
keFiles\f30a008e9c04fa38426c51af92dc4c22\flutter_windows.dll.rule;D:\workspace\git\APITester\build\windows\CMakeFiles\49f8ef8c800e4e3a9cbbeee55d117bac\flutter_assemble.ruleโ€็š„่‡ชๅฎšไน‰็”Ÿ
ๆˆๅทฒ้€€ๅ‡บ๏ผŒไปฃ็ ไธบ 1ใ€‚ [D:\workspace\git\APITester\build\windows\flutter\flutter_assemble.vcxproj]
Building Windows application...
Exception: Build process failed.

logic.dart
import 'package:get/get.dart';
import 'package:xterm/theme/terminal_themes.dart';
import 'package:xterm/xterm.dart';

class HomePageLogic extends GetxController {
  final terminal = Terminal(
    onInput: (msg) => "[INPUT] $msg",
    onBell: () => "[BELL]",
    onIconChange: (icon) => "[ICON] $icon",
    onTitleChange: (title) => "[TITLE] $title",
    platform: PlatformBehaviors.windows,
    theme: TerminalThemes.defaultTheme,
    // maxLines: 1024
  );
}
view.dart
import 'package:flutter/material.dart';
import 'package:xterm/flutter.dart';
import 'package:get/get.dart';
import 'logic.dart';

class HomePagePage extends StatelessWidget {

  HomePagePage({Key? key}) : super(key: key);
  
  final HomePageLogic logic = Get.put(HomePageLogic());

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("APITester")),
      body: SizedBox(
        width: 250,
        height: 100,
        child: TerminalView(
          terminal: logic.terminal,
        ),
      ),
    );
  }
}
flutter doctor -v
[โˆš] Flutter (Channel stable, 2.5.1, on Microsoft Windows [Version 10.0.17763.1817], locale zh-CN)
    โ€ข Flutter version 2.5.1 at D:\SDK\Flutter
    โ€ข Upstream repository https://github.com/flutter/flutter.git
    โ€ข FLUTTER_GIT_URL = https://gitee.com/mirrors/Flutter.git
    โ€ข Framework revision ffb2ecea52 (10 days ago), 2021-09-17 15:26:33 -0400
    โ€ข Engine revision b3af521a05
    โ€ข Dart version 2.14.2
    โ€ข Pub download mirror https://pub.flutter-io.cn
    โ€ข Flutter download mirror https://storage.flutter-io.cn

[โˆš] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    โ€ข Android SDK at D:\SDK\Android
    โ€ข Platform android-30, build-tools 30.0.3
    โ€ข ANDROID_HOME = D:\SDK\Android
    โ€ข ANDROID_SDK_ROOT = D:\SDK\Android
    โ€ข Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    โ€ข Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6842174)
    โ€ข All Android licenses accepted.

[โˆš] Chrome - develop for the web
    โ€ข CHROME_EXECUTABLE = C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe

[โˆš] Visual Studio - develop for Windows (Visual Studio Community 2019 16.8.4)
    โ€ข Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
    โ€ข Visual Studio Community 2019 version 16.8.30907.101
    โ€ข Windows 10 SDK version 10.0.19041.0

[โˆš] Android Studio (version 4.2)
    โ€ข Android Studio at C:\Program Files\Android\Android Studio
    โ€ข Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    โ€ข Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    โ€ข Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6842174)

[โˆš] VS Code (version 1.55.2)
    โ€ข VS Code at C:\Users\Zhanghuifeng\AppData\Local\Programs\Microsoft VS Code
    โ€ข Flutter extension version 3.15.0

[โˆš] Connected device (3 available)
    โ€ข Windows (desktop) โ€ข windows โ€ข windows-x64    โ€ข Microsoft Windows [Version 10.0.17763.1817]
    โ€ข Chrome (web)      โ€ข chrome  โ€ข web-javascript โ€ข unknown
    โ€ข Edge (web)        โ€ข edge    โ€ข web-javascript โ€ข Microsoft Edge 93.0.961.52

โ€ข No issues found!

Input handler gets triggered endlessly on macOS embedding

The problem is here:

final newValue = widget.onTextInput(value);
if (newValue != null) {
_conn?.setEditingState(newValue);
}

Handling this kind of thing is unfortunately a bit more complicated. The C++ code ends up thinking it needs to keep updating you, and it sends an update which causes you to also send an update, and it goes back and forth in a loop. The expectation is that if you send an update and get a new message, you won't send an update again if the values have not changed. You can see how the framework handles this here: https://github.com/flutter/flutter/blob/f0c9710493d3431a1983967dc26fad2a8513b94e/packages/flutter/lib/src/widgets/editable_text.dart#L1958-L1966

I'm surprised this isn't causing bigger problems on other platforms, but maybe it is. At any rate, the problem on macos is very noticable if you add a print to the onInput in the example - it will print indefinitely as soon as interaction starts with the application.

On Chrome, the spacing of letters seems uneven.

Text spacing is a little off on chrome. I am running

  xterm: ^2.4.0-pre

Screen Shot 2021-07-09 at 3 30 47 PM
Between the t and e in text , there seems to be a lot more space. I am just using the default TextView

            Expanded(
                child: message.when(
                    loading: () => const CircularProgressIndicator(),
                    error: (err, stack) => Text('Error: $err'),
                    data: (message) {
                      terminal.write(message);
                      return TerminalView(
                        terminal: terminal,
                      );
                      // style: TerminalStyle(fontFamily: ["Cascadia Code"]));
                    })),

Any feedback or workaround is appreciated.

Dependency issue?

I am trying to install the example, but when it tries to get the dependencies it tells me this:
Because no versions of dartssh match >1.0.3+3 <2.0.0 and dartssh 1.0.3+3 depends on convert ^2.1.1, dartssh ^1.0.3+3 requires convert ^2.1.1.
And because every version of xterm from path depends on convert ^3.0.0, dartssh ^1.0.3+3 is incompatible with xterm from path.
So, because example depends on both xterm from path and dartssh ^1.0.3+3, version solving failed.
Running "flutter pub get" in example...
pub get failed (1; So, because example depends on both xterm from path and
dartssh ^1.0.3+3, version solving failed.)

[BUG] It throws an error when I call the `selectedText` of `Terminal` instance.

It throws RangeError (byteOffset): Index out of range: index must not be negative: -36 when I call the selectedText of Terminal instance.

Step:

  1. Select a line text in TerminalView widget by mouse manually. (Note that it must be a whole line of text starting at the beginning of the line, not part of a line.)
  2. Call the terminal.selectedText getter.
======== Exception caught by services library ======================================================
The following IndexError was thrown while processing the key message handler:
RangeError (byteOffset): Index out of range: index must not be negative: -36

When the exception was thrown, this was the stack: 
#0      _ByteDataView.getUint8 (dart:typed_data-patch/typed_data_patch.dart:4762:7)
#1      ByteDataBufferLineData.cellGetWidth (package:xterm/buffer/line/line_bytedata_data.dart:200:19)
#2      BufferLine.cellGetWidth (package:xterm/buffer/line/line.dart:106:40)
#3      Terminal.getSelectedText (package:xterm/terminal/terminal.dart:587:18)
#4      Terminal.selectedText (package:xterm/terminal/terminal.dart:669:31)
#5      _TerminalBoxState._handleOnKeyEvent (package:api_tester/views/widgets/terminal_box.dart:67:42)
#6      FocusManager._handleKeyMessage (package:flutter/src/widgets/focus_manager.dart:1589:39)
#7      KeyEventManager.handleRawKeyMessage (package:flutter/src/services/hardware_keyboard.dart:832:37)
#8      BasicMessageChannel.setMessageHandler.<anonymous closure> (package:flutter/src/services/platform_channel.dart:77:49)
#9      BasicMessageChannel.setMessageHandler.<anonymous closure> (package:flutter/src/services/platform_channel.dart:76:47)
#10     _DefaultBinaryMessenger.setMessageHandler.<anonymous closure> (package:flutter/src/services/binding.dart:377:35)
#11     _DefaultBinaryMessenger.setMessageHandler.<anonymous closure> (package:flutter/src/services/binding.dart:374:46)
#12     _invoke2.<anonymous closure> (dart:ui/hooks.dart:190:15)
#16     _invoke2 (dart:ui/hooks.dart:189:10)
#17     _ChannelCallbackRecord.invoke (dart:ui/channel_buffers.dart:42:5)
#18     _Channel.push (dart:ui/channel_buffers.dart:132:31)
#19     ChannelBuffers.push (dart:ui/channel_buffers.dart:329:17)
#20     PlatformDispatcher._dispatchPlatformMessage (dart:ui/platform_dispatcher.dart:583:22)
#21     _dispatchPlatformMessage (dart:ui/hooks.dart:89:31)
(elided 3 frames from dart:async)
KeyMessage: KeyMessage([KeyUpEvent#e2512(physicalKey: PhysicalKeyboardKey#700e3(usbHidUsage: "0x000700e3", debugName: "Meta Left"), logicalKey: LogicalKeyboardKey#00106(keyId: "0x200000106", keyLabel: "Meta Left", debugName: "Meta Left"), character: null, timeStamp: 7:11:27.069216)])
====================================================================================================

flutter version: 2.10.0
OS version: macOS 12.1
app build platform: desktop (macOS)
xterm plugin version: 2.6.0

Any plan/feature support to next version?

I'm developing an mobile ssh application with xterm.dart. Is there any plan to support features, such as

  1. search
  2. open external uri
    and so on?

I have worked in an electron application, witch use xterm.js to provide terminal feature, and our application suffered from the pool performance of web.
It's unexpectedly good performance that xterm.dart has. I'm very interested this project. : )

Reflow functionality is missing

As far as I can see xterm.dart currently doesn't have the reflow logic ported from xterm.js.
Is this planned?
I had a brief look at it and it currently can't be ported directly because the way the buffer works is slightly different to xterm.js (no CircularList for example).
I could take over that task if you like but I think we would have to discuss the best approach here.

[Bug] Can`t receive input from the soft keyboard when added as flutter module to an existing Android project

Hi, I just wrote a flutter page with xterm.dart based on the example : https://github.com/TerminalStudio/xterm.dart/blob/master/example/lib/main.dart

Everything is ok when running as a standalone flutter app.
standalone

But it can`t receive input from the soft keyboard when added as flutter module to an existing Android project.
flutter_module

Source code of the demo is here: https://github.com/luxi78/xterm.dart_in_module

Hope someone can find out what the problem is, Thanks!

Build error

There was the build error.

../../../.pub-cache/hosted/pub.dartlang.org/xterm-0.1.0/lib/frontend/input_listener.dart:100:7: Error: The non-abstract class 'TerminalTextInputClient' is missing implementations for these members:
 - TextInputClient.performPrivateCommand                                
Try to either                                                           
 - provide an implementation,                                           
 - inherit an implementation from a superclass or mixin,                
 - mark the class as abstract, or                                       
 - provide a 'noSuchMethod' implementation.                             
                                                                        
class TerminalTextInputClient extends TextInputClient {                 
      ^^^^^^^^^^^^^^^^^^^^^^^                                           
/opt/flutter/packages/flutter/lib/src/services/text_input.dart:813:8: Context: 'TextInputClient.performPrivateCommand' is defined here.
  void performPrivateCommand(String action, Map<String, dynamic> data); 
       ^^^^^^^^^^^^^^^^^^^^^                                            
                                                                        
Command PhaseScriptExecution failed with a nonzero exit code            
note: Using new build system                                            
note: Building targets in parallel                                      
note: Planning build                                                    
note: Constructing build description                                    
** BUILD FAILED **

Thank you.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.