Skip to content

Commit

Permalink
hyprctl: Add 'layouts' command (#3895)
Browse files Browse the repository at this point in the history
* Add hyprctl 'layouts' command

formatting

* Add getAllLayoutNames(), move m_vLayouts back to private

Formatting

* clang-format
  • Loading branch information
zakk4223 committed Nov 21, 2023
1 parent 572fd55 commit 4729265
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 10 deletions.
3 changes: 3 additions & 0 deletions hyprctl/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ const std::string USAGE = R"#(usage: hyprctl [(opt)flags] [command] [(opt)args]
notify
globalshortcuts
instances
layouts
flags:
-j -> output in JSON
Expand Down Expand Up @@ -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 {
Expand Down
28 changes: 26 additions & 2 deletions src/debug/HyprCtl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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()) : "<unset>");

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;
}
Expand Down Expand Up @@ -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 = "";

Expand Down Expand Up @@ -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"))
Expand Down
7 changes: 7 additions & 0 deletions src/managers/LayoutManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,10 @@ bool CLayoutManager::removeLayout(IHyprLayout* layout) {

return true;
}

std::vector<std::string> CLayoutManager::getAllLayoutNames() {
std::vector<std::string> results(m_vLayouts.size());
for (size_t i = 0; i < m_vLayouts.size(); ++i)
results[i] = m_vLayouts[i].first;
return results;
}
15 changes: 7 additions & 8 deletions src/managers/LayoutManager.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::string> getAllLayoutNames();

private:
enum HYPRLAYOUTS
{
enum HYPRLAYOUTS {
LAYOUT_DWINDLE = 0,
LAYOUT_MASTER
};
Expand All @@ -25,8 +25,7 @@ class CLayoutManager {

CHyprDwindleLayout m_cDwindleLayout;
CHyprMasterLayout m_cMasterLayout;

std::vector<std::pair<std::string, IHyprLayout*>> m_vLayouts;
};

inline std::unique_ptr<CLayoutManager> g_pLayoutManager;
inline std::unique_ptr<CLayoutManager> g_pLayoutManager;

0 comments on commit 4729265

Please sign in to comment.