Impostazione per mostrare solo le applicazioni dello spazio di lavoro corrente nel launcher?

21

È possibile avere le applicazioni aperte dello spazio di lavoro corrente nel launcher ma non quelle di altre aree di lavoro?

    
posta user165749 09.06.2013 - 11:02
fonte

3 risposte

8

Come rendere le applicazioni non rintracciabili su (altre) aree di lavoro

Usando xdotool 's windowunmap , è possibile nascondere completamente una finestra. La finestra, né la sua applicazione, si verifica più nell'icona di avvio, e non è nemmeno più elencata nell'output di wmctrl .

In teoria, questo potrebbe essere connesso al "workspace-engine", che era usato in questo e questa risposta. Questa sarebbe stata la soluzione più elegante.

Tuttavia, il processo di solo che nasconde le finestre su altri spazi di lavoro e di innalzare automaticamente quelli nello spazio di lavoro corrente è troppo impegnativo da utilizzare in uno background in corso (per ora), e non improbabile "prendere il raffreddore". Dal momento che le finestre si sono perse definitivamente in caso di errori, ho quindi deciso di non offrire la procedura come processo automatico (in background)

Se questa risposta è comunque utile per te o no dipende dalla situazione, e il motivo per cui ti piacerebbe nascondere le icone delle applicazioni, correndo su altri spazi di lavoro; la decisione è tua.

La soluzione; che cos'è e come funziona in pratica

  • Uno script, disponibile sotto un tasto di scelta rapida, apparentemente facendo scomparire completamente tutte le finestre su lo spazio di lavoro corrente (e quindi le applicazioni). Ciò significa che l'icona dell'applicazione nel launcher di Unity non mostra alcuna attività dell'applicazione:

    Tre applicazioni in esecuzione: Dopo aver premuto il tasto di scelta rapida:

  • Premendo nuovamente la combinazione di tasti schortcut, le finestre e le loro applicazioni verranno visualizzate nuovamente.

  • Poiché la combinazione di tasti nasconderà solo le finestre e le applicazioni dallo spazio di lavoro corrente , è possibile passare successivamente a un altro spazio di lavoro senza un segno di ciò che è (nascosto) nell'area di lavoro corrente.
  • Anche unhiding è fatto (solo) nello spazio di lavoro corrente, quindi in breve, il processo di nascondere e scoprire è doen completamente indipendente per area di lavoro .

Lo 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]])

Come usare

  1. Lo script richiede sia wmctrl che xdotool :

    sudo apt-get install wmctrl xdotool
    
  2. Copia lo script in un file vuoto, salvalo come toggle_visibility.py
  3. Test - esegui lo script: in una finestra del terminale, esegui il comando:

    python3 /path/to/toggle_visibility.py
    

    Ora apri una nuova finestra di terminale (dal momento che il primo apparentemente scompare dalla faccia della terra) ed esegui di nuovo lo stesso comando. Tutte le finestre dovrebbero apparire nuovamente.

    NB : assicurati di non avere finestre "preziose" aperte durante il test

  4. Se tutto funziona correttamente, aggiungi il comando a una combinazione di tasti di scelta rapida: scegli: Impostazioni di sistema & gt; "Tastiera" & gt; "Scorciatoie" & gt; "Scorciatoie personalizzate". Fai clic su "+" e aggiungi il comando:

    python3 /path/to/toggle_visibility.py
    

Spiegazione

Come detto, lo script usa xdotool windowunmap , per nascondere (completamente) Windows e le applicazioni a cui appartengono. Lo script:

  • legge quale è lo spazio di lavoro corrente
  • legge le finestre, che esistono nello spazio di lavoro corrente (solo)
  • scrive l'elenco delle finestre in un file, dal nome dello spazio di lavoro corrente
  • nasconde le finestre

Alla prossima esecuzione, lo script:

  • verifica se il file, corrispondente a lo spazio di lavoro corrente esiste
  • se è così, legge l'elenco delle finestre e sgancia le finestre.

quindi attiva la visibilità di finestre e applicazioni nello spazio di lavoro corrente.

    
risposta data Jacob Vlijm 08.11.2015 - 22:42
fonte
6

Purtroppo è impossibile.

Unity mostra sempre tutte le applicazioni da qualsiasi luogo e non c'è modo di cambiarlo. C'è un bug report - link Ma sembra che gli sviluppatori non faranno nulla. Probabilmente se contrassegni nella parte superiore della pagina che questo bug ti riguarda, aiuterà gli sviluppatori a capire l'importanza di tale opzione.

    
risposta data dofeoct 01.09.2013 - 23:29
fonte
3

Bene, le altre risposte sono piuttosto vecchie, quindi penso valga la pena aggiungere una risposta aggiornata. È possibile farlo ora e non troppo difficile tbh (con Ubuntu 17.10 e con Gnome).

Utilizza dconf-editor :

sudo apt install dconf-editor

Vai a org & gt; gnome & gt; shell & gt; estensioni & gt; dash-to-dock e seleziona isolare-workspace

    
risposta data Jakub Kopyś 01.02.2018 - 13:39
fonte

Leggi altre domande sui tag