LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 673|回复: 3

xfce4也玩桌面平铺

[复制链接]
发表于 2012-3-15 11:33:11 | 显示全部楼层 |阅读模式
我常尝试了wmctrl和devilspie两种方式,感觉各有优缺
1、devilspie是一个后台进程,通过.devilspie/下的配置文件运行,比wmctrl多个decoratea功能,强调实时性,感觉配置文件过于简单,但不灵活,最主要的是实现同软件多窗口管理难,所以我先用wmctrl。
这是个简单的配置,随便起个名放到~/.devilspie/即可(还没发现能注释):
(if (is (application_name) "idgin")
(begin
        (if (is (window_role) "conversation")
                (begin
                        (undecorate)
                        (skip_tasklist)
                        (below)
                        (geometry "960x400+1920+800")
                )
        )
)
if (is (window_class) "Terminal")
(begin
        (undecorate)
        (skip_tasklist)
        (below)
        (geometry "960x600+2880+600")
)
if (is (window_class) "Thunar")
(begin
        (undecorate)
        (skip_tasklist)
        (below)
        (geometry "960x600+2880+0")
)
if (is (window_class) "SeaMonkey")
(begin
        (undecorate)
        (skip_tasklist)
        (below)
        (geometry "960x800+1920+0")
)
)
2、wmctrl是个命令行工具,配合bash灵活程度很高,下面是我的命令文件:
#!/bin/bash
t=(`xdpyinfo |grep dimensions |cut -d ' ' -f 7 | sed 's/x/ /g'`)
desktop=(0 0 ${t[0]} ${t[1]})
#平铺桌面定义:显示X起点 显示y起点 显示宽 显示高
win=("SeaMonkey" "idgin" "Terminal" "Thunar" "Gedit" "libreoffice-startcenter" "Gnumeric")
#查询窗口名列表
x=(0.5 0.5 0.75 0.75 0.25 0 0.25)
#窗口x位于平铺桌面宽的比率
y=(0 0.65 0.5 0 0 0 0.5)
#窗口y位于平铺桌面高的比率
w=(0.25 0.25 0.25 0.25 0.25 0.25 0.25)
#窗口宽占平铺桌面宽的比率
h=(0.65 0.35 0.5 0.5 0.5 1 0.5)
#窗口高占平铺桌面高的比率
if [ -n "$1" ];then
wmid=`printf "0x%08x" $1`
if [ -z "`wmctrl -l | grep $wmid`" ];then
  wid=`xprop | grep _NET_WM_USER_TIME_WINDOW | cut -d '#' -f 2`
  wmid=`printf "0x%08x" $[wid-1]`
fi
echo $wmid
wmctrl -i -r $wmid -b remove,below,skip_taskbar
if [ -n "$2" ];then
  wx=`echo $2 |cut -d ',' -f 1`
  wy=`echo $2 |cut -d ',' -f 2`
  ww=`echo $2 |cut -d ',' -f 3`
  wh=`echo $2 |cut -d ',' -f 4`
  if [ $[wx-0] -eq 0 ];then
   wx=0
  fi
  if [ $[wy-0] -eq 0 ];then
   wy=0
  fi
  if [ $[ww-0] -eq 0 ];then
   ww=-1
  fi
  if [ $[wh-0] -eq 0 ];then
   wh=-1
  fi
  wmctrl -i -r $wmid -e 1,$wx,$wy,$ww,$wh
fi
exit
fi
t=`xprop | sed 's/ /~/g'`
#根据鼠标取窗口
wid=`echo $t | sed 's/ /\n/g' | grep _NET_WM_USER_TIME_WINDOW | sed 's/~/ /g' | cut -d '#' -f 2`
#取窗口id (左框像素 右框像素 上框像素 下边像素)
wmid=`printf "0x%08x" $[wid-1]`
#转换为wmctrl需要的id
#WM_CLASS=`wmctrl -l -x |grep $wmid | cut -d ' ' -f 4`
WM_CLASS=`echo $t | sed 's/ /\n/g' | grep WM_CLASS | sed 's/~/ /g' | cut -d '=' -f 2`
#取窗口class
bln=(`echo $t | sed 's/ /\n/g' | grep _NET_FRAME_EXTENTS | sed 's/~/ /g' | cut -d '=' -f 2 | sed 's/,/
/g'`)
#取窗口边框信息
echo $wid $wmid $WM_CLASS ${bln[0]} ${bln[1]} ${bln[2]} ${bln[3]}
i=0
while [ -n "${win}" ];do
if [ -n "`echo $WM_CLASS | grep \"${win}\"`" ];then
wmctrl -i -r $wmid -b add,below,skip_taskbar
wx=`echo "${desktop[0]}+${desktop[2]}*${x}"|bc | cut -d '.' -f 1`
wy=`echo "${desktop[1]}+${desktop[3]}*${y}"|bc | cut -d '.' -f 1`
ww=`echo "${desktop[2]}*${w}-${bln[0]}-${bln[1]}"|bc | cut -d '.' -f 1`
wh=`echo "${desktop[3]}*${h}-${bln[2]}-${bln[3]}"|bc | cut -d '.' -f 1`
echo $wx,$wy,$ww,$wh
wmctrl -i -r $wmid -e 1,$wx,$wy,$ww,$wh
fi
i=$[i+1]
done
排满了我常用的软件,原理是根据屏幕宽度(可以自定义),采用鼠标取窗口的方法(避免了软件多开麻烦),用占屏百分比来控制窗口位置及大小。缺点是不能去除窗口border,计算时要剔除边框像素,而且显示也占用屏幕(希望有高手指点一下),有点没明白的是:为什么xprop取出的窗口id比wmctrl -m 取出的id大1?这个bash命令用法很简单:
命令 [窗口id] [x,y,w,h]
有参数时是撤消锁屏,无参数才是控制窗口

以上配置是静态控制,我想配合xdotools应该可以实现动态控制,最想的就是把focus窗口固定到某相对较大范围区,其它窗口按顺序排布于旁边,有点象panel了,有时间再玩。。。。。。非gentoo技术能加精不
发表于 2012-3-16 09:51:19 | 显示全部楼层
在 xmonad 中直接启动 xfce4-session, xfce4-panel 不就挺好的吗。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-19 08:48:09 | 显示全部楼层
我的桌面一般开启的窗口会有一二十个,用xfce4-panel 一个个找?所以我把用的最多的平铺在屏幕上,点一下显示桌面就都出来了,很方便的
回复 支持 反对

使用道具 举报

发表于 2012-3-19 08:58:24 | 显示全部楼层
Post by kingbo;2162069
我的桌面一般开启的窗口会有一二十个,用xfce4-panel 一个个找?所以我把用的最多的平铺在屏幕上,点一下显示桌面就都出来了,很方便的


对呀,这正是平铺窗口的优势所在。

要不然你以为xmonad是干什么的?
panel我更喜欢tint2,它可以根据不同的虚拟桌面分组。好久没用xfce4了,应该也是可以的吧。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表