linux java桌面环境_linux xfce 桌面环境 显示桌面 快捷键的实现

创建: winfuncs.sh 文件内容:

#!/bin/bash

#todo:

# cancel for tile functions

# determine what windows are maximized and re-max after the "window select" function

# determine what windows are non-resizable by the user so that the script doesn't resize them

# cascade also shaded windows

# which workspace we're on

function get_workspace {

if [[ "$DTOP" == "" ]] ; then

DTOP=`xdotool get_desktop`

fi

}

function is_desktop {

xwininfo -id "$*" | grep '"Desktop"'

return "$?"

}

function get_visible_window_ids {

if (( ${#WDOWS[@]} == 0 )) ; then

WDOWS=(`xdotool search --desktop $DTOP --onlyvisible "" 2>/dev/null`)

fi

}

function get_desktop_dim {

#desktop dimensions

if (( ${#DIM[@]} == 0 )) ; then

DIM=(`wmctrl -d | egrep "^0" | sed 's/.*DG: \([0-9]*x[0-9]*\).*/\1/g' | sed 's/x/ /g'`)

fi

}

function win_showdesktop {

get_workspace

get_visible_window_ids

command="search --desktop $DTOP \"\""

if (( ${#WDOWS[@]} > 0 )) ; then

command="$command windowminimize %@"

else

command="$command windowraise %@"

fi

echo "$command" | xdotool -

}

function win_tile_two {

get_desktop_dim

wid1=`xdotool selectwindow 2>/dev/null`

is_desktop "$wid1" && return

wid2=`xdotool selectwindow 2>/dev/null`

is_desktop "$wid2" && return

half_w=`expr ${DIM[0]} / 2`

commands="windowsize $wid1 $half_w ${DIM[1]}"

commands="$commands windowsize $wid2 $half_w ${DIM[1]}"

commands="$commands windowmove $wid1 0 0"

commands="$commands windowmove $wid2 $half_w 0"

commands="$commands windowraise $wid1"

commands="$commands windowraise $wid2"

wmctrl -i -r $wid1 -b remove,maximized_vert,maximized_horz

wmctrl -i -r $wid2 -b remove,maximized_vert,maximized_horz

echo "$commands" | xdotool -

}

function win_tile {

get_workspace

get_visible_window_ids

(( ${#WDOWS[@]} < 1 )) && return;

get_desktop_dim

# determine how many rows and columns we need

cols=`echo "sqrt(${#WDOWS[@]})" | bc`

rows=$cols

wins=`expr $rows \* $cols`

if (( "$wins" < "${#WDOWS[@]}" )) ; then

cols=`expr $cols + 1`

wins=`expr $rows \* $cols`

if (( "$wins" < "${#WDOWS[@]}" )) ; then

rows=`expr $rows + 1`

wins=`expr $rows \* $cols`

fi

fi

(( $cols < 1 )) && cols=1;

(( $rows < 1 )) && rows=1;

win_w=`expr ${DIM[0]} / $cols`

win_h=`expr ${DIM[1]} / $rows`

# do tiling

x=0; y=0; commands=""

for window in ${WDOWS[@]} ; do

wmctrl -i -r $window -b remove,maximized_vert,maximized_horz

commands="$commands windowsize $window $win_w $win_h"

commands="$commands windowmove $window `expr $x \* $win_w` `expr $y \* $win_h`"

x=`expr $x + 1`

if (( $x > `expr $cols - 1` )) ; then

x=0

y=`expr $y + 1`

fi

done

echo "$commands" | xdotool -

}

function win_cascade {

get_workspace

get_visible_window_ids

(( ${#WDOWS[@]} < 1 )) && return;

x=0; y=0; commands=""

for window in ${WDOWS[@]} ; do

wmctrl -i -r $window -b remove,maximized_vert,maximized_horz

commands="$commands windowsize $window 640 480"

commands="$commands windowmove $window $x $y"

x=`expr $x + 22`

y=`expr $y + 22`

done

echo "$commands" | xdotool -

}

function win_select {

get_workspace

get_visible_window_ids

(( ${#WDOWS[@]} < 1 )) && return;

# store window positions and widths

i=0

for window in ${WDOWS[@]} ; do

GEO=`xdotool getwindowgeometry $window | grep Geometry | sed 's/.* \([0-9].*\)/\1/g'`;

height[$i]=`echo $GEO | sed 's/\(.*\)x.*/\1/g'`

width[$i]=`echo $GEO | sed 's/.*x\(.*\)/\1/g'`

# ( xwininfo gives position not ignoring titlebars and borders, unlike xdotool )

POS=(`xwininfo -stats -id $window | grep 'geometry ' | sed 's/.*[-+]\([0-9]*[-+][0-9*]\)/\1/g' | sed 's/[+-]/ /g'`)

posx[$i]=${POS[0]}

posy[$i]=${POS[1]}

i=`expr $i + 1`

done

# tile windows

win_tile

# select a window

wid=`xdotool selectwindow 2>/dev/null`

is_desktop "$wid" && return

# restore window positions and widths

i=0; commands=""

for (( i=0; $i

commands="$commands windowsize ${WDOWS[i]} ${height[$i]} ${width[$i]}"

commands="$commands windowmove ${WDOWS[i]} ${posx[$i]} ${posy[$i]}"

done

commands="$commands windowraise $wid"

echo "$commands" | xdotool -

}

for command in ${@} ; do

if [[ "$command" == "tile" ]] ; then

win_tile

elif [[ "$command" == "select" ]] ; then

win_select

elif [[ "$command" == "tiletwo" ]] ; then

win_tile_two

elif [[ "$command" == "cascade" ]] ; then

win_cascade

elif [[ "$command" == "showdesktop" ]] ; then

win_showdesktop

fi

done

将这个sh脚本放到 /usr/local/bin 下:

执行:

winfuncs.sh showdesktop #显示桌面的命令;

winfuncs.sh select #在平铺方式排列窗口

winfuncs.sh tile #

winfuncs.sh tiletwo # 切换任何任务

winfuncs.sh cascade

如果选择显示桌面 就讲 显示桌面的命令加入到 自定义快捷键中(通常:super+d)

如果报xdotool 未定义的错误:需要安装xdotool

sudo apt-get install xdotool

至此大功搞成!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值