Feature: query current windowing mode
This commit is contained in:
14
README.md
14
README.md
@@ -29,6 +29,7 @@ Check out [the demo](https://typofelho.ddns.net/TypoMustakes/hyprland-toggle-til
|
||||
Let's say you switched to tiling mode. From that point on, new windows will open in tiling mode as well.
|
||||
Switch to floating mode again and newly opened windows will be in floating mode.
|
||||
- Floating/tiling window rules are isolated between workspaces. You can set one workspace to be floating, and all the rest to tiling for example.
|
||||
- Returns applied rule for the current workspace. Useful for scripting.
|
||||
- Useful for workflows that require both tiling and floating window management.
|
||||
- Lightweight and easy to integrate with your Hyprland setup.
|
||||
|
||||
@@ -75,8 +76,19 @@ or go nuts and...
|
||||
|
||||
# Usage
|
||||
```shell
|
||||
./htt <config-file-path>
|
||||
./htt <config-file-path> (-q)
|
||||
```
|
||||
- `-q`: Print the rule applied on the current workspace to STDOUT, but don't change anything. If there isn't an active rule for the current workspace, it returns a tiling rule. The returned string is a valid Hyprland window rule configuration line, like so:
|
||||
|
||||
```shell
|
||||
# (On workspace 2...)
|
||||
$ ./htt ~/.cache/htt/rules -q
|
||||
|
||||
windowrule = tile on, match:workspace 2
|
||||
```
|
||||
Potential applications for this are mainly scripts, like my waybar module here:
|
||||

|
||||
|
||||
- If the specified configuration file does not exist, it will be created.
|
||||
- If the configuration contains existing rules, this should still work, but your existing configuration will probably get a bit messy, syntax-wise. I advise against it.
|
||||
|
||||
|
||||
BIN
assets/waybar_module.gif
Normal file
BIN
assets/waybar_module.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 MiB |
@@ -23,5 +23,6 @@ class HyprlandService {
|
||||
static void setClientTiled(Client&);
|
||||
static void toggleClientFloating(Client&);
|
||||
static bool isFloatingRulePresent();
|
||||
static WindowRule getActiveWorkspaceRule();
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -135,3 +135,17 @@ bool HyprlandService::isFloatingRulePresent() {
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
WindowRule HyprlandService::getActiveWorkspaceRule() {
|
||||
std::list<WindowRule> rules = getWindowRules();
|
||||
int id = getCurrentWorkspace().id;
|
||||
|
||||
for (auto& rule : rules) {
|
||||
if (rule.workspaceID == id) {
|
||||
return rule;
|
||||
}
|
||||
}
|
||||
|
||||
//If no rule is found, return a default rule (tiled)
|
||||
return WindowRule {.tile = true, .workspaceID = id};
|
||||
};
|
||||
18
src/main.cpp
18
src/main.cpp
@@ -1,14 +1,24 @@
|
||||
#include <iostream>
|
||||
#include "../include/HyprlandService.h"
|
||||
|
||||
void help(char* execPath) {
|
||||
std::cerr << "Usage: " << execPath << " <config_file_path> (-q)\n\n";
|
||||
std::cerr << "-q:\tQuery current windowing mode, don't change anything.\n\tReturns Hyprland window rule active on current workspace.\n\tIf no rule is active, returns a default tiled rule.\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
if (argc < 2) {
|
||||
std::cerr << "Usage: " << argv[0] << " <config_file_path>\n";
|
||||
exit(1);
|
||||
help(argv[0]);
|
||||
}
|
||||
|
||||
HyprlandService::setConfigFilePath(argv[1]);
|
||||
|
||||
if (argc == 3 && argv[2] == std::string("-q")) {
|
||||
WindowRule rule = HyprlandService::getActiveWorkspaceRule();
|
||||
std::cout << rule.toString() << std::endl;
|
||||
}
|
||||
else if (argc == 2) {
|
||||
if (HyprlandService::isFloatingRulePresent()) {
|
||||
for (auto& c : HyprlandService::getClientsOnActiveWorkspace()) {
|
||||
HyprlandService::setClientTiled(c);
|
||||
@@ -21,3 +31,7 @@ int main(int argc, char** argv){
|
||||
HyprlandService::setFloatingRule(true);
|
||||
}
|
||||
}
|
||||
else (help(argv[0]));
|
||||
|
||||
exit(0);
|
||||
}
|
||||
Reference in New Issue
Block a user