GitHub - ArthurSonzogni/FTXUI: :computer: C Functional Terminal User Interface. :heart:#include stdlib.h // for EXIT_SUCCESS #include ftxui/dom/elements.hpp // for text, operator|, vbox, border, Element, Fit, hbox #include ftxui/screen/screen.hpp // for Full, Screen #include memory // for allocator #include chrono // for operators, chrono_literals #include thread // for sleep_for #include ftxui/dom/node.hpp // for Render #include ftxui/screen/color.hpp // for ftxui #include ftxui/dom/canvas.hpp // for Canvas #include ftxui/dom/table.hpp // for Table, TableSelection #include ftxui/component/captured_mouse.hpp // for ftxui #include ftxui/component/component.hpp // for Button, Horizontal, Renderer #include ftxui/component/component_base.hpp // for ComponentBase #include ftxui/component/screen_interactive.hpp // for ScreenInteractive #include ftxui/dom/elements.hpp // for separator, gauge, text, Element, operator|, vbox, border using namespace ftxui; ButtonOption Style() { auto option ButtonOption::Animated(); option.transform [](const EntryState s) { auto element text(s.label); if (s.focused) { element | bold; } return element | center | borderEmpty | flex; }; return option; } class Graph { public: std::vectorint operator()(int width, int height) const { std::vectorint output(width); for (int i 0; i width; i) { float v 0; v 0.1f * sin((i shift) * 0.1f); // NOLINT v 0.2f * sin((i shift 10) * 0.15f); // NOLINT v 0.1f * sin((i shift) * 0.03f); // NOLINT v * height; // NOLINT v 0.5f * height; // NOLINT output[i] static_castint(v); } return output; } int shift 0; }; auto testBorder() { using namespace ftxui; auto make_boxed [] { return vbox({ text(borderLight) | borderStyled(LIGHT, Color::Red), text(borderDashed) | borderStyled(DASHED, Color::Green), text(borderHeavy) | borderStyled(HEAVY, Color::Blue), text(borderDouble) | borderStyled(DOUBLE, Color::Yellow), text(borderRounded) | borderStyled(ROUNDED, Color::Cyan), text(borderLight) | borderLight, }); }; auto make_box [](int dimx, int dimy) { std::string title std::to_string(dimx) x std::to_string(dimy); return window(text(title) | hcenter | bold, text(content) | hcenter | dim) | size(WIDTH, EQUAL, dimx) | size(HEIGHT, EQUAL, dimy); }; auto style size(WIDTH, GREATER_THAN, 20) | border | size(HEIGHT, GREATER_THAN, 30) | size(WIDTH, LESS_THAN, 50); Graph my_graph; return hbox({ vbox({ text(Line 1), filler(), text(Line 2), text(Line 3), }) | border, make_boxed() | color(Color::Red) | border, separatorDashed() | color(Color::Red), dbox({ vbox({ text(line_1), text(line_2), text(strikethrough) | strikethrough, text(inverted) | inverted, text(hyperlink) | hyperlink(https://www.google.com), }) | border, text(overlay) | border | center, }), graph(std::ref(my_graph)) | color(Color::YellowLight) | bgcolor(LinearGradient() .Angle(45) .Stop(Color::DeepPink1) .Stop(Color::DeepSkyBlue1)), hflow({ make_box(7, 7), make_box(7, 5), }) | style, hflow( paragraph( Here is a text ), text(underlined ) | underlined, paragraph( Here is a text ), text(bold ) | bold, paragraph( Here is a text ), text(dim ) | dim, paragraph( Here is a text ), text(red ) | color(Color::Red), paragraph( A spinner ), spinner(6, 5 / 10)) | border, }) | flex; } auto testTable() { using namespace ftxui; auto table Table({ {Version, Marketing name, Release date, API level, Runtime}, {2.3, Gingerbread, February 9 2011, 10, Dalvik 1.4.0}, {4.0, Ice Cream Sandwich, October 19 2011, 15, Dalvik}, {4.1, Jelly Bean, July 9 2012, 16, Dalvik}, {4.2, Jelly Bean, November 13 2012, 17, Dalvik}, {4.3, Jelly Bean, July 24 2013, 18, Dalvik}, {4.4, KitKat, October 31 2013, 19, Dalvik and ART}, {5.0, Lollipop, November 3 2014, 21, ART}, {5.1, Lollipop, March 9 2015, 22, ART}, {6.0, Marshmallow, October 5 2015, 23, ART}, {7.0, Nougat, August 22 2016, 24, ART}, {7.1, Nougat, October 4 2016, 25, ART}, {8.0, Oreo, August 21 2017, 26, ART}, {8.1, Oreo, December 5 2017, 27, ART}, {9, Pie, August 6 2018, 28, ART}, {10, 10, September 3 2019, 29, ART}, {11, 11, September 8 2020, 30, ART}, }); table.SelectAll().Border(LIGHT); // Add border around the first column. table.SelectColumn(0).Border(LIGHT); // Make first row bold with a double border. table.SelectRow(0).Decorate(bold); table.SelectRow(0).SeparatorVertical(LIGHT); table.SelectRow(0).Border(DOUBLE); // Align right the Release date column. table.SelectColumn(2).DecorateCells(align_right); // Select row from the second to the last. auto content table.SelectRows(1, -1); // Alternate in between 3 colors. content.DecorateCellsAlternateRow(color(Color::Blue), 3, 0); content.DecorateCellsAlternateRow(color(Color::Cyan), 3, 1); content.DecorateCellsAlternateRow(color(Color::White), 3, 2); return table.Render(); } auto testCanvas(ftxui::Canvas c) { using namespace ftxui; c.DrawText(0, 0, This is a canvas, [](Pixel p) { p.foreground_color Color::Red; p.underlined true; }); // Triangle: c.DrawPointLine(10, 10, 80, 10, Color::Red); c.DrawPointLine(80, 10, 80, 40, Color::Blue); c.DrawPointLine(80, 40, 10, 10, Color::Green); // Circle, not filled and filled: c.DrawPointCircle(30, 50, 20); c.DrawPointCircleFilled(40, 40, 10); // Plot a function: std::vectorint ys(100); for (int x 0; x 100; x) ys[x] int(80 20 * cos(x * 0.2)); for (int x 0; x 99; x) c.DrawPointLine(x, ys[x], x 1, ys[x 1], Color::Red); return canvas(c) | border; } void testDom() { using namespace ftxui; //auto c Canvas(100, 100); //auto document testCanvas(c); auto document testBorder(); //auto document testTable(); auto screen Screen::Create(Dimension::Full(), Dimension::Fit(document)); Render(screen, document); screen.Print(); getchar(); } int test() { int value 50; auto style ButtonOption::Animated(Color::Default, Color::GrayDark, Color::Default, Color::White); // clang-format off auto btn_dec_01 Button(-1, [] { value 1; }, style); auto btn_inc_01 Button(1, [] { value - 1; }, ButtonOption::Animated()); auto btn_dec_10 Button(-10, [] { value - 10; }, Style()); auto btn_inc_10 Button(10, [] { value 10; }, Style()); auto input Input(1, placeholder std::to_string(1)); // clang-format on // The tree of components. This defines how to navigate using the keyboard. // The selected row is shared to get a grid layout. int row 0; auto container Container::Vertical({}); auto buttons Container::Vertical({ Container::Horizontal({btn_dec_01, btn_inc_01}, row) | flex, Container::Horizontal({btn_dec_10, btn_inc_10}, row) | flex, }); //container.Add(input); //container.Add(Checkbox(Checkbox std::to_string(1))); // Modify the way to render them on screen: auto component Renderer(buttons, [] { return vbox({ text(value std::to_string(value)), separator(), buttons-Render() | flex, }) | flex | border; }); auto screen ScreenInteractive::FitComponent(); screen.Loop(component); return EXIT_SUCCESS; }GitHub - ArthurSonzogni/StartUp: Terminal DashboardGitHub - ArthurSonzogni/turing_cmd: Машина Тьюринга с интерфейсом в командной строке创作不易小小的支持一下吧
企业数字化 ERP 产品动态
相关推荐
Electron qt开发教程 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/11 0:07:25
gprof性能分析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 10:57:03
Google Chrome 设备工具栏原理 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 9:01:30
建筑工特种作业证查询怎么搞?值不值得考看这篇就够了 建筑工特种作业证查询怎么搞?值不值得考看这篇就够了 工地太忙根本没时间复习考试,这话说得真扎心。每天早上六点爬起来赶工,晚上十点还在现场收尾,哪还有空去准备特种作业证考试?但问题是, 值不值得考… · 2026/11/11 13:54:55
电工证被别人拿去怎么办?保姆级教程帮你找回丢失的证 电工证被别人拿去怎么办?保姆级教程帮你找回丢失的证 实操考试心里没底怕挂科,这事儿在特种作业行业里太常见了,尤其像电工证这种高频证件,一不小心就可能被同事拿去借用了。我身边就有不少朋友遇到过类似情况,明明自己报名了,结果证被别人拿去用了,甚… · 2026/11/11 13:54:55
电工证在哪考不被坑?触电事故电工作业报考全攻略 电工证在哪考不被坑?触电事故电工作业报考全攻略 不知道去哪报名怕被中介坑?现在办【触电事故电工作业】的电工证,很多人都是被各种中介、培训机构误导,花冤枉钱还拿不到正规证书。其实,国家对特种作业人员的管理非常严格,特别是像【触电事故电工作业】… · 2026/11/11 13:54:55
电工证发证日期怎么查 2026河南最新政策怎么考才不吃亏 电工证发证日期怎么查 2026河南最新政策怎么考才不吃亏 怕考不过白交培训费?南阳某工地项目现场管理员老王,花了几千块报了电工证培训,结果考试时发现发证日期不对,直接被认定为无效证书。他当时就懵了,这不等于白花钱?别急,这波操作在河南202… · 2026/11/11 13:54:55
宝应电工证报名实操考试心里没底怕挂科?良心建议来了 宝应电工证报名实操考试心里没底怕挂科?良心建议来了 实操考试心里没底怕挂科?我见过太多宝应电工证报名的学员,辛辛苦苦刷题、背规范,到了考场一上手就手忙脚乱,不是工具用错了,就是流程忘了,结果差点连报名费都白花了。今天我就以一个新乡中小施工企… · 2026/11/11 13:54:55
宝应电工证报名怎么操作?全国通用证书过期了别慌 宝应电工证报名怎么操作?全国通用证书过期了别慌 证书过期了不知道怎么复审延期,这个问题相信很多电工朋友都遇到过。特别是像宝应电工证报名这样需要持续更新的证书,很多人在换工作、跳槽甚至转行时才发现证书已经失效,错过了重要的职业机会。不过,别担… · 2026/11/11 13:53:54
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/11 12:18:07
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/10 17:46:39
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/10 17:11:43
_中职电工证最新政策解读 中职电工证在哪考?工地太忙根本没时间复习考试的救星来了 工地太忙根本没时间复习考试,这是很多正在备考 中职电工证 的建筑工友的真实写照。你不是不想考,而是真的没时间。但别担心,这期内容是 新乡初次报考人员… · 2026/11/11 0:00:52
昆明电工证培训价格值不值得考?老电工告诉你真相 昆明电工证培训价格值不值得考?老电工告诉你真相 之前考的证在外省能不能转过来?这个问题是很多在外地打工、换城市生活、或者是想在昆明发展的朋友最关心的。尤其是现在云南发展快,很多企业都在招持证上岗的电工,如果你手头有证但不在本地,那这个证是不… · 2026/11/11 0:00:52
特种电缆张工网上查询全攻略:外省证如何转过来 特种电缆张工网上查询全攻略:外省证如何转过来 之前考的证在外省能不能转过来?这是很多特种作业从业者最关心的问题,尤其是像特种电缆张工这类证书,直接关系到日常工作是否合规、能否顺利晋升。很多小伙伴因为证书归属地的问题,陷入职业发展的瓶颈,甚至… · 2026/11/11 0:00:52
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 20:19:29
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 19:22:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 17:00:47