This repository was archived by the owner on Jan 25, 2023. It is now read-only.

Repository files navigation

termare_view

Language: 中文简体 | English

Last CommitsCode sizeLicensePlatformdownload timeopen issuesforkcode linebuildCodacy Badge

支持全平台的终端模拟器,使用 Flutter 开发,是一个通过 canvas 渲染的上层组件,不依赖任何平台代码。

这个 view 就类似于 xterm.js 一样,仅仅是一个上层 UI 显示组件,你可以使用来自操作系统底层的终端流,亦或者是连接 ssh 服务器的终端流,只需要给这个组件输入,就能自动的解析终端序列渲染终端。

开始使用

引入项目

这是一个纯 flutter package,所以只需要在 yaml 配置文件的 dependencies 下引入:

termare_view:
git: https://github.com/termare/termare_view

创建终端控制器

TermareController controller =TermareController();

使用组件

TermareView 是一个 Widget,通常情况下,只需要给一个 TermareController 作为终端组件的控制器即可。

TermareView(
controller: controller,
),

让终端显示一些东西

controller.write('hello termare_view');

代码在 example 中。

更详细的例子

相关文章

已支持序列文档

终端序列支持文档

Q&A

为什么没有使用 xterm.dart

最初开发这个组件的原因是因为个人的一个项目需要在 Flutter 中集成一个终端模拟器,至今这也很好的实现了我想要的需求。 本仓库与 xterm.dart 的开始时间基本上是差不多的,我尝试将本仓库的内容合并到 xterm.dart,但最后由于代码风格 太不统一,还是决定像 termux-view 那样,单独维护一个更适应安卓端场景的终端。

但 xterm.dart 目前的很多功能是比 termare 多的,架构上的设计也更优一些。

为何要用Flutter重写而不是...?

  • 一次编写,到处运行。
  • Flutter 当前作为非常优秀的跨平台框架,我想也能用它来编写一个全平台终端模拟器,从安卓前几代终端模拟器来看, 这可能是一个比较漫长的过程,而我的时间并不太多,但我会尽量尝试重写。
  • 我喜欢尝试。

是否存在未适配的序列?

按照 xterm.js 的 序列文档 适配了其中 90% 的序列,但个别序列实现比较复杂,例如 CSI ps;ps r,目前能正常解析,但在序列的行为表现上还有问题,还有个别序列没获取到具体的行为,例如ESC \。 一些命令如 vim,htop,nano,在运行的时候使用到了较多的序列,主要表现在 vim 编写文本时,内容超过终端高度时涉及到的序列。而 htop 输出的终端序列实在太多,不好定位是哪个序列的问题导致表现上的差异。

如何帮助开发?

测试序列可以通过输入指定的序列对比 xterm.js 或者操作系统中本地终端的显示。 发现可优化的地方你可以提交 issue 或 pr。

pr 请尽量保证与当前项目代码风格一致喔。

以下来自 termux 仓库的终端资源

Terminal resources

Terminal emulators

About

支持全平台的终端模拟器,使用 Flutter 开发,不依赖平台代码。

Topics

Resources

Contributing

Stars

57 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Jan 25, 2023. It is now read-only.

Repository files navigation

termare_view

Language: 中文简体 | English

Last CommitsCode sizeLicensePlatformdownload timeopen issuesforkcode linebuildCodacy Badge

支持全平台的终端模拟器,使用 Flutter 开发,是一个通过 canvas 渲染的上层组件,不依赖任何平台代码。

这个 view 就类似于 xterm.js 一样,仅仅是一个上层 UI 显示组件,你可以使用来自操作系统底层的终端流,亦或者是连接 ssh 服务器的终端流,只需要给这个组件输入,就能自动的解析终端序列渲染终端。

开始使用

引入项目

这是一个纯 flutter package,所以只需要在 yaml 配置文件的 dependencies 下引入:

termare_view:
git: https://github.com/termare/termare_view

创建终端控制器

TermareController controller =TermareController();

使用组件

TermareView 是一个 Widget,通常情况下,只需要给一个 TermareController 作为终端组件的控制器即可。

TermareView(
controller: controller,
),

让终端显示一些东西

controller.write('hello termare_view');

代码在 example 中。

更详细的例子

相关文章

已支持序列文档

终端序列支持文档

Q&A

为什么没有使用 xterm.dart

最初开发这个组件的原因是因为个人的一个项目需要在 Flutter 中集成一个终端模拟器,至今这也很好的实现了我想要的需求。 本仓库与 xterm.dart 的开始时间基本上是差不多的,我尝试将本仓库的内容合并到 xterm.dart,但最后由于代码风格 太不统一,还是决定像 termux-view 那样,单独维护一个更适应安卓端场景的终端。

但 xterm.dart 目前的很多功能是比 termare 多的,架构上的设计也更优一些。

为何要用Flutter重写而不是...?

  • 一次编写,到处运行。
  • Flutter 当前作为非常优秀的跨平台框架,我想也能用它来编写一个全平台终端模拟器,从安卓前几代终端模拟器来看, 这可能是一个比较漫长的过程,而我的时间并不太多,但我会尽量尝试重写。
  • 我喜欢尝试。

是否存在未适配的序列?

按照 xterm.js 的 序列文档 适配了其中 90% 的序列,但个别序列实现比较复杂,例如 CSI ps;ps r,目前能正常解析,但在序列的行为表现上还有问题,还有个别序列没获取到具体的行为,例如ESC \。 一些命令如 vim,htop,nano,在运行的时候使用到了较多的序列,主要表现在 vim 编写文本时,内容超过终端高度时涉及到的序列。而 htop 输出的终端序列实在太多,不好定位是哪个序列的问题导致表现上的差异。

如何帮助开发?

测试序列可以通过输入指定的序列对比 xterm.js 或者操作系统中本地终端的显示。 发现可优化的地方你可以提交 issue 或 pr。

pr 请尽量保证与当前项目代码风格一致喔。

以下来自 termux 仓库的终端资源

Terminal resources

Terminal emulators

About

支持全平台的终端模拟器,使用 Flutter 开发,不依赖平台代码。

Topics

Resources

Contributing

Stars

57 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jan 25, 2023. It is now read-only.

Repository files navigation

termare_view

Language: 中文简体 | English

Last CommitsCode sizeLicensePlatformdownload timeopen issuesforkcode linebuildCodacy Badge

支持全平台的终端模拟器,使用 Flutter 开发,是一个通过 canvas 渲染的上层组件,不依赖任何平台代码。

这个 view 就类似于 xterm.js 一样,仅仅是一个上层 UI 显示组件,你可以使用来自操作系统底层的终端流,亦或者是连接 ssh 服务器的终端流,只需要给这个组件输入,就能自动的解析终端序列渲染终端。

开始使用

引入项目

这是一个纯 flutter package,所以只需要在 yaml 配置文件的 dependencies 下引入:

termare_view:
git: https://github.com/termare/termare_view

创建终端控制器

TermareController controller =TermareController();

使用组件

TermareView 是一个 Widget,通常情况下,只需要给一个 TermareController 作为终端组件的控制器即可。

TermareView(
controller: controller,
),

让终端显示一些东西

controller.write('hello termare_view');

代码在 example 中。

更详细的例子

相关文章

已支持序列文档

终端序列支持文档

Q&A

为什么没有使用 xterm.dart

最初开发这个组件的原因是因为个人的一个项目需要在 Flutter 中集成一个终端模拟器,至今这也很好的实现了我想要的需求。 本仓库与 xterm.dart 的开始时间基本上是差不多的,我尝试将本仓库的内容合并到 xterm.dart,但最后由于代码风格 太不统一,还是决定像 termux-view 那样,单独维护一个更适应安卓端场景的终端。

但 xterm.dart 目前的很多功能是比 termare 多的,架构上的设计也更优一些。

为何要用Flutter重写而不是...?

  • 一次编写,到处运行。
  • Flutter 当前作为非常优秀的跨平台框架,我想也能用它来编写一个全平台终端模拟器,从安卓前几代终端模拟器来看, 这可能是一个比较漫长的过程,而我的时间并不太多,但我会尽量尝试重写。
  • 我喜欢尝试。

是否存在未适配的序列?

按照 xterm.js 的 序列文档 适配了其中 90% 的序列,但个别序列实现比较复杂,例如 CSI ps;ps r,目前能正常解析,但在序列的行为表现上还有问题,还有个别序列没获取到具体的行为,例如ESC \。 一些命令如 vim,htop,nano,在运行的时候使用到了较多的序列,主要表现在 vim 编写文本时,内容超过终端高度时涉及到的序列。而 htop 输出的终端序列实在太多,不好定位是哪个序列的问题导致表现上的差异。

如何帮助开发?

测试序列可以通过输入指定的序列对比 xterm.js 或者操作系统中本地终端的显示。 发现可优化的地方你可以提交 issue 或 pr。

pr 请尽量保证与当前项目代码风格一致喔。

以下来自 termux 仓库的终端资源

Terminal resources

Terminal emulators

About

支持全平台的终端模拟器,使用 Flutter 开发,不依赖平台代码。

Topics

Resources

Contributing

Stars

57 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jan 25, 2023. It is now read-only.

Repository files navigation

termare_view

Language: 中文简体 | English

Last CommitsCode sizeLicensePlatformdownload timeopen issuesforkcode linebuildCodacy Badge

支持全平台的终端模拟器,使用 Flutter 开发,是一个通过 canvas 渲染的上层组件,不依赖任何平台代码。

这个 view 就类似于 xterm.js 一样,仅仅是一个上层 UI 显示组件,你可以使用来自操作系统底层的终端流,亦或者是连接 ssh 服务器的终端流,只需要给这个组件输入,就能自动的解析终端序列渲染终端。

开始使用

引入项目

这是一个纯 flutter package,所以只需要在 yaml 配置文件的 dependencies 下引入:

termare_view:
git: https://github.com/termare/termare_view

创建终端控制器

TermareController controller =TermareController();

使用组件

TermareView 是一个 Widget,通常情况下,只需要给一个 TermareController 作为终端组件的控制器即可。

TermareView(
controller: controller,
),

让终端显示一些东西

controller.write('hello termare_view');

代码在 example 中。

更详细的例子

相关文章

已支持序列文档

终端序列支持文档

Q&A

为什么没有使用 xterm.dart

最初开发这个组件的原因是因为个人的一个项目需要在 Flutter 中集成一个终端模拟器,至今这也很好的实现了我想要的需求。 本仓库与 xterm.dart 的开始时间基本上是差不多的,我尝试将本仓库的内容合并到 xterm.dart,但最后由于代码风格 太不统一,还是决定像 termux-view 那样,单独维护一个更适应安卓端场景的终端。

但 xterm.dart 目前的很多功能是比 termare 多的,架构上的设计也更优一些。

为何要用Flutter重写而不是...?

  • 一次编写,到处运行。
  • Flutter 当前作为非常优秀的跨平台框架,我想也能用它来编写一个全平台终端模拟器,从安卓前几代终端模拟器来看, 这可能是一个比较漫长的过程,而我的时间并不太多,但我会尽量尝试重写。
  • 我喜欢尝试。

是否存在未适配的序列?

按照 xterm.js 的 序列文档 适配了其中 90% 的序列,但个别序列实现比较复杂,例如 CSI ps;ps r,目前能正常解析,但在序列的行为表现上还有问题,还有个别序列没获取到具体的行为,例如ESC \。 一些命令如 vim,htop,nano,在运行的时候使用到了较多的序列,主要表现在 vim 编写文本时,内容超过终端高度时涉及到的序列。而 htop 输出的终端序列实在太多,不好定位是哪个序列的问题导致表现上的差异。

如何帮助开发?

测试序列可以通过输入指定的序列对比 xterm.js 或者操作系统中本地终端的显示。 发现可优化的地方你可以提交 issue 或 pr。

pr 请尽量保证与当前项目代码风格一致喔。

以下来自 termux 仓库的终端资源

Terminal resources

Terminal emulators

About

支持全平台的终端模拟器,使用 Flutter 开发,不依赖平台代码。

Topics

Resources

Contributing

Stars

57 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Jan 25, 2023. It is now read-only.

Repository files navigation

termare_view

Language: 中文简体 | English

Last CommitsCode sizeLicensePlatformdownload timeopen issuesforkcode linebuildCodacy Badge

支持全平台的终端模拟器,使用 Flutter 开发,是一个通过 canvas 渲染的上层组件,不依赖任何平台代码。

这个 view 就类似于 xterm.js 一样,仅仅是一个上层 UI 显示组件,你可以使用来自操作系统底层的终端流,亦或者是连接 ssh 服务器的终端流,只需要给这个组件输入,就能自动的解析终端序列渲染终端。

开始使用

引入项目

这是一个纯 flutter package,所以只需要在 yaml 配置文件的 dependencies 下引入:

termare_view:
git: https://github.com/termare/termare_view

创建终端控制器

TermareController controller =TermareController();

使用组件

TermareView 是一个 Widget,通常情况下,只需要给一个 TermareController 作为终端组件的控制器即可。

TermareView(
controller: controller,
),

让终端显示一些东西

controller.write('hello termare_view');

代码在 example 中。

更详细的例子

相关文章

已支持序列文档

终端序列支持文档

Q&A

为什么没有使用 xterm.dart

最初开发这个组件的原因是因为个人的一个项目需要在 Flutter 中集成一个终端模拟器,至今这也很好的实现了我想要的需求。 本仓库与 xterm.dart 的开始时间基本上是差不多的,我尝试将本仓库的内容合并到 xterm.dart,但最后由于代码风格 太不统一,还是决定像 termux-view 那样,单独维护一个更适应安卓端场景的终端。

但 xterm.dart 目前的很多功能是比 termare 多的,架构上的设计也更优一些。

为何要用Flutter重写而不是...?

  • 一次编写,到处运行。
  • Flutter 当前作为非常优秀的跨平台框架,我想也能用它来编写一个全平台终端模拟器,从安卓前几代终端模拟器来看, 这可能是一个比较漫长的过程,而我的时间并不太多,但我会尽量尝试重写。
  • 我喜欢尝试。

是否存在未适配的序列?

按照 xterm.js 的 序列文档 适配了其中 90% 的序列,但个别序列实现比较复杂,例如 CSI ps;ps r,目前能正常解析,但在序列的行为表现上还有问题,还有个别序列没获取到具体的行为,例如ESC \。 一些命令如 vim,htop,nano,在运行的时候使用到了较多的序列,主要表现在 vim 编写文本时,内容超过终端高度时涉及到的序列。而 htop 输出的终端序列实在太多,不好定位是哪个序列的问题导致表现上的差异。

如何帮助开发?

测试序列可以通过输入指定的序列对比 xterm.js 或者操作系统中本地终端的显示。 发现可优化的地方你可以提交 issue 或 pr。

pr 请尽量保证与当前项目代码风格一致喔。

以下来自 termux 仓库的终端资源

Terminal resources

Terminal emulators

About

支持全平台的终端模拟器,使用 Flutter 开发,不依赖平台代码。

Topics

Resources

Contributing

Stars

57 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jan 25, 2023. It is now read-only.

Repository files navigation

termare_view

Language: 中文简体 | English

Last CommitsCode sizeLicensePlatformdownload timeopen issuesforkcode linebuildCodacy Badge

支持全平台的终端模拟器,使用 Flutter 开发,是一个通过 canvas 渲染的上层组件,不依赖任何平台代码。

这个 view 就类似于 xterm.js 一样,仅仅是一个上层 UI 显示组件,你可以使用来自操作系统底层的终端流,亦或者是连接 ssh 服务器的终端流,只需要给这个组件输入,就能自动的解析终端序列渲染终端。

开始使用

引入项目

这是一个纯 flutter package,所以只需要在 yaml 配置文件的 dependencies 下引入:

termare_view:
git: https://github.com/termare/termare_view

创建终端控制器

TermareController controller =TermareController();

使用组件

TermareView 是一个 Widget,通常情况下,只需要给一个 TermareController 作为终端组件的控制器即可。

TermareView(
controller: controller,
),

让终端显示一些东西

controller.write('hello termare_view');

代码在 example 中。

更详细的例子

相关文章

已支持序列文档

终端序列支持文档

Q&A

为什么没有使用 xterm.dart

最初开发这个组件的原因是因为个人的一个项目需要在 Flutter 中集成一个终端模拟器,至今这也很好的实现了我想要的需求。 本仓库与 xterm.dart 的开始时间基本上是差不多的,我尝试将本仓库的内容合并到 xterm.dart,但最后由于代码风格 太不统一,还是决定像 termux-view 那样,单独维护一个更适应安卓端场景的终端。

但 xterm.dart 目前的很多功能是比 termare 多的,架构上的设计也更优一些。

为何要用Flutter重写而不是...?

  • 一次编写,到处运行。
  • Flutter 当前作为非常优秀的跨平台框架,我想也能用它来编写一个全平台终端模拟器,从安卓前几代终端模拟器来看, 这可能是一个比较漫长的过程,而我的时间并不太多,但我会尽量尝试重写。
  • 我喜欢尝试。

是否存在未适配的序列?

按照 xterm.js 的 序列文档 适配了其中 90% 的序列,但个别序列实现比较复杂,例如 CSI ps;ps r,目前能正常解析,但在序列的行为表现上还有问题,还有个别序列没获取到具体的行为,例如ESC \。 一些命令如 vim,htop,nano,在运行的时候使用到了较多的序列,主要表现在 vim 编写文本时,内容超过终端高度时涉及到的序列。而 htop 输出的终端序列实在太多,不好定位是哪个序列的问题导致表现上的差异。

如何帮助开发?

测试序列可以通过输入指定的序列对比 xterm.js 或者操作系统中本地终端的显示。 发现可优化的地方你可以提交 issue 或 pr。

pr 请尽量保证与当前项目代码风格一致喔。

以下来自 termux 仓库的终端资源

Terminal resources

Terminal emulators

About

支持全平台的终端模拟器,使用 Flutter 开发,不依赖平台代码。

Topics

Resources

Contributing

Stars

57 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jan 25, 2023. It is now read-only.

Repository files navigation

termare_view

Language: 中文简体 | English

Last CommitsCode sizeLicensePlatformdownload timeopen issuesforkcode linebuildCodacy Badge

支持全平台的终端模拟器,使用 Flutter 开发,是一个通过 canvas 渲染的上层组件,不依赖任何平台代码。

这个 view 就类似于 xterm.js 一样,仅仅是一个上层 UI 显示组件,你可以使用来自操作系统底层的终端流,亦或者是连接 ssh 服务器的终端流,只需要给这个组件输入,就能自动的解析终端序列渲染终端。

开始使用

引入项目

这是一个纯 flutter package,所以只需要在 yaml 配置文件的 dependencies 下引入:

termare_view:
git: https://github.com/termare/termare_view

创建终端控制器

TermareController controller =TermareController();

使用组件

TermareView 是一个 Widget,通常情况下,只需要给一个 TermareController 作为终端组件的控制器即可。

TermareView(
controller: controller,
),

让终端显示一些东西

controller.write('hello termare_view');

代码在 example 中。

更详细的例子

相关文章

已支持序列文档

终端序列支持文档

Q&A

为什么没有使用 xterm.dart

最初开发这个组件的原因是因为个人的一个项目需要在 Flutter 中集成一个终端模拟器,至今这也很好的实现了我想要的需求。 本仓库与 xterm.dart 的开始时间基本上是差不多的,我尝试将本仓库的内容合并到 xterm.dart,但最后由于代码风格 太不统一,还是决定像 termux-view 那样,单独维护一个更适应安卓端场景的终端。

但 xterm.dart 目前的很多功能是比 termare 多的,架构上的设计也更优一些。

为何要用Flutter重写而不是...?

  • 一次编写,到处运行。
  • Flutter 当前作为非常优秀的跨平台框架,我想也能用它来编写一个全平台终端模拟器,从安卓前几代终端模拟器来看, 这可能是一个比较漫长的过程,而我的时间并不太多,但我会尽量尝试重写。
  • 我喜欢尝试。

是否存在未适配的序列?

按照 xterm.js 的 序列文档 适配了其中 90% 的序列,但个别序列实现比较复杂,例如 CSI ps;ps r,目前能正常解析,但在序列的行为表现上还有问题,还有个别序列没获取到具体的行为,例如ESC \。 一些命令如 vim,htop,nano,在运行的时候使用到了较多的序列,主要表现在 vim 编写文本时,内容超过终端高度时涉及到的序列。而 htop 输出的终端序列实在太多,不好定位是哪个序列的问题导致表现上的差异。

如何帮助开发?

测试序列可以通过输入指定的序列对比 xterm.js 或者操作系统中本地终端的显示。 发现可优化的地方你可以提交 issue 或 pr。

pr 请尽量保证与当前项目代码风格一致喔。

以下来自 termux 仓库的终端资源

Terminal resources

Terminal emulators

About

支持全平台的终端模拟器,使用 Flutter 开发,不依赖平台代码。

Topics

Resources

Contributing

Stars

57 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Jan 25, 2023. It is now read-only.

Repository files navigation

termare_view

Language: 中文简体 | English

Last CommitsCode sizeLicensePlatformdownload timeopen issuesforkcode linebuildCodacy Badge

支持全平台的终端模拟器,使用 Flutter 开发,是一个通过 canvas 渲染的上层组件,不依赖任何平台代码。

这个 view 就类似于 xterm.js 一样,仅仅是一个上层 UI 显示组件,你可以使用来自操作系统底层的终端流,亦或者是连接 ssh 服务器的终端流,只需要给这个组件输入,就能自动的解析终端序列渲染终端。

开始使用

引入项目

这是一个纯 flutter package,所以只需要在 yaml 配置文件的 dependencies 下引入:

termare_view:
git: https://github.com/termare/termare_view

创建终端控制器

TermareController controller =TermareController();

使用组件

TermareView 是一个 Widget,通常情况下,只需要给一个 TermareController 作为终端组件的控制器即可。

TermareView(
controller: controller,
),

让终端显示一些东西

controller.write('hello termare_view');

代码在 example 中。

更详细的例子

相关文章

已支持序列文档

终端序列支持文档

Q&A

为什么没有使用 xterm.dart

最初开发这个组件的原因是因为个人的一个项目需要在 Flutter 中集成一个终端模拟器,至今这也很好的实现了我想要的需求。 本仓库与 xterm.dart 的开始时间基本上是差不多的,我尝试将本仓库的内容合并到 xterm.dart,但最后由于代码风格 太不统一,还是决定像 termux-view 那样,单独维护一个更适应安卓端场景的终端。

但 xterm.dart 目前的很多功能是比 termare 多的,架构上的设计也更优一些。

为何要用Flutter重写而不是...?

  • 一次编写,到处运行。
  • Flutter 当前作为非常优秀的跨平台框架,我想也能用它来编写一个全平台终端模拟器,从安卓前几代终端模拟器来看, 这可能是一个比较漫长的过程,而我的时间并不太多,但我会尽量尝试重写。
  • 我喜欢尝试。

是否存在未适配的序列?

按照 xterm.js 的 序列文档 适配了其中 90% 的序列,但个别序列实现比较复杂,例如 CSI ps;ps r,目前能正常解析,但在序列的行为表现上还有问题,还有个别序列没获取到具体的行为,例如ESC \。 一些命令如 vim,htop,nano,在运行的时候使用到了较多的序列,主要表现在 vim 编写文本时,内容超过终端高度时涉及到的序列。而 htop 输出的终端序列实在太多,不好定位是哪个序列的问题导致表现上的差异。

如何帮助开发?

测试序列可以通过输入指定的序列对比 xterm.js 或者操作系统中本地终端的显示。 发现可优化的地方你可以提交 issue 或 pr。

pr 请尽量保证与当前项目代码风格一致喔。

以下来自 termux 仓库的终端资源

Terminal resources

Terminal emulators

About

支持全平台的终端模拟器,使用 Flutter 开发,不依赖平台代码。

Topics

Resources

Contributing

Stars

57 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages