aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPiotr Miller <nwg.piotr@gmail.com>2022-11-08 15:12:44 +0100
committerGitHub <noreply@github.com>2022-11-08 15:12:44 +0100
commit2c36a6e134a3c064c3b8051c5b8ceac63b10540b (patch)
tree441698c0c256700d45b61cb2917bfd14a3dc1865
parent2eb65aeecdcd3985414d580c82e5e1c277c1cf8d (diff)
parent017bea932c37b6cae2c961afd29396f212b27287 (diff)
downloadautotiling-2c36a6e134a3c064c3b8051c5b8ceac63b10540b.tar.gz
Merge pull request #42 from Syphdias/limit-output
Add option to limit to outputs
-rw-r--r--README.md9
-rw-r--r--autotiling/main.py41
2 files changed, 45 insertions, 5 deletions
diff --git a/README.md b/README.md
index 9325ed1..2601c77 100644
--- a/README.md
+++ b/README.md
@@ -18,9 +18,9 @@ less, nothing more. This may make stack and tabbed layouts behave oddly.
Unfortunately, there is nothing that can be done about it – please, do not
submit issues about it –, but there are two workaround that you can try.
-One option is, to enable autotiling on certain workspaces only. For instance,
-you could configure autotiling to be enabled on odd workspaces, but not on
-even ones:
+One option is, to enable autotiling on certain workspaces or outputs only.
+For instance, you could configure autotiling to be enabled on odd workspaces,
+but not on even ones:
```text
### Autostart
@@ -61,6 +61,9 @@ optional arguments:
-h, --help show this help message and exit
-d, --debug print debug messages to stderr
-v, --version display version information
+ -o [OUTPUTS ...], --outputs [OUTPUTS ...]
+ restricts autotiling to certain output; example: autotiling --output DP-1
+ HDMI-0
-w [WORKSPACES ...], --workspaces [WORKSPACES ...]
restricts autotiling to certain workspaces; example: autotiling --workspaces 8
9
diff --git a/autotiling/main.py b/autotiling/main.py
index 38f236c..8f7e673 100644
--- a/autotiling/main.py
+++ b/autotiling/main.py
@@ -47,9 +47,30 @@ def save_string(string, file):
print(e)
-def switch_splitting(i3, e, debug, workspaces, depth_limit):
+def output_name(con):
+ if con.type == "root":
+ return None
+
+ if p := con.parent:
+ if p.type == "output":
+ return p.name
+ else:
+ return output_name(p)
+
+
+def switch_splitting(i3, e, debug, outputs, workspaces, depth_limit):
try:
con = i3.get_tree().find_focused()
+ output = output_name(con)
+ # Stop, if outputs is set and current output is not in the selection
+ if outputs and output not in outputs:
+ if debug:
+ print(
+ "Debug: Autotiling turned off on output {}".format(output),
+ file=sys.stderr,
+ )
+ return
+
if con and not workspaces or (str(con.workspace().num) in workspaces):
if con.floating:
# We're on i3: on sway it would be None
@@ -120,6 +141,13 @@ def main():
action="version",
version="%(prog)s {}, Python {}".format(__version__, sys.version),
help="display version information", )
+ parser.add_argument("-o",
+ "--outputs",
+ help="restricts autotiling to certain output; "
+ "example: autotiling --output DP-1 HDMI-0",
+ nargs="*",
+ type=str,
+ default=[], )
parser.add_argument("-w",
"--workspaces",
help="restricts autotiling to certain workspaces; example: autotiling --workspaces 8 9",
@@ -145,6 +173,9 @@ def main():
args = parser.parse_args()
+ if args.debug and args.outputs:
+ print("autotiling is only active on outputs:", ",".join(args.outputs))
+
if args.debug and args.workspaces:
print("autotiling is only active on workspaces:", ','.join(args.workspaces))
@@ -160,7 +191,13 @@ def main():
print("No events specified", file=sys.stderr)
sys.exit(1)
- handler = partial(switch_splitting, debug=args.debug, workspaces=args.workspaces, depth_limit=args.limit)
+ handler = partial(
+ switch_splitting,
+ debug=args.debug,
+ outputs=args.outputs,
+ workspaces=args.workspaces,
+ depth_limit=args.limit,
+ )
i3 = Connection()
for e in args.events:
try: