aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md9
-rw-r--r--autotiling/main.py44
2 files changed, 48 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 6401518..c14a6b7 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, splitwidth, splitheight, splitratio):
+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, splitwidth, splitheight, splitratio):
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
@@ -128,6 +149,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",
@@ -169,6 +197,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))
@@ -184,7 +215,16 @@ 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, splitwidth=args.splitwidth, splitheight=args.splitheight, splitratio=args.splitratio)
+ handler = partial(
+ switch_splitting,
+ debug=args.debug,
+ outputs=args.outputs,
+ workspaces=args.workspaces,
+ depth_limit=args.limit,
+ splitwidth=args.splitwidth,
+ splitheight=args.splitheight,
+ splitratio=args.splitratio
+ )
i3 = Connection()
for e in args.events:
try: