From c32917a5bac6919fbb419d299f1ebab82bbce5ba Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Sun, 20 Mar 2022 16:51:14 +0100 Subject: [PATCH] added hyprctl --- hyprctl/Makefile | 4 ++ hyprctl/hyprctl | Bin 0 -> 49192 bytes hyprctl/main.cpp | 96 +++++++++++++++++++++++++++++++++ src/Compositor.cpp | 3 ++ src/debug/HyprCtl.cpp | 76 ++++++++++++++++++++++++++ src/debug/HyprCtl.hpp | 10 ++++ src/main.cpp | 4 -- src/managers/ThreadManager.cpp | 3 ++ 8 files changed, 192 insertions(+), 4 deletions(-) create mode 100644 hyprctl/Makefile create mode 100755 hyprctl/hyprctl create mode 100644 hyprctl/main.cpp create mode 100644 src/debug/HyprCtl.cpp create mode 100644 src/debug/HyprCtl.hpp diff --git a/hyprctl/Makefile b/hyprctl/Makefile new file mode 100644 index 000000000..d279830aa --- /dev/null +++ b/hyprctl/Makefile @@ -0,0 +1,4 @@ +clean: + rm -rf ./hyprctl ./hyprctl +all: + g++ -std=c++20 ./main.cpp -o ./hyprctl \ No newline at end of file diff --git a/hyprctl/hyprctl b/hyprctl/hyprctl new file mode 100755 index 0000000000000000000000000000000000000000..43657fc0083d0b67bf55e244d33827a02b567453 GIT binary patch literal 49192 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 literal 0 HcmV?d00001 diff --git a/hyprctl/main.cpp b/hyprctl/main.cpp new file mode 100644 index 000000000..12cac2ce8 --- /dev/null +++ b/hyprctl/main.cpp @@ -0,0 +1,96 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +const std::string USAGE = R"#( +usage: hyprctl [command] [(opt)args] + + monitors + workspaces + clients +)#"; + +void readReply() { + std::ifstream ifs; + + while (1) { + usleep(1000 * 25); + + ifs.open("/tmp/hypr/.hyprlandrq"); + + if (ifs.good()) { + std::string reply = ""; + std::getline(ifs, reply); + + if (reply.find("RPLY:") != std::string::npos) { + reply = ""; + std::string temp = ""; + while (std::getline(ifs, temp)) + reply += temp + '\n'; + + std::cout << reply; + + unlink("/tmp/hypr/.hyprlandrq"); // cleanup + break; + } + } + } +} + +void requestMonitors() { + std::ofstream ofs; + ofs.open("/tmp/hypr/.hyprlandrq", std::ios::trunc); + + ofs << "R>monitors"; + + ofs.close(); + + readReply(); +} + +void requestClients() { + std::ofstream ofs; + ofs.open("/tmp/hypr/.hyprlandrq", std::ios::trunc); + + ofs << "R>clients"; + + ofs.close(); + + readReply(); +} + +void requestWorkspaces() { + std::ofstream ofs; + ofs.open("/tmp/hypr/.hyprlandrq", std::ios::trunc); + + ofs << "R>workspaces"; + + ofs.close(); + + readReply(); +} + +int main(int argc, char** argv) { + int bflag = 0, sflag = 0, index, c; + + if (argc < 2) { + printf(USAGE.c_str()); + return 1; + } + + if (!strcmp(argv[1], "monitors")) requestMonitors(); + else if (!strcmp(argv[1], "clients")) requestClients(); + else if (!strcmp(argv[1], "workspaces")) requestWorkspaces(); + else { + printf(USAGE.c_str()); + return 1; + } + + return 0; +} \ No newline at end of file diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 27e0d2fd5..294ea7539 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1,6 +1,9 @@ #include "Compositor.hpp" CCompositor::CCompositor() { + unlink("/tmp/hypr/hyprland.log"); + unlink("/tmp/hypr/hyprlandd.log"); + unlink("/tmp/hypr/.hyprlandrq"); m_sWLDisplay = wl_display_create(); diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp new file mode 100644 index 000000000..1b06617a4 --- /dev/null +++ b/src/debug/HyprCtl.cpp @@ -0,0 +1,76 @@ +#include "HyprCtl.hpp" + +#include +#include + +#include + +std::string getFormat(const char* fmt, ...) { + char buf[2048] = ""; + + va_list args; + va_start(args, fmt); + + vsprintf(buf, fmt , args); + + va_end(args); + + return std::string(buf); +} + +std::string monitorsRequest() { + std::string result = ""; + for (auto& m : g_pCompositor->m_lMonitors) { + result += getFormat("Monitor %s (ID %i):\n\t%ix%i@%f at %ix%i\n\tactive workspace: %i\n\treserved: %i %i %i %i\n\n", + m.szName.c_str(), m.ID, (int)m.vecSize.x, (int)m.vecSize.y, m.refreshRate, (int)m.vecPosition.x, (int)m.vecPosition.y, m.activeWorkspace, (int)m.vecReservedTopLeft.x, (int)m.vecReservedTopLeft.y, (int)m.vecReservedBottomRight.x, (int)m.vecReservedBottomRight.y); + } + + return result; +} + +std::string clientsRequest() { + std::string result = ""; + for (auto& w : g_pCompositor->m_lWindows) { + result += getFormat("Window %x -> %s:\n\tat: %i,%i\n\tsize: %i, %i\n\tworkspace: %i\n\tfloating: %i\n\n", + &w, w.m_szTitle.c_str(), (int)w.m_vRealPosition.x, (int)w.m_vRealPosition.y, (int)w.m_vRealSize.x, (int)w.m_vRealSize.y, w.m_iWorkspaceID, (int)w.m_bIsFloating); + } + return result; +} + +std::string workspacesRequest() { + std::string result = ""; + for (auto& w : g_pCompositor->m_lWorkspaces) { + result += getFormat("workspace ID %i on monitor %s:\n\twindows: %i\n\thasfullscreen: %i\n\n", + w.ID, g_pCompositor->getMonitorFromID(w.monitorID)->szName.c_str(), g_pCompositor->getWindowsOnWorkspace(w.ID), (int)w.hasFullscreenWindow); + } + return result; +} + +void HyprCtl::tickHyprCtl() { + struct stat buf; + + if (stat("/tmp/hypr/.hyprlandrq", &buf) == 0) { + // file exists, let's open it + + requestStream.open("/tmp/hypr/.hyprlandrq"); + + std::string request = ""; + std::getline(requestStream, request); + + requestStream.close(); + + std::string reply = ""; + if (request == "R>monitors") reply = monitorsRequest(); + if (request == "R>workspaces") reply = workspacesRequest(); + if (request == "R>clients") reply = clientsRequest(); + + if (reply != "") { + std::ofstream ofs; + ofs.open("/tmp/hypr/.hyprlandrq", std::ios::trunc); + ofs << "RPLY:\n" << reply; + ofs.close(); + } + + // the hyprctl app deletes the file when done. + } +} \ No newline at end of file diff --git a/src/debug/HyprCtl.hpp b/src/debug/HyprCtl.hpp new file mode 100644 index 000000000..41303364b --- /dev/null +++ b/src/debug/HyprCtl.hpp @@ -0,0 +1,10 @@ +#pragma once + +#include "../Compositor.hpp" +#include + +namespace HyprCtl { + void tickHyprCtl(); + + inline std::ifstream requestStream; +}; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 3784b342b..570164257 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,10 +4,6 @@ #include "config/ConfigManager.hpp" int main(int argc, char** argv) { - const std::string DEBUGPATH = "/tmp/hypr/hyprland.log"; - const std::string DEBUGPATH2 = "/tmp/hypr/hyprlandd.log"; - unlink(DEBUGPATH2.c_str()); - unlink(DEBUGPATH.c_str()); if (!getenv("XDG_RUNTIME_DIR")) RIP("XDG_RUNTIME_DIR not set!"); diff --git a/src/managers/ThreadManager.cpp b/src/managers/ThreadManager.cpp index 003cb947b..0e2e962c8 100644 --- a/src/managers/ThreadManager.cpp +++ b/src/managers/ThreadManager.cpp @@ -1,4 +1,5 @@ #include "ThreadManager.hpp" +#include "../debug/HyprCtl.hpp" CThreadManager::CThreadManager() { m_tMainThread = new std::thread([&]() { @@ -20,6 +21,8 @@ void CThreadManager::handle() { while (3.1415f) { g_pConfigManager->tick(); + HyprCtl::tickHyprCtl(); + std::this_thread::sleep_for(std::chrono::microseconds(1000000 / g_pConfigManager->getInt("max_fps"))); } } \ No newline at end of file