From 6859ce346c351c1cb10790127649f14c307c6738 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Lucas=20Golini?= Date: Wed, 13 Jul 2022 01:03:36 -0300 Subject: [PATCH] Added command line options to eterm. --- premake4.lua | 2 +- premake5.lua | 2 +- src/tools/ecode/ecode.cpp | 2 +- src/tools/eterm/eterm.cpp | 63 +++++++++++++++++++++++++++++++++------ 4 files changed, 57 insertions(+), 12 deletions(-) diff --git a/premake4.lua b/premake4.lua index 524405fce..169c26af0 100644 --- a/premake4.lua +++ b/premake4.lua @@ -1210,7 +1210,7 @@ solution "eepp" if os.is("haiku") then links { "bsd" } end - includedirs { "src/modules/eterm/include/" } + includedirs { "src/modules/eterm/include/", "src/thirdparty" } build_link_configuration( "eterm", true ) project "eepp-texturepacker" diff --git a/premake5.lua b/premake5.lua index e044bc42e..e07929a63 100644 --- a/premake5.lua +++ b/premake5.lua @@ -943,7 +943,7 @@ workspace "eepp" project "eterm" set_kind() language "C++" - incdirs { "src/modules/eterm/include/" } + incdirs { "src/modules/eterm/include/", "src/thirdparty" } files { "src/tools/eterm/**.cpp" } links { "eterm-static" } build_link_configuration( "eterm", true ) diff --git a/src/tools/ecode/ecode.cpp b/src/tools/ecode/ecode.cpp index 9776f5703..4e93c5149 100644 --- a/src/tools/ecode/ecode.cpp +++ b/src/tools/ecode/ecode.cpp @@ -3895,7 +3895,7 @@ EE_MAIN_FUNC int main( int argc, char* argv[] ) { args::ValueFlag prefersColorScheme( parser, "prefers-color-scheme", "Set the preferred color scheme (\"light\" or \"dark\")", { 'c', "prefers-color-scheme" } ); - args::Flag terminal( parser, "terminal", "Open a new terminal", { 't', "terminal", "folder" } ); + args::Flag terminal( parser, "terminal", "Open a new terminal", { 't', "terminal" } ); try { #if EE_PLATFORM != EE_PLATFORM_EMSCRIPTEN parser.ParseCLI( argc, argv ); diff --git a/src/tools/eterm/eterm.cpp b/src/tools/eterm/eterm.cpp index d50144e05..ee2fe861e 100644 --- a/src/tools/eterm/eterm.cpp +++ b/src/tools/eterm/eterm.cpp @@ -1,3 +1,4 @@ +#include #include #include @@ -11,7 +12,7 @@ void inputCallback( InputEvent* event ) { switch ( event->Type ) { case InputEvent::MouseMotion: { terminal->onMouseMove( win->getInput()->getMousePos(), - win->getInput()->getPressTrigger() ); + win->getInput()->getPressTrigger() ); break; } case InputEvent::MouseButtonDown: { @@ -88,11 +89,43 @@ void mainLoop() { } } -EE_MAIN_FUNC int main( int, char*[] ) { +EE_MAIN_FUNC int main( int argc, char* argv[] ) { #ifdef EE_DEBUG Log::instance()->setConsoleOutput( true ); Log::instance()->setLiveWrite( true ); #endif + args::ArgumentParser parser( "eterm" ); + args::HelpFlag help( parser, "help", "Display this help menu", { 'h', "help" } ); + args::ValueFlag shell( parser, "shell", "Shell name or path", { 's', "shell" }, + "" ); + args::ValueFlag historySize( parser, "scrollback", "Maximum history size (lines)", + { 'l', "scrollback" }, 10000 ); + args::Flag fb( parser, "framebuffer", "Use frame buffer (more memory usage, less CPU usage)", + { "framebuffer" } ); + args::ValueFlag fontPath( parser, "fontpath", "Font path", { 'f', "font" } ); + args::ValueFlag fontSize( parser, "fontsize", "Font size (in dp)", { 's', "fontsize" }, + 11 ); + args::ValueFlag width( parser, "winwidth", "Window width (in dp)", { "width" }, 1280 ); + args::ValueFlag height( parser, "winheight", "Window height (in dp)", { "height" }, + 720 ); + args::ValueFlag pixelDenstiyConf( parser, "pixel-density", + "Set default application pixel density", + { 'd', "pixel-density" } ); + try { + parser.ParseCLI( argc, argv ); + } catch ( const args::Help& ) { + std::cout << parser; + return EXIT_SUCCESS; + } catch ( const args::ParseError& e ) { + std::cerr << e.what() << std::endl; + std::cerr << parser; + return EXIT_FAILURE; + } catch ( args::ValidationError& e ) { + std::cerr << e.what() << std::endl; + std::cerr << parser; + return EXIT_FAILURE; + } + DisplayManager* displayManager = Engine::instance()->getDisplayManager(); Display* currentDisplay = displayManager->getDisplayIndex( 0 ); @@ -117,19 +150,29 @@ EE_MAIN_FUNC int main( int, char*[] ) { displayManager->enableMouseFocusClickThrough(); displayManager->disableBypassCompositor(); - Sizei winSize( 1280, 720 ); + Sizei winSize( width.Get(), height.Get() ); win = Engine::instance()->createWindow( WindowSettings( winSize.getWidth(), winSize.getHeight(), "eterm", WindowStyle::Default, WindowBackend::Default, 32, resPath + "icon/ee.png", - currentDisplay->getPixelDensity() ), + pixelDenstiyConf ? pixelDenstiyConf.Get() + : currentDisplay->getPixelDensity() ), ContextSettings( true ) ); if ( win->isOpen() ) { win->setClearColor( RGB( 0, 0, 0 ) ); - FontTrueType* fontMono = FontTrueType::New( "monospace" ); - fontMono->loadFromFile( resPath + "fonts/DejaVuSansMonoNerdFontComplete.ttf" ); - fontMono->setEnableEmojiFallback( false ); + FontTrueType* fontMono = nullptr; + if ( fontPath && FileSystem::fileExists( fontPath.Get() ) ) { + FileInfo file( fontPath.Get() ); + fontMono = FontTrueType::New( "monospace" ); + if ( !fontMono->loadFromFile( file.getFilepath() ) ) + fontMono = nullptr; + } + if ( fontMono == nullptr ) { + fontMono = FontTrueType::New( "monospace" ); + fontMono->loadFromFile( resPath + "fonts/DejaVuSansMonoNerdFontComplete.ttf" ); + fontMono->setEnableEmojiFallback( false ); + } if ( FileSystem::fileExists( resPath + "fonts/NotoColorEmoji.ttf" ) ) { FontTrueType::New( "emoji-color" ) @@ -140,8 +183,10 @@ EE_MAIN_FUNC int main( int, char*[] ) { } if ( !terminal || terminal->hasTerminated() ) { - terminal = TerminalDisplay::create( win, fontMono, PixelDensity::dpToPx( 11 ), - win->getSize().asFloat() ); + terminal = TerminalDisplay::create( + win, fontMono, PixelDensity::dpToPx( fontSize.Get() ), win->getSize().asFloat(), + shell.Get(), {}, FileSystem::getCurrentWorkingDirectory(), historySize.Get(), + nullptr, fb.Get() ); terminal->pushEventCallback( [&]( const TerminalDisplay::Event& event ) { if ( event.type == TerminalDisplay::EventType::TITLE ) win->setTitle( "eterm - " + event.eventData );