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.




