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) and GNU/Linux, BSD and all other platforms which support C++ standard library, something like .dll and .so files and GLFW
- The goal of Termi is to create independent terminal emulator, i.e. a separate kind of terminal emulator which uses "own" GUI rendering system.
- Has its own commands that can be written using C, C++ or Rust and possibly any language that can be compiled in a form of shared library.
- We accept contributors; create a Pull Request to contribute and check our coding style
- Commands list and explanation
- And please read organize part which talks about directory organization.
- Windows version (fully supported)
- GNU/Linux version (fully supported)
- BSD version (moderately supported) (@hahahahacker2009)
- macOS version (unsupported)
- Arguments
- Better arguments for Rust commands/applications
- Colors in console
- GUI models (actually do something with model 1)
- Loading executables (.dll files for Windows, .so files for macOS, GNU/Linux, BSD, etc.)
- Most of major commands
- Networking
- Ping command - @StjepanBM1
- Remote connection
- Serial port
- Themes
- Translations
- User settings in JSON
- UTF-8 support
- Installer in Inno Setup
- Launcher and updater - C#
- Visual Studio Visual Studio 2022 with
Desktop development with C++
, and.NET 6 Runtime
components. - vcpkg
- C++ complier: 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-gui
program 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_INSTALL
andGLFW_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-GUI
folder createLibraries
folder withinclude
andlib
subfolders, - copy
glfw3.lib
found in/path-to-extracted-glfw-folder/build/src/Debug
toTermi-GUI/Libraries/lib
, - copy
GLFW
folder found in/path-to-extracted-glfw-folder/include
toTermi-GUI/Libraries/include
, - copy
glad
andKHR
folders found in/path-to-extracted-glad-folder/include
toTermi-GUI/Libraries/include
; - check this video if you are stuck.
- Configure
Termi-GUI
solution:- open properties of
Termi-GUI
project, - go to
VC++ Directories
, - set path of
Include Directories
toLibraries/includes
folder, - set path of
Library Directories
toTermi-GUI
Libraries/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/glad
folder to/usr/include
(Linux), or/usr/local/include
(or even /usr/pkg/include), (for BSD and maybe macOS).
- install
glfw
package: 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-Commands
folder/directory, createbuild
folder andcmake ..
from newly created folder. - Open Visual Studio solution and compile it.
- Repeat steps for other projects.
- Copy
Termi-Commands.dll
andTermi-GUI.dll
fromDebug
orRelease
folder toTermi-Main
'sDebug
orRelease
folder. - Now run
Termi-Main
executable!
(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
rtest
Rust project bycargo build
(and then copy .dll or .so file in folder/directory where are other .dll or .so files) if you want to haveyes
command mainly written in Rust
- OpenGL might now open when reading from .txt file, remove
render->Settings(1, 0)
andrender->Settings(2, 0)
to size which you want. - Dear ImGui might cause segmentation fault on BSD based operating systems (we are fixing this currently).
- Running
Termi-Main
can result:libTermi-GUI.so: cannot open shared object file: No such file or directory
error; runTermi-Main
with this command:LD_LIBRARY_PATH=. ./Termi-Main
. cd
command 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.h
for 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