FTXUI

2025-12-10 0 697

Documentation ·
Report a Bug ·
Examples .
Request Feature ·
Send a Pull Request

FTXUI

Functional Terminal (X) User interface

A simple cross-platform C++ library for terminal based user interfaces!

Feature

  • Functional style. Inspired by
    1
    and React
  • Simple and elegant syntax (in my opinion)
  • Keyboard & mouse navigation.
  • Support for UTF8 and fullwidth chars (→ 测试)
  • Support for animations. Demo 1, Demo 2
  • Support for drawing. Demo
  • No dependencies.
  • C++20 Module support
  • Cross platform: Linux/MacOS (main target), WebAssembly, Windows (Thanks to contributors!).
  • Learn by examples, and tutorials
  • Multiple packages:
    • CMake FetchContent (preferred)
    • Bazel
    • vcpkg
    • Conan Debian package
    • Ubuntu package
    • Arch Linux
    • OpenSUSE
    • XMake repository package
    • Nix
  • Good practices: documentation, tests, fuzzers, performance tests, automated CI, automated packaging, etc…

Documentation

  • Starter CMake
  • Starter Bazel
  • Documentation
  • Examples (WebAssembly)
  • Build using CMake
  • Build using Bazel

Example

    vbox({
      hbox({
        text(\"one\") | border,
        text(\"two\") | border | flex,
        text(\"three\") | border | flex,
      }),

      gauge(0.25) | color(Color::Red),
      gauge(0.50) | color(Color::White),
      gauge(0.75) | color(Color::Blue),
    });

Short gallery

DOM

This module defines a hierarchical set of Element. An Element manages layout and can be responsive to the terminal dimensions.

They are declared in <ftxui/dom/elements.hpp>

Layout

Element can be arranged together:

  • horizontally with hbox
  • vertically with vbox
  • inside a grid with gridbox
  • wrap along one direction using the flexbox.

Element can become flexible using the flex decorator.

Example using hbox, vbox and filler.

Example using gridbox:

Example using flexbox:

See also this demo.

Style

An element can be decorated using the functions:

  • bold
  • italic
  • dim
  • inverted
  • underlined
  • underlinedDouble
  • blink
  • strikethrough
  • color
  • bgcolor
  • hyperlink

Example

FTXUI supports the pipe operator. It means: decorator1(decorator2(element)) and element | decorator1 | decorator2 can be used.

Colors

FTXUI support every color palette:

Color gallery:

Border and separator

Use decorator border and element separator() to subdivide your UI:

auto document = vbox({
    text(\"top\"),
    separator(),
    text(\"bottom\"),
}) | border;

Demo:

Text and paragraph

A simple piece of text is represented using text(\"content\").

To support text wrapping following spaces the following functions are provided:

Element paragraph(std::string text);
Element paragraphAlignLeft(std::string text);
Element paragraphAlignRight(std::string text);
Element paragraphAlignCenter(std::string text);
Element paragraphAlignJustify(std::string text);

Paragraph example

Table

A class to easily style a table of data.

Example:

Canvas

Drawing can be made on a Canvas, using braille, block, or simple characters:

Simple example:

Complex examples:

Component

ftxui/component produces dynamic UI, reactive to the user\’s input. It defines a set of ftxui::Component. A component reacts to Events (keyboard, mouse, resize, …) and Renders as an Element (see previous section).

Prebuilt components are declared in <ftxui/component/component.hpp>

Gallery

Gallery of multiple components. (demo)

Radiobox

Example:

Checkbox

Example:

Input

Example:

Toggle

Example:

Slider

Example:

Menu

Example:

ResizableSplit

Example:

Dropdown

Example:

Tab

Vertical:

Horizontal:

Libraries for FTXUI

  • Want to share a useful Component for FTXUI? Feel free to add yours here
  • ftxui-grid-container
  • ftxui-ip-input
  • ftxui-image-view: For Image Display.

Project using FTXUI

Feel free to add your projects here:

  • json-tui
  • git-tui
  • ostree-tui
  • rgb-tui
  • chrome-log-beautifier
  • x86-64 CPU Architecture Simulation
  • ltuiny
  • i3-termdialogs
  • simpPRU
  • Pigeon ROS TUI
  • hastur
  • CryptoCalculator
  • todoman
  • TimeAccumulator
  • vantage
  • tabdeeli
  • tiles
  • cachyos-cli-installer
  • beagle-config
  • turing_cmd
  • StartUp
  • eCAL monitor
  • Path Finder
  • rw-tui
  • resource-monitor
  • ftxuiFileReader
  • ftxui_CPUMeter
  • Captain\’s log
  • FTowerX
  • Caravan
  • Step-Writer
  • XJ music
  • UDP chat
  • 2048-cpp
  • Memory game
  • Terminal Animation
  • pciex
  • Fallout terminal hacking
  • Lazylist
  • TUISIC
  • inLimbo
  • BestEdrOfTheMarket
  • terminal-rain
  • keywords (Play web version ❤️)
  • FTB – tertminal file browser
  • openJuice
  • SHOOT!

cpp-best-practices/game_jam

Several games using the FTXUI have been made during the Game Jam:

  • TermBreaker [Play web version]
  • Minesweeper Marathon [Play web version]
  • Grand Rounds
  • LightsRound
  • DanteO
  • Sumo
  • Drag Me aROUND
  • DisarmSelfDestruct
  • TheWorld
  • smoothlife
  • Consu

Build using CMake

It is highly recommended to use CMake FetchContent to depend on FTXUI so you may specify which commit you would like to depend on.

include(FetchContent)
FetchContent_Declare(ftxui
  GIT_REPOSITORY https://github.**co*m/ArthurSonzogni/ftxui
  GIT_TAG v6.1.9
)
FetchContent_MakeAvailable(ftxui)

target_link_libraries(your_target PRIVATE
    # Chose a submodule
    ftxui::component
    ftxui::dom
    ftxui::screen
)

Build using Bazel

MODULE.bazel

bazel_dep(
    name = \"ftxui\",
    version = \"v6.1.9\",
)

BUILD.bazel

cc_binary(
    name = \"your_target\",
    srcs = [\"your_source.cc\"],
    deps = [
        \"@ftxui//:ftxui_component\",
        \"@ftxui//:ftxui_dom\",
        \"@ftxui//:ftxui_screen\",
    ],
)

Build with something else:

If you don\’t, FTXUI may be used from the following packages:

  • CMake FetchContent (preferred),
  • Bazel,
  • vcpkg,
  • Conan
  • Debian package,
  • Ubuntu package,
  • Arch Linux,
  • OpenSUSE,
    Nix,

If you choose to build and link FTXUI yourself, ftxui-component must be first in the linking order relative to the other FTXUI libraries, i.e.

g++ . . . -lftxui-component -lftxui-dom -lftxui-screen . . .

To build FTXUI with modules, check documentation

Contributors

下载源码

通过命令行克隆项目:

git clone https://github.com/ArthurSonzogni/FTXUI.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 FTXUI https://www.zuozi.net/33581.html

vowpal_wabbit
上一篇: vowpal_wabbit
cppbestpractices
下一篇: cppbestpractices
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务