From 092d6884d0c3167cf708644f61195d8e77626bd5 Mon Sep 17 00:00:00 2001 From: "J. Elfring (g)" Date: Tue, 16 Jun 2020 23:36:16 +0200 Subject: [PATCH] Fix GPDP2 i3 config Setup.sh options doni't work in directories. --- simpleDots/i3+gpdp2/alternating_layouts.py | 106 ++++++++++++++++++ .../{i3/config+gpdp2 => i3+gpdp2/config} | 0 simpleDots/i3+gpdp2/dunstrc | 48 ++++++++ .../i3-status.conf} | 0 4 files changed, 154 insertions(+) create mode 100755 simpleDots/i3+gpdp2/alternating_layouts.py rename simpleDots/{i3/config+gpdp2 => i3+gpdp2/config} (100%) create mode 100644 simpleDots/i3+gpdp2/dunstrc rename simpleDots/{i3/i3-status.conf+gpdp2 => i3+gpdp2/i3-status.conf} (100%) diff --git a/simpleDots/i3+gpdp2/alternating_layouts.py b/simpleDots/i3+gpdp2/alternating_layouts.py new file mode 100755 index 0000000..d38d2ca --- /dev/null +++ b/simpleDots/i3+gpdp2/alternating_layouts.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python + +import i3 +import re +import subprocess +import getopt +import sys +import os + + +def find_parent(window_id): + """ + Find the parent of a given window id + """ + root_window = i3.get_tree() + result = [None] + + def finder(n, p=None): + if result[0] is not None: + return + for node in n: + if node['id'] == window_id: + result[0] = p + return + if len(node['nodes']): + finder(node['nodes'], node) + + finder(root_window['nodes']) + return result[0] + + +def set_layout(): + """ + Set the layout/split for the currently + focused window to either vertical or + horizontal, depending on its width/height + """ + current_win = i3.filter(nodes=[], focused=True) + for win in current_win: + parent = find_parent(win['id']) + + if (parent and "rect" in parent + and parent['layout'] != 'tabbed' + and parent['layout'] != 'stacked'): + height = parent['rect']['height'] + width = parent['rect']['width'] + + if height > width: + new_layout = 'vertical' + else: + new_layout = 'horizontal' + + i3.split(new_layout) + + +def print_help(): + print("Usage: " + sys.argv[0] + " [-p path/to/pid.file]") + print("") + print("Options:") + print(" -p path/to/pid.file Saves the PID for this program in the filename specified") + print("") + + +def main(): + """ + Main function - listen for window focus + changes and call set_layout when focus + changes + """ + opt_list, args = getopt.getopt(sys.argv[1:], 'hp:') + pid_file = None + for opt in opt_list: + if opt[0] == "-h": + print_help() + sys.exit() + if opt[0] == "-p": + pid_file = opt[1] + + if pid_file: + with open(pid_file, 'w') as f: + f.write(str(os.getpid())) + + + process = subprocess.Popen( + ['xprop', '-root', '-spy'], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE + ) + regex = re.compile(b'^_NET_CLIENT_LIST_STACKING|^_NET_ACTIVE_WINDOW') + + last_line = "" + while True: + line = process.stdout.readline() + if line == b'': #X is dead + break + if line == last_line: + continue + if regex.match(line): + set_layout() + last_line = line + + process.kill() + sys.exit() + +if __name__ == "__main__": + main() diff --git a/simpleDots/i3/config+gpdp2 b/simpleDots/i3+gpdp2/config similarity index 100% rename from simpleDots/i3/config+gpdp2 rename to simpleDots/i3+gpdp2/config diff --git a/simpleDots/i3+gpdp2/dunstrc b/simpleDots/i3+gpdp2/dunstrc new file mode 100644 index 0000000..81f3810 --- /dev/null +++ b/simpleDots/i3+gpdp2/dunstrc @@ -0,0 +1,48 @@ +[global] + font = Inconsolata 10 + allow_markup = yes + format = "%s\n%b" + sort = yes + indicate_hidden = yes + alignment = right + bounce_freq = 0 + show_age_threshold = 60 + word_wrap = yes + ignore_newline = no + geometry = "200x5-6+30" + transparency = 0 + idle_threshold = 120 + monitor = 0 + follow = mouse + sticky_history = yes + line_height = 0 + separator_height = 2 + padding = 8 + horizontal_padding = 8 + separator_color = "#585858" + startup_notification = false + +[frame] + width = 1 + color = "#383838" + +[shortcuts] + close = ctrl+space + close_all = ctrl+shift+space + # history = ctrl+h + context = ctrl+shift+period + +[urgency_low] + background = "#181818" + foreground = "#E3C7AF" + timeout = 5 + +[urgency_normal] + background = "#181818" + foreground = "#E3C7AF" + timeout = 20 + +[urgency_critical] + background = "#181818" + foreground = "#FF2121" + timeout = 0 diff --git a/simpleDots/i3/i3-status.conf+gpdp2 b/simpleDots/i3+gpdp2/i3-status.conf similarity index 100% rename from simpleDots/i3/i3-status.conf+gpdp2 rename to simpleDots/i3+gpdp2/i3-status.conf