[Astuce] i3wm : Switcher entre les fenêtres d'un container

Le script que je vais vous donné a été écrit il y a quelques mois déjà. Il permet de switcher entre les fenêtres* d'un container. Si dans un container j'ai 3 fenêtres, alors je pourrai focus la première via alt+F2, la seconde via alt+F2 et la dernière via alt+F3. Si un container contient un autre container, le script détectera quel est celui focused et quelles fenêtres lui appartiennent.

Si des fenêtres et des containers appartiennent au même container, alors chacun des containers sera interprété comme une fenêtre.

* : une fenêtre est une application (terminal, navigateur, client mail, etc.)

Le script est une nouvelle fois écrit en PHP et les binds gèrent 6 windows. Pour pouvez bien sûr en ajouter.

Dans ~/bin/i3_switch_focus_container.php (ne pas oublier de faire un chmod u+x dessus) :

#!/usr/bin/php5
<?php

function getTree()
{
    return json_decode(shell_exec('i3-msg -t get_tree'));
}

function getFocusedWindowContainer($tree)
{
    if (empty($tree->nodes)) {
        return null;
    }

    foreach ($tree->nodes as $k => $container) {
        if (true === $container->focused) {
            return $tree->nodes;
        }

        if (null !== $container = getFocusedWindowContainer($container)) {
            return $container;
        }
    }

    return null;
}

function getFocusWindowNumber($default, $max)
{
    global $argv;

    if (!isset($argv[1])) {
        $argv[1] = $default;
    }

    return min($max, max(1, $argv[1])) - 1;
}

function getDefaultFocusWindowNumber($container)
{
    foreach ($container as $k => $v) {
        if ($v->focused) {
            return $k + 1;
        }
    }
}

function setFocusToWindow($window)
{
	shell_exec(sprintf("i3-msg '[con_id=\"%s\"] focus'", $window->id));
}

$container = getFocusedWindowContainer(getTree());

if ($container !== null) {
    $number = getFocusWindowNumber(getDefaultFocusWindowNumber($container), count($container));
    
	foreach ($container as $k => $window) {
        if ($k == $number) {
            setFocusToWindow($window);
        }
    }
}

Dans votre fichier de configuration i3 :

bindsym $mod+F1 exec ~/bin/i3_switch_focus_container.php 1
bindsym $mod+F2 exec ~/bin/i3_switch_focus_container.php 2
bindsym $mod+F3 exec ~/bin/i3_switch_focus_container.php 3
bindsym $mod+F4 exec ~/bin/i3_switch_focus_container.php 4
bindsym $mod+F5 exec ~/bin/i3_switch_focus_container.php 5
bindsym $mod+F6 exec ~/bin/i3_switch_focus_container.php 6

Simon Vieille

Sharepoint Office365 sur Linux : automatiser l'authentification (v2)

Sharepoint Office365 sur Linux : automatiser l'authentification (v2)

En septembre 2018, je publiais un article pour automatiser l'authentification sur Sharepoint…

Sharepoint Office365 sur Linux : automatiser l'authentification

Sharepoint Office365 sur Linux : automatiser l'authentification

Suite de l'aventure avec Sharepoint ! On a pu passer 2 étapes cruciales pour jouer avec Sha…

Sharepoint Office365 sur Linux (Webdav/Davfs) avec des fichiers accentués

Sharepoint Office365 sur Linux (Webdav/Davfs) avec des fichiers accentués

Suite de l'aventure avec Sharepoint ! Je me suis rendu compte que les répertoires et les fi…


Ajouter un commentaire

Votre commentaire - Vous pouvez utiliser du markdown

Renouveler