Skip to content

Commit

Permalink
hyprctl: fix hyprctl --batch not working with exec rules (#8952)
Browse files Browse the repository at this point in the history
  • Loading branch information
Jakenv authored Jan 6, 2025
1 parent 6a90b50 commit 1bf4937
Showing 1 changed file with 18 additions and 26 deletions.
44 changes: 18 additions & 26 deletions src/debug/HyprCtl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1150,34 +1150,26 @@ static std::string cursorPosRequest(eHyprCtlOutputFormat format, std::string req
}

static std::string dispatchBatch(eHyprCtlOutputFormat format, std::string request) {
// split by ;

request = request.substr(9);
std::string curitem = "";
std::string reply = "";

auto nextItem = [&]() {
auto idx = request.find_first_of(';');

if (idx != std::string::npos) {
curitem = request.substr(0, idx);
request = request.substr(idx + 1);
} else {
curitem = request;
request = "";
}

curitem = trim(curitem);
};

nextItem();
// split by ; ignores ; inside [] and adds ; on last command

request = request.substr(9);
std::string reply = "";
const std::string DELIMITER = "\n\n\n";

while (curitem != "" || request != "") {
reply += g_pHyprCtl->getReply(curitem) + DELIMITER;

nextItem();
int bracket = 0;
size_t idx = 0;

for (size_t i = 0; i <= request.size(); ++i) {
char ch = (i < request.size()) ? request[i] : ';';
if (ch == '[')
++bracket;
else if (ch == ']')
--bracket;
else if (ch == ';' && bracket == 0) {
if (idx < i)
reply += g_pHyprCtl->getReply(trim(request.substr(idx, i - idx))).append(DELIMITER);
idx = i + 1;
continue;
}
}

return reply.substr(0, std::max(static_cast<int>(reply.size() - DELIMITER.size()), 0));
Expand Down

0 comments on commit 1bf4937

Please sign in to comment.