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.sh located in the project root directory. Execute ./build.sh release to initiate configuration and building. For a list of available options, enter ./build.sh help.
FINAL CUT currently works on the following platforms:
- Linux
- FreeBSD
- NetBSD
- OpenBSD
- macOS
- Cygwin
- GNU Hurd
- Solaris
If your platform is not listed here, it may still be compatible with FINAL CUT. Contributions to extend the platform support are welcome!
Read the documentation on the first steps in FINAL CUT to find out 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
Scrollable text in an FTextView widget
This project contains NewFont, a graphical text font for X11 and the Linux console:
Calculator example in NewFont mode
Measure the terminal character output speed with the Rotozoomer example.
FINAL CUT uses a virtual terminal to print character via an update method on the screen. It provides (as an overlying layer) virtual windows for the realization of window movements. The update methods only transfer differences to the virtual terminal or physical screen.
print(...)
printf(...)
โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโ[ vterm ]โโโโโโโโโโโโโโโโโโโโโโโโโ
โ โcreateVTerm() โ
โ โ โ โ โ โ โ โ โ โ โ โ โ โ
โ โ โ
โ โ โ restoreVTerm(box) โ โ
โ โโโโโโโโโจโโโโ[ vwin ]โโโโโโโโโโโโโ โ
โ โcreateArea(size) โ โ โ โ โ โ โ โ โ โ โ โ โ
โ โ โ โ
โ โ โ โ
โโโโผโโโโโโโโโบ putArea(pos,area) โโโโโบ โ
โ โ โ
โ โโโโโ getArea(pos,area) โ
โ โ โ
โ โ โ
โ โ โ
โ resizeArea(size, area)โ โ
โโโโโโโโโฅโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โ 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 โ--โ
โโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโ โโโโโโโโโโโโโโโโ :
โ 1โโโโโโโโโโโโโ1 *โโโโโโโโโโโโโโโโโ :
โโโโโโค FListView โ------โค FListViewItem โ :
โ โโโโโโโโโโโโโ โโโโโโโโโโฌโโโโโโโ :
โ โโโโโโโโโโโโโโโ :1 :
โโโโโโค FScrollView โ โโโโโดโโโโ1 :
โ โโโโโโโโโโโโโโโ โ FData โ----โ
โ โโโโโโโโโ
โ โโโโโโโโโโโโโโ1 *โโโโโโโโโโโโโโ
โ โโโโค FStatusBar โ-----โค FStatusKey โ
โ โ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโ
โ โ
โ โผ โโโโโโโโโโโโโโโ
โโโโโดโโดโโโโ โโโโโโโโโโโ โโโโค FFileDialog โ
โ FWindow โโโโค FDialog โโโโโค โโโโโโโโโโโโโโโ
โโโโฌโโโฌโโโโ โโโโโโโโโโโ โ โโโโโโโโโโโโโโโ
โฒ โฒ โโโโค FMessageBox โ
โ โ โโโโโโโโโโโโโโโ
โ โ โโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ
โ โโโโโโโโค FToolTip โโโโค FBusyIndicator โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโ
โ โโโโโค FMenuBar โ
โโโโโโโโโโโโโ โโโโโโโโค โโโโโโโโโโโโ
โ FMenuList โโโโโโโโโโโโโค โโโโโโโโโ
โโโโโโฌโโโโโโโ โโโโโค FMenu โโโโโ
:1 โโโโโโโโโ โ
: โโโโโโโโโโโโโโโโโโโ โ
: โ FDialogListMenu โโโโโ
: โโโโโโโโโโโโโโโโโโโ
โ--------------------------------โ
:* โโโโโโโโโโโโโโโโโโ* :
โโโโโโดโโโโโโ โโโโค FCheckMenuItem โ---โ
โFMenuItem โโโโค โโโโโโโโโโโโโโโโโโ :
โโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโ* :
โโโโค FRadioMenuItem โ---โ
โโโโโโโโโโโโโโโโโโ
We encourage community involvement in improving FINAL CUT. If you find bugs or issues, report them here. For contributions, please review our Contributing Guidelines.
FINAL CUT is licensed under the GNU Lesser General Public License v3.0. See the LGPL v3.0 license page for more details.




