Configuração para mostrar apenas as aplicações do espaço de trabalho atual no lançador?

22

É possível ter os aplicativos abertos da área de trabalho atual no ativador, mas não os de outras áreas de trabalho?

    
por user165749 09.06.2013 / 11:02

3 respostas

8

Como tornar aplicativos não rastreáveis em (outras) áreas de trabalho

Usando xdotool do windowunmap , é possível ocultar uma janela completamente. A janela, nem sua aplicação, ocorre mais no ícone do inicializador e nem está mais listada na saída de wmctrl .

Teoricamente, isso poderia ser conectado ao "motor do espaço de trabalho", que era usado em este e esta resposta. Essa teria sido a solução mais elegante.

No entanto, o processo de apenas esconder janelas em outras áreas de trabalho e levantar automaticamente as que estão na área de trabalho atual é muito exigente para usar em um contexto em andamento script (por enquanto), e não improvável "para pegar um resfriado" também. Como as janelas são perdidas para o bem em caso de erros, decidi, portanto, não oferecer o procedimento como um processo automático (em segundo plano).

Se, no entanto, esta resposta for útil ou não, depende da situação e da razão pela qual você gostaria de ocultar ícones de aplicativos, sendo executados em outras áreas de trabalho; a decisão é sua.

A solução; o que é e como funciona na prática

  • Um script, disponível sob uma tecla de atalho, aparentemente fazendo com que todas as janelas do espaço de trabalho atual (e, portanto, aplicativos) desapareçam completamente. Isso significa que o ícone do aplicativo no iniciador do Unity não mostra nenhuma atividade do aplicativo:

    Três aplicativos em execução: Depoisdepressionaratecladeatalho:

  • Pressionando a combinação de teclas do schortcut novamente, as janelas e seus aplicativos irão reaparecer.

  • Como a combinação de teclas ocultará apenas as janelas e aplicativos da área de trabalho atual , você poderá alternar subsequentemente para outra área de trabalho sem sinal do que está (oculto) na área de trabalho atual.
  • O unhiding está concluído (apenas) no espaço de trabalho atual, portanto, em resumo, o processo de ocultar e exibir é totalmente independente por espaço de trabalho .

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

Como usar

  1. O script precisa dos dois wmctrl e xdotool :

    sudo apt-get install wmctrl xdotool
    
  2. Copie o script em um arquivo vazio, salve-o como toggle_visibility.py
  3. Teste- execute o script: em uma janela de terminal, execute o comando:

    python3 /path/to/toggle_visibility.py
    

    Agora abra uma nova janela de terminal (já que a primeira aparentemente desapareceu da face da terra) e execute o mesmo comando novamente. Todas as janelas devem reaparecer.

    NB : verifique se você não tem janelas "valiosas" abertas durante o teste

  4. Se tudo funcionar bem, adicione o comando a uma combinação de teclas de atalho: escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:

    python3 /path/to/toggle_visibility.py
    

Explicação

Como dito, o script usa xdotool ' windowunmap ' para (completamente) ocultar as janelas e os aplicativos aos quais pertencem. O script:

  • lê qual é a área de trabalho atual
  • lê as janelas, que existem na área de trabalho atual (somente)
  • grava a lista de janelas em um arquivo com o nome da área de trabalho atual
  • oculta as janelas

Na próxima execução, o script:

  • verifica se o arquivo, correspondente a área de trabalho atual existe
  • em caso afirmativo, lê a lista de janelas e as janelas.

alternando assim a visibilidade de janelas e aplicativos no espaço de trabalho atual.

    
por Jacob Vlijm 08.11.2015 / 22:42
8

Bem, outras respostas são bem antigas, então acho que vale a pena adicionar respostas atualizadas. É possível fazê-lo agora e não muito difícil (com o Ubuntu 17.10 e com o Gnome).

Apenas use o editor de dconf :

sudo apt install dconf-editor

Navegue até org > gnome > shell > extensões > traço a encaixe e marque isolar espaços de trabalho

    
por Jakub Kopyś 01.02.2018 / 13:39
6

Infelizmente, é impossível.

O Unity sempre mostra todos os aplicativos de todos os lugares e não há como alterar isso. Existe um relatório de erros - link Mas parece que os desenvolvedores não vão fazer nada. Provavelmente, se você marcar no topo da página que este bug o afeta, ele ajudará os desenvolvedores a entender a importância de tal opção.

    
por dofeoct 01.09.2013 / 23:29