diff --git a/hyprctl/main.cpp b/hyprctl/main.cpp index deb8613c..74127d5b 100644 --- a/hyprctl/main.cpp +++ b/hyprctl/main.cpp @@ -52,6 +52,7 @@ commands: notify globalshortcuts instances + layouts flags: -j -> output in JSON @@ -420,6 +421,8 @@ int main(int argc, char** argv) { request(fullRequest, 2); else if (fullRequest.contains("/hyprpaper")) requestHyprpaper(fullRequest); + else if (fullRequest.contains("/layouts")) + request(fullRequest); else if (fullRequest.contains("/--help")) printf("%s", USAGE.c_str()); else { diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 1b1e53c3..9745a0fe 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -260,7 +260,7 @@ static std::string getWorkspaceRuleData(const SWorkspaceRule& r, HyprCtl::eHyprC std::string result = std::format(R"#({{ "workspaceString": "{}"{}{}{}{}{}{}{}{} }})#", - escapeJSONStrings(r.workspaceString), monitor, default_, persistent, gapsIn, gapsOut, borderSize, border, rounding, decorate, shadow); + escapeJSONStrings(r.workspaceString), monitor, default_, persistent, gapsIn, gapsOut, borderSize, border, rounding, decorate, shadow); return result; } else { @@ -276,7 +276,7 @@ static std::string getWorkspaceRuleData(const SWorkspaceRule& r, HyprCtl::eHyprC const std::string shadow = std::format("\tshadow: {}\n", (bool)(r.shadow) ? boolToString(r.shadow.value()) : ""); std::string result = std::format("Workspace rule {}:\n{}{}{}{}{}{}{}{}{}{}\n", escapeJSONStrings(r.workspaceString), monitor, default_, persistent, gapsIn, gapsOut, - borderSize, border, rounding, decorate, shadow); + borderSize, border, rounding, decorate, shadow); return result; } @@ -423,6 +423,28 @@ std::string layersRequest(HyprCtl::eHyprCtlOutputFormat format) { return result; } +std::string layoutsRequest(HyprCtl::eHyprCtlOutputFormat format) { + std::string result = ""; + if (format == HyprCtl::FORMAT_JSON) { + result += "["; + + for (auto& m : g_pLayoutManager->getAllLayoutNames()) { + result += std::format( + R"#( + "{}",)#", + m); + } + trimTrailingComma(result); + + result += "\n]\n"; + } else { + for (auto& m : g_pLayoutManager->getAllLayoutNames()) { + result += std::format("{}\n", m); + } + } + return result; +} + std::string devicesRequest(HyprCtl::eHyprCtlOutputFormat format) { std::string result = ""; @@ -1377,6 +1399,8 @@ std::string getReply(std::string request) { return animationsRequest(format); else if (request == "rollinglog") return rollinglogRequest(format); + else if (request == "layouts") + return layoutsRequest(format); else if (request.starts_with("plugin")) return dispatchPlugin(request); else if (request.starts_with("notify")) diff --git a/src/managers/LayoutManager.cpp b/src/managers/LayoutManager.cpp index bf4ca8bd..70c2d2a3 100644 --- a/src/managers/LayoutManager.cpp +++ b/src/managers/LayoutManager.cpp @@ -51,3 +51,10 @@ bool CLayoutManager::removeLayout(IHyprLayout* layout) { return true; } + +std::vector CLayoutManager::getAllLayoutNames() { + std::vector results(m_vLayouts.size()); + for (size_t i = 0; i < m_vLayouts.size(); ++i) + results[i] = m_vLayouts[i].first; + return results; +} diff --git a/src/managers/LayoutManager.hpp b/src/managers/LayoutManager.hpp index 1ebe5711..78d86797 100644 --- a/src/managers/LayoutManager.hpp +++ b/src/managers/LayoutManager.hpp @@ -7,16 +7,16 @@ class CLayoutManager { public: CLayoutManager(); - IHyprLayout* getCurrentLayout(); + IHyprLayout* getCurrentLayout(); - void switchToLayout(std::string); + void switchToLayout(std::string); - bool addLayout(const std::string& name, IHyprLayout* layout); - bool removeLayout(IHyprLayout* layout); + bool addLayout(const std::string& name, IHyprLayout* layout); + bool removeLayout(IHyprLayout* layout); + std::vector getAllLayoutNames(); private: - enum HYPRLAYOUTS - { + enum HYPRLAYOUTS { LAYOUT_DWINDLE = 0, LAYOUT_MASTER }; @@ -25,8 +25,7 @@ class CLayoutManager { CHyprDwindleLayout m_cDwindleLayout; CHyprMasterLayout m_cMasterLayout; - std::vector> m_vLayouts; }; -inline std::unique_ptr g_pLayoutManager; \ No newline at end of file +inline std::unique_ptr g_pLayoutManager;