mirror of
https://github.com/hyprwm/Hyprland
synced 2025-01-10 14:09:49 +01:00
hyprctl: fix hyprctl --batch not working with exec rules (#8952)
This commit is contained in:
parent
6a90b50545
commit
1bf4937b02
1 changed files with 17 additions and 25 deletions
|
@ -1150,34 +1150,26 @@ static std::string cursorPosRequest(eHyprCtlOutputFormat format, std::string req
|
|||
}
|
||||
|
||||
static std::string dispatchBatch(eHyprCtlOutputFormat format, std::string request) {
|
||||
// split by ;
|
||||
// split by ; ignores ; inside [] and adds ; on last command
|
||||
|
||||
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();
|
||||
|
||||
const std::string DELIMITER = "\n\n\n";
|
||||
int bracket = 0;
|
||||
size_t idx = 0;
|
||||
|
||||
while (curitem != "" || request != "") {
|
||||
reply += g_pHyprCtl->getReply(curitem) + DELIMITER;
|
||||
|
||||
nextItem();
|
||||
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));
|
||||
|
|
Loading…
Reference in a new issue