Настройка только для отображения приложений текущего рабочего пространства в пусковом устройстве?

22

Возможно ли иметь открытые приложения текущего рабочего пространства в панели запуска, но не из других рабочих областей?

    
задан user165749 09.06.2013 в 11:02
источник

3 ответа

8

Как сделать приложения незатрагиваемыми на (других) рабочих пространствах

Используя xdotool windowunmap , можно полностью скрыть окно. Окно или его приложение больше не появляется в значке запуска, и даже не отображается в выводе wmctrl .

Теоретически этот мог подключаться к «рабочему пространству», который использовался в этом и . Это было бы самым элегантным решением.

Тем не менее, процесс only , скрывающий окна на других рабочих пространствах и автоматически поднимающий их в текущей рабочей области , слишком сложен для использования на текущем фоне (на данный момент), и маловероятно «простудиться». Поскольку окна потеряны навсегда в случае ошибок, я поэтому решил не предлагать процедуру как автоматический (фоновый) процесс.

Если этот ответ, тем не менее, полезен для вас или нет, зависит от ситуации и причины, по которой вы хотите скрыть значки приложений, работающих на других рабочих пространствах; это ваше решение.

Решение; что это такое и как это работает на практике

  • Сценарий, доступный под сочетанием клавиш, по-видимому, делает все окна на текущей рабочей области (и, следовательно, приложения) полностью исчезает. Это означает, что значок приложения в пусковой установке Unity не показывает активности приложения:

    Три запущенных приложения: Посленажатияклавишибыстрогодоступа:

  • Повторное нажатие комбинации клавиш, окна и их приложения снова появятся.

  • Так как комбинация клавиш только скроет окна и приложения из текущей рабочей области , вы можете впоследствии переключиться на другое рабочее пространство без знака того, что (скрыто) в текущей рабочей области.
  • Кроме того, unhiding выполняется (только) в текущем рабочем пространстве, поэтому, как следствие, процесс скрытия и скрытия полностью независим за рабочее пространство .

Скрипт

#!/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]])

Как использовать

  1. Для сценария требуются как wmctrl , так и xdotool :

    sudo apt-get install wmctrl xdotool
    
  2. Скопируйте сценарий в пустой файл, сохраните его как toggle_visibility.py
  3. Запустите сценарий: в окне терминала запустите команду:

    python3 /path/to/toggle_visibility.py
    

    Теперь откройте новое окно терминала (так как первое, казалось бы, исчезло с лица земли) и снова запустите ту же команду. Все окна должны появиться снова.

    NB : убедитесь, что во время тестирования у вас нет «ценных» окон.

  4. Если все работает нормально, добавьте команду в комбинацию клавиш быстрого доступа: выберите: Системные настройки > «Клавиатура» > «Ярлыки» > «Пользовательские ярлыки». Нажмите «+» и добавьте команду:

    python3 /path/to/toggle_visibility.py
    

Объяснение

Как сказано, скрипт использует xdotool windowunmap , чтобы (полностью) скрыть окна и приложения, к которым они принадлежат. Сценарий:

  • читает текущую рабочую область
  • читает окна, которые существуют в текущей рабочей области (только)
  • записывает список окон в файл, названный в честь текущей рабочей области
  • скрывает окна

В следующем прогоне скрипт:

  • проверяет, существует ли файл, соответствующий текущему рабочему пространству
  • если это так, читает список окон и скрывает окна.

, тем самым изменяя видимость окон и приложений в текущей рабочей области.

    
ответ дан Jacob Vlijm 08.11.2015 в 22:42
8

Ну, другие ответы довольно старые, поэтому я думаю, что стоит добавить обновленный ответ. Это можно сделать прямо сейчас и не слишком сложно tbh (с Ubuntu 17.10 и с Gnome).

Просто используйте dconf-editor :

sudo apt install dconf-editor

Перейдите к org > gnome > оболочка > расширения > dash-to-dock и проверьте изолировать-рабочие пространства

    
ответ дан Jakub Kopyś 01.02.2018 в 13:39
6

К сожалению, это невозможно.

Unity всегда показывает все приложения извне, и нет способа изменить это. Отчет об ошибке - Ссылка Но, похоже, разработчики ничего не собираются делать. Вероятно, если вы отметите в верхней части страницы, что эта ошибка влияет на вас, это поможет разработчикам понять важность такого параметра.

    
ответ дан dofeoct 01.09.2013 в 23:29