diff --git a/hyprctl/main.cpp b/hyprctl/main.cpp index b2c00ce7..0f30e588 100644 --- a/hyprctl/main.cpp +++ b/hyprctl/main.cpp @@ -186,8 +186,8 @@ void hyprpaperRequest(int argc, char** argv) { requestHyprpaper(rq); } -void batchRequest(int argc, char** argv) { - std::string rq = "[[BATCH]]" + std::string(argv[2]); +void batchRequest(std::string arg) { + std::string rq = "[[BATCH]]" + arg.substr(arg.find_first_of(" ") + 1); request(rq); } @@ -200,13 +200,18 @@ int main(int argc, char** argv) { return 1; } - std::string fullRequest = argv[1]; + std::string fullRequest = ""; + for (int i = 1; i < argc; i++) { + fullRequest += std::string(argv[i]) + " "; + } + fullRequest.pop_back(); // remove trailing space - if (!fullRequest.contains("/")) { + if (!std::string(argv[1]).contains("/")) { fullRequest = "/" + fullRequest; } - if (fullRequest.contains("/monitors")) request(fullRequest); + if (fullRequest.contains("/--batch")) batchRequest(fullRequest); + else if (fullRequest.contains("/monitors")) request(fullRequest); else if (fullRequest.contains("/clients")) request(fullRequest); else if (fullRequest.contains("/workspaces")) request(fullRequest); else if (fullRequest.contains("/activewindow")) request(fullRequest); @@ -219,7 +224,6 @@ int main(int argc, char** argv) { else if (fullRequest.contains("/dispatch")) dispatchRequest(argc, argv); else if (fullRequest.contains("/keyword")) keywordRequest(argc, argv); else if (fullRequest.contains("/hyprpaper")) hyprpaperRequest(argc, argv); - else if (fullRequest.contains("/--batch")) batchRequest(argc, argv); else if (fullRequest.contains("/--help")) printf("%s", USAGE.c_str()); else { printf("%s\n", USAGE.c_str()); diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 684bca9c..ab72d86e 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -513,22 +513,24 @@ std::string dispatchBatch(std::string request) { std::string getReply(std::string request) { auto format = HyprCtl::FORMAT_NORMAL; - // process flags - int sepIndex = 0; - for (const auto& c : request) { - if (c == '/') { // stop at separator - break; + // process flags for non-batch requests + if (!(request.find("[[BATCH]]") == 0)) { + int sepIndex = 0; + for (const auto& c : request) { + if (c == '/') { // stop at separator + break; + } + + sepIndex++; + + if (c == 'j') + format = HyprCtl::FORMAT_JSON; } - sepIndex++; - - if (c == 'j') - format = HyprCtl::FORMAT_JSON; + if (sepIndex < request.size()) + request = request.substr(sepIndex + 1); // remove flags and separator so we can compare the rest of the string } - if (sepIndex < request.size()) - request = request.substr(sepIndex + 1); // remove flags and separator so we can compare the rest of the string - if (request == "monitors") return monitorsRequest(format); else if (request == "workspaces")