我在 XFCE 中使用 compiz-manjaro。工作得很好,除了这样一个事实:如果窗口在桌面(或在 Compiz 中称为视口)中最小化,则在使用仅限于该视口的任何窗口切换插件时,它不会显示(因此,当在所有窗口之间切换时)所有视口、最小化窗口都会显示,但是当您在该视口的窗口之间切换时,最小化窗口不会显示)。
我正在尝试通过编写一个脚本来解决这个限制/错误,该脚本将恢复所有最小化的窗口,但我不确定最好的方法是什么。
一个叫 Greg Till 的人在 2009 年编写了一个 Python 脚本,该脚本在启动 Compiz Scale 之前使用 Wnck 来最大化所有窗口:http://pastebin.com/mCRKZkVb(我更新了它以便它可以工作)但是执行此操作非常慢。
据我所知,Compiz 中没有恢复最小化窗口的功能,否则我会为此设置按键并在脚本中组合这两个功能。 bash 中是否有现成的功能或某种可以安装的实用程序,可以快速恢复最小化的窗口?
答案1
我希望下面的命令可以解决这个问题xdotool search --onlyvisible --name '.*' windowactivate %@
:快速细分:xdotool
是我们用来从终端操作窗口、光标和键盘事件的实用程序。命令的第一部分search --onlyvisible --name '.*'
,选择我们想要与之交互的窗口。这search
是非常不言自明的,--onlyvisible
意味着我们只想搜索那些能本显示(第一次尝试没有选项--onlyvisible
试图取消最小化诸如 gnome-settings 之类的东西,完全破坏了我的会话),并且--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)