diff options
author | vaxerski <[email protected]> | 2022-04-21 16:11:29 +0200 |
---|---|---|
committer | vaxerski <[email protected]> | 2022-04-21 16:11:29 +0200 |
commit | c02afa0c2725b353c56706fa0186143f661cc283 (patch) | |
tree | d862d48e2b3ac00fb0d11212ce0939df8f846d9c | |
parent | 422eaad4201fe1902f037898e98d8651925b9c13 (diff) | |
download | Hyprland-c02afa0c2725b353c56706fa0186143f661cc283.tar.gz Hyprland-c02afa0c2725b353c56706fa0186143f661cc283.zip |
Added hyprctl dispatch
-rw-r--r-- | hyprctl/main.cpp | 14 | ||||
-rw-r--r-- | src/debug/HyprCtl.cpp | 35 |
2 files changed, 43 insertions, 6 deletions
diff --git a/hyprctl/main.cpp b/hyprctl/main.cpp index 9868febf..0382901a 100644 --- a/hyprctl/main.cpp +++ b/hyprctl/main.cpp @@ -22,6 +22,7 @@ usage: hyprctl [command] [(opt)args] clients activewindow layers + dispatch )#"; void request(std::string arg) { @@ -96,6 +97,18 @@ void request(std::string arg) { std::cout << std::string(buffer); } +void dispatchRequest(int argc, char** argv) { + + if (argc < 4) { + std::cout << "dispatch requires 2 params"; + return; + } + + std::string rq = "dispatch " + std::string(argv[2]) + " " + std::string(argv[3]); + + request(rq); +} + int main(int argc, char** argv) { int bflag = 0, sflag = 0, index, c; @@ -109,6 +122,7 @@ int main(int argc, char** argv) { else if (!strcmp(argv[1], "workspaces")) request("workspaces"); else if (!strcmp(argv[1], "activewindow")) request("activewindow"); else if (!strcmp(argv[1], "layers")) request("layers"); + else if (!strcmp(argv[1], "dispatch")) dispatchRequest(argc, argv); else { printf(USAGE.c_str()); return 1; diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 7956a852..998ea360 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -71,6 +71,23 @@ std::string layersRequest() { return result; } +std::string dispatchRequest(std::string in) { + // get rid of the dispatch keyword + in = in.substr(in.find_first_of(' ') + 1); + + const auto DISPATCHSTR = in.substr(0, in.find_first_of(' ')); + + const auto DISPATCHARG = in.substr(in.find_first_of(' ') + 1); + + const auto DISPATCHER = g_pKeybindManager->m_mDispatchers.find(DISPATCHSTR); + if (DISPATCHER == g_pKeybindManager->m_mDispatchers.end()) + return "Invalid dispatcher"; + + DISPATCHER->second(DISPATCHARG); + + return "ok"; +} + void HyprCtl::startHyprCtlSocket() { std::thread([&]() { uint16_t connectPort = 9187; @@ -125,12 +142,18 @@ void HyprCtl::startHyprCtlSocket() { std::string request(readBuffer); std::string reply = ""; - if (request == "monitors") reply = monitorsRequest(); - if (request == "workspaces") reply = workspacesRequest(); - if (request == "clients") reply = clientsRequest(); - if (request == "activewindow") reply = activeWindowRequest(); - if (request == "layers") reply = layersRequest(); - + try { + if (request == "monitors") reply = monitorsRequest(); + else if (request == "workspaces") reply = workspacesRequest(); + else if (request == "clients") reply = clientsRequest(); + else if (request == "activewindow") reply = activeWindowRequest(); + else if (request == "layers") reply = layersRequest(); + else if (request.find("dispatch") == 0) reply = dispatchRequest(request); + } catch (std::exception& e) { + Debug::log(ERR, "Error in request: %s", e.what()); + reply = "Err: " + std::string(e.what()); + } + write(ACCEPTEDCONNECTION, reply.c_str(), reply.length()); close(ACCEPTEDCONNECTION); |