Ubuntu 中 Aero-snap 的近距离

Ubuntu 中 Aero-snap 的近距离

在我因为重复提问而被人大声呵斥之前。我读过类似 Windows 7 的捕捉窗口最大化和垂直功能http://www.omgubuntu.co.uk/2009/11/get-aero-snap-in-ubuntu/

这个解决方案存在两个问题,我正试图解决。

  1. 拖动窗口不敏感
  2. 对于双视图显示器来说它不够智能。

第一个问题更为紧迫。我使用 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

相关内容