How to resize the active window to 50% with wmctrl

keyboard shortcutswindow-managementwmctrl

I would like to resize the window to the left half of the screen.

A solution to achieve that would be to use wmctrl and keybind the right command to a keyboard shortcut.

But the manpage only shows how to resize to a certain height and width, for example:

wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz && wmctrl -r :ACTIVE: -e 0,0,0,800,1040

that moves the window to the upper left corner and resizes to 800×1040 px.

But strangely only the first time. If you execute the same command again, in moves to the very top right of the screen, ignoring the top-toolbar.

Also it would be nice, to have that command with height 100% and width 50% instead of the absolute values.

Best Answer

I got the answer here.

this would be the script to maximize it to the right half of the screen:

#!/bin/bash
# resizes the window to full height and 50% width and moves into upper right corner

#define the height in px of the top system-bar:
TOPMARGIN=27

#sum in px of all horizontal borders:
RIGHTMARGIN=10

# get width of screen and height of screen
SCREEN_WIDTH=$(xwininfo -root | awk '$1=="Width:" {print $2}')
SCREEN_HEIGHT=$(xwininfo -root | awk '$1=="Height:" {print $2}')

# new width and height
W=$(( $SCREEN_WIDTH / 2 - $RIGHTMARGIN ))
H=$(( $SCREEN_HEIGHT - 2 * $TOPMARGIN ))

# X, change to move left or right:

# moving to the right half of the screen:
X=$(( $SCREEN_WIDTH / 2 ))
# moving to the left:
#X=0; 

Y=$TOPMARGIN

wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz && wmctrl -r :ACTIVE: -e 0,$X,$Y,$W,$H

To move to the left, just change the X-Line to X=0. (If you use Ubuntu Unity, you need to adapt RIGHTMARGIN too I use RIGHTMARGIN=102)

defining the right margins this solves the bug, that the second time you call it, it moved to the very top of the screen, ignoring the top-toolbar.

Related Question