我正在尝试使用此脚本作为起点为每个工作区创建一个 gvim:http://www.openhex.org/notes/2011/1/27/one-vim-server-per-desktops
我知道几个月前我第一次发现这个脚本时,wmctrl -d
它列出了四个工作区。但现在当我尝试它时,它只显示一个:
$ wmctrl -d
0 * DG: 7208x1003 VP: 0,0 WA: 0,0 1802x976 Workspace 1
列出窗口表明所有窗口都在同一个桌面上,但间隔屏幕宽度:
$ wmctrl -lGx
0x02200003 0 0 1952 1802 27 gnome-panel.Gnome-panel ned-vbox Bottom Expanded Edge Panel
0x0260001e 0 0 0 1802 1003 desktop_window.Nautilus ned-vbox x-nautilus-desktop
0x04600004 0 332 140 1169 722 gnome-terminal.Gnome-terminal ned-vbox Terminal
0x046000c6 0 116 288 1433 512 gnome-terminal.Gnome-terminal ned-vbox Terminal
0x0480001e 0 388 48 1604 948 gvim.Gvim ned-vbox .bashrc (~) - GVIM
0x04604c55 0 784 48 1214 948 gnome-terminal.Gnome-terminal ned-vbox Terminal
这是 Ubuntu 10.10 在虚拟框中运行 compiz(这就是屏幕宽度为 1802 像素的原因)。
为什么我的工作区在 wmctrl 中不可见?它们在 GUI 中表现正常,所有快捷键都正常工作,在工作区之间移动窗口的菜单项也正常。如何让 wmctrl 显示我想要的内容?还有其他方法可以准确获取工作区信息吗?
答案1
Compiz 实现的是视口而不是桌面。你可以根据桌面的宽度来计算视口的数量:
$ wmctrl -d
0 * DG: 7680x1200 VP: 0,0 WA: 0,0 1920x1175 Workspace 1
这说明我有四个视口 (7680 / 1920 = 4),我目前正在查看第一个视口。(不幸的是,我没有在 wmctrl 中看到可靠地获取视口宽度的方法,因为如果面板占用边缘空间,工作区域就会缩小。您可以使用硬数字或使用 xdpyinfo 来查找屏幕的像素尺寸。)
要切换到第二个视口:
$ wmctrl -o 1920,0
如果您想在 bash 中解析这些内容,这里有一个例子:
$ dimensions=$(xdpyinfo | awk '$1=="dimensions:"{print $2}')
$ screen_width=${dimensions%x*}
$ info=( $(wmctrl -d | awk '{print $4, $6}') )
$ desktop_width=${info[0]%x*}
$ viewports=$(( desktop_width / screen_width ))
$ current_vp=$(( ${info[1]%,*} / screen_width ))