A powerful terminal emulator with an optional custom shell written in C++ with OpenGL and Dear ImGui.
The goal is to create an independent terminal environment which is still able to access other environments.
- Termi is a powerful terminal emulator with a shell written in C++.
- It can run on Windows, (macOS), (GNU/)Linux, BSD and all other platforms which support used technologies.
- The goal of Termi is to create an independent terminal environment, i.e. a separate kind of terminal emulator which uses "own" rendering and shell system.
- Has two distinct running modes:
simple console mode- can only execute commands from dynamic libraries that are designed to support Termi,advanced console mode- can execute anything as any other terminal emulator.
- Read CONTRIBUTING.md and CODE.md for more information.
- Visual Studio Visual Studio 2022 with
Desktop development with C++, and.NET 6 Runtimecomponents. - vcpkg
- C++ compiler: GCC and Clang are both supported (they are compatible)
- C & C++ headers: you should have them by default. If not, you can try installing what's called base-devel or build-essentials or build-base. Strictly speaking, they are a collection of tools required to build the whose Linux distribution, including kernel. Linux packaging often split package into binary components and header, the header usually contain the postfix -dev or -devel On BSD, you can get all of them with the "compiler" sets.
-
(Optional) Git - for cloning repo
- Check Git website for Windows instructions or do
winget install git - Use your package manager or get the software from the official website.
- Check Git website for Windows instructions or do
-
CMake
- Visual Studio have option for installing cmake
- Use your package manager or get the software at their official website.
-
json-c library header (non-vcpkg version)
- Install it using vcpkg using on Windows (static x64) (
vcpkg install json-c:x64-windows-static) - Use your package manager, or download it
- Install it using vcpkg using on Windows (static x64) (
-
OpenGL & its dependencies
-
- Download GLFW,
- go to https://glad.dav1d.de/,
- generate glad with following properties:
gl: Version 3.3,Profile: Core;
- download generated
glad.zip, - extract zip archives,
- open
cmake-guiprogram and set following parameters:Where is the source code: /path-to-extracted-glfw-folder,Where to build binaries: /path-to-extracted-glfw-folder/build,- click
Configure, - select
GLFW_BUILD_DOCS,GLFW_BUILD_EXAMPLES,GLFW_BUILD_TESTS,GLFW_INSTALLandGLFW_MSVC_RUNTIME_LIBRARY_DLL, - click
Generate, - enter
/path-to-extracted-glfw-folder/build, open a solution in Visual Studio and build the solution;
- in
Termi-GUIfolder createLibrariesfolder withincludeandlibsubfolders, - copy
glfw3.libfound in/path-to-extracted-glfw-folder/build/src/DebugtoTermi-GUI/Libraries/lib, - copy
GLFWfolder found in/path-to-extracted-glfw-folder/includetoTermi-GUI/Libraries/include, - copy
gladandKHRfolders found in/path-to-extracted-glad-folder/includetoTermi-GUI/Libraries/include; - check this video if you are stuck.
- Configure
Termi-GUIsolution:- open properties of
Termi-GUIproject, - go to
VC++ Directories, - set path of
Include DirectoriestoLibraries/includesfolder, - set path of
Library DirectoriestoTermi-GUILibraries/lib; - if you get in trouble, check this video.
- open properties of
-
- Go to https://glad.dav1d.de/,
- generate glad with following properties:
gl: Version 3.3,Profile: Core;
- download generated
glad.zip, - extract
glad.zip, - copy
./include/gladfolder to/usr/include(Linux), or/usr/local/include(or even /usr/pkg/include), (for BSD and maybe macOS).
- install
glfwpackage: both the shared object and the header; You can use your package manager. - if you get in trouble, check this video.
- (Developer notes) Linux (package managers) do not use the /usr/local hierarchy, while BSD do, for "third-party software". NetBSD use the /usr/pkg hierarchy instead of /usr/local; OpenBSD and NetBSD have X by default, so they use /usr/X11R6 and /usr/X11R7 hierarchy to store X file, whereas on FreeBSD X is third-party software so it is installed on /usr/local . The compilation flags for each system is all added, no need to worry here.
-
-
Rust - required for building Rust commands (optional)
- Check Rust's website for download instructions
Commands which requires package installation have to be ran with administrator/root access!
- Open terminal.
- Go to
Termi-Commandsfolder/directory, createbuildfolder and runcmake ..from newly created folder. - Open Visual Studio solution and compile it.
- Repeat steps for other projects.
- Copy
Termi-Commands.dllandTermi-GUI.dllfromDebugorReleasefolder toTermi-Main'sDebugorReleasefolder. - Now run
Termi-Mainexecutable!
(Developer notes) Don't forget to use Release mode, zip it in windows-release and update version file so it's available to Termi-Launcher!
- Just run
compile_all.sh(it won't compile test Rust command)- first argument is number of threads, by default, we use 2 threads for a faster build experience.
- second argument is do you want clean build, if you do, specify clean
- example:
./compile_all.sh 4 clean
- You can compile
rtestRust project bycargo build(and then copy .dll or .so file in folder/directory where are other .dll or .so files) if you want to haveyescommand mainly written in Rust
- Dear ImGui might cause segmentation fault on BSD based operating systems (we are fixing this currently).
- Running
Termi-Maincan result in:libTermi-GUI.so: cannot open shared object file: No such file or directoryerror; runTermi-Mainwith this command:LD_LIBRARY_PATH=. ./Termi-Main. cdcommand disables autofocus on input bar.- You have to press button for other themes (not light/dark) to be able to switch between light and dark themes.
Termi running sysfetch command on GNU/Linux, Arch Linux
Termi running calc and base64 commands on GNU/Linux, Arch Linux
- OpenGL
- Dear ImGui
- stb
- Sweet16Font
- dirent -
dirent.hfor Windows
- Background launcher picture
- Stack Overflow - solution for most of problems
- Cherno - for recommending Dear ImGui
- Victor Gordan - for OpenGL window code
- cppfetch - for Termi's
sysfetch - dl-libraries.html - for loading functions from .so files at runtime
- c-chatroom - for server & client implementation
- ...
Word terminal might not be the best word to describe this project
Thank you for choosing Termi.
© 2021 - present ringwormGO