是否可以在启动器中拥有当前工作空间的已打开应用程序,而其他工作空间中没有这些应用程序?
是否可以在启动器中拥有当前工作空间的已打开应用程序,而其他工作空间中没有这些应用程序?
Answers:
好吧,其他答案已经很老了,因此我认为值得添加最新答案。现在可以这样做,而不必太费力(使用Ubuntu 17.10并具有Gnome)。
只需使用dconf-editor:
sudo apt install dconf-editor
使用xdotool
的windowunmap
,它可以完全隐藏窗口。该窗口及其应用程序不再出现在启动器图标中,甚至没有在的输出中列出wmctrl
。
从理论上讲,它可以连接到“工作空间引擎”,该引擎已在此和此答案中使用。那将是最优雅的解决方案。
但是,仅隐藏其他工作区上的窗口并自动将当前工作区上的窗口隐藏起来的过程非常需要在正在进行的后台脚本中使用(目前),而且也不太可能“感冒”。由于在发生错误的情况下永久丢失了窗口,因此我决定不提供该过程作为自动(后台)过程。
这个答案是否对您有用,取决于情况,以及您希望隐藏在其他工作区上运行的应用程序图标的原因;决定权在你。
快捷键下可用的脚本似乎使当前工作空间(以及应用程序)上的所有窗口全部消失。这意味着Unity启动器中的应用程序图标不显示该应用程序的活动:
再按一次schortcut组合键,将重新显示窗口及其应用程序。
#!/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]])
该脚本同时需要wmctrl
和xdotool
:
sudo apt-get install wmctrl xdotool
toggle_visibility.py
测试脚本:在终端窗口中,运行以下命令:
python3 /path/to/toggle_visibility.py
现在打开一个新的终端窗口(因为第一个似乎从地球表面消失了),然后再次运行相同的命令。所有窗口应重新出现。
注意:确保在测试时没有打开“有价值的”窗口
如果一切正常,请将命令添加到快捷键组合:选择:系统设置>“键盘”>“快捷方式”>“自定义快捷方式”。单击“ +”并添加命令:
python3 /path/to/toggle_visibility.py
如前所述,脚本使用xdotool
的windowunmap
来(完全)隐藏窗口及其所属的应用程序。剧本:
在下一次运行时,脚本:
从而切换当前工作区上的窗口和应用程序的可见性。
ctrl
+ shift
+ 的快捷键arrow key
不幸的是,这是不可能的。
Unity总是显示所有地方的所有应用程序,并且没有办法更改它。有一个错误报告-https://bugs.launchpad.net/ayatana-design/+bug/683170 但是似乎开发人员不会做任何事情。如果您在页面顶部标记此错误影响到您,则可能会帮助开发人员了解此选项的重要性。