博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux xfce 桌面环境 显示桌面 快捷键的实现
阅读量:5934 次
发布时间:2019-06-19

本文共 4585 字,大约阅读时间需要 15 分钟。

hot3.png

创建: 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 onfunction 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<${#WDOWS[@]}; i++ )) ; do		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	fidone

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

执行:winfuncs.sh showdesktop #显示桌面的命令;winfuncs.sh select #在平铺方式排列窗口winfuncs.sh tile #winfuncs.sh tiletwo # 切换任何任务winfuncs.sh cascade如果选择显示桌面 就讲 显示桌面的命令加入到 自定义快捷键中(通常:super+d)如果报xdotool 未定义的错误:需要安装xdotoolsudo apt-get install xdotool

至此大功搞成!

转载于:https://my.oschina.net/haopeng/blog/693620

你可能感兴趣的文章
处理器之MMU(三)
查看>>
172.16.82.0/25的含义,IP段,掩码
查看>>
测试之路
查看>>
终于对了
查看>>
RabbitMQ集群
查看>>
Apache防盗链和隐藏版本信息
查看>>
ARP协议与路由
查看>>
使用pypiserver搭建私有源
查看>>
SCI检索介绍
查看>>
Android开发之生成自己的签名文件及App签名打包
查看>>
如何提高阿里云上应用的可用性(二)
查看>>
云宏WinCloud前端工程师告诉你什么是UI扁平化
查看>>
如何压缩PDF文件,有什么简单的方法
查看>>
SpringMVC常用注解标签详解
查看>>
day18 Set集合
查看>>
Oracle event之db file read
查看>>
ORA 00600 [ktrexc_1]
查看>>
Docker 安装
查看>>
查询文件系统容量与每个目录的容量
查看>>
角度与弧度的转换 - 三角学
查看>>