mirror of
https://github.com/scorpion-26/gBar.git
synced 2024-11-21 18:52:49 +00:00
Improve CLI interface
A CLI help option has been added, as well as a more clear error message when a plugin was not found.
This commit is contained in:
parent
8c49270677
commit
2eeea75c1b
2 changed files with 83 additions and 14 deletions
|
@ -1,6 +1,7 @@
|
||||||
#include "Plugin.h"
|
#include "Plugin.h"
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "Window.h"
|
#include "Window.h"
|
||||||
|
#include "src/Log.h"
|
||||||
|
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
|
|
||||||
|
@ -17,7 +18,8 @@ void Plugin::LoadWidgetFromPlugin(const std::string& pluginName, Window& window,
|
||||||
if (dl)
|
if (dl)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ASSERT(dl, "Cannot find plugin library!");
|
ASSERT(dl, "Error: Cannot find plugin \"" << pluginName << "\"!\n"
|
||||||
|
"Note: Did you mean to run \"gBar bar\" instead?");
|
||||||
|
|
||||||
typedef void (*PFN_InvokeCreateFun)(void*, int32_t);
|
typedef void (*PFN_InvokeCreateFun)(void*, int32_t);
|
||||||
typedef int32_t (*PFN_GetVersion)();
|
typedef int32_t (*PFN_GetVersion)();
|
||||||
|
@ -32,4 +34,3 @@ void Plugin::LoadWidgetFromPlugin(const std::string& pluginName, Window& window,
|
||||||
// Execute
|
// Execute
|
||||||
invokeCreateFun(&window, monitor);
|
invokeCreateFun(&window, monitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
92
src/gBar.cpp
92
src/gBar.cpp
|
@ -44,34 +44,102 @@ void CloseTmpFiles(int sig)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PrintHelp()
|
||||||
|
{
|
||||||
|
LOG("==============================================\n"
|
||||||
|
"| gBar |\n"
|
||||||
|
"==============================================\n"
|
||||||
|
"gBar, a fast status bar + widgets\n"
|
||||||
|
"\n"
|
||||||
|
"Basic usage: \n"
|
||||||
|
"\tgBar [OPTIONS...] WIDGET [MONITOR]\n"
|
||||||
|
"\n"
|
||||||
|
"Sample usage:\n"
|
||||||
|
"\tgBar bar 0\tOpens the status bar on monitor 0\n"
|
||||||
|
"\tgBar audio\tOpens the audio flyin on the current monitor\n"
|
||||||
|
"\n"
|
||||||
|
"All options:\n"
|
||||||
|
"\t--help/-h \tPrints this help page and exits afterwards\n"
|
||||||
|
"\n"
|
||||||
|
"All available widgets:\n"
|
||||||
|
"\tbar \tThe main status bar\n"
|
||||||
|
"\taudio \tAn audio volume slider flyin\n"
|
||||||
|
"\tmic \tA microphone volume slider flyin\n"
|
||||||
|
"\tbluetooth \tA bluetooth connection widget\n"
|
||||||
|
"\t[plugin] \tTries to open and run the plugin lib[plugin].so\n");
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
|
std::string widget;
|
||||||
|
int32_t monitor = -1;
|
||||||
|
|
||||||
|
// Arg parsing
|
||||||
|
for (int i = 1; i < argc; i++)
|
||||||
|
{
|
||||||
|
std::string arg = argv[i];
|
||||||
|
if (arg.size() < 1 || arg[0] != '-')
|
||||||
|
{
|
||||||
|
// This must be the widget selection
|
||||||
|
widget = arg;
|
||||||
|
if (i + 1 < argc)
|
||||||
|
{
|
||||||
|
std::string mon = argv[i + 1];
|
||||||
|
if (mon.size() < 1 || mon[0] != '-')
|
||||||
|
{
|
||||||
|
// Next comes the monitor
|
||||||
|
monitor = std::stoi(mon);
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Not the monitor
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (arg == "-h" || arg == "--help")
|
||||||
|
{
|
||||||
|
PrintHelp();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG("Warning: Unknown CLI option \"" << arg << "\"")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (widget == "")
|
||||||
|
{
|
||||||
|
LOG("Error: Widget to open not specified!\n");
|
||||||
|
PrintHelp();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (argc <= 1)
|
||||||
|
{
|
||||||
|
LOG("Error: Too little arguments\n");
|
||||||
|
PrintHelp();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
signal(SIGINT, CloseTmpFiles);
|
signal(SIGINT, CloseTmpFiles);
|
||||||
System::Init();
|
System::Init();
|
||||||
|
|
||||||
int32_t monitor = -1;
|
|
||||||
if (argc >= 3)
|
|
||||||
{
|
|
||||||
monitor = atoi(argv[2]);
|
|
||||||
}
|
|
||||||
|
|
||||||
Window window(monitor);
|
Window window(monitor);
|
||||||
window.Init(argc, argv);
|
window.Init(argc, argv);
|
||||||
ASSERT(argc >= 2, "Too little arguments!");
|
if (widget == "bar")
|
||||||
if (strcmp(argv[1], "bar") == 0)
|
|
||||||
{
|
{
|
||||||
Bar::Create(window, monitor);
|
Bar::Create(window, monitor);
|
||||||
}
|
}
|
||||||
else if (strcmp(argv[1], "audio") == 0)
|
else if (widget == "audio")
|
||||||
{
|
{
|
||||||
OpenAudioFlyin(window, monitor, AudioFlyin::Type::Speaker);
|
OpenAudioFlyin(window, monitor, AudioFlyin::Type::Speaker);
|
||||||
}
|
}
|
||||||
else if (strcmp(argv[1], "mic") == 0)
|
else if (widget == "mic")
|
||||||
{
|
{
|
||||||
OpenAudioFlyin(window, monitor, AudioFlyin::Type::Microphone);
|
OpenAudioFlyin(window, monitor, AudioFlyin::Type::Microphone);
|
||||||
}
|
}
|
||||||
#ifdef WITH_BLUEZ
|
#ifdef WITH_BLUEZ
|
||||||
else if (strcmp(argv[1], "bluetooth") == 0)
|
else if (widget == "bluetooth")
|
||||||
{
|
{
|
||||||
if (RuntimeConfig::Get().hasBlueZ)
|
if (RuntimeConfig::Get().hasBlueZ)
|
||||||
{
|
{
|
||||||
|
@ -98,7 +166,7 @@ int main(int argc, char** argv)
|
||||||
#endif
|
#endif
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Plugin::LoadWidgetFromPlugin(argv[1], window, monitor);
|
Plugin::LoadWidgetFromPlugin(widget, window, monitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
window.Run();
|
window.Run();
|
||||||
|
|
Loading…
Reference in a new issue