mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-22 15:45:59 +01:00
Use enum for specifying hyprctl output format and change the way flags
are passed for json output
This commit is contained in:
parent
036f431206
commit
2402f2e364
4 changed files with 61 additions and 43 deletions
|
@ -1,4 +1,4 @@
|
||||||
all:
|
all:
|
||||||
g++ -std=c++20 ./main.cpp -o ./hyprctl
|
g++ -std=c++23 ./main.cpp -o ./hyprctl
|
||||||
clean:
|
clean:
|
||||||
rm ./hyprctl
|
rm ./hyprctl
|
|
@ -195,28 +195,29 @@ int main(int argc, char** argv) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string args(argv[1]);
|
std::string ourRequest = argv[1];
|
||||||
|
|
||||||
if (argc > 2) {
|
if (!ourRequest.contains("/")) {
|
||||||
args += " ";
|
ourRequest = "/" + ourRequest;
|
||||||
args += argv[2];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcmp(argv[1], "monitors")) request(args);
|
ourRequest.contains("/");
|
||||||
else if (!strcmp(argv[1], "clients")) request(args);
|
|
||||||
else if (!strcmp(argv[1], "workspaces")) request(args);
|
if (ourRequest.contains("/monitors")) request(ourRequest);
|
||||||
else if (!strcmp(argv[1], "activewindow")) request(args);
|
else if (ourRequest.contains("/clients")) request(ourRequest);
|
||||||
else if (!strcmp(argv[1], "layers")) request(args);
|
else if (ourRequest.contains("/workspaces")) request(ourRequest);
|
||||||
else if (!strcmp(argv[1], "version")) request(args);
|
else if (ourRequest.contains("/activewindow")) request(ourRequest);
|
||||||
else if (!strcmp(argv[1], "kill")) request(args);
|
else if (ourRequest.contains("/layers")) request(ourRequest);
|
||||||
else if (!strcmp(argv[1], "splash")) request(args);
|
else if (ourRequest.contains("/version")) request(ourRequest);
|
||||||
else if (!strcmp(argv[1], "devices")) request(args);
|
else if (ourRequest.contains("/kill")) request(ourRequest);
|
||||||
else if (!strcmp(argv[1], "reload")) request(args);
|
else if (ourRequest.contains("/splash")) request(ourRequest);
|
||||||
else if (!strcmp(argv[1], "dispatch")) dispatchRequest(argc, argv);
|
else if (ourRequest.contains("/devices")) request(ourRequest);
|
||||||
else if (!strcmp(argv[1], "keyword")) keywordRequest(argc, argv);
|
else if (ourRequest.contains("/reload")) request(ourRequest);
|
||||||
else if (!strcmp(argv[1], "hyprpaper")) hyprpaperRequest(argc, argv);
|
else if (ourRequest.contains("/dispatch")) dispatchRequest(argc, argv);
|
||||||
else if (!strcmp(argv[1], "--batch")) batchRequest(argc, argv);
|
else if (ourRequest.contains("/keyword")) keywordRequest(argc, argv);
|
||||||
else if (!strcmp(argv[1], "--help")) printf("%s", USAGE.c_str());
|
else if (ourRequest.contains("/hyprpaper")) hyprpaperRequest(argc, argv);
|
||||||
|
else if (ourRequest.contains("/--batch")) batchRequest(argc, argv);
|
||||||
|
else if (ourRequest.contains("/--help")) printf("%s", USAGE.c_str());
|
||||||
else {
|
else {
|
||||||
printf("%s\n", USAGE.c_str());
|
printf("%s\n", USAGE.c_str());
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -13,9 +13,9 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
std::string monitorsRequest(bool json) {
|
std::string monitorsRequest(HyprCtl::eHyprCtlOutputFormat format) {
|
||||||
std::string result = "";
|
std::string result = "";
|
||||||
if (json) {
|
if (format == HyprCtl::FORMAT_JSON) {
|
||||||
result += "[";
|
result += "[";
|
||||||
|
|
||||||
for (auto& m : g_pCompositor->m_vMonitors) {
|
for (auto& m : g_pCompositor->m_vMonitors) {
|
||||||
|
@ -64,9 +64,9 @@ R"#({
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string clientsRequest(bool json) {
|
std::string clientsRequest(HyprCtl::eHyprCtlOutputFormat format) {
|
||||||
std::string result = "";
|
std::string result = "";
|
||||||
if (json) {
|
if (format == HyprCtl::FORMAT_JSON) {
|
||||||
result += "[";
|
result += "[";
|
||||||
|
|
||||||
for (auto& w : g_pCompositor->m_vWindows) {
|
for (auto& w : g_pCompositor->m_vWindows) {
|
||||||
|
@ -115,9 +115,9 @@ R"#({
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string workspacesRequest(bool json) {
|
std::string workspacesRequest(HyprCtl::eHyprCtlOutputFormat format) {
|
||||||
std::string result = "";
|
std::string result = "";
|
||||||
if (json) {
|
if (format == HyprCtl::FORMAT_JSON) {
|
||||||
result += "[";
|
result += "[";
|
||||||
|
|
||||||
for (auto& w : g_pCompositor->m_vWorkspaces) {
|
for (auto& w : g_pCompositor->m_vWorkspaces) {
|
||||||
|
@ -150,13 +150,13 @@ R"#({
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string activeWindowRequest(bool json) {
|
std::string activeWindowRequest(HyprCtl::eHyprCtlOutputFormat format) {
|
||||||
const auto PWINDOW = g_pCompositor->m_pLastWindow;
|
const auto PWINDOW = g_pCompositor->m_pLastWindow;
|
||||||
|
|
||||||
if (!g_pCompositor->windowValidMapped(PWINDOW))
|
if (!g_pCompositor->windowValidMapped(PWINDOW))
|
||||||
return "Invalid";
|
return "Invalid";
|
||||||
|
|
||||||
if (json) {
|
if (format == HyprCtl::FORMAT_JSON) {
|
||||||
return getFormat(
|
return getFormat(
|
||||||
R"#({
|
R"#({
|
||||||
"address": "0x%x",
|
"address": "0x%x",
|
||||||
|
@ -188,10 +188,10 @@ R"#({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string layersRequest(bool json) {
|
std::string layersRequest(HyprCtl::eHyprCtlOutputFormat format) {
|
||||||
std::string result = "";
|
std::string result = "";
|
||||||
|
|
||||||
if (json) {
|
if (format == HyprCtl::FORMAT_JSON) {
|
||||||
result += "{\n";
|
result += "{\n";
|
||||||
|
|
||||||
for (auto& mon : g_pCompositor->m_vMonitors) {
|
for (auto& mon : g_pCompositor->m_vMonitors) {
|
||||||
|
@ -271,10 +271,10 @@ R"#( {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string devicesRequest(bool json) {
|
std::string devicesRequest(HyprCtl::eHyprCtlOutputFormat format) {
|
||||||
std::string result = "";
|
std::string result = "";
|
||||||
|
|
||||||
if (json) {
|
if (format == HyprCtl::FORMAT_JSON) {
|
||||||
result += "{\n";
|
result += "{\n";
|
||||||
result += "\"mice\": [\n";
|
result += "\"mice\": [\n";
|
||||||
|
|
||||||
|
@ -511,29 +511,41 @@ std::string dispatchBatch(std::string request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string getReply(std::string request) {
|
std::string getReply(std::string request) {
|
||||||
std::size_t jpos = request.find(" -j");
|
auto format = HyprCtl::FORMAT_NORMAL;
|
||||||
bool json = jpos != std::string::npos;
|
|
||||||
if (json)
|
// process flags
|
||||||
request.erase(jpos, 3); // remove the `-j` flag so `==` still works
|
int sepIndex = 0;
|
||||||
|
for (const auto& c : request) {
|
||||||
|
if (c == '/') { // stop at separator
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
sepIndex++;
|
||||||
|
|
||||||
|
if (c == 'j')
|
||||||
|
format = HyprCtl::FORMAT_JSON;
|
||||||
|
}
|
||||||
|
|
||||||
|
request = request.substr(sepIndex + 1); // remove flags and separator so we can compare the rest of the string
|
||||||
|
|
||||||
if (request == "monitors")
|
if (request == "monitors")
|
||||||
return monitorsRequest(json);
|
return monitorsRequest(format);
|
||||||
else if (request == "workspaces")
|
else if (request == "workspaces")
|
||||||
return workspacesRequest(json);
|
return workspacesRequest(format);
|
||||||
else if (request == "clients")
|
else if (request == "clients")
|
||||||
return clientsRequest(json);
|
return clientsRequest(format);
|
||||||
else if (request == "kill")
|
else if (request == "kill")
|
||||||
return killRequest();
|
return killRequest();
|
||||||
else if (request == "activewindow")
|
else if (request == "activewindow")
|
||||||
return activeWindowRequest(json);
|
return activeWindowRequest(format);
|
||||||
else if (request == "layers")
|
else if (request == "layers")
|
||||||
return layersRequest(json);
|
return layersRequest(format);
|
||||||
else if (request == "version")
|
else if (request == "version")
|
||||||
return versionRequest();
|
return versionRequest();
|
||||||
else if (request == "reload")
|
else if (request == "reload")
|
||||||
return reloadRequest();
|
return reloadRequest();
|
||||||
else if (request == "devices")
|
else if (request == "devices")
|
||||||
return devicesRequest(json);
|
return devicesRequest(format);
|
||||||
else if (request == "splash")
|
else if (request == "splash")
|
||||||
return splashRequest();
|
return splashRequest();
|
||||||
else if (request.find("dispatch") == 0)
|
else if (request.find("dispatch") == 0)
|
||||||
|
|
|
@ -14,4 +14,9 @@ namespace HyprCtl {
|
||||||
inline std::string request = "";
|
inline std::string request = "";
|
||||||
|
|
||||||
inline std::ifstream requestStream;
|
inline std::ifstream requestStream;
|
||||||
|
|
||||||
|
enum eHyprCtlOutputFormat {
|
||||||
|
FORMAT_NORMAL = 0,
|
||||||
|
FORMAT_JSON
|
||||||
|
};
|
||||||
};
|
};
|
Loading…
Reference in a new issue