Est-il possible d'avoir les applications ouvertes de l'espace de travail actuel dans le lanceur mais pas celles des autres espaces de travail ?
Réponses
Trop de publicités?Pour Ubuntu Dock livré avec Ubuntu 17.10 et plus (avec GNOME)
Les autres réponses sont assez anciennes, je pense donc qu'il vaut la peine d'ajouter une réponse actualisée. Il est possible de le faire dès maintenant et ce n'est pas trop difficile (avec Ubuntu 17.10 et Gnome).
Il suffit d'utiliser dconf-éditeur :
sudo apt install dconf-editor
Naviguez jusqu'à org > gnome > Shell > extensions > dash-to-dock et vérifier isoler les espaces de travail
Comment rendre les applications intraçables sur les (autres) espaces de travail ?
Utilisation xdotool
's windowunmap
il est possible de masquer complètement une fenêtre. La fenêtre et son application n'apparaissent plus dans l'icône du lanceur et ne sont même plus listées dans la sortie de la commande wmctrl
.
Théoriquement, cette pourrait être connecté au "workspace-engine", qui a été utilisé en 今 y 今 répondre. Cela aurait été la solution la plus élégante.
Cependant, le processus de seulement masquer les fenêtres sur d'autres espaces de travail et de relever automatiquement celles qui se trouvent sur l'espace de travail. espace de travail actuel est trop exigeant pour être utilisé dans le cadre d'une arrière-plan script (pour l'instant), et il n'est pas improbable qu'il s'agisse aussi d'un "rhume". Étant donné que Windows est définitivement perdu en cas d'erreur, j'ai décidé de ne pas proposer la procédure en tant que processus automatique (en arrière-plan).
L'utilité de cette réponse dépend de la situation et de la raison pour laquelle vous souhaitez masquer les icônes des applications fonctionnant sur d'autres espaces de travail ; la décision vous appartient.
La solution : ce qu'elle est et comment elle fonctionne en pratique
-
Un script, disponible sous une touche de raccourci, semble rendre tous les Windows sur l'espace de travail actuel (et donc les applications) disparaissent complètement. 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 : Après avoir appuyé sur la touche de raccourci :
-
En appuyant à nouveau sur la combinaison de touches de raccourci, les fenêtres et leurs applications réapparaissent.
-
Étant donné que la combinaison de touches ne fait que masquer les fenêtres et les applications de l'écran d'accueil, il est préférable de ne pas utiliser cette combinaison de touches. espace de travail actuel vous pouvez ensuite passer à un autre espace de travail sans avoir connaissance de ce qui est (caché) dans l'espace de travail actuel.
-
En outre dissimulation se fait (uniquement) sur l'espace de travail courant, de sorte qu'en bref, le processus de masquage et de démasquage se fait de manière totalement indépendante. par espace de travail .
Le script
#!/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 l'utiliser
-
Le script a besoin des deux éléments suivants
wmctrl
yxdotool
:sudo apt-get install wmctrl xdotool
-
Copiez le script dans un fichier vide, enregistrez-le sous le nom de
toggle_visibility.py
-
Test - exécuter le script : dans une fenêtre de terminal, exécuter la commande :
python3 /path/to/toggle_visibility.py
Ouvrez maintenant une nouvelle fenêtre de terminal (puisque la première a apparemment disparu de la surface de la terre) et exécutez à nouveau la même commande. Toutes les fenêtres devraient réapparaître.
NB Pour les tests, il faut s'assurer qu'aucune fenêtre "importante" n'est ouverte.
-
Si tout se passe bien, ajoutez la commande à une combinaison de touches de raccourci : choisissez : Paramètres du 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 xdotool
's windowunmap
Le logiciel de gestion de l'interface utilisateur permet de masquer (complètement) Windows et les applications auxquelles ils appartiennent. Le script :
- lit l'espace de travail actuel
- lit les fenêtres, qui existent sur l'espace de travail actuel (uniquement)
- écrit la liste des fenêtres dans un fichier, nommé d'après l'espace de travail actuel
- cache les fenêtres
Lors de l'exécution suivante, le script :
- vérifie si le fichier correspondant à l'espace de travail actuel existe
- si c'est le cas, lit la liste des fenêtres et décachette les fenêtres.
ce qui permet d'alterner la visibilité des fenêtres et des applications dans l'espace de travail actuel.
Malheureusement, c'est impossible.
Unity affiche toujours toutes les applications depuis n'importe où et il n'y a aucun moyen de changer cela. Il y a un rapport de bug - https://bugs.launchpad.net/ayatana-design/+bug/683170 Mais il semble que les développeurs ne vont rien faire. Probablement que si vous indiquez en haut de la page que ce bogue vous affecte, cela aidera les développeurs à comprendre l'importance d'une telle option.
Cacher l'application/fenêtre dans le commutateur alt-tab
- installer dconf-editor en utilisant la commande suivante
sudo apt-get install dconf-editor
- lancer dconf-editor à partir du menu ou du terminal en utilisant la commande suivante
dconf-editor
- dans dconf, visitez l'emplacement
- pour l'utilisation de l'app-swicther
/org/gnome/shell/app-switcher/current-workspace-only
- Pour la fenêtre-swithcer, utiliser ce qui suit
/org/gnome/shell/window-switcher/current-workspace-only
- note : vous pouvez également modifier les deux
- pour l'utilisation de l'app-swicther
- bouton/interrupteur d'arrêt qui indique Utiliser la valeur par défaut
- remplacer le Valeur personnalisée からして
false
atrue
- enregistrer les modifications en cliquant sur Appliquer en bas à droite de dconf