¿Configuración para mostrar solo las aplicaciones del área de trabajo actual en el iniciador?

22

¿Es posible tener las aplicaciones abiertas del espacio de trabajo actual en el iniciador pero no las de otros espacios de trabajo?

    
pregunta user165749 09.06.2013 - 09:02

3 respuestas

8

Cómo hacer que las aplicaciones no puedan rastrearse en (otras) áreas de trabajo

Utilizando xdotool 's windowunmap , es posible ocultar una ventana por completo. La ventana, ni su aplicación, aparece más en el icono del iniciador, y ni siquiera aparece en la lista en la salida de wmctrl .

En teoría, este podría estar conectado al "workspace-engine", que se utilizó en this y esta respuesta. Esa habría sido la solución más elegante.

Sin embargo, el proceso de solo ocultar ventanas en otros espacios de trabajo y subir automáticamente las que están en el espacio de trabajo actual es demasiado exigente para usarlo en un fondo en curso script (por ahora), y no es poco probable que "se resfríe" también. Como las ventanas se pierden para siempre en caso de errores, decidí no ofrecer el procedimiento como un proceso automático (de fondo).

Si esta respuesta es, no obstante, útil para usted o no, depende de la situación y de la razón por la que desea ocultar iconos de aplicaciones que se ejecutan en otros espacios de trabajo; la decisión es tuya.

La solución; qué es y cómo funciona en la práctica

  • Una secuencia de comandos, disponible con una tecla de método abreviado, aparentemente haciendo que todas las ventanas de el espacio de trabajo actual (y, por lo tanto, las aplicaciones) desaparezcan por completo. Eso significa que el ícono de la aplicación en el iniciador de Unity no muestra actividad de la aplicación:

    Tres aplicaciones en ejecución: Después de presionar la tecla de método abreviado:

  • Al presionar de nuevo la combinación de teclas schortcut, las ventanas y sus aplicaciones volverán a aparecer.

  • Dado que la combinación de teclas solo ocultará las ventanas y las aplicaciones del espacio de trabajo actual , puede cambiar posteriormente a otro espacio de trabajo sin un signo de lo que está (oculto) en el área de trabajo actual.
  • También unhiding está hecho (solo) en el espacio de trabajo actual, por lo que, en resumen, el proceso de ocultar y mostrar es completamente independiente por área de trabajo .

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

Cómo usar

  1. El script necesita tanto wmctrl como xdotool :

    sudo apt-get install wmctrl xdotool
    
  2. Copie la secuencia de comandos en un archivo vacío, guárdelo como toggle_visibility.py
  3. Prueba: ejecute el script: en una ventana de terminal, ejecute el comando:

    python3 /path/to/toggle_visibility.py
    

    Ahora abre una nueva ventana de terminal (ya que la primera aparentemente desapareció de la faz de la tierra) y ejecuta el mismo comando nuevamente. Todas las ventanas deben volver a aparecer.

    NB : asegúrese de que no tiene ventanas "valiosas" abiertas mientras prueba

  4. Si todo funciona bien, agregue el comando a una combinación de teclas de método abreviado: elija: Configuración del sistema & gt; "Teclado" & gt; "Accesos directos" & gt; "Accesos directos personalizados". Haga clic en "+" y agregue el comando:

    python3 /path/to/toggle_visibility.py
    

Explicación

Como dije, el script usa xdotool 's windowunmap , para (completamente) ocultar ventanas y las aplicaciones a las que pertenecen. El guión:

  • lee cuál es el espacio de trabajo actual
  • lee las ventanas, que existen en el espacio de trabajo actual (solo)
  • escribe la lista de ventanas en un archivo, nombrado después del área de trabajo actual
  • oculta las ventanas

En la siguiente ejecución, el script:

  • comprueba si el archivo, que corresponde a el espacio de trabajo actual existe
  • si es así, lee la lista de ventanas y desvela las ventanas.

alternando así la visibilidad de ventanas y aplicaciones en el espacio de trabajo actual.

    
respondido por el Jacob Vlijm 08.11.2015 - 21:42
6

Desafortunadamente es imposible.

Unity siempre muestra todas las aplicaciones desde cualquier lugar y no hay forma de cambiar esto. Hay un informe de error: enlace Pero parece que los desarrolladores no van a hacer nada. Probablemente, si marca en la parte superior de la página que este error lo afecta, ayudará a los desarrolladores a comprender la importancia de dicha opción.

    
respondido por el dofeoct 01.09.2013 - 21:29
5

Bueno, otras respuestas son bastante antiguas, por lo que creo que vale la pena agregar una respuesta actualizada. Es posible hacerlo ahora mismo y no demasiado difícilmente tbh (con Ubuntu 17.10 y con Gnome).

Solo usa dconf-editor :

sudo apt install dconf-editor

Navega hacia org & gt; gnome & gt; shell & gt; extensiones & gt; dash-to-dock y marque aislar-espacios de trabajo

    
respondido por el Jakub Kopyś 01.02.2018 - 12:39

Lea otras preguntas en las etiquetas