2019-01-06 08:37:26 +08:00
|
|
|
# FTXUI
|
2019-01-27 23:15:42 +08:00
|
|
|
![Demo image](./examples/component/homescreen.gif)
|
|
|
|
Functional Terminal (X) User interface
|
2019-01-06 08:37:26 +08:00
|
|
|
|
2019-01-27 23:15:42 +08:00
|
|
|
A simple C++ library for terminal based user interface.
|
2019-01-06 08:37:26 +08:00
|
|
|
|
|
|
|
## Feature
|
|
|
|
* Functional style.
|
|
|
|
* Simple and elegant syntax (in my opinion).
|
|
|
|
* No dependencies.
|
|
|
|
|
2019-01-19 05:45:25 +08:00
|
|
|
## Other features
|
|
|
|
* vim navigation friendly (h,j,k,l)
|
|
|
|
|
2019-01-06 08:37:26 +08:00
|
|
|
## Example:
|
|
|
|
~~~cpp
|
|
|
|
vbox(
|
|
|
|
hbox(
|
2019-01-20 05:06:05 +08:00
|
|
|
text(L"left") | border,
|
|
|
|
text(L"middle") | border | flex,
|
|
|
|
text(L"right") | border
|
2019-01-06 08:37:26 +08:00
|
|
|
),
|
2019-01-20 05:06:05 +08:00
|
|
|
gauge(0.5) | border
|
2019-01-06 08:37:26 +08:00
|
|
|
)
|
|
|
|
~~~
|
|
|
|
|
|
|
|
~~~bash
|
|
|
|
┌────┐┌───────────────────────────────────────────────────────────────┐┌─────┐
|
|
|
|
│left││middle ││right│
|
|
|
|
└────┘└───────────────────────────────────────────────────────────────┘└─────┘
|
|
|
|
┌────────────────────────────────────────────────────────────────────────────┐
|
|
|
|
│██████████████████████████████████████ │
|
|
|
|
└────────────────────────────────────────────────────────────────────────────┘
|
|
|
|
~~~
|
|
|
|
|
|
|
|
## Tutorial
|
|
|
|
See [Tutorial](./tutorial.md)
|
|
|
|
|
2019-01-07 02:21:30 +08:00
|
|
|
## Build using CMake
|
|
|
|
~~~bash
|
2019-01-19 05:45:25 +08:00
|
|
|
mkdir build && cd build
|
2019-01-07 02:21:30 +08:00
|
|
|
cmake ..
|
|
|
|
make
|
|
|
|
sudo make install
|
|
|
|
~~~
|
|
|
|
|
|
|
|
## Use library using CMake
|
|
|
|
|
|
|
|
CMakeLists.txt
|
|
|
|
~~~cmake
|
|
|
|
cmake_minimum_required(VERSION 3.0)
|
|
|
|
|
|
|
|
find_package(ftxui REQUIRED)
|
|
|
|
add_executable(main main.cpp)
|
|
|
|
target_link_libraries(main PUBLIC ftxui::dom)
|
|
|
|
~~~
|
|
|
|
|
|
|
|
main.cpp
|
|
|
|
~~~cpp
|
|
|
|
#include "ftxui/screen/screen.hpp"
|
|
|
|
#include "ftxui/dom/elements.hpp"
|
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
int main(int argc, const char *argv[])
|
|
|
|
{
|
2019-01-19 05:45:25 +08:00
|
|
|
using namespace ftxui;
|
2019-01-07 02:21:30 +08:00
|
|
|
auto document =
|
|
|
|
hbox(
|
|
|
|
text(L"left") | bold,
|
|
|
|
text(L"middle") | flex,
|
|
|
|
text(L"right")
|
|
|
|
),
|
|
|
|
auto screen = Screen::TerminalOutput(document);
|
|
|
|
Render(screen, document.get());
|
|
|
|
|
|
|
|
std::cout << screen.ToString();
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
~~~
|