在我因为重复提问而被人大声呵斥之前。我读过类似 Windows 7 的捕捉窗口最大化和垂直功能和http://www.omgubuntu.co.uk/2009/11/get-aero-snap-in-ubuntu/
这个解决方案存在两个问题,我正试图解决。
- 拖动窗口不敏感
- 对于双视图显示器来说它不够智能。
第一个问题更为紧迫。我使用 wmctrl 进行了 compiz 设置,但这对拖动窗口不敏感,如果我有一个具有焦点的窗口并将鼠标放在面板上,即使我没有拖动窗口,窗口也会最大化。一个好的解决方案是对鼠标的状态敏感,单击、右键单击、单击鼠标中键。理想的解决方案是对拖动窗口敏感或不敏感。
第二个对我来说至少有点麻烦。列出的命令相当于最大化窗口,因为我有一个 Twinview 显示器设置。
有什么方法可以将这些敏感度添加到命令中吗?
答案1
当我从 Windows7 切换过来时,我希望我的 Ubuntu 上有这个功能。我使用 Compiz 上的网格组件,映射到数字键盘上,这非常高效,我知道我更喜欢用这种方式在桌面上组织窗口。
答案2
经过一段时间的折腾,终于找到了一个可以使用鼠标手势的解决方案,并遵循了这个帖子。
我创建了两个脚本,一个用于左侧停靠,一个用于右侧停靠。
左停靠:
#! /usr/bin/env bash
WIDTH=`xdpyinfo | grep 'dimensions:' | cut -f 2 -d ':' | cut -f 1 -d 'x' `
HALF=$(($WIDTH/2))
QUARTER=$(($WIDTH/4))
winid=`xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+`
x=`xwininfo -id $winid | grep "Absolute upper-left X" | cut -f 2 -d ':'`
y=`xwininfo -id $winid | grep "Absolute upper-left Y" | cut -f 2 -d ':'`
if [ $x -lt $HALF ]; then
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,0,0,$QUARTER,-1
else
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$HALF,0,$QUARTER,-1
fi
停靠权限:
#! /usr/bin/env bash
WIDTH=`xdpyinfo | grep 'dimensions:' | cut -f 2 -d ':' | cut -f 1 -d 'x' `
HALF=$(($WIDTH/2))
QUARTER=$(($WIDTH/4))
THREEQUARTERS=$(($WIDTH*3/4))
winid=`xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+`
x=`xwininfo -id $winid | grep "Absolute upper-left X" | cut -f 2 -d ':'`
y=`xwininfo -id $winid | grep "Absolute upper-left Y" | cut -f 2 -d ':'`
if [ $x -lt $HALF ]; then
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$QUARTER,0,$QUARTER,-1
else
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$THREEQUARTERS,0,$QUARTER,-1
fi
然后我使用 easystroke 为停靠左、停靠右和最大化分配鼠标手势。这并不能完美模拟 Windows 版本,但至少我不会自动最大化我的窗口。这样,我还可以将脚本分配给热键以增加便利性。
笔记:这是我的 Twinview 双显示器设置,考虑到我希望窗口停靠在显示器侧面,而不是“桌面”,在 ubuntu 中显示为非常宽单显示器。
这对我来说可能就足够了,但如果有更好的解决方案,我真的很想听到。
答案3
安德鲁,我看到您已经用 EasyStroke 替代方案回答了,但我会在这里介绍我的方法,只是为了注册一个替代方案。
事实上,我保留了原来的 Compiz 替代方案,但修改了脚本,使它们可以在窗口拖动时立即工作,而不是等待按钮释放。我想这是一个个人喜好的问题,但和你一样,我也更喜欢 Win7 最大化边缘触摸的方式。
对于左侧和右侧的脚本,我只是注释掉了等待按钮释放的循环:
#while (/usr/bin/X11/xinput --query-state $MOUSE | grep down)
#do
# echo 'button pressed'
#done
仅此而已。好吧,我还为它们添加了键盘快捷键,但这只是 Compiz 的额外福利。;-) 恭喜你提出了这么好的问题。
PS:我的编辑是在鼠标点击检测版本上,可在http://ubuntuforums.org/showpost.php?p=9207510&postcount=60。