web-dev-qa-db-fra.com

Réglage pour afficher uniquement les applications de l'espace de travail actuel dans le lanceur?

Est-il possible d'avoir les applications ouvertes de l'espace de travail actuel dans le programme de lancement, mais pas celles d'autres espaces de travail?

28
user165749

Pour Ubuntu Dock fourni avec Ubuntu 17.10 et versions ultérieures (avec GNOME)

Eh bien, les autres réponses étant assez anciennes, je pense qu’il vaut la peine d’ajouter une réponse à jour. Il est possible de le faire maintenant et sans trop de difficultés (avec Ubuntu 17.10 et Gnome).

Utilisez simplement dconf-editor :

Sudo apt install dconf-editor

Accédez à org> gnome> Shell> extensions> dash-to-dock et cochez isolate-workspaces enter image description here

25
Jakub Kopyś

Comment rendre les applications introuvables sur les (autres) espaces de travail

En utilisant xdotoolname __ 's windowunmapname__, il est possible de masquer complètement une fenêtre. La fenêtre, ni son application, n'apparaissent plus dans l'icône du lanceur et ne figurent même plus dans la sortie de wmctrlname__.

Théoriquement, ceci pourrait ​​être connecté au "moteur de l'espace de travail", qui était utilisé dans this et this answer. Cela aurait été la solution la plus élégante.

Cependant, le processus consistant à niquement ​​masquer des fenêtres sur d'autres espaces de travail et à relever automatiquement celles de espace de travail actuel est trop exigeant pour une utilisation en cours background = script (pour l'instant), et il n'est pas improbable "d'attraper un rhume" aussi. Puisque les fenêtres sont définitivement perdues en cas d’erreur, j’ai donc décidé de ne pas proposer la procédure comme procédure automatique (en arrière-plan).

Si cette réponse vous est néanmoins utile ou non, cela dépend de la situation et de la raison pour laquelle vous souhaitez masquer les icônes des applications s'exécutant sur d'autres espaces de travail. c'est ta décision.

La solution; qu'est-ce que c'est et comment ça marche en pratique

  • Un script, disponible sous une touche de raccourci, faisant apparemment disparaître complètement toutes les fenêtres sur l'espace de travail actuel (et donc les applications). Cela signifie que l'icône de l'application dans le lanceur Unity ne montre aucune activité de l'application:

    Trois applications en cours d'exécution: enter image description here Après avoir appuyé sur la touche de raccourci: enter image description here

  • En appuyant à nouveau sur la combinaison de touches schortcut, les fenêtres et leurs applications réapparaîtront.

  • Étant donné que la combinaison de touches ne masquera que les fenêtres et les applications du espace de travail actuel, vous pourrez ensuite basculer vers un autre espace de travail sans afficher ce qui est (masqué) sur l'espace de travail actuel.
  • De plus, nhiding est effectué (uniquement) sur l'espace de travail actuel. En bref, le processus de masquage et d'affichage est complètement indépendant par espace de travail.

Le scénario

#!/usr/bin/env python3
import subprocess    
import os
import time

datadir = os.environ["HOME"]+"/.config/maptoggle"
if not os.path.exists(datadir):
    os.makedirs(datadir)
workspace_data = datadir+"/wspacedata_"

def get_wlist(res):
    res = get_res()
    try:
        wlist = [l.split() for l in subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()]
        return [w for w in wlist if all([
            0 < int(w[2]) < res[0],
            0 < int(w[3]) < res[1],
            "_NET_WM_WINDOW_TYPE_NORMAL" in subprocess.check_output(["xprop", "-id", w[0]]).decode("utf-8"),
            ])]
    except subprocess.CalledProcessError:
        pass

def get_res():
    # get resolution
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

def current(res):
    # get the current viewport
    vp_data = subprocess.check_output(
        ["wmctrl", "-d"]
        ).decode("utf-8").split()
    dt = [int(n) for n in vp_data[3].split("x")]
    cols = int(dt[0]/res[0])
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    curr_col = int(curr_vpdata[0]/res[0])+1
    curr_row = int(curr_vpdata[1]/res[1])
    return str(curr_col+curr_row*cols)

res = get_res()

try:
    f = workspace_data+current(res)
    wlist = eval(open(f).read().strip())
    for w in wlist:
        subprocess.Popen(["xdotool", "windowmap", w[0]])
    os.remove(f)
except FileNotFoundError:
    current_windows = get_wlist(res)
    open(f, "wt").write(str(current_windows))
    for w in current_windows:
        subprocess.Popen(["xdotool", "windowunmap", w[0]])

Comment utiliser

  1. Le script nécessite à la fois wmctrlet xdotoolname__:

    Sudo apt-get install wmctrl xdotool
    
  2. Copiez le script dans un fichier vide, enregistrez-le sous toggle_visibility.py
  3. Testez le script: dans une fenêtre de terminal, exécutez la commande:

    python3 /path/to/toggle_visibility.py
    

    Ouvrez maintenant une nouvelle fenêtre de terminal (puisque la première semble avoir disparu de la surface de la terre) et exécutez à nouveau la même commande. Toutes les fenêtres devraient réapparaître.

    NB: assurez-vous de ne pas avoir de "fenêtres de valeur" ouvertes pendant le test

  4. Si tout fonctionne correctement, ajoutez la commande à une combinaison de touches de raccourci: choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:

    python3 /path/to/toggle_visibility.py
    

Explication

Comme indiqué, le script utilise le nom xdotoolde windowunmappour masquer (complètement) les fenêtres et les applications auxquelles elles appartiennent. Le scénario:

  • lit quel est l'espace de travail actuel
  • lit les fenêtres qui existent sur l'espace de travail actuel (seulement)
  • écrit la liste des fenêtres dans un fichier, nommé d'après l'espace de travail actuel
  • cache les fenêtres

À la prochaine exécution, le script:

  • vérifie si le fichier correspondant à l'espace de travail actuel existe
  • si tel est le cas, lit la liste des fenêtres et les masque.

basculant ainsi la visibilité des fenêtres et des applications sur l’espace de travail actuel.

8
Jacob Vlijm

Malheureusement c'est impossible.

Unity affiche toujours toutes les applications de partout et il n’ya aucun moyen de changer cela. Il y a un rapport de bogue - https://bugs.launchpad.net/ayatana-design/+bug/68317 Mais il semble que les développeurs ne vont rien faire. Probablement si vous marquez en haut de la page que ce bogue vous affecte, cela aidera les développeurs à comprendre l'importance d'une telle option.

6
dofeoct