XFCE와 함께 compiz-manjaro를 사용하고 있습니다. 창이 데스크톱(또는 Compiz에서 호출되는 뷰포트)에서 최소화된 경우 해당 뷰포트로 제한된 창 전환 플러그인을 사용할 때 표시되지 않는다는 사실을 제외하고는 잘 작동합니다. 모든 창) 모든 뷰포트, 최소화된 창이 표시되지만 해당 뷰포트에 대한 창 사이를 전환하면 최소화된 창이 표시되지 않습니다.
최소화된 창을 모두 복원하는 스크립트를 작성하여 이 제한/버그를 해결하려고 노력하고 있지만 최선의 접근 방식이 무엇인지 잘 모르겠습니다.
Greg Till이라는 사람이 2009년에 Compiz Scale을 시작하기 전에 Wnck를 사용하여 모든 창을 최대화하는 Python 스크립트를 작성했습니다.http://pastebin.com/mCRKZkVb(작동하도록 업데이트했습니다.) 하지만 이렇게 하면 속도가 매우 느립니다.
내가 아는 한 Compiz에는 최소화된 창을 복원하는 기능이 없습니다. 그렇지 않으면 이에 대한 키 입력을 설정하고 두 기능을 스크립트에 결합했을 것입니다. 최소화된 창을 빠르게 복원할 수 있도록 bash에 미리 만들어진 기능이나 설치할 수 있는 유틸리티가 있습니까?
답변1
다음 명령으로 이 문제가 해결되기를 바랍니다 xdotool search --onlyvisible --name '.*' windowactivate %@
. Quick Breakdown: xdotool
터미널에서 창, 커서 및 키보드 이벤트를 조작하는 데 사용하는 유틸리티입니다. 명령의 첫 번째 부분은 search --onlyvisible --name '.*'
상호 작용하려는 창을 선택합니다. 이는 search
설명이 필요 없으며 --onlyvisible
우리가 해당 항목만 검색하고 싶다는 의미입니다.할 수 있는이것이 나타납니다(첫 번째 시도에는 --onlyvisible
gnome 설정과 같은 작업을 최소화하지 않아 세션을 완전히 망칠 수 있는 옵션이 없었습니다) --name '.*'
.가지다.*
창 이름, 클래스 이름 또는 클래스에 대한 일치 기준이 주어지면 창이 정규식과 일치하기를 원한다고 말합니다. 이는 말 그대로 모든 문자의 수를 의미합니다. 두 번째 부분은 이전 검색( ) 에서 반환된 모든 창을 windowactivate %@
올리거나 최소화 해제( )하려는 것을 의미합니다 .windowactive
%@
답변2
나는 Greg Till의 스크립트를 더 가볍고 효율적으로 만들기 위해 완전히 다시 작성했습니다. 확대/축소 플러그인을 실행한 후 최소화된 창을 원래 최소화된 상태로 복원하는 기능을 제거했습니다. 왜냐하면 그것이 중요하지 않다고 생각하고 이로 인해 스크립트가 부풀어오르기 때문입니다.
저는 7년 된 노트북과 최첨단 게이밍 데스크탑에서 새 스크립트를 테스트했습니다. 내 경험을 바탕으로 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)