Быстрый путь к размонтированию всех свернутых окон через bash prompt или какую-нибудь устанавливаемую утилиту?

Я использую compiz-manjaro в XFCE. Работает отлично, за исключением того, что если окно свернуто на рабочем столе (или вьюпорте, как они называют его в Compiz), оно не отображается при использовании любых плагинов переключения окон, ограниченных этим вьюпортом (поэтому при переключении между всеми окнами на всех вьюпортах, свернутые окна отображаются, но когда вы переключаетесь между окнами этого вьюпорта, свернутые окна не отображаются).

Я пытаюсь обойти это ограничение, написав скрипт, который восстановит все свернутые окна, но я не уверен, как лучше поступить.

Некто Greg Till в 2009 году написал скрипт на python, который использует Wnck для максимизации всех окон перед запуском Compiz Scale: http://pastebin.com/mCRKZkVb (я обновил его, чтобы он работал), но он делал это крайне медленно.

Насколько я могу судить, в Compiz нет функции восстановления свернутых окон, иначе я бы задал для этого клавишу и объединил обе функции в скрипте. Есть ли готовая функция в bash или какая-то утилита, которую можно установить, чтобы быстро восстановить свернутые окна?

0
21.11.2016, 10:41
2 ответа

В итоге я полностью переписал сценарий Грега Тилла, чтобы сделать его легче и эффективнее. Я убрал функциональность, которая восстанавливает свернутые окна обратно в их исходное минимизированное состояние после запуска плагина масштабирования, поскольку я не считал это необходимым и раздувал скрипт.

Я тестировал новый сценарий как на моем маленьком ноутбуке семилетней давности, так и на моем современном игровом компьютере. Основываясь на своем опыте, я бы порекомендовал этот сценарий всем, у кого настольный компьютер старше 5 лет. Большинство ноутбуков намного медленнее, чем настольные компьютеры, поэтому я бы не рекомендовал этот сценарий тем, у кого нет относительно недавнего или мощного игрового ноутбука, такого как Eurocoms, Saeger, Origin PC, AW 15 дюймов или 17 дюймов (но не 11 дюймов единицы).

Все инструкции по установке находятся в комментариях к сценарию в начале.

#!/usr/bin/env python

# Written by: Fadi R (November 2016)

# Rewrite of Greg Till's 2009 python script which get's around compiz's minimized window switching limitation
# Original Script and Thread here: https://ubuntuforums.org/showthread.php?t=976002
# Public domain software

# Installation: 

# Install the following packages: libwnck3, xdotool, wmctrl
# In Compiz, go to Scale plugin and set "initiate window picker" to the following key combo: Ctrl-Super-Alt 1
#   if you are unhappy with combo, just change it to what you want at the end of script.
# go to "Command Plugin" and make a new command. For the actual command line itself, input /path/to/this/script/./scale.py 
#   (don't forget to give this script execute permission), once you're done with that, bind the new 
#   command to the key combination you usually use to start the scale plugin (for example Alt-Tab. Same deal for corners 
#   and buttons if you use them.

#  This script is for fast machines. I wouldn't use it on a 7 year old portable for example, it will add alot of lague.
#  On the other hand, there will be little to no lague on a relatively recent desktop or a even more recent gaming laptop 
#  with a non-bs/mobile CPU/GPU (I'm talking to you Dell).

import gi
gi.require_version('Wnck', '3.0')
from gi.repository import Wnck
import os
import subprocess


def determine_minimized(windows):
    #Determine which windows in a given list are minimized
    minimizedWindows = []
    for window in windows:
    if window.is_minimized():
            minimizedWindows.append(window)
    return minimizedWindows



def main():
        # ************************************************************************
        # Unminimize all minimized viewport windows
        # ************************************************************************
    eligibleWindows = []
    screen = Wnck.Screen.get_default()
    screen.force_update()
    allWindows = screen.get_windows_stacked()
    workspace = screen.get_active_workspace()
    for window in allWindows:
        if window.is_in_viewport(workspace):
            eligibleWindows.append(window)

    if eligibleWindows:
        minimizedWindows = determine_minimized(eligibleWindows)
    else:
        os._exit(0)


    if minimizedWindows:
            for window in minimizedWindows:
                subprocess.call('wmctrl -ia ' + str(window.get_xid()), shell=True)



    # ************************************************************************
    # Launch the Scale plugin of the Compiz window manager using hotkeys via xdotool

    subprocess.call("xdotool keydown Control keydown Super keydown Alt key 1 keyup Alt keyup Super keyup Control", shell=True)  




if __name__ == '__main__':
    main()
    os._exit(1)
0
28.01.2020, 02:47

Я ожидаю, что следующая команда выполнит трюк: xdotool search --onlyvisible --name '. *' windowactivate% @ . Краткое описание: xdotool - это утилита, которую мы используем для управления окнами и курсоры и события клавиатуры из терминала. Первая часть команды, search --onlyvisible --name '. *' , выбирает окна, с которыми мы хотим взаимодействовать. Поиск довольно понятен, - только видимый , это означает, что мы хотим искать только те окна, которые могут быть показаны (первая попытка без Параметры --onlyvisible пытались не минимизировать такие вещи, как gnome-settings, полностью нарушив мою сессию), и - name '. *' присутствует только потому, что у нас есть , чтобы дать критерий соответствия для имени окна, имени класса или класса, поэтому мы говорим, что хотим, чтобы окна соответствовали регулярному выражению . * , что означает любое количество раз, когда любой символ, то есть буквально все. Вторая часть, windowactivate% @ , означает, что мы хотим поднимать / отменять минимизацию ( windowactive ) для всех окон, возвращенных предыдущим поиском (% @ ).

1
28.01.2020, 02:47

Теги

Похожие вопросы