คำสั่งจริงที่คุณต้องการนั้นเป็นอย่างไร
wmctrl -r :ACTIVE: -b add,maximized_vert &&
wmctrl -r :ACTIVE: -e 0,0,0,$HALF,-1
ซึ่งจะทำให้หน้าต่างปัจจุบันใช้เวลาครึ่งหน้าจอ (เปลี่ยน$HALF
เป็นขนาดของหน้าจอของคุณ) และเลื่อนไปทางซ้ายมือ ในการจัดชิดขวาให้ใช้
wmctrl -r :ACTIVE: -b add,maximized_vert &&
wmctrl -r :ACTIVE: -e 0,$HALF,0,$HALF,-1
นอกจากนี้คุณยังสามารถเล่นกับที่จะได้รับหมายเลขของหน้าต่างที่คุณกำลังสนใจในการแทนการใช้wmctrl
:ACTIVE:
ฉันไม่สามารถช่วยได้ตั้งแต่นั้นขึ้นอยู่กับหน้าต่างที่เป็นปัญหา ลองดูman wmctrl
เพิ่มเติม
ฉันเขียนสคริปต์สำหรับสิ่งนั้น ฉันไม่ได้ใช้ Unity ดังนั้นฉันไม่สามารถรับประกันได้ว่ามันจะทำงานได้ แต่ฉันไม่เห็นเหตุผลว่าทำไม มันต้องwmctrl
, xdpyinfo
และdisper
มีการติดตั้ง:
sudo apt-get install wmctrl x11-utils disper
จากนั้นให้บันทึกสคริปต์ด้านล่างเพื่อ~/bin/snap_windows.sh
ให้chmod a+x ~/bin/snap_windows.sh
สามารถเรียกใช้และคุณสามารถเรียกใช้ได้
snap_windows.sh r
เพื่อสแน็ปไปทางด้านขวามือ ใช้l
สำหรับด้านซ้ายและไม่มีข้อโต้แย้งเพื่อขยายหน้าต่างให้ใหญ่ที่สุด โปรดทราบว่ามันทำงานบนหน้าต่างปัจจุบันดังนั้นคุณจะต้องกำหนดทางลัดให้กับมันหากคุณต้องการให้มันทำงานบนอะไรก็ได้ยกเว้นเทอร์มินัล
สคริปต์ค่อนข้างซับซ้อนกว่าที่คุณขอเพราะฉันเขียนให้ทำงานทั้งในการตั้งค่าหน้าจอเดียวและหน้าจอคู่
#!/usr/bin/env bash
## If no side has been given, maximize the current window and exit
if [ ! $1 ]
then
wmctrl -r :ACTIVE: -b toggle,maximized_vert,maximized_horz
exit
fi
## If a side has been given, continue
side=$1;
## How many screens are there?
screens=`disper -l | grep -c display`
## Get screen dimensions
WIDTH=`xdpyinfo | grep 'dimensions:' | cut -f 2 -d ':' | cut -f 1 -d 'x'`;
HALF=$(($WIDTH/2));
## If we are running on one screen, snap to edge of screen
if [ $screens == '1' ]
then
## Snap to the left hand side
if [ $side == 'l' ]
then
## wmctrl format: gravity,posx,posy,width,height
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,0,0,$HALF,-1
## Snap to the right hand side
else
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$HALF,0,$HALF,-1
fi
## If we are running on two screens, snap to edge of right hand screen
## I use 1600 because I know it is the size of my laptop display
## and that it is not the same as that of my 2nd monitor.
else
LAPTOP=1600; ## Change this as approrpiate for your setup.
let "WIDTH-=LAPTOP";
SCREEN=$LAPTOP;
HALF=$(($WIDTH/2));
if [ $side == 'l' ]
then
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$LAPTOP,0,$HALF,-1
else
let "SCREEN += HALF+2";
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$SCREEN,0,$HALF,-1;
fi
fi