一个现代的基于文本的 C++ 小组件工具包 (TUI)
FINAL CUT is a powerful and lightweight C++ library for creating terminal-based applications (TUI) with numerous text-based widgets. FINAL CUT is designed for simplicity and does not require the functionality of external libraries (such as ncurses or termbox) but still offers full mouse support, Unicode compatibility, and versatile widget functions.
It provides UTF-8 character encoding, full-width character support, and the ability to display combined Unicode characters. The library allows developers to create user-friendly text console applications that manage multiple text windows on the screen using their own windowing system.
The design of FINAL CUT's C++ class structure was inspired by the Qt framework. It provides a variety of common controls, including dialog boxes, push buttons, check boxes, radio buttons, input lines, list boxes, and status bars.
| Badge | |
|---|---|
| Latest release | |
| License | |
| Class Reference | |
| ARM build | |
| FreeBSD build | |
| NetBSD build | |
| OpenBSD build | |
| macOS build | |
| Cygwin build | |
| Solaris build | |
| CodeQL analysis | |
| Coverity Scan | |
| SonarCloud | |
| CodeFactor | |
| SIGRID |
Before installing FINAL CUT, check if your computer meets the requirements. You can find these in the FAQ section under "What do I need to build this library?".
git clone https://github.com/gansm/finalcut.git
cd finalcut
autoreconf --install --force
./configure --prefix=/usr
make
su -c "make install"
[!NOTE] To simplify the build process, use the shell script
build.shlocated in the project root directory. Execute./build.sh releaseto initiate configuration and building. For a list of available options, enter./build.sh help.
FINAL CUT currently works on the following platforms:
If your platform is not listed here, it may still be compatible with FINAL CUT. Contributions to extend the platform support are welcome!
Refer to the FINAL CUT introduction to learn how to use the library.
Check out the FINAL CUT FAQ for common questions and answers.
Explore FINAL CUT's text-ui with these examples:
FFileDialog widget with incremental search
FProgressBar widget
X PixMap (XPM) viewer example
Scrollable text in an FTextView widget
Mandelbrot set example
This project contains NewFont, a graphical text font for X11 and the Linux console:
UI example in NewFont mode
Drive symbols
Calculator example in NewFont mode
Use the Rotozoomer example to check the terminal's output speed.
FINAL CUT uses a virtual terminal to draw characters via an update method to the screen. It features an overlay of virtual windows to handle movement, while the update methods only transfer changes to the virtual terminal or physical screen.
print(...) printf(...) │ │ ╔════════════════════════[ vterm ]════════════════════════╗ │ ║createVTerm() ║ │ ║ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐ ║ │ ║ ║ │ ║ │ restoreVTerm(box) │ ║ │ ┌───────╨────[ vwin ]────────────┐ ║ │ │createRegion(size) │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘ ║ │ │ │ ║ │ │ │ ║ └──┼────────► putRegion(pos,region) ────► ║ │ │ ║ │ ◄──── getRegion(pos,region) ║ │ │ ║ │ │ ║ │ │ ║ │ resizeRegion(size,region)│ ║ └───────╥────────────────────────┘ ║ ║ ║ ║ │ resizeVTerm(size)║ ╚═══════▼═════════════════════════════════════════════════╝ │ │ putVTerm() └──────────────────► updateTerminalLine(y) updateTerminal() │ ▼ ┌───────────────┐ │ output_buffer │ └───────────────┘ │ │ flush() │ ▼ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▌ ▐ ▌ screen ▐ ▌ ───────────── ▐ ▌ real terminal ▐ ▌ ▐ ▀▀▀▀▀▀▀███▀▀▀▀▀▀▀ ███ ▀▀▀▀▀▀▀▀▀
┌────────────┐1
│ FTermLinux ├------┐
└────────────┘ :
┌──────────────┐1 : │ FTermFreeBSD ├------┐ └──────────────┘ : ┌──────────────┐1 : │ FTermOpenBSD ├------┐ └──────────────┘ : ┌────────────────┐1 : │ FTermDetection ├------┐ └────────────────┘ : ┌────────────────┐1 : │ FTermcapQuirks ├------┐ └────────────────┘ : ┌───────────┐ ┌────────────────┐1 : ┌────┤ FKeyEvent │ │ FTermXTerminal ├------┐ │ └───────────┘ └────────────────┘ : │ ┌─────────────┐ ┌──────────┐1 : ├────┤ FMouseEvent │ │ FTermcap ├------┐ │ └─────────────┘ └──────────┘ : │ ┌─────────────┐ ┌──────────┐1 : ├────┤ FWheelEvent │ │ FTermios ├------┐ │ └─────────────┘ └──────────┘ : │ ┌─────────────┐ ┌───────────────┐1 : ├────┤ FFocusEvent │ │ FColorPalette ├------┐ │ └─────────────┘ └───────────────┘ : │ ┌─────────────┐ ┌───────────┐1 : ├────┤ FAccelEvent │ │ FOptiMove ├------┐ │ └─────────────┘ └───────────┘ : │ ┌──────────────┐ ┌───────────┐1 : ├────┤ FResizeEvent │ │ FOptiAttr ├------┐ │ └──────────────┘ └───────────┘ : │ ┌────────────┐ ┌───────────┐1 : ├────┤ FShowEvent │ │ FKeyboard ├------┐ │ └────────────┘ └───────────┘ : │ ┌────────────┐ ┌───────────────┐1 : ├────┤ FHideEvent │ │ FMouseControl ├------┐ │ └────────────┘ └───────────────┘ : │ ┌─────────────┐ ┌─────────┐1 : ├────┤ FCloseEvent │ │ FSystem ├------┐ │ └─────────────┘ └─────────┘ : │ ┌─────────────┐ ┌─────────┐* : ├────┤ FTimerEvent │ │ FString ├---┐ : │ └─────────────┘ └─────────┘ : : │ ┌────────────┐1 1┌───────┐ ┌───────────────┐* : : ├────┤ FUserEvent ├------┤ FData │ │ FStringStream ├---┐ : │ └────────────┘ └───────┘ └───────────────┘ : : │ ┌──────┐ ┌─────────┐ ┌────────┐* : : │ │ FLog │◄──┤ FLogger │ │ FPoint ├---┐ : │ └──┬───┘ └─────────┘ └────────┘ : : │ :1 ┌───────┐* : : │ ┌──┴───────────┐ │ FRect ├---┐ : │ ┌────┤ FApplication │ └───────┘ : : │ │ └──────────────┘ ┌───────┐* : : │ │ ┌────────┐ │ FSize ├---┐ : │ ├────┤ FLabel │ └───────┘ : : │ │ └────────┘ :1 :1 │ │ ┌───────────┐ ┌───┴──┴┐ │ ├────┤ FLineEdit │ │ FTerm │ │ │ └───────────┘ └───┬───┘ │ │ ┌──────────┐ :1 │ ├────┤ FSpinBox │ ┌─────────┐ ┌──────┴──────┐ │ │ └──────────┘ │ FOutput │◄──┤ FTermOutput │ │ │ ┌─────────┐ └────┬────┘ └─────────────┘ │ ├────┤ FButton │ : ┌────────┐ │ │ └─────────┘ :1 │ FEvent │◄──┘ │ ┌──────────────┐ ┌──────────────┐ ┌───┴────┐ └────┬───┘ ├────┤ FButtonGroup │ ┌──┤ FRadioButton │ │ FVTerm │◄──┐ :1 │ └──────────────┘ │ └──────────────┘ └────────┘ │ ┌────┴────┐ │ ┌───────────────┐ │ ┌───────────┐ ├────┤ FWidget │◄─────┼────┤ FToggleButton │◄─┼──┤ FCheckBox │ ┌─────────┐ │ └────┬────┘ │ └───────────────┘ │ └───────────┘ │ FObject │◄──┘ :1 │ ┌──────────────┐ │ ┌─────────┐ └────┬────┘ ┌──────┴────────┐ ├────┤ FProgressBar │ └──┤ FSwitch │ ▼ │ FWidgetColors │ │ └──────────────┘ └─────────┘ ┌───┴────┐ └───────────────┘ │ ┌────────────┐ │ FTimer │ ├────┤ FScrollBar │ └────────┘ │ └────────────┘ │ ┌───────────┐ ├────┤ FTextView │ │ └───────────┘ │ ┌───────────┐1 1┌──────────────────┐ ├────┤ FComboBox ├------┤ FDropDownListBox │ │ └───────────┘ └──────────────────┘ ┌──────────────┐1 │ ┌──────────┐1 *┌──────────────┐1 │ FVTermBuffer ├-------------------├────┤ FListBox ├-------┤ FListBoxItem ├--┐ └──────────────┘ │
暂无开放 Issues,或尚未同步最近议题。